函数的导数(derivative)描述了函数的变化率:
导数越大,表示函数增加的越快
导数越小,表示函数减少的越快
导数 = 0,对应函数的极值
导数(derivative)
对于一个误差函数(非负),我们期望找到误差函数最小的点,使得E(x)最小,那么,就要找到一个x的变化量,使得导数最小,这样,误差函数会按照最快的减少速度逼近最小值。当x的变化方向与导数方向180°相反时,函数减少的越快,越容易逼近最小值,即:
根据所以
当求得x=xn处的导数时,可以通过上式获得下一个x的取值,使得误差函数E(x)向最小值逼近。
当函数的自变量由一个x,变为多个x0,x1,x2...xn,即X={x0,x1,x2...xn},函数的导数则变为偏导数
误差函数的变化,满足下面的公式:
其中
欲使E(X)以最快的方式向最小值逼近,令
根据上述公式,梯度下降算法的步骤为:
任意找到位置作为起点
计算该点的梯度
用该点的梯度更新所有自变量,获得下一个位置
重复2~3步,直到找到最小值为止
在神经网络视角下,η成为学习率,可以看做移动的步长,如何确定学习率,没有明确的标准,只能通过反复试验来寻找恰当的值
建议读者,根据上述算法步骤,在Excel表里面手动做一下计算,如下例所示。
假设有函数
其梯度:
自变量更新:
用Excel表依次计算,如下
梯度下降法计算演示
|