多层神经元-神经网络网络
如下的神经网络,具备一个隐含层,一个输出层函数
其中输入依旧是x1,x2,x3,1(一个数据的3个维度加一个泛化1)学习
隐含层有4个神经元,输出层有一个神经元,他们的计算公式和上节课介绍的逻辑斯蒂回归模型同样优化
神经网络正向计算3d
多层的神经网络,须要从低到高,一层一层的计算出最后的结果,固然这些计算是能够并行计算的(经过矩阵乘法)cdn
神经网络的训练blog
在回顾一下上节课讲的神经网络的训练,是用损失函数对每个参数求偏导,在用这个偏导乘以一个学习率α,再用这个结果去更新全部的参数,一步一步的迭代,最终获得一个比较好的神经网络内存
神经网络的训练-反向传播it
在多层神经网络中,咱们如何给每个参数去计算他的偏导数。io
首先先看h21-h的这一层全部的参数的导数是如何计算的,假设这里仍是使用的sigmiod激活函数,使用平方差的损失函数
这里的w3存在于h21,h22,h23和h的连线上,X就是h21,h22,h23的输出和+1
w2存在于h11,h12,h13和h21,h22,h23的各类连线中,也能够说,存在h21,h22,h23的表达式中
w1同理
至关于说w1,w2都是以复合函数的形式参与到损失函数的计算中来,对于这种复合函数的求导使用的是链式法则
链式法则
神经网络训练优化
上面这种训练的缺点:
优化方案
随机梯度降低
去掉每次使用整个数据集的假设,每次只使用一个样本。这样会有一个问题,就是说一个样本其实并不能反映整个数据集的一个方向,因此会致使他的收敛速度比较慢
(收敛速度:模型从开始训练到结束训练,开始很是快,后来比较慢,慢慢达到一个稳定的值,当达到一个比较稳定的值,咱们称之为收敛)
mini-batch梯度降低
mini-batch这样的梯度降低的其余问题
梯度降低存在震荡的问题,一个样本是不可以反映所有数据集的方向的,mini-batch中的数据虽然是随机采样出来的,可是由于随机采样的数据量不够多,因此仍然会致使梯度降低存在一个震荡的问题,这个震荡的问题在单个样本上反映的更明显,对于mini-batch来讲,size越大越不明显
局部极值问题
一个函数不必定是个凸函数(凸函数:只有一个极小值的函数),不必定只有一个最优解,以下右图。
这样的一个函数会致使,当我到了一个局部最优解的时候,无论个人梯度计算方向在哪,只要个人learning rate不是那么大,都会致使他往回去学,因此running rate是一个比较重要的参数,若是learning rate设置的过小,会致使整个的参数停在局部极值点的位置
saddle point
某一个点的导数为0,若是导数为0,无论α多大,全部参数的更新都是0,致使参数不能获得更新而停在这里,这个无论用mini-batch仍是随机梯度降低都会遇到的问题
上面问题的解决方案
动量梯度降低
vt能够看作是前t-1步的梯度积累值的均值和当前梯度的和,由于每次计算vt的时候,vt-1都乘以了一个系数,这个系数能够控制以前积累的梯度其的做用的大小。
对于梯度方向来讲,因为他是有方向的,所以当前梯度和积累值的加法,不光体如今大小上,还体如今方向上。若是momentum step和gradient step这两个向量他的方向差距比较大的时候,他们加在一块儿的值就会比较小,这样就能够防止震荡;而当他们两个方向差距比较小(或者和在一块儿)的时候,他们矢量相加的结果抵消的就会比较少,他们的和就会比较大,那么他们加完以后,就会比原来大不少
这样就能够,在模型刚开始的时候,他的梯度方向是比较稳定的,这个时候因为梯度是有积累的,就可使得个人梯度模型变的很是大
动量梯度降低的特色