神经网络在层数较多的网络模型训练的时候很容易出问题,除了计算资源不足和带标注的训练数据因素引起的问题外,还表现出两个重大的问题:梯度消失和梯度爆炸。如果存在梯度消失问题,根据反向传播算法原理,接近输出的隐藏层的权值更新相对正常;在反方向上,权值更新越来越不明显,以此类推,接近输入层的隐藏层的权值更新几乎消失,导致经过很多次训练后,仍然接近初始化的权值,这样导致接近输入层的隐藏层相当于只对输入做了同一映射,那么整个神经网络相对于不包括这一隐藏层的神经网络。
其实梯度爆炸和梯度消失问题都是因为网络层数太深、权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。
深度学习的训练算法都是以梯度下降算法及其改进算法为核心的。在深度学习中,训练的最终目的是使损失函数最小。从数学知识知道,函数值的最小值处就是他导数为零的极值点,可以采用求取导数为0的方法找到极值点,同时也可以采用逐步逼近的方法把极值点找出来。梯度,在数学上来说是一个向量,指向函数值上升最快的方法。那么,梯度反方向就是梯度下降最快的方法,每次沿着梯度下降方向更新向量,就是找到函数最小值。
【随机梯度下降】
使用整个训练集的优化算法成为批量算法,因为它们会在一个大批量中同时处理所有样本。每次只使用单个样本的优化算法成为随机梯度算法。
批量梯度下降每次学习都使用整个训练集,其优点在于每次更新都会朝着正确的方向进行,最后能保证收敛于极值点,这样其收敛速度快、迭代次数少,但是其缺点在于每次梯度更新都需要遍历整个数据集,需要计算量大,消耗内存多,特别是在数据集比较大的时候,同时不利于分布式训练。
随机梯度下降算法每次只随机选择一个样本来更新模型参数,因