Python:梯度下降 (六十二)
梯度下降(Gradient Descent)
在这节课,我们将学习梯度下降算法背后的准则和数学原理。
我们从数学的角度来具体学习梯度下降,误差函数是关于权重的函数,它可以绘制成(上图)这样,我们站在山脉中的某个位置,需要下去,函数输入是 W1 和 W2,误差函数是E,E的梯度是E相对于 W1 和 W2 偏导数的矢量和。这个梯度实际上告诉我们,误差函数增长最快的方向。
误差函数的梯度就是误差函数相对权重和偏差的偏导数所组成的矢量,我们沿着梯度的反方向前进一步,我们将引入更小的学习速率
梯度计算
在上几节课中,我们了解到为了最小化误差函数,我们需要获得一些导数。我们开始计算误差函数的导数吧。首先要注意的是 s 型函数具有很完美的导数。即
σ ′ (x)=σ(x)(1−σ(x))
原因是,我们可以使用商式计算它:
最后一个等式是因为和中的唯一非常量项相对于 \(w_j\) 正好是\( w_j x_j\) , 明显具有导数 \(x_j\).
现在可以计算\( \frac {\partial} {\partial w_j} E\)
类似的计算将得出:(备注:下图公式缺少一个负号,且其为 m 个样本点时的公式)
如果思考下,会发现很神奇。梯度实际上是标量乘以点的坐标!什么是标量?也就是标签和预测直接的差别。这意味着,如果标签与预测接近(表示点分类正确),该梯度将很小,如果标签与预测差别很大(表示点分类错误),那么此梯度将很大。请记下:小的梯度表示我们将稍微修改下坐标,大的梯度表示我们将大幅度修改坐标。
如果觉得这听起来像感知器算法,其实并非偶然性!稍后我们将详细了解。
梯度下降算法推导与实现
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)