【机器学习】神经网络

  • 神经元
  • 单层神经网络(感知机)
  • 两层神经网络(多层感知机)
  • 多层神经网络(深度学习)


一。神经元模型

1. M-P神经元模型

神经元模型是一个包含输入、输出和计算功能的模型。下图的模型中包含3个输入、1个输出,以及2个计算功能。


其中的箭头线是连接,带有权重,是神经元中最重要的东西。神经元模型中,有向箭头表示的是值的加权传递。

一个神经网络的训练算法就是让权重的值调整到最佳,以使整个网络的预测效果最好。



神经元可以看作是一个计算与存储单元。计算是神经元对其输入进行计算功能;存储是神经元会暂存计算结果,并传递到下一层。

2. 效果

神经元模型可以这样理解:

我们有一个数据,称之为样本。样本有四个属性,其中三个属性已知,一个属性未知。我们需要做的就是通过三个已知属性预测未知属性。
  具体办法就是使用神经元的公式进行计算。三个已知属性的值是a1,a2,a3,未知属性的值是z。z可以通过公式计算出来。
  这里,已知的属性称之为特征,未知的属性称之为目标。假设特征与目标之间确实是线性关系,并且我们已经得到表示这个关系的权值w1,w2,w3。那么,我们就可以通过神经元模型预测新样本的目标。

3. 影响

M-P模型建立了神经网络的大厦地基,但是,MP模型中,权重的值是预先设置的,因此不能学习。


二。单层神经网络(感知机)

1.结构

感知机由两层神经元组成,即在原来MP模型的“输入”位置添加神经元结点,标志其为“输入单元”,其余不变。


  • 输入层的“输入单元”只负责传递数据,不做计算。
  • 输出层的“输出单元”需要对前一层的输入进行计算,也称为计算层。


拥有一个计算层的感知机,称为单层感知机


如果预测的目标不是一个值,而是一个向量,例如[2, 3],那么输出层就有两个“输出单元”。


可以看出上面两个公式是线性代数方程组,因此可以用矩阵乘法来表示:

例如,输入的变量是[a1,a2,a3]T(代表由a1,a2,a3组成的列向量),用向量a来表示。方程的左边是[z1, z2]T,用向量z来表示。

系数则是矩阵W(2行3列的矩阵,排列形式与公式中的一样)

于是,输出公式可以改写成:g(W * a) = z;

这个公式就是神经网络中从前一层计算后一层的矩阵运算


2. 效果

与神经元模型不同,感知机的权值是通过训练得到的。感知机类似一个逻辑回归模型,可以做线性分类任务。

可以用决策分界来形象地表达分类的效果,决策分界就是在二维的数据平面中划出一条直线,当数据的维度是3维时,就划出一个平面;当数据的维度是n维时,就划出一个n-1维的超平面。

下图即二维平面中划出决策分界的效果,也是感知机的分类效果。


但是感知机只能做简单的显性分类任务,尤其是对XOR(异或)这样简单的分类任务都无法解决。


三。两层神经网络(多层感知机)

单层神经网络无法解决异或问题,但是增加一个计算层后,两层神经网络不仅可以解决异或问题,而且具有很好的非线性分类效果。不过两层神经网络的计算是一个问题。

Rumelhar和Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需的复杂计算量问题。(即带一个隐藏层的神经网络)

1. 结构

两层神经网络包含输入层、输出层,以及中间层(隐藏层),此时,中间层和输出层都是计算层。


计算最终输出z:



使用矩阵运算来表达整个计算公式:




偏置节点(bias unit):

这些节点是默认存在的,本质上是一个只含有存储功能,且存储值永远为1的单元。

在神经网络的每个层次中,除了输出层以外,都会含有这样一个偏置单元。正如线性回归模型与逻辑回归模型中的一样。

偏置单元与后一层的所有节点都有连接,我们设这些参数值为向量b,称之为偏置。

偏置节点很好认,因为其没有输入(即前一层没有箭头指向它)



在考虑了偏置以后的一个神经网络的矩阵的运算:


需要注意的是,两层神经网络中不再使用sgn函数作为激活函数,而是使用平滑函数sigmoid作为激活函数。

事实上,神经网络的本质上是通过参数与激活函数来拟合特征与目标之间的真实函数关系。


2.效果

与单层神经网络不同,两层神经网络可以无限逼近任意连续函数。

即面对复杂的非线性分类任务,两层神经网络(带一个隐藏层)可以分类的很好。

如下栗子,红色的线与蓝色的线代表数据。而红色区域和蓝色区域代表由神经网络划开的区域,两者的分界线就是决策分界。



其实输出层的决策分界仍然是直线。关键在于,从输入层到隐藏层时,数据发生了空间变换。

也就是说,两层神经网络中,隐藏层对原始数据进行了一个空间变换,使其可以被线性分类。

我们知道,矩阵和向量相乘,本质上就是对向量的坐标空间进行一个变换。因此,隐藏层的参数矩阵的作用就是使得数据的原始坐标空间从线性不可分,转换为线性可分。

