函数的导数(derivative)描述了函数的变化率:
- 导数越大,表示函数增加的越快
- 导数越小,表示函数减少的越快
- 导数 = 0,对应函数的极值

对于一个误差函数(error function),我们期望找到误差函数最小的点,使得E(x)最小,那么,就要找到一个x的变化量Δx,使得导数最小,这样,误差函数会按照最快的减少速度逼近最小值。当x的变化方向与导数方向180°相反时,函数减少的越快,越容易逼近最小值,即:Δx=−η∗E′(x),这里η是一个正的小微常数
根据Δx=xn+1−xn所以xn+1=xn−η∗E′(xn)
当求得x=xn处的导数时,可以通过上式获得下一个x的取值,使得误差函数E(x)向最小值逼近。
当函数的自变量由一个x,变为多个x0,x1,x2…xn,即X={x0,x1,x2…xn},函数的导数则变为偏导数
误差函数的变化,满足下面的公式:ΔE=∂x0∂E∗Δx0+∂x1∂E∗Δx1...+∂xn∂E∗Δxn
ΔE={∂x0∂E,∂x1∂E...∂xn∂E}⋅{Δx0,Δx1...Δxn}
其中
{∂x0∂E,∂x1∂E...∂xn∂E}是E(X)函数的梯度Gradient
欲使E(X)以最快的方式向最小值逼近,令
X=−η∗{∂x0∂E,∂x1∂E...∂xn∂E}
X=−η∗Gradient
根据上述公式,梯度下降算法的步骤为:
- 任意找到位置作为起点
- 计算该点的梯度
- 用该点的梯度更新所有自变量,获得下一个位置
- 重复2~3步,直到找到最小值为止
在神经网络视角下,η成为学习率,可以看做移动的步长,如何确定学习率,没有明确的标准,只能通过反复试验来寻找恰当的值