日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Softmax vs. SoftmaxWithLoss 推导过程

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Softmax vs. SoftmaxWithLoss 推导过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • Softmax vs. SoftmaxWithLoss
    • Softmax function:
    • Softmax Loss function(cross-entropy):
  • SoftmaxWithLoss的推導
  • 一些理解
  • 可供學習的資料:

Softmax vs. SoftmaxWithLoss

Softmax function:

pj=ezjkezkpj=ezj∑kezk
其中, zj=ωTjx+bjzj=ωjTx+bj是一個向量,表示第 jj個樣本的線性預測。

Softmax Loss function(cross-entropy):

L=?jyjlogpjL=?∑jyjlog?pj

SoftmaxWithLoss的推導

  • 首先求pjpjzizi的導數:
    i=ji=j 時:

    ?pj?zi=??zi(ezjkezk)=ezjjezk?ezjezi[kezk]2=pj(1?pj),i=j?pj?zi=??zi(ezj∑kezk)=ezj∑jezk?ezjezi[∑kezk]2=pj(1?pj),i=j

    iji≠j 時:

    ?pj?zi=??zi(ezjkezk)=0×jezk?ezjezi[kezk]2=?pipj,ij.?pj?zi=??zi(ezj∑kezk)=0×∑jezk?ezjezi[∑kezk]2=?pipj,i≠j.

  • 接下來求LLpjpj的導數:

    ?L?pj=?jyj1pj?L?pj=?∑jyj1pj

  • 最后根據鏈式法則求L對zizi的偏導數:

    ?L?zi=?L?pj?pj?zi=?jyj1pj?pj?zi=?yi(1?pi)?kiyk1pk(?pkpi)=?yi(1?pi)+kiyk(pi)=?yi+yipi+kiyk(pi)=pi(kyk)?yi=pi?yi?L?zi=?L?pj?pj?zi=?∑jyj1pj?pj?zi=?yi(1?pi)?∑k≠iyk1pk(?pkpi)=?yi(1?pi)+∑k≠iyk(pi)=?yi+yipi+∑k≠iyk(pi)=pi(∑kyk)?yi=pi?yi
    其中,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 推导过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。