一. 反向传播算法
计算图模型
设有算式
使用计算图模型展示其前向计算过程,以及梯度的后向传播过程如下图所示:
在反向传播过程中,加法门
像一个分发器,将传过来的梯度值分发给加法门的输入;最大操作门
像一个路由器,将传过来的梯度值导向最大值;乘法门
像一个交换器,将传过来的梯度值分别乘上各自的乘数。
注:个人认为计算图适合可视化地展示前向计算和后向传播过程,但不适合指导编程。(虽然在编程时,可以把各个运算操作抽象为门
对象,然后对每一类门规定其前向与后向算法。)后面将针对神经网络给出基于代数表达的后向传播算法。
二. 神经网络
网络结构
考虑线性多分类器中的系数 ω ω ,其可以视为一个模板向量,最终输出的是每幅图像在各个类别的模板向量上的得分。这个模型的一个不足之处是各个类别仅有一个模板向量。比如现在要匹配一匹马,马可能头朝右,可能头朝左,还可能头朝下在吃草。那么一个模板向量就不够用了。那么考虑一个类别对应多个模板向量,然后再添加一层,将一幅图在多个模板向量上的得分综合一下,得到在输出类别上的得分,这样就构成了一个二维神经网络的雏形。但又考虑到线性函数的复合仍为线性函数,因此,在两个线性函数之间添加一个非线性激活函数。两层神经网络的结果图示如下:
其数学表达为:
反向传播算法——基于代数的表达
由于神经网络由一层一层的类似结构堆叠而成,因此可以考虑对某一层进行偏导计算。设该层结构如下图示,则其输入输出关系可表达为
注意,上述表达中已经将偏置项吸收进了 W W 。则有
设损失函数关于 z⃗ z → 的偏导已求出,记为 ∂L/∂z⃗ ∂ L / ∂ z → ,则
其中 ⊙ ⊙ 表示Hadamard积,即两个同维向量对应元素相乘。
现考虑 ∂L/∂z⃗ ∂ L / ∂ z → 。事实上,对下一层求 ∂L/∂z⃗ ∂ L / ∂ z → ,即对上一层求 ∂L/∂x⃗ ∂ L / ∂ x → 。
注:
- 若要获得偏置项 b⃗ b → 的梯度,仅需从 W W 的梯度表达中将最后一列单独拆出。
- 对于输出层,单独计算。