从导数到梯度下降算法

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

从导数到梯度下降算法
对于一个误差函数(error function),我们期望找到误差函数最小的点,使得E(x)最小,那么,就要找到一个x的变化量Δx\Delta x,使得导数最小,这样,误差函数会按照最快的减少速度逼近最小值。当x的变化方向与导数方向180°相反时,函数减少的越快,越容易逼近最小值,即:Δx=ηE(x)η\Delta x = -\eta*E'(x) ,这里 \eta是一个正的小微常数
根据Δx=xn+1xn\Delta x = x_{n+1} - x_{n} 所以xn+1=xnηE(xn)x_{n+1}=x_{n}-\eta*E'(x_{n})
当求得x=xn处的导数时,可以通过上式获得下一个x的取值,使得误差函数E(x)向最小值逼近。

当函数的自变量由一个x,变为多个x0,x1,x2…xn,即X={x0,x1,x2…xn},函数的导数则变为偏导数

误差函数的变化,满足下面的公式:ΔE=Ex0Δx0+Ex1Δx1...+ExnΔxn\Delta E = \frac{\partial{E}} {\partial{x_0}}*\Delta{x_0}+ \frac{\partial{E}} {\partial{x_1}}*\Delta{x_1}...+ \frac{\partial{E}} {\partial{x_n}}*\Delta{x_n}
ΔE={Ex0,Ex1...Exn}{Δx0,Δx1...Δxn}\Delta E = \lbrace \frac{\partial{E}} {\partial{x_0}}, \frac{\partial{E}} {\partial{x_1}}...\frac{\partial{E}} {\partial{x_n}}\rbrace \cdot \lbrace \Delta{x_0},\Delta{x_1}...\Delta{x_n}\rbrace
其中
{Ex0,Ex1...Exn}E(X)Gradient\lbrace \frac{\partial{E}} {\partial{x_0}}, \frac{\partial{E}} {\partial{x_1}}...\frac{\partial{E}} {\partial{x_n}}\rbrace 是E(X)函数的梯度Gradient
欲使E(X)以最快的方式向最小值逼近,令
X=η{Ex0,Ex1...Exn}X = -\eta* \lbrace \frac{\partial{E}} {\partial{x_0}}, \frac{\partial{E}} {\partial{x_1}}...\frac{\partial{E}} {\partial{x_n}}\rbrace
X=ηGradientX = -\eta* Gradient
根据上述公式,梯度下降算法的步骤为:

  1. 任意找到位置作为起点
  2. 计算该点的梯度
  3. 用该点的梯度更新所有自变量,获得下一个位置
  4. 重复2~3步,直到找到最小值为止

在神经网络视角下,η成为学习率,可以看做移动的步长,如何确定学习率,没有明确的标准,只能通过反复试验来寻找恰当的值