Softmax vs. SoftmaxWithLoss 推导过程
- Softmax vs. SoftmaxWithLoss
- Softmax function:
- Softmax Loss function(cross-entropy):
- SoftmaxWithLoss的推導
- 一些理解
- 可供學習的資料:
Softmax vs. SoftmaxWithLoss
Softmax function:
pj=ezj∑kezkpj=ezj∑kezk
其中, zj=ωTjx+bjzj=ωjTx+bj是一個向量,表示第 jj個樣本的線性預測。
Softmax Loss function(cross-entropy):
L=?∑jyjlogpjL=?∑jyjlog?pj
SoftmaxWithLoss的推導
首先求pjpj對zizi的導數:
當i=ji=j 時:
當i≠ji≠j 時:
接下來求LL對pjpj的導數:
最后根據鏈式法則求L對zizi的偏導數:
其中,∑kyk=1∑kyk=1
一些理解
整個推導過程,大概只是能理解,但是很多細節是有問題而且不規范,比如標量對向量求導等等。目前也沒有找到規范的寫法,暫時放出來這些供理解參考。
對softmax的理解:zizi是第ii個樣本的線性預測,是一個向量,通過softmax function將zizi中的值歸一化到[0,1][0,1]區間內。pipi也是一個向量,假設一個可能的預測結果是[0.01, 0.06, 0.05, 0, 0.9],表示模型認為這個樣本有0.90.9的可能性屬于第5個類別。
同時假設第ii個樣本在每一個類別上的標簽為[0, 0, 0, 1],說明該樣本屬于第5類。
**對softmax loss的理解:**softmaxloss 就是 softmax 加上一個交叉熵的目標。就是將預測結果取對數,然后乘上groundtruth。
CAFFE中的Softmax vs. SoftmaxWithLoss:簡單理解就是CAFFE中有Softmax和SoftmaxWithLoss,原因就是單獨使用Softmax得到樣本的預測結果(可以理解為在testing過程中?);而SoftmaxWithLoss層會計算loss并且反向傳播(可以理解為在training過程中?)。
因為 Deep Learning 的模型都是一層一層疊起來的結構,一個計算庫的主要工作是提供各種各樣的 layer,然后讓用戶可以選擇通過不同的方式來對各種 layer 組合得到一個網絡層級結構就可以了。比如用戶可能最終目的就是得到各個類別的概率似然值,這個時候就只需要一個 Softmax Layer,而不一定要進行 Multinomial Logistic Loss 操作;或者是用戶有通過其他什么方式已經得到了某種概率似然值,然后要做最大似然估計,此時則只需要后面的 Multinomial Logistic Loss 而不需要前面的 Softmax 操作。因此提供兩個不同的 Layer 結構比只提供一個合在一起的 Softmax-Loss Layer 要靈活許多。
這里涉及到一個數值穩定性(numerical stability)的問題:大概就是說在計算指數的時候如果數值過大會造成溢出。
例如:
那么如何解決溢出問題呢?可以在求 exponential 之前將xx的每一個元素減去xixi 的最大值。
這樣求 exponential 的時候會碰到的最大的數就是 0 了,不會發生overflow 的問題,但是如果其他數原本是正常范圍,現在全部被減去了一個非常大的數,于是都變成了絕對值非常大的負數,所以全部都會發生underflow,但是underflow 的時候得到的是 0,這其實是非常 meaningful 的近似值,而且后續的計算也不會出現奇怪的 NaN。
當然,總不能在計算的時候平白無故地減去一個什么數,但是在這個情況里是可以這么做的,因為最后的結果要做 normalization,很容易可以證明,這里對x 的所有元素同時減去一個任意數都是不會改變最終結果的——當然這只是形式上,或者說“數學上”,但是數值上我們已經看到了,會有很大的差別。
可供學習的資料:
Softmax vs. Softmax-Loss: Numerical Stability 講了Softmax和SoftmaxWithLoss 并且對數值穩定性做出了分析。
其他資料待補充……
總結
以上是生活随笔為你收集整理的Softmax vs. SoftmaxWithLoss 推导过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 校验json格式_不来学一下Spring
- 下一篇: Sublime Text2使用ctex