下面属于GPT生成,只参考推导流程,不要在乎计算数值和求导公式的正确性。
总的来说,反向转播就是用损失对于所有参数、隐藏层的输出计算梯度,并更新所有参数。
计算损失对于隐藏层的输出的目的是计算这个隐藏层输出对于损失的影响,并将这个影响反馈到这层的参数中,简单来说就是链式法则计算的必经之路。
前向传播公式
设输入为 x x x (假设为标量),第一层权重为 w 1 w_1 w1, 偏置为 b 1 b_1 b1, 激活函数为 σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1(Sigmoid 函数),第二层权重为 w 2 w_2 w2 和偏置为 b 2 b_2 b2。
前向传播步骤如下:
-
第一层计算:
z 1 = w 1 x + b 1 z_1 = w_1 x + b_1 z1=w1x+b1 -
激活函数应用:
a 1 = σ ( z 1 ) a_1 = \sigma(z_1) a1=σ(z1) -
第二层计算:
z 2 = w 2 a 1 + b 2 z_2 = w_2 a_1 + b_2 z2=w2a1+b2 -
输出 (假设为二分类问题):
y ^ = σ ( z 2 ) \hat{y} = \sigma(z_2) y^=σ(z2)
反向传播公式(链式法则)
我们用交叉熵损失函数
L
L
L 来衡量模型预测
y
^
\hat{y}
y^ 和实际标签
y
y
y 的差异,其定义如下:
L
(
y
^
,
y
)
=
−
[
y
log
y
^
+
(
1
−
y
)
log
(
1
−
y
^
)
]
L(\hat{y}, y) = -[y\log{\hat{y}} + (1-y)\log{(1-\hat{y})}]
L(y^,y)=−[ylogy^+(1−y)log(1−y^)]
反向传播时计算参数的梯度:
-
对 y ^ \hat{y} y^ 的导数:
∂ L ∂ y ^ = − ( y y ^ − 1 − y 1 − y ^ ) \frac{\partial L}{\partial \hat{y}} = -(\frac{y}{\hat{y}} - \frac{1-y}{1-\hat{y}}) ∂y^∂L=−(y^y−1−y^1−y) -
对 z 2 z_2 z2 的导数 (使用链式法则):
∂ L ∂ z 2 = ( σ ( z 2 ) − y ) σ ′ ( z 2 ) = ( y ^ − y ) y ^ ( 1 − y ^ ) \frac{\partial L}{\partial z_2} = (\sigma(z_2)-y)\sigma'(z_2) = (\hat{y}-y)\hat{y}(1-\hat{y}) ∂z2∂L=(σ(z2)−y)σ′(z2)=(y^−y)y^(1−y^) -
对 w 2 w_2 w2 和 b 2 b_2 b2 的导数:
∂ L ∂ w 2 = ∂ L ∂ z 2 ⋅ a 1 \frac{\partial L}{\partial w_2} = \frac{\partial L}{\partial z_2}\cdot a_1 ∂w2∂L=∂z2∂L⋅a1
∂ L ∂ b 2 = ∂ L ∂ z 2 \frac{\partial L}{\partial b_2} = \frac{\partial L}{\partial z_2} ∂b2∂L=∂z2∂L -
对 a 1 a_1 a1 的导数 (使用链式法则):
∂ L ∂ a 1 = w 2 ( y ^ − y ) y ^ ( 1 − y ^ ) \frac{\partial L}{\partial a_1} = w_2 (\hat{y}-y)\hat{y}(1-\hat{y}) ∂a1∂L=w2(y^−y)y^(1−y^) -
对 z 1 z_1 z1 的导数:
∂ L ∂ z 1 = σ ′ ( z 1 ) ⋅ ∂ L ∂ a 1 = ( a 1 ) ( 1 − a 1 ) ⋅ w 2 ( y ^ − y ) y ^ ( 1 − y ^ ) \frac{\partial L}{\partial z_1} = \sigma'(z_1) \cdot \frac{\partial L}{\partial a_1} = (a_1)(1-a_1)\cdot w_2 (\hat{y}-y)\hat{y}(1-\hat{y}) ∂z1∂L=σ′(z1)⋅∂a1∂L=(a1)(1−a1)⋅w2(y^−y)y^(1−y^) -
对 w 1 w_1 w1 和 b 1 b_1 b1 的导数:
∂ L ∂ w 1 = x ⋅ ∂ L ∂ z 1 \frac{\partial L}{\partial w_1} = x \cdot \frac{\partial L}{\partial z_1} ∂w1∂L=x⋅∂z1∂L
∂ L ∂ b 1 = ∂ L ∂ z 1 \frac{\partial L}{\partial b_1} = \frac{\partial L}{\partial z_1} ∂b1∂L=∂z1∂L
实例计算:
设 x = 0.5 x=0.5 x=0.5, w 1 = 2 w_1=2 w1=2, b 1 = − 1 b_1=-1 b1=−1, w 2 = 3 w_2=3 w2=3, b 2 = − 1 b_2=-1 b2=−1 且 y = 0 y=0 y=0。
前向传播计算:
-
计算 z 1 z_1 z1:
z 1 = 2 ∗ 0.5 − 1 = 0 z_1 = 2 * 0.5 - 1 = 0 z1=2∗0.5−1=0 -
应用 Sigmoid 函数得到 a 1 a_1 a1:
a 1 = σ ( 0 ) = 0.5 a_1 = \sigma(0) = 0.5 a1=σ(0)=0.5 -
计算 z 2 z_2 z2:
z 2 = 3 ∗ 0.5 − 1 = 0.5 z_2 = 3 * 0.5 - 1 = 0.5 z2=3∗0.5−1=0.5 -
应用 Sigmoid 函数得到 y ^ \hat{y} y^:
y ^ = σ ( 0.5 ) ≈ 0.6225 \hat{y} = \sigma(0.5) ≈ 0.6225 y^=σ(0.5)≈0.6225
反向传播计算:
-
计算损失函数的导数:
L ′ = − ( 0 0.6225 + 1 1 − 0.6225 ) ≈ 2.387 L' = -(\frac{0}{0.6225} + \frac{1}{1-0.6225}) ≈ 2.387 L′=−(0.62250+1−0.62251)≈2.387 -
对 z 2 z_2 z2 的导数( y ^ − y = 0.6225 \hat{y}-y=0.6225 y^−y=0.6225):
∂ L ∂ z 2 = ( 0.6225 ) ( 1 − 0.6225 ) ≈ 0.234 \frac{\partial L}{\partial z_2} = (0.6225)(1-0.6225) ≈ 0.234 ∂z2∂L=(0.6225)(1−0.6225)≈0.234 -
对 w 2 w_2 w2 和 b 2 b_2 b2 的导数:
∂ L ∂ w 2 = 0.234 ∗ 0.5 ≈ 0.117 \frac{\partial L}{\partial w_2} = 0.234 * 0.5 ≈ 0.117 ∂w2∂L=0.234∗0.5≈0.117
∂ L ∂ b 2 = 0.234 \frac{\partial L}{\partial b_2} = 0.234 ∂b2∂L=0.234 -
对 z 1 z_1 z1 的导数:
∂ L ∂ z 1 = ( 0.5 ) ( 1 − 0.5 ) ∗ 0.117 ≈ 0.02925 \frac{\partial L}{\partial z_1} = (0.5)(1-0.5) * 0.117 ≈ 0.02925 ∂z1∂L=(0.5)(1−0.5)∗0.117≈0.02925 -
对 w 1 w_1 w1 和 b 1 b_1 b1 的导数:
∂ L ∂ w 1 = 0.5 ∗ 0.02925 ≈ 0.014625 \frac{\partial L}{\partial w_1} = 0.5 * 0.02925 ≈ 0.014625 ∂w1∂L=0.5∗0.02925≈0.014625
∂ L ∂ b 1 = 0.02925 \frac{\partial L}{\partial b_1} = 0.02925 ∂b1∂L=0.02925
更新参数:
使用梯度下降算法,设学习率为
η
=
0.1
\eta=0.1
η=0.1,
- 更新 w 1 w_1 w1: 2 − 0.1 ∗ 0.014625 ≈ 1.985375 2 - 0.1 * 0.014625 ≈ 1.985375 2−0.1∗0.014625≈1.985375
- 更新 b 1 b_1 b1: − 1 − 0.1 ∗ 0.02925 ≈ − 1.002925 -1 - 0.1 * 0.02925 ≈ -1.002925 −1−0.1∗0.02925≈−1.002925
- 更新 w 2 w_2 w2: 3 − 0.1 ∗ 0.117 ≈ 2.883 3 - 0.1 * 0.117 ≈ 2.883 3−0.1∗0.117≈2.883
- 更新 b 2 b_2 b2: − 1 − 0.1 ∗ 0.234 ≈ − 1.0234 -1 - 0.1 * 0.234 ≈ -1.0234 −1−0.1∗0.234≈−1.0234