两层神经网络通过两层的线性模型模拟了数据内真实的非线性函数。因此,多层的神经网络的本质就是复杂函数拟合。


隐藏层节点数设计:

在设计一个神经网络时,输入层的节点数需要与特征的维度匹配,输出层的节点数要与目标的维度匹配。而中间层的节点数,却是由设计者指定的。但是节点数设置多少呢,将会影响整个模型的效果。

目前业界没有完整的理论来指导该决策,一般是根据经验。较好的方法是预先设定几个可选值,通过切换这几个值来看整个模型的预测结果,选择效果最好的值作为最终选择。这种方法也叫作Grid Search(网格搜索).


3.训练

模型训练的目的,就是使得参数尽可能与真实的模型逼近。

具体做法:给所有参数赋上随机值。我们使用随机生成的参数,来预测训练数据中是的样本。样本的预测目标为yp,真实目标为y,那么定义一个loss(损失),公式如下:


我们的目标就是使对所有训练数据的损失和尽可能小。

因为有z=yp,将之前的神经网络预测的矩阵公式带入到yp中,那么我们可以吧损失写成关于参数的函数,这个函数称之为损失函数

下面问题就是:如何优化参数,能够使损失函数的值最小。

这就转化为一个优化问题,由于该问题的参数不止一个,采用求导的话计算导数等于0的运算量较大,所以一般来说解决该问题采用梯度下降算法

梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零为止。一般这个时候,所有参数恰好达到使损失函数达到一个最低值的状态。

在神经网络中,由于结构复杂,每次计算梯度的代价很大,因此还需要使用反向传播算法。反向传播算法利用了神经网络的结构进行计算。不一次计算所有参数的梯度,而是从后向前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后输出层的梯度。计算结束后,所要的两个参数矩阵的梯度就都有了。


反向传播算法可以直观理解为下图,梯度的计算从后往前,一层层反向传播。前缀E代表着相对导数的意思。

算法的启示是数学中的链式法则


优化问题只是训练中的一个部分。机器学习问题之所以称为学习问题,而不是优化问题,就是因为它不仅要求数据在训练集上求得一个较小的误差,在测试集上也要表现好。因为模型最终是要部署到没有见过训练数据的真实场景。提升模型在测试集上的预测效果的主题叫做泛化(generalization),相关方法被称作正则化(regularization)。神经网络中常用的泛化技术有权重衰减等。


4. 影响

神经网络在这个时候,已经可以发力于语音识别,图像识别,自动驾驶等多个领域。

但是神经网络仍然存在若干的问题:尽管使用了BP算法,一次神经网络的训练仍然耗时太久,而且困扰训练优化的一个问题就是局部最优解问题,这使得神经网络的优化较为困难。同时,隐藏层的节点数需要调参,这使得使用不太方便,工程和研究人员对此多有抱怨。
  90年代中期,由Vapnik等人发明的SVM(Support Vector Machines,支持向量机)算法诞生,很快就在若干个方面体现出了对比神经网络的优势:无需调参;高效;全局最优解。基于以上种种理由,SVM迅速打败了神经网络算法成为主流。


四。多层神经网络(深度学习)

下面只介绍讨论普通的多层神经网络,不介绍CNN(卷积神经网络)和 RNN(递归神经网络)。

1. 结构

在两层神经网络的输出层后面,继续添加层次,新的层次成为新的输出层。依次不断添加,会得到更多层的多层神经网络。



多层神经网络中的层数增加了很多,为了更深入的表示特征和函数模拟能力。

更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。

逐层特征学习的例子见下图:



研究发现,在参数数量一样的情况下,更深的网络往往具有比浅层的网络更好的识别效率。

3. 训练

在训练多层神经网络时激活函数选择ReLU函数,更容易收敛,并且预测性能更好。

ReLU函数不是传统的非线性函数,而是分段线性函数。其表达式非常简单,就是y=max(x,0)。简而言之,在x大于0,输出就是输入,而在x小于0时,输出就保持为0。这种函数的设计启发来自于生物神经元对于激励的线性响应,以及当低于某个阈值后就不再响应的模拟。

4.影响

目前,深度神经网络在人工智能界占据统治地位。但凡有关人工智能的产业报道,必然离不开深度学习。

现在最为火热的研究技术包括RNN,LSTM等,研究方向则是图像理解方面。图像理解技术是给计算机一幅图片,让它用语言来表达这幅图片的意思。ImageNet竞赛也在不断召开,有更多的方法涌现出来,刷新以往的正确率。




四。总结







参考博客:https://www.cnblogs.com/subconscious/p/5058741.html

根据神经网络发展的历史,通俗易懂而又详尽的介绍神经网络。感谢大佬。


另外,一个好玩的神经网络:http://playground.tensorflowjiaocheng.com/#activation=relu&batchSize=10&dataset=circle&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=3,2,2,2&seed=0.24663&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false


猜你喜欢

转载自blog.csdn.net/u014322206/article/details/78716906