给定一个可微函数,它在理论上是有可能找到它的最小分析。一个函数的最小点的导数为0,所以你要做的就是找到所有的点的导数趋于0,并检查哪些点函数值最低。
应用到神经网络中,这意味着要分析地找到产生最小可能损失函数的权重值的组合。可以通过求解方程
gradient(f)(W) = 0
来实现。这是一个有N个变量的多项式方程,其中N是网络中系数的数目。
虽然在N = 2或N = 3的情况下解出这样的方程是可能的,但对于真正的神经网络来说,这样做是很难的,因为参数的数量从不少于几千个,通常可能是几千万个。如果从梯度的相反方向更新权值,每次损失会少一点:
1绘制一批训练样本x和对应的目标y。
2在x上运行网络,得到预测结果y_pred。
3计算批处理中网络的损失,这是对y_pred和y之间不匹配的度量。
4根据网络参数(向后传递)计算损失的梯度。
5将参数从梯度的相反方向移动一点-例如W -= step *梯度-从而减少批处理的损失一点。
以上被称为小批量随机梯度下降(minibatch SGD)。随机指的是每批数据都是随机抽取的(随机在科学上是随机的同义词)。下图展示了一维情况下,网络只有一个参数,只有一个训练样本时的情况。
如图,在某个参数值附近,存在一个局部最小值:在那个点附近,向左移动会导致损失增加,但向右移动也会导致损失增加。如果所考虑的参数是通过SGD以较小的学习率进行优化,那么优化过程就会卡在局部最小值上,而不会到达全局最小值。可以通过使用动量来避免这些问题,