第2章 反向传播算法
为什么反向传播算法这么流行,这么多人在使用?
因为反向传播算法比传统的方法更快。
反向传播算法的核心是一个对代价函数关于任何权重(或者偏置)的偏导数的表达式。这个表达式告诉我们,在改变权重和偏置时,代价函数变化的快慢。
反向传播不仅仅是一种学习的快速算法。实际上它让我们细致领悟如何通过改变权重和偏置来改变整个网络的行为。因此,这也是学习反向传播细节的重要价值所在。
热身:神经网络中使用矩阵快速计算输出的方法
关于代价函数的两个假设
反向传播的目标是计算代价函数关于权重和偏置的偏导数。
反向传播的四个方程
如果输出神经元处于或者低于激活值,或者高于激活值时,最终层的权重学习缓慢。这样的情形,我们常常称神经元已经饱和了,并且,权重学习也会终止(或者学习非常缓慢)。类似的结果对于输出神经元的偏置也是成立的。
四个基本方程也其实对任何的激活函数都是成立的。所以,我们可以使用这些方程来设计有特定学习属性的激活函数。我们准备选择一个(非 S 型)激活函数 σ 使得 σ′ 总是正数,并且不会趋近 0。这会防止在原始的 S 型神经元饱和时学习速度下降的情况出现。
四个基本方程的证明
第一个方程的证明:
第二个方程式的证明:
以下一层误差 δl+1 的形式表示误差 δl 。
由于:
讲上述两个式子代入,得到
第三个方程式的证明:
第四个方程式的证明:
随机梯度下降的一个小的改进
在一个小批量数据上的反向传播的全矩阵方法:
一般随机梯度下降是对一个小批量数据中的所有样本进行梯度计算,所以我们可以更改反向传播算法使得它同时对一个小批量数据中的所有样本进行梯度计算。意思就是我们可以用一个矩阵表示一个小批量数据来进行计算,而不是单个的输入向量。
反向传播算法为什么快
求解偏导数有两种方法,一种是直接使用微积分来计算偏导数(数值解),另一种就是反向传播算法。
使用微积分计算偏导数运行起来非常缓慢。如果网络中有一百万个权重,对每个不同的权重,我们需要计算
C(w+ϵej)
来计算
∂C∂wj
。所以,为了计算梯度,我们需要计算代价函数一百万次,需要一百万次前向传播(对每个样本)。我们同样给需要计算
C(w)
,总共是一次网络传播需要一百万零一次。
反向传播可以同时计算所有的偏导数,仅仅使用一次前向传播,加上一次后向传播。所以,即使反向传播看起来比较复杂,但实际上更快。
权重(和偏置)微小变化的传播,会最终传播影响到输出层。实际上,反向传播算法就是追踪权重(和偏置)的这种微小的变化是如何影响到代价函数的技术。