反向传播
1. 链式法则
使用链式法则计算复合表达式 考虑复合函数
f
(
x
,
y
,
z
)
=
(
x
+
y
)
×
z
f(x, y, z) = (x+y)\times z
f(x,y,z)=(x+y)×z。我们将公示分为两部分
q
=
x
+
y
q = x + y
q=x+y 和
f
=
q
×
z
f = q\times z
f=q×z。所以我们有
∂
f
∂
q
=
z
,
∂
f
∂
z
=
q
\frac{\partial f}{\partial q} = z, \frac{\partial f}{\partial z} = q
∂q∂f=z,∂z∂f=q ;
∂
q
∂
x
=
1
,
∂
q
∂
y
=
1
\frac{\partial q}{\partial x} = 1 , \frac{\partial q}{\partial y} = 1
∂x∂q=1,∂y∂q=1。然而函数
f
f
f 关于
x
,
y
,
z
x, y, z
x,y,z 的梯度才是需要关注的。从而我们需要使用链式法则
。链式法则指出将这些梯度表达式链接起来的正确方式是相乘,比如
∂
f
∂
x
=
∂
f
∂
q
∂
q
∂
x
\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x}
∂x∂f=∂q∂f∂x∂q。
计算对应的计算图如下:
前向传播从输入计算到输出(绿色),反向传播从尾部开始,根据链式法则递归地向前计算梯度(显示为红色),一直到网络的输入端。可以认为,梯度是从计算链路中回流。
Sigmoid例子 如下表达式,描述了一个含输入
x
x
x 和权重
w
w
w 的2维的神经元,该神经元使用了sigmoid激活函数
。
f
(
w
,
x
)
=
1
1
+
e
−
(
w
0
x
0
+
w
1
x
1
+
w
2
)
f(w,x) = \frac{1}{1 + e^{-(w_0x_0 + w_1x_1 + w_2)}}
f(w,x)=1+e−(w0x0+w1x1+w2)1
其对应的计算图如下所示:
sigmoid函数求导简化 sigmoid函数关于其输入的求导是可以简化的(使用了在分子上先加后减1的技巧):
σ
(
x
)
=
1
1
+
e
−
1
→
d
σ
(
x
)
d
x
=
e
−
x
(
1
+
e
−
x
)
2
=
(
1
+
e
−
x
−
1
1
+
e
−
x
)
(
1
1
+
e
−
x
)
=
(
1
−
σ
(
x
)
)
σ
(
x
)
\sigma (x) = \frac{1}{1 + e^{-1}} \\ \to \frac{d \sigma(x)}{dx} = \frac{e^{-x}}{(1 + e^{-x})^2} = (\frac{1 + e^{-x} - 1}{1 + e^{-x}})(\frac{1}{1 + e^{-x}}) = (1 - \sigma(x))\sigma(x)
σ(x)=1+e−11→dxdσ(x)=(1+e−x)2e−x=(1+e−x1+e−x−1)(1+e−x1)=(1−σ(x))σ(x)
通过这个技巧,我们就可以实现门的合并。
2. 计算图
我们通常将操作节点叫做门
,一般的我们有:
add
:梯度分发器。 z = x + y ⇒ ∂ L ∂ x = ∂ L ∂ z ∂ z ∂ x = ∂ L ∂ z × 1 z = x + y \Rightarrow \frac{\partial L}{\partial x} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial x} = \frac{\partial L}{\partial z} \times 1 z=x+y⇒∂x∂L=∂z∂L∂x∂z=∂z∂L×1。max
:梯度路由器。 z = m a x ( x , y ) ⇒ z = max(x, y) \Rightarrow z=max(x,y)⇒被选中的参数梯度为 ∂ L ∂ z \frac{\partial L}{\partial z} ∂z∂L,否则为 0 0 0。mul
:梯度交换器。 z = x × y ⇒ ∂ L ∂ x = ∂ L ∂ z ∂ z ∂ x = ∂ L ∂ z × y z = x \times y \Rightarrow \frac{\partial L}{\partial x} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial x} = \frac{\partial L}{\partial z}\times y z=x×y⇒∂x∂L=∂z∂L∂x∂z=∂z∂L×y。
3. 变量向量化
神经网络
在一层的线性分类器(感知器)中,我们仅仅学习了 n n n 个模板,对于有多种特征的实体进行分类时,这明显是不足的。
多层神经网络可以解决单层神经网络的模板单一、鲁棒性差的问题。比如我们加深网络层数到两层,第一层输入为实体特征,第二层输入为第一层各分类模板得分。最后再通过 W 2 W_2 W2 进一步整合,以 W 1 W_1 W1 各模板得分为特征,得到最终的分类得分。