标签:frac zi 推导 ai 梯度 ak softmax partial sum
Softmax及其求导
正向传播
为了方便理解,若输入,输出只有3个变量(下面的普通性情况不太理解的可以带入此特殊情况帮助理解)。
- 输入:输出层神经元 Z = [z1, z2, z3],分类标签 Y = [y1,y2,y3](Y是one-hot标签,只有一个yi值为1,其他全为0)
- 输出:A = softmax(Z) = [a1,a2,a3]
更一般的,假设有n个神经元(或者说n类),softmax公式为:
ai=∑j=1nezjezi
损失函数采用交叉熵,公式为:
L=−i=1∑nyilnai
求导
先说结论,按向量形式表示∂Z∂L=A−Y
证明:在这里我们假设第k个神经元为正确标签,即在Y = [y1,y2,y3]中yk = 1,其他yi都为0。
首先求L对A的导数
∂ai∂L=∂ai∂−∑i=1nyilnai=−aiyi
再求L对Z的导数,这里需要注意,在正向传播时,每一个ai的计算都有所有的zj参加(请看softmax的公式的分母,是求和)
∂zi∂L=j=1∑naj∂L⋅∂zi∂aj
再次强调,因为每一个ai的计算都由所有的zj参加,换句话说,每一个zj都包含在每一个ai中,因此对zj求偏导要先对所有的ai求偏导。
而我们事先假设好了yk=1,其他yi都为0,因此只有∂ak∂L不为0,其他都为0,可以进一步将上式化简为:
∂zi∂L=j=1∑naj∂L⋅∂zi∂aj=∂ak∂L⋅∂zi∂ak
由此可见,我们的重点就是要求∂zi∂ak了。对于∂zi∂ak的求解,要分两种情况。
-
若i = k
∂zi∂ak=∂zk∂ak=∂zk∂(∑j=1nezjezk)=(∑j=1nezj)2ezk(∑j=1nezj)−(ezk)2=∑j=1nezjezk−(∑j=1nezjezk)2=ak−ak2=ak(1−ak)
-
若i = k
∂zi∂ak=∂zi∂(∑j=1nezjezk)=(∑j=1nezj)2−ezk⋅ezi=−∑j=1nezjezk⋅∑j=1nezjezi=−ak⋅ai
结合我们求出的∂ai∂L和∂zj∂ai,这里直接写出L对整个Z的导数,我们可得
∂Z∂L=j=1∑ni=1∑n∂aj∂L⋅∂zi∂aj=−ak1i=1∑n∂zi∂ak=−ak1⋅i=1,i=k∑n(−akai)−ak1⋅i=k∑(ai(1−ai))=i=1,i=k∑nai+i=k∑ai−1=i=1∑nai−1
我们又知道yk = 1,除了yk其他yi都等于0,因此上式的1可以写成yk,在进一步写成∑i=1nyi,带入上式
∂Z∂L=i=1∑nai−1=i=1∑nai−i=1∑nyi=A−Y
证明完毕~
标签:frac,zi,推导,ai,梯度,ak,softmax,partial,sum
来源: https://blog.csdn.net/weixin_43217928/article/details/104772424
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。