神经网络中梯度计算求和公式求导问题

以下是公式一推导出公式二的过程。

  • 表达式一
    ∂ E ∂ w j k = − 2 ( t k − o k ) ⋅ sigmoid ( ∑ j w j k ⋅ o j ) ⋅ ( 1 − sigmoid ( ∑ j w j k ⋅ o j ) ) ⋅ ∂ ∂ w j k ( ∑ j w j k ⋅ o j ) \frac{\partial E}{\partial w_{jk}} = -2(t_k - o_k) \cdot \text{sigmoid}\left(\sum_j w_{jk} \cdot o_j\right) \cdot (1 - \text{sigmoid}\left(\sum_j w_{jk} \cdot o_j\right)) \cdot \frac{\partial}{\partial w_{jk}} \left(\sum_j w_{jk} \cdot o_j\right) ∂wjk∂E=−2(tk−ok)⋅sigmoid(j∑wjk⋅oj)⋅(1−sigmoid(j∑wjk⋅oj))⋅∂wjk∂(j∑wjk⋅oj)

  • 表达式二
    ∂ E ∂ w j k = − 2 ( t k − o k ) ⋅ sigmoid ( ∑ j w j k ⋅ o j ) ⋅ ( 1 − sigmoid ( ∑ j w j k ⋅ o j ) ) ⋅ o j \frac{\partial E}{\partial w_{jk}} = -2(t_k - o_k) \cdot \text{sigmoid}\left(\sum_j w_{jk} \cdot o_j\right) \cdot (1 - \text{sigmoid}\left(\sum_j w_{jk} \cdot o_j\right)) \cdot o_j ∂wjk∂E=−2(tk−ok)⋅sigmoid(j∑wjk⋅oj)⋅(1−sigmoid(j∑wjk⋅oj))⋅oj

这是一个关于神经网络中梯度计算的推导问题,主要运用了链式法则来进行求导推导,以下是详细过程:

已知条件

已知要对 ∂ E ∂ w j , k \frac{\partial E}{\partial w_{j,k}} ∂wj,k∂E 进行求导,表达式最初形式为:
∂ E ∂ w j , k = − 2 ( t k − o k ) ⋅ sigmoid ( ∑ j w j , k ⋅ o j ) ( 1 − sigmoid ( ∑ j w j , k ⋅ o j ) ) ⋅ ∂ ( ∑ j w j , k ⋅ o j ) ∂ w j , k \frac{\partial E}{\partial w_{j,k}} = -2(t_{k} - o_{k}) \cdot \text{sigmoid}(\sum_{j} w_{j,k} \cdot o_{j})(1 - \text{sigmoid}(\sum_{j} w_{j,k} \cdot o_{j})) \cdot \frac{\partial (\sum_{j} w_{j,k} \cdot o_{j})}{\partial w_{j,k}} ∂wj,k∂E=−2(tk−ok)⋅sigmoid(j∑wj,k⋅oj)(1−sigmoid(j∑wj,k⋅oj))⋅∂wj,k∂(∑jwj,k⋅oj)

这里 E E E 通常表示误差, t k t_{k} tk 是目标值, o k o_{k} ok 是输出值, w j , k w_{j,k} wj,k 是权重, o j o_{j} oj 是前一层神经元的输出, sigmoid \text{sigmoid} sigmoid 是激活函数。

推导过程

  1. 重点关注 ∂ ( ∑ j w j , k ⋅ o j ) ∂ w j , k \frac{\partial (\sum_{j} w_{j,k} \cdot o_{j})}{\partial w_{j,k}} ∂wj,k∂(∑jwj,k⋅oj) 这一项。
    • 根据求和求导的性质,对于 ∑ j w j , k ⋅ o j \sum_{j} w_{j,k} \cdot o_{j} ∑jwj,k⋅oj,因为只有当 j j j 取特定值时, w j , k w_{j,k} wj,k 才是变量(其他项的 w i , k w_{i,k} wi,k 中 i ≠ j i \neq j i=j 对于当前求导来说是常量)。
    • 那么 ∑ j w j , k ⋅ o j \sum_{j} w_{j,k} \cdot o_{j} ∑jwj,k⋅oj 展开后,对 w j , k w_{j,k} wj,k 求导时,除了包含 w j , k w_{j,k} wj,k 的这一项,其他项都为 0(因为它们相对于 w j , k w_{j,k} wj,k 是常数)。
    • 而包含 w j , k w_{j,k} wj,k 的这一项为 w j , k ⋅ o j w_{j,k} \cdot o_{j} wj,k⋅oj,根据求导公式 ( a x ) ′ = a (ax)^\prime = a (ax)′=a( a a a 为常数, x x x 为变量),对 w j , k ⋅ o j w_{j,k} \cdot o_{j} wj,k⋅oj 关于 w j , k w_{j,k} wj,k 求导,结果就是 o j o_{j} oj。
  2. 将 ∂ ( ∑ j w j , k ⋅ o j ) ∂ w j , k = o j \frac{\partial (\sum_{j} w_{j,k} \cdot o_{j})}{\partial w_{j,k}} = o_{j} ∂wj,k∂(∑jwj,k⋅oj)=oj 代入原式,就得到了第二个表达式:
    ∂ E ∂ w j , k = − 2 ( t k − o k ) ⋅ sigmoid ( ∑ j w j , k ⋅ o j ) ( 1 − sigmoid ( ∑ j w j , k ⋅ o j ) ) ⋅ o j \frac{\partial E}{\partial w_{j,k}} = -2(t_{k} - o_{k}) \cdot \text{sigmoid}(\sum_{j} w_{j,k} \cdot o_{j})(1 - \text{sigmoid}(\sum_{j} w_{j,k} \cdot o_{j})) \cdot o_{j} ∂wj,k∂E=−2(tk−ok)⋅sigmoid(j∑wj,k⋅oj)(1−sigmoid(j∑wj,k⋅oj))⋅oj

综上,通过对 ∂ ( ∑ j w j , k ⋅ o j ) ∂ w j , k \frac{\partial (\sum_{j} w_{j,k} \cdot o_{j})}{\partial w_{j,k}} ∂wj,k∂(∑jwj,k⋅oj) 进行求导并代入原式,就从第一个表达式推导出了第二个表达式。

相关推荐
谈笑也风生7 小时前
只出现一次的数字 II(一)
数据结构·算法·leetcode
蕓晨7 小时前
auto 自动类型推导以及注意事项
开发语言·c++·算法
印象编程7 小时前
数据挖掘 | 决策树ID3算法
机器学习·数据挖掘
mjhcsp8 小时前
C++ 递推与递归:两种算法思想的深度解析与实战
开发语言·c++·算法
_OP_CHEN8 小时前
算法基础篇:(三)基础算法之枚举:暴力美学的艺术,从穷举到高效优化
c++·算法·枚举·算法竞赛·acm竞赛·二进制枚举·普通枚举
高洁018 小时前
面向强化学习的状态空间建模:RSSM的介绍和PyTorch实现(3)
人工智能·python·深度学习·神经网络·transformer
m0_748248028 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
java·开发语言·c++·算法
天选之女wow8 小时前
【代码随想录算法训练营——Day61】图论——97.小明逛公园、127.骑士的攻击
算法·图论
im_AMBER8 小时前
Leetcode 47
数据结构·c++·笔记·学习·算法·leetcode
kyle~9 小时前
算法数学---差分数组(Difference Array)
java·开发语言·算法