梯度下降和 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 的一种方法, 其关键点是链式法则. 这里 有一个非常非常好的讲解.