0%

梯度下降和 BP 算法

Backpropagation 算法,全称是 backward propagation of errors. 首先要说明这里面的逻辑,CNN 或者其它的神经网络的优化本质上还是使用的 GD 算法,而 BP 只是求解 GD 的一种方法。所以,要搞明白 BP 算法,首先要搞明白 GD 算法。

梯度下降算法

GD 是需找 局部最优解 的一种算法,在凸函数中的局部最优就是全局最优。GD 也叫最速下降算法。在任意一点 \(x\), 沿着该点梯度相反的方向是函数下降最快的方向。对于一个多变量函数 \(F(x)\), 在点 \(a\) 的邻域中要求其满足两个条件:

  1. \(F(x)\) 有定义
  2. \(F(x)\) 可微

那么,在这个邻域中的一点 \(b\):

\[ b=a-\gamma \nabla F(a), \quad \gamma > 0 \]

有:

\[ F(a)>F(b) \]

所以,假设 \(F(x)\) 的最小值为 \(x_0\), 那么,给定任意一个 \(\varepsilon\), 只要 \(\gamma\) 足够小,总是可以找到一个 \(x_1\), 使得:

\[ F(x_1)\lt F(x_0) + \varepsilon \]

这可以认为是 BP 算法的一个 (不严谨的) 理论基础。我们在进行神经网络的优化时,可以把整个神经网络的 loss 看成一个函数 \(L(W, X)\), 数据是 \(X\), 求解最小化 \(L\) 的 \(W\). 要从 loss function 的角度去考虑。

Backpropagation

BP 算法是在神经网络中求解 GD 的一种方法,其关键点是链式法则。这里 有一个非常非常好的讲解。