通过链式法则计算损失对各层权重的梯度是反向传播算法的核心。我们可以用一个简单的神经网络示例来说明这个过程。
示例:简单的两层神经网络
假设我们有一个简单的神经网络,包括一个输入层、一个隐藏层和一个输出层。
- 输入层:
𝑋 - 隐藏层:权重为
,激活函数为𝑊 1 𝑓 - 输出层:权重为
,损失函数为𝑊 2 𝐿
一、前向传播
计算隐藏层输出:
𝑍 1 = 𝑊 1 𝑋 𝐴 1 = 𝑓 ( 𝑍 1 ) 计算输出层输出:
𝑍 2 = 𝑊 2 𝐴 1 𝐴 2 = 𝑔 ( 𝑍 2 ) 其中
是输出层的激活函数(例如Sigmoid或Softmax)。𝑔 计算损失:
𝐿 = Loss ( 𝐴 2 , 𝑌 ) 其中
是真实标签。𝑌
2. 反向传播
计算损失对输出层权重的梯度 ∂ 𝐿/ ∂ 𝑊2
计算输出层误差:
𝛿 2 = ∂ 𝐿 ∂ 𝐴 2 ⋅ 𝑔 ′ ( 𝑍 2 ) 这里,
是输出激活函数的导数。𝑔 ′ 计算权重梯度:
∂ 𝐿/ ∂ 𝑊 2 = 𝛿 2 ⋅ 𝐴 1 𝑇
计算隐藏层权重的梯度 ∂ 𝐿/ ∂ 𝑊 1
计算隐藏层误差:
这里,𝛿 1 = ( 𝑊 2 𝑇 𝛿 2 ) ⋅ 𝑓 ′ ( 𝑍 1 ) 是隐藏层激活函数的导数。𝑓 ′ 计算权重梯度:
∂ 𝐿/ ∂ 𝑊 1 = 𝛿 1 ⋅ 𝑋 𝑇
3. 更新权重
使用计算得到的梯度更新权重:
其中
通过这个例子,我们看到了如何使用链式法则计算损失对各层权重的梯度。前向传播用于计算输出和损失,而反向传播则利用链式法则将误差从输出层向后传播,以更新每一层的权重。这个过程是深度学习模型训练的基础。