看了刘建平老师的博客https://www.cnblogs.com/pinard/p/6422831.html对如下其中两个公式进行详细推导
损失函数为(大写字母为矩阵,小写字母字母加粗为列向量,其中WL的维度为ML∗ML−1,即第L层神经元个数乘以第L−1层神经元个数):
J(W,b,x,y)=12∥∥aL−y∥∥22=12∥∥σ(WLaL−1+bL)−y∥∥22
推导的两个公式如下:
∂J(W,b,x,y)∂WL=[(aL−y)⊙σ′(zL)](aL−1)T
∂J(W,b,x,y)∂bL=(aL−y)⊙σ′(zL)
用到两个链式求导法则如下(都来源于刘建平老师博客,链接在文章末尾)
当标量对n个向量进行链式求导,即y1→y2→…→yn→z1,链式求导法则如下:
∂z∂y1=(∂yn∂yn−1∂yn−1∂yn−2…∂y2∂y1)T∂z∂yn(1)
当z=f(y),y=Xa+b即X→y→z 其中X为矩阵,y为向量,链式求导结果如下:
∂z∂X=∂z∂yaT(2)
先推导第一个公式,考虑如下复合结构(注意最后所求的J是标量)
WL→zL→uL→J
其中J=12∥uL∥22
uL=aL−y=σ(zL)−y
zL=WLaL−1+bL
由公式(2)可得
∂J∂WL=∂J∂zL(aL−1)T
又有公式(1)可得
∂J∂zL=(∂uL∂zL)T∂J∂uL
其中后半部分比较简单
∂J∂uL=uL=aL−y
前半部分向量对向量求导,布局为雅克比矩阵形式,结果如下:
∂uL∂zL=∂(σ(zL)−y)∂zL=⎛⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜⎝∂σ(zL1)∂zL10⋯00∂σ(zL2)∂zL2⋯0⋮⋮⋱⋮00⋯∂σ(zLML)∂zLML⎞⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟⎠=diag(σ′(zL))
得到的矩阵为对称矩阵,带入到上式,结果为:
∂J∂zL=diag(σ′(zL))(aL−y)=σ′(zL)⊙(aL−y)=(aL−y)⊙σ′(zL)
故
∂J∂WL=[(aL−y)⊙σ′(zL)](aL−1)T
第二个式子推导就很简单,由公式(1)可得
∂J∂bL=(∂zL∂bL)T∂J∂zL
前半部分为单位矩阵E后半部分求第一个式子时已经求过,故
∂J∂bL=(aL−y)⊙σ′(zL)
参考博客(矩阵向量求导的知识):
求导定义与布局
矩阵向量求导之定义法
矩阵向量求导之微分法法
矩阵向量求导链式法则
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异