Backpropagation 算法,全称是 backward propagation of errors. 首先要说明这里面的逻辑,CNN 或者其它的神经网络的优化本质上还是使用的 GD 算法,而 BP 只是求解 GD 的一种方法。所以,要搞明白 BP 算法,首先要搞明白 GD 算法。
梯度下降算法
GD 是需找 局部最优解 的一种算法,在凸函数中的局部最优就是全局最优。GD 也叫最速下降算法。在任意一点 \(x\), 沿着该点梯度相反的方向是函数下降最快的方向。对于一个多变量函数 \(F(x)\), 在点 \(a\) 的邻域中要求其满足两个条件:
- \(F(x)\) 有定义
- \(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 的一种方法,其关键点是链式法则。这里 有一个非常非常好的讲解。