<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Softmax和Cross-entropy是什么關(guān)系?

          共 4046字,需瀏覽 9分鐘

           ·

          2022-07-22 10:39

          點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          來(lái)自 | 知乎   作者 | 董鑫
          https://www.zhihu.com/question/294679135/answer/885285177
          本文僅作學(xué)術(shù)分享,著作權(quán)歸作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除


          softmax 雖然簡(jiǎn)單,但是其實(shí)這里面有非常的多細(xì)節(jié)值得一說(shuō)。

          我們挨個(gè)捋一捋。 


             1. 什么是 Softmax?


          首先,softmax 的作用是把 一個(gè)序列,變成概率。



          他能夠保證:
          1. 所有的值都是 [0, 1] 之間的(因?yàn)楦怕时仨毷?[0, 1])

          2. 所有的值加起來(lái)等于 1


          從概率的角度解釋 softmax 的話,就是



             2. 文檔里面跟 Softmax 有關(guān)的坑


          這里穿插一個(gè)“小坑”,很多deep learning frameworks的 文檔 里面 (PyTorch,TensorFlow)是這樣描述 softmax 的,

          take logits and produce probabilities

          很明顯,這里面的 logits 就是 全連接層(經(jīng)過(guò)或者不經(jīng)過(guò) activation都可以)的輸出, probability 就是 softmax 的輸出結(jié)果。這里  logits 有些地方還稱(chēng)之為 unscaled log probabilities。這個(gè)就很意思了,unscaled probability可以理解,那又為什么 全連接層直接出來(lái)結(jié)果會(huì)和 log 有關(guān)系呢?



          原因有兩個(gè):

          1. 因?yàn)?全連接層 出來(lái)的結(jié)果,其實(shí)是無(wú)界的(有正有負(fù)),這個(gè)跟概率的定義不一致,但是你如果他看成 概率的 log,就可以理解了。

          2. softmax 的作用,我們都知道是 normalize probability。在 softmax 里面,輸入  都是在指數(shù)上的 ,所有把 想成 log of probability 也就順理成章了。


             3. Softmax 就是 Soft 版本的 ArgMax
           


          好的,我們把話題拉回到 softmax。

          softmax,顧名思義就是 soft 版本的 argmax。我們來(lái)看一下為什么?

          舉個(gè)栗子,假如 softmax 的輸入是:


          softmax 的結(jié)果是:


          我們稍微改變一下輸入,把 3 改大一點(diǎn),變成 5,輸入是


          softmax 的結(jié)果是:


          可見(jiàn) softmax 是一種非常明顯的 “馬太效應(yīng)”:強(qiáng)(大)的更強(qiáng)(大),弱(小)的更弱(小)。假如你要選一個(gè)最大的數(shù)出來(lái),這個(gè)其實(shí)就是叫 hardmax。那么 softmax 呢,其實(shí)真的就是 soft 版本的 max,以一定的概率選一個(gè)最大值出來(lái)。在hardmax中,真正最大的那個(gè)數(shù),一定是以1(100%) 的概率被選出來(lái),其他的值根本一點(diǎn)機(jī)會(huì)沒(méi)有。但是在 softmax 中,所有的值都有機(jī)會(huì)被作為最大值選出來(lái)。只不過(guò),由于 softmax 的 “馬太效應(yīng)”,次大的數(shù),即使跟真正最大的那個(gè)數(shù)差別非常少,在概率上跟真正最大的數(shù)相比也小了很多。

          所以,前面說(shuō),“softmax 的作用是把 一個(gè)序列,變成概率。” 這個(gè)概率不是別的,而是被選為 max 的概率。

          這種 soft 版本的 max 在很多地方有用的上。因?yàn)?hard 版本的 max 好是好,但是有很?chē)?yán)重的梯度問(wèn)題,求最大值這個(gè)函數(shù)本身的梯度是非常非常稀疏的(比如神經(jīng)網(wǎng)絡(luò)中的 max pooling),經(jīng)過(guò)hardmax之后,只有被選中的那個(gè)變量上面才有梯度,其他都是沒(méi)有梯度。這對(duì)于一些任務(wù)(比如文本生成等)來(lái)說(shuō)幾乎是不可接受的。所以要么用 hard max 的變種,比如Gumbel


          Categorical Reparameterization with Gumbel-Softmax
          鏈接:https://arxiv.org/abs/1611.01144

          亦或是 ARSM

          ARSM: Augment-REINFORCE-Swap-Merge Estimator for Gradient Backpropagation Through Categorical Variable
          鏈接:http://proceedings.mlr.press/v97/yin19c.html


          ,要么就直接 softmax。


             4. Softmax 的實(shí)現(xiàn)以及數(shù)值穩(wěn)定性
           


          softmax 的代碼實(shí)現(xiàn)看似是比較簡(jiǎn)單的,直接套上面的公式就好

          def softmax(x):    """Compute the softmax of vector x."""    exps = np.exp(x)    return exps / np.sum(exps)


          但是這種方法非常的不穩(wěn)定。因?yàn)檫@種方法要算指數(shù),只要你的輸入稍微大一點(diǎn),比如:


          分母上就是


          很明顯,在計(jì)算上一定會(huì)溢出。解決方法也比較簡(jiǎn)單,就是我們?cè)诜肿臃帜干隙汲松弦粋€(gè)系數(shù),減小數(shù)值大小,同時(shí)保證整體還是對(duì)的



          把常數(shù) C 吸收進(jìn)指數(shù)里面



          這里的D是可以隨便選的,一般可以選成



          具體實(shí)現(xiàn)可以寫(xiě)成這樣
          def stablesoftmax(x):    """Compute the softmax of vector x in a numerically stable way."""    shiftx = x - np.max(x)    exps = np.exp(shiftx)    return exps / np.sum(exps)


          這樣一種實(shí)現(xiàn)數(shù)值穩(wěn)定性已經(jīng)好了很多,但是仍然會(huì)有數(shù)值穩(wěn)定性的問(wèn)題。比如輸入的值差別過(guò)大的時(shí)候,比如


          這種情況即使用了上面的方法,可能還是報(bào) NaN 的錯(cuò)誤。但是這個(gè)就是數(shù)學(xué)本身的問(wèn)題了,大家使用的時(shí)候稍微注意下。

          一種可能的替代的方案是使用 LogSoftmax (然后再求 exp),數(shù)值穩(wěn)定性比 softmax 好一些。
          可以看到LogSoftmax省了一個(gè)指數(shù)計(jì)算,省了一個(gè)除法,數(shù)值上相對(duì)穩(wěn)定一些。另外,其實(shí) Softmax_Cross_Entropy 里面也是這么實(shí)現(xiàn)的

             5. Softmax 的梯度


          下面我們來(lái)看一下 softmax 的梯度問(wèn)題。整個(gè) softmax 里面的操作都是可微的,所以求梯度就非常簡(jiǎn)單了,就是基礎(chǔ)的求導(dǎo)公式,這里就直接放結(jié)果了。



          所以說(shuō),如果某個(gè)變量做完 softmax 之后很小,比如 ,那么他的梯度也是非常小的,幾乎得不到任何梯度。有些時(shí)候,這會(huì)造成梯度非常的稀疏,優(yōu)化不動(dòng)。


             6. Softmax 和 Cross-Entropy 的關(guān)系


          先說(shuō)結(jié)論,

          softmax 和 cross-entropy 本來(lái)太大的關(guān)系,只是把兩個(gè)放在一起實(shí)現(xiàn)的話,算起來(lái)更快,也更數(shù)值穩(wěn)定。

          cross-entropy 不是機(jī)器學(xué)習(xí)獨(dú)有的概念,本質(zhì)上是用來(lái)衡量?jī)蓚€(gè)概率分布的相似性的。簡(jiǎn)單理解(只是簡(jiǎn)單理解!)就是這樣,

          如果有兩組變量:


          如果你直接求 L2 距離,兩個(gè)距離就很大了,但是你對(duì)這倆做 cross entropy,那么距離就是0。所以 cross-entropy 其實(shí)是更“靈活”一些。

          那么我們知道了,cross entropy 是用來(lái)衡量?jī)蓚€(gè)概率分布之間的距離的,softmax能把一切轉(zhuǎn)換成概率分布,那么自然二者經(jīng)常在一起使用。但是你只需要簡(jiǎn)單推導(dǎo)一下,就會(huì)發(fā)現(xiàn),softmax + cross entropy 就好像

          “往東走五米,再往西走十米”,

          我們?yōu)槭裁床恢苯?/span>

          “往西走五米”呢?

          cross entropy 的公式是



          這里的 就是我們前面說(shuō)的 LogSoftmax。這玩意算起來(lái)比 softmax 好算,數(shù)值穩(wěn)定還好一點(diǎn),為啥不直接算他呢?

          所以說(shuō),這有了 PyTorch 里面的 torch.nn.CrossEntropyLoss (輸入是我們前面講的 logits,也就是 全連接直接出來(lái)的東西)。這個(gè) CrossEntropyLoss 其實(shí)就是等于 torch.nn.LogSoftmax + torch.nn.NLLLoss。

          好消息!

          小白學(xué)視覺(jué)知識(shí)星球

          開(kāi)始面向外開(kāi)放啦??????




          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费看成人747474九号视频在线观看 | 亚洲无吗中文字幕 | 操逼片网址 | 足交久久 | 免费看国产黄色电影 |