双链式法则是神经网络中反向传播的一种扩展,用于处理网络中的多个输出和损失。在此我们通过一个示例来说明如何通过事实与价值双链式法则计算损失对各层权重的梯度。
示例:多输出神经网络
假设我们有一个包含一个输入层、一个隐藏层和两个输出节点的神经网络。
- 输入层:
𝑋 - 隐藏层:权重为
,激活函数为𝑊 1 𝑓 - 输出层:权重为
,激活函数为𝑊 2 𝑔 - 输出节点:
和𝐴 2 1 (两个不同的输出)𝐴 2 2
一、前向传播
计算隐藏层输出:
𝑍 1 = 𝑊 1 𝑋 𝐴 1 = 𝑓 ( 𝑍 1 ) 计算输出层输出:
𝑍 2 = 𝑊 2 𝐴 1 𝐴 2 1 = 𝑔 ( 𝑍 2 1 ) , 𝐴 2 2 = 𝑔 ( 𝑍 2 2 ) 计算损失:
设损失函数为:𝐿 = 𝐿 1 ( 𝐴 2 1 , 𝑌 1 ) + 𝐿 2 ( 𝐴 2 2 , 𝑌 2 ) 其中
和𝑌 1 是真实标签。𝑌 2
二、反向传播
计算损失对输出层权重的梯度 ∂ 𝐿/ ∂ 𝑊 2
计算每个输出的误差:
𝛿 2 1 = ∂ 𝐿 1/ ∂ 𝐴 2 1 ⋅ 𝑔 ′ ( 𝑍 2 1 ) 𝛿 2 2 = ∂ 𝐿 2/ ∂ 𝐴 2 2 ⋅ 𝑔 ′ ( 𝑍 2 2 ) 合并误差:
𝛿 2 = [ 𝛿 2 1 𝛿 2 2 ] 计算权重梯度:
∂ 𝐿/ ∂ 𝑊 2 = 𝛿 2 ⋅ 𝐴 1 𝑇
计算隐藏层权重的梯度 ∂ 𝐿/ ∂ 𝑊 1
计算隐藏层误差:
𝛿 1 = ( 𝑊 2 𝑇 𝛿 2 ) ⋅ 𝑓 ′ ( 𝑍 1 ) 计算权重梯度:
∂ 𝐿 ∂ 𝑊 1 = 𝛿 1 ⋅ 𝑋 𝑇
3. 更新权重
使用计算得到的梯度更新权重:
通过这个示例,我们展示了如何使用事实与价值双链式法则计算损失对各层权重的梯度。前向传播用于计算每个输出和总体损失,而反向传播则利用链式法则将误差从输出层向后传播,以更新每一层的权重。这样的方法可以处理多输出的情况,使得网络能够同时优化多个目标。