菜菜的机器学习sklearn——神经网络

简单了解一下

1 神经网络概述

1.1 打开深度学习的大门

人工神经网络(Artificial Neural Network,ANN),通常简称为神经网络,是深度学习的基础,它是受到人类大脑结构启发而诞生的一种算法。

神经学家们发现,人类大脑主要由称为神经元的神经细胞组成,通过名为轴突的纤维束
与其他神经元连接在一起。每当神经元从其他的神经元接受到信号,神经元便会受到刺激,此时纤维束会将信号从一个神经元传递到另一个神经元上。人类正是通过相同的冲动反复地刺激神经元,改变神经元之间的链接的强度来进行学习。

在这里插入图片描述
神经网络算法试图模拟生物神经系统的学习过程,以此实现强大的预测性能。不过由于是模仿人类大脑,所以神经网络的模型复杂度很高也是众所周知。在现实应用中,神经网络可以说是解释性最差的模型之一,商业环境中很少使用神经网络。

然而出了商业分析,还有许多算法应用的部分,其中最重要的是深度学习和人工智能的领域,现在大部分已经成熟的人工智能技术:图像识别,语音识别等等,背后都是基于神经网络的深度学习算法。因此,作为机器学习中(可能是)最复杂的,深度学习中基础的算法,神经网络的了解和学习是很有必要的。

1.2 神经网络的基本原理

神经网络原理最开始是基于感知机提出——感知机是最古老的机器学习分类算法之一,在1957年就已经被提出了。

和今天的大部分模型比较起来,感知机的泛化能力比较弱,但支持向量机和神经网络都基于它的原理来建立。感知机的原理就是在支持向量机中学过的,使用一条线性决策边界 z=ωx+bz=\omega x+bz=ωx+b 来划分数据集,决策边界的上方是一类数据( z≥0z\ge 0z0 ),决策边界的下方是另一类数据(z<0z<0z<0 )的决策过程。

使用神经元,可以把它表示为:

在这里插入图片描述
不同的特征数据被输入后,通过神经键将它输入到神经元。每条神经键上对应不同的参数 ω,b\omega ,bω,b ,因此特征数据会经由神经键被匹配到一个参数向量 ω,b\omega ,bω,b ,基于参数向量 ω\omegaω 算法可以求解出决策边界 z=ωx+bz=\omega x+bz=ωx+b ,然后由决策函数 sign(z)sign\left( z \right)sign(z) 进行判断,最终预测出标签 yyy 并且将结果输出。

其中函数 sign(z)sign\left( z \right)sign(z) 被称为“激活函数”,这是模拟人类的大脑激活神经元的过程所命名的,其实本质就是决定了预测标签的输出会是什么内容的预测函数。

注意,在这个过程中,有两个非常重要的核心要点:

  1. 每个输入的特征会被匹配到一个参数 ω\omegaω ,参数向量 ω\omegaω 中含有的参数数量与特征数目是一致的,在感知机中也是如此。也就是说,任何基于感知机的算法,必须至少要有参数向量 ω\omegaω 可求。
  2. 一个线性关系 zzzzzz 是由参数和输入的数据共同决定的。这个线性关系,往往就是我们的决策边界,或者它也可以是多元线性回归,逻辑回归等算法的线性表达式
  3. 激活函数的结果,是基于激活函数本身,参数向量 ω\omegaω 和输入的数据一同计算出来的。也就是说,任何基于感知机的算法,必须要存在一个激活函数

神经网络就相当于众多感知机的集成,因此,确定激活函数,并找出参数向量 ω\omegaω 也是神经网络的计算核心。只不过对于只运行一次激活函数的感知机来说,神经网络大大增加了的模型的复杂度,激活函数在这个过程中可能被激活非常多次,参数向量的数量也呈指数级增长。

神经网络的基本结构:

在这里插入图片描述
首先,神经网络有三层。

  • 第一层叫做输入层(Input layer),输入特征矩阵用,因此每个神经元上都是一个特征向量。极端情况下,如果一个神经网络只训练一个样本,则每个输入层的神经元上都是这个样本的一个特征取值。

  • 最后一层叫做输出层(output layer),输出预测标签用。如果是回归类,一般输出层只有一个神经元,回归的是所有输入的样本的标签向量。如果是分类,可能会有多个神经元。二分类有两个神经元,多分类有多个神经元,分别输出所有输入的样本对应的每个标签分类下的概率。但无论如何,输出层只有一层,是用于输出预测结果用。

  • 输入层和输出层中间的所有层,叫做隐藏层(Hidden layers),最少一层。也就是说整个神经网络是最少三层。隐藏层是用来让算法学习的网络层级,从更靠近输入层的地方开始叫做"上层",相对而言,更靠近输出层的一层,叫做"下层"。在隐藏层上,每个神经元中都存在一个激活函数,数据被逐层传递,每个下层的神经元都必须处理上层的神经元中的激活函数处理完毕的数据,本质是一个感知器嵌套的过程。隐藏层中上层的每个神经元,都与下层中的每个神经元相连,因此隐藏层的结构随着神经元的变多可以变得非常非常复杂。神经网络的两个要点:参数 ω\omegaω 和激活函数,也都在这一层发挥作用,因此理解隐藏层是神经网络原理中最难的部分。


参数 ω\omegaω
例子——梳理一下神经网络的过程。

假设线性关系 z=ω⋅xz=\omega \cdot xz=ωx ,将截距 bbb 包括在了 ω\omegaω 当中 。对于一个最简单的三层神经网络,感知机上每条神经键上都有一个参数 ω\omegaω ,对神经网络也是如此,只不过神经网络中神经元众多,每个神经元又和相邻层的神经元全部相连,因此参数 ω\omegaω 的数量也众多。

下面的三层神经网络,总共有3∗2∗23*2*2322条神经键,因此总共有12个参数 ω\omegaω 。这12个参数 ω\omegaω 的表示法非常复杂,具体如下:

在这里插入图片描述
演示一下神经网络上一组数据是如何在网络中变化,最终变化成标签的了。为了解释隐藏层之间的关系,我们现在将神经网络增加到四层,并假设我们的激活函数就是 σ(z)\sigma \left( z \right)σ(z) ,线性关系: z=ω1x1+ω2x2+⋯+ωnxnz=\omega _1x_1+\omega _2x_2+\cdots +\omega _nx_nz=ω1x1+ω2x2++ωnxn

在这里插入图片描述
a23a_{2}^{3}a23就是第三层的从上往下数的第二个神经元中的激活函数的取值。

注意,这一层的每个神经元上会有几个参数对应,是由上层有几个神经元确定的。那对于现在我们的第二层来说,上层有三个神经元,因此本层的每个神经元会对应三个 xxx,即三个 ω\omegaω ,则我们有:
在这里插入图片描述
则对于第三层来说,被输入第三层的就不再是三个 xxx 了,而是经过第二层计算出的 a12a_{1}^{2}a12a22a_{2}^{2}a22了。第三层我们的每个输入结构都会对应两个 ω\omegaω,因此在第三层,我们有:

在这里插入图片描述
对于最后一层,就是我们的输出层来说,我们的上一层是有三个神经元,则这一层的每个神经元中就要对应三个 ω\omegaω,和之前的过程一样,我们可以有:

在这里插入图片描述
如果现在执行的是分类算法,a14a_{1}^{4}a14a24a_{2}^{4}a24就是我们的二分类下每个标签类别对应的概率,我们会取两个 aaa 中数值较大的那一个,作为我们的分类结果。这个计算过程,其实就是神经网络的基本原理。

在这个过程中,有两个非常容易混淆的地方:

  1. 神经网络的每一层的结果之间的关系是嵌套,不是迭代。在神经网络中,上一层的结果和参数,会被放到下一层中去求解新的结果,但是上一层的参数还会被保留,没有被覆盖每次求解都还需要执行整个嵌套过程,需要每一层上的每个参数。

  2. 由于执行的是嵌套,不是迭代,所以每一个系数之间是相互独立的,每一层的系数之间也是相互独立的,我们不是在执行使用上一层或者上一个神经元的参数来求解下一层或者下一个神经元的参数的过程。我们不断求解的,是激活函数的结果 aaa,不是参数 ω\omegaω

真实的神经网络,可能很多都长这样:…在这里插入图片描述


sklearn中都会有什么样的参数来供我们调整了:

在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