softmax求导的计算

本文参考于(https://zhuanlan.zhihu.com/p/105758059)
大家可以参考上述链接,更加详细。

  • softmax之前的输入为
    z=[z1,z2,...,zn]
  • 经过softmax之后,
    ai=ezik=1nezk
    可得a向量a=[ez1k=1nezk,ez2k=1nezk,...,eznk=1nezk]
  • 目标向量为
    y = [0,0,0,...,1,..0],假设yj=1其余均为0
  • 损失函数为交叉熵损失
    L=i=1nyilnai,又其他均为0,故可以简写成L=yjlnaj=lnaj

目标是标量L对向量z求导,LZ=Laaz

1 求La

L=lnaj得,loss只与a_j有关
La=[0,0,...,1aj,..0]

2 求az

a是一个向量,z是一个向量,az=[a1z1a1z2a1zna2z1a2z2a2znanz1anz2anzn]
由于la只有第j列不为0,我们只需要求az的第行,即ajz
LZ=1ajajZ,其中aj=ezji=1nezk

  • ij
    ajzi=0ezjezi(i=1nezk)2=ajai
    Lzi=1ajajz=1aj(ajai)=ai
  • i=j
    ajzj=ezji=1nezkezjezj(i=1nezk)2=ajaj2
    Lzj=(ajaj2)(1aj)=aj1

所以LZ=[a1,a2,...aj1,..an]=[a1,a2,,,,aj,...,an][0,0,...,1,..0]=ay

posted @   爱吃西瓜的菜鸟  阅读(337)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示