假设我们有以下三层神经网络:
输入层:2个神经元
隐藏层:3个神经元
输出层:2个神经元
假设使用sigmoid函数作为激活函数,定义如下:
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+e−x1
现在,我们来推导反向传播算法的每一步公式。
Step 1: 前向传播
对于一个样本 x \mathbf{x} x,前向传播计算如下:
z 1 = w 1 ⊤ x + b 1 z_1 = \mathbf{w}_1^{\top}\mathbf{x} + \mathbf{b}_1 z1=w1⊤x+b1
h 1 = σ ( z 1 ) h_1 = \sigma(z_1) h1=σ(z1)
z 2 = w 2 ⊤ h 1 + b 2 z_2 = \mathbf{w}_2^{\top}\mathbf{h}_1 + \mathbf{b}_2 z2=w2⊤h1+b2
h 2 = σ ( z 2 ) h_2 = \sigma(z_2) h2=σ(z2)
其中, w 1 \mathbf{w}_1 w1 和 w 2 \mathbf{w}_2 w2 是权重矩阵, b 1 \mathbf{b}_1 b1 和 b 2 \mathbf{b}_2 b2 是偏置向量, σ ( ⋅ ) \sigma(\cdot) σ(⋅) 是sigmoid函数。
Step 2: 计算误差
我们假设要最小化平方损失函数:
L = 1 2 ∑ i = 1 m ( y ^ i − y i ) 2 L = \frac{1}{2}\sum_{i=1}^{m}(\hat{y}_i - y_i)^2 L=21i=1∑m(y^i−yi)2
其中, m m m是样本数量, y ^ i \hat{y}_i y^i和 y i y_i yi分别是第 i i i个样本的预测值和真实值。对于本例, m = 1 m=1 m=1。
因此,我们可以计算输出层的误差项 δ 2 \delta_2 δ2:
δ 2 = ( y ^ − y ) ⋅ σ ′ ( z 2 ) = ( y ^ − y ) ⋅ h 2 ⋅ ( 1 − h 2 ) \delta_2 = (\hat{y} - y) \cdot \sigma'(z_2) = (\hat{y} - y) \cdot h_2 \cdot (1 - h_2) δ2=(y^−y)⋅σ′(z2)=(y^−y)⋅h2⋅(1−h2)
其中, y ^ \hat{y} y^是预测值, y y y是真实值, σ ′ ( ⋅ ) \sigma'(\cdot) σ′(⋅)表示sigmoid函数的导数。
Step 3: 反向传播
接下来,我们需要通过反向传播算法计算每一层的误差项 δ \delta δ。
对于隐藏层,我们可以使用以下公式计算:
δ 1 = W 2 δ 2 ⋅ σ ′ ( z 1 ) = W 2 δ 2 ⋅ h 1 ⋅ ( 1 − h 1 ) \delta_1 = \mathbf{W}_2 \delta_2 \cdot \sigma'(z_1) = \mathbf{W}_2 \delta_2 \cdot h_1 \cdot (1 - h_1) δ1=W2δ2⋅σ′(z1)=W2δ2⋅h1⋅(1−h1)
其中, W 2 \mathbf{W}_2 W2是权重矩阵除去偏置项后的部分。
Step 4: 计算梯度
最后,我们可以使用误差项 δ \delta δ计算梯度并更新参数。具体地,我们可以使用以下公式计算权重和偏置的梯度:
∂ L ∂ w 2 = h 1 δ 2 \frac{\partial L}{\partial \mathbf{w}_2} = \mathbf{h}_1 \delta_2 ∂w2∂L=h1δ2
∂ L ∂ b 2 = δ 2 \frac{\partial L}{\partial \mathbf{b}_2} = \delta_2 ∂b2∂L=δ2
∂ L ∂ w 1 = x δ 1 \frac{\partial L}{\partial \mathbf{w}_1} = \mathbf{x} \delta_1 ∂w1∂L=xδ1
∂ L ∂ b 1 = δ 1 \frac{\partial L}{\partial \mathbf{b}_1} = \delta_1 ∂b1∂L=δ1
其中, h 1 \mathbf{h}_1 h1和 x \mathbf{x} x分别是隐藏层输出和输入层输入, δ 1 \delta_1 δ1和 δ 2 \delta_2 δ2是误差项。
最后,我们可以使用梯度下降法或其他优化算法来更新权重和偏置。