softmax with cross-entropy loss求导(转载+细节整理)
softmax 函數(shù)
 softmax(柔性最大值)函數(shù),一般在神經(jīng)網(wǎng)絡(luò)中, softmax可以作為分類任務(wù)的輸出層。
其實(shí)可以認(rèn)為softmax輸出的是幾個(gè)類別選擇的概率,比如我有一個(gè)分類任務(wù),要分為三個(gè)類,softmax函數(shù)可以根據(jù)它們相對的大小,輸出三個(gè)類別選取的概率,并且概率和為1。
即總共有kkk類,必有:
 ∑k=1Cyi=1\sum_{k=1}^Cy_i=1k=1∑C?yi?=1
為了方便下面的推導(dǎo),先來個(gè)圖示:
 
 ----------------------------------------
 softmax函數(shù)的公式是這種形式:
 ai=ezi∑kezka_i=\frac{e^{z_i}}{\sum_k^{e^{z_k}}}ai?=∑kezk??ezi??
其中:
 wijw_{ij}wij?:第iii個(gè)神經(jīng)元的第jjj個(gè)權(quán)重,
 b:偏移值。
 ziz_izi?:該網(wǎng)絡(luò)的第iii個(gè)輸出。
在ziz_izi?后面施加softmax函數(shù),得到aia_iai?
損失函數(shù)使用Cross_Entropy
 ----------------------------------------
 J=?∑iyilnaiJ=-\sum_i{y_i}ln\ a_iJ=?i∑?yi?ln?ai?
 其中:
 aia_iai?:模型預(yù)測值
 yiy_iyi?:預(yù)期數(shù)值
當(dāng)二分類時(shí),有
1N∑n=1N[pnlogqn+(1?pn)log(1?qn)]\frac{1}{N}\sum_{n=1}^N[p_nlogq_n+(1-p_n)log(1-q_n)]N1?n=1∑N?[pn?logqn?+(1?pn?)log(1?qn?)]
 其中:
 NNN:數(shù)據(jù)集的總數(shù)
 pnp_npn?:真實(shí)分布
 qnq_nqn?:預(yù)測分布
 ----------------------------------------------
這篇博客中,我們的目標(biāo)函數(shù)是:
 ?J?zi\frac{\partial J}{\partial z_i}?zi??J?
 =∑j(?Jj?aj?aj?zi)=\sum_j(\frac{\partial J_j}{\partial a_j}\frac{\partial a_j}{\partial z_i})=j∑?(?aj??Jj???zi??aj??)
其中:
 ?Jj?aj\frac{\partial J_j}{\partial a_j}?aj??Jj??
 =??yj?lnaj?aj=-\frac{-y_j·ln a_j}{\partial a_j}=??aj??yj??lnaj??
 =?yj1aj=-y_j\frac{1}{a_j}=?yj?aj?1?
?aj?zi\frac{\partial a_j}{\partial z_i}?zi??aj??
 =?[ezj∑kezk]?zi=\frac{\partial[ \frac{e^{z_j}}{ \sum_k e^{z_k} }]}{\partial z_i}=?zi??[∑k?ezk?ezj??]?
下面分情況,這里之所以要分情況是求導(dǎo)的規(guī)律來決定的:
?[ezj∑kezk]?zi(1)\frac{\partial[ \frac{e^{z_j}}{ \sum_k e^{z_k} }]}{\partial z_i}(1)?zi??[∑k?ezk?ezj??]?(1)
 為了處理式(1),根據(jù):
 f(x)=g(x)h(x)f(x)=\frac{g(x)}{h(x)}f(x)=h(x)g(x)?
 f′(x)=g′(x)h(x)?g(x)h′(x)∣h(x)∣2f'(x)=\frac{g'(x)h(x)-g(x)h'(x)}{|h(x)|^2}f′(x)=∣h(x)∣2g′(x)h(x)?g(x)h′(x)?
所以這里:
 g(x)=ezjg(x)=e^{z_j}g(x)=ezj?
 h(x)=∑kezkh(x)={\sum_k e^{z_k}}h(x)=∑k?ezk?
①i=j時(shí),g′(x)=ezj,h′(x)=ezji=j時(shí),g'(x)=e^{z_j},h'(x)=e^{z_j}i=j時(shí),g′(x)=ezj?,h′(x)=ezj?
 ②iii≠j時(shí),g′(x)=0,h′(x)=ezj時(shí),g'(x)=0,h'(x)=e^{z_j}時(shí),g′(x)=0,h′(x)=ezj?
由此處理式(1)得到:
 ①i=j時(shí)i=j時(shí)i=j時(shí)
 ?aj?zi=ezi∑kezk?(ezi)2[∑kezk]2=ai?ai2\frac{\partial a_j}{\partial z_i}=\frac{e^{z_i}{\sum_k e^{z_k}}-(e^{z_i})^2}{[ { \sum_k e^{z_k} }]^2}=a_i-a_i^2?zi??aj??=[∑k?ezk?]2ezi?∑k?ezk??(ezi?)2?=ai??ai2?
①iii≠j時(shí)j時(shí)j時(shí)
 ?aj?zi=?(ezj)(ezi)[∑kezk]2=?aj?ai\frac{\partial a_j}{\partial z_i}=\frac{-(e^{z_j})(e^{z_i})}{[ { \sum_k e^{z_k} }]^2}=-a_j·a_i?zi??aj??=[∑k?ezk?]2?(ezj?)(ezi?)?=?aj??ai?
總結(jié)下:
 ?J?zi\frac{\partial J}{\partial z_i}?zi??J?
 =∑j(?Jj?aj?aj?zi)=\sum_j (\frac{\partial J_j}{\partial a_j} \frac{\partial a_j}{\partial z_i})=j∑?(?aj??Jj???zi??aj??)
 =∑i=j[(?yjaj)(ai?ai2)]+∑i≠j[(?yjaj)(?ajai)]=\sum_{i=j}[(\frac{-y_j}{a_j})(a_i-a_i^2)]+\sum_{i \ne j}[(\frac{-y_j}{a_j})(-a_ja_i)]=i=j∑?[(aj??yj??)(ai??ai2?)]+i??=j∑?[(aj??yj??)(?aj?ai?)]
 =?yi(1?ai)+∑i≠j[yjai]=-y_i(1-a_i)+\sum_{i \ne j}[y_ja_i]=?yi?(1?ai?)+i??=j∑?[yj?ai?]
 =?yi+ai∑jyj=-y_i+a_i\sum_jy_j=?yi?+ai?j∑?yj?
 ∵∑jyj=1(因?yàn)樗星闆r的概率和為1)∵ \sum_j y_j=1(因?yàn)樗星闆r的概率和為1)∵j∑?yj?=1(因為所有情況的概率和為1)
 ∴原式=?yi+ai∴原式=-y_i+a_i∴原式=?yi?+ai?
參考鏈接:
 https://blog.csdn.net/Charel_CHEN/article/details/81266838
 https://blog.csdn.net/qian99/article/details/78046329
 https://zhuanlan.zhihu.com/p/27223959
 http://shuokay.com/2016/07/20/softmax-loss/
總結(jié)
以上是生活随笔為你收集整理的softmax with cross-entropy loss求导(转载+细节整理)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 关于softmax loss这个概念
 - 下一篇: 《深度学习入门:基于Python的理论与