Softmax和Cross-entropy是什么關(guān)系?
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)

1. 什么是 Softmax?


所有的值都是 [0, 1] 之間的(因為概率必須是 [0, 1])
所有的值加起來等于 1

2. 文檔里面跟 Softmax 有關(guān)的坑
logits 就是 全連接層(經(jīng)過或者不經(jīng)過 activation都可以)的輸出, probability 就是 softmax 的輸出結(jié)果。這里 logits 有些地方還稱之為 unscaled log probabilities。這個就很意思了,unscaled probability可以理解,那又為什么 全連接層直接出來結(jié)果會和 log 有關(guān)系呢?
原因有兩個:
因為 全連接層 出來的結(jié)果,其實是無界的(有正有負(fù)),這個跟概率的定義不一致,但是你如果他看成 概率的 log,就可以理解了。
softmax 的作用,我們都知道是 normalize probability。在 softmax 里面,輸入
都是在指數(shù)上的
,所有把
想成 log of probability 也就順理成章了。
3. Softmax 就是 Soft 版本的 ArgMax
舉個栗子,假如 softmax 的輸入是:
softmax 的結(jié)果是:
我們稍微改變一下輸入,把 3 改大一點,變成 5,輸入是
softmax 的結(jié)果是:
這種 soft 版本的 max 在很多地方有用的上。因為 hard 版本的 max 好是好,但是有很嚴(yán)重的梯度問題,求最大值這個函數(shù)本身的梯度是非常非常稀疏的(比如神經(jīng)網(wǎng)絡(luò)中的 max pooling),經(jīng)過hardmax之后,只有被選中的那個變量上面才有梯度,其他都是沒有梯度。這對于一些任務(wù)(比如文本生成等)來說幾乎是不可接受的。所以要么用 hard max 的變種,比如Gumbel,
,要么就直接 softmax。
4. Softmax 的實現(xiàn)以及數(shù)值穩(wěn)定性
softmax 的代碼實現(xiàn)看似是比較簡單的,直接套上面的公式就好
def softmax(x):"""Compute the softmax of vector x."""exps = np.exp(x)return exps / np.sum(exps)




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)
這樣一種實現(xiàn)數(shù)值穩(wěn)定性已經(jīng)好了很多,但是仍然會有數(shù)值穩(wěn)定性的問題。比如輸入的值差別過大的時候,比如
NaN 的錯誤。但是這個就是數(shù)學(xué)本身的問題了,大家使用的時候稍微注意下。LogSoftmax (然后再求 exp),數(shù)值穩(wěn)定性比 softmax 好一些。
,LogSoftmax省了一個指數(shù)計算,省了一個除法,數(shù)值上相對穩(wěn)定一些。另外,其實 Softmax_Cross_Entropy 里面也是這么實現(xiàn)的 5. Softmax 的梯度


,那么他的梯度也是非常小的,幾乎得不到任何梯度。有些時候,這會造成梯度非常的稀疏,優(yōu)化不動。
6. Softmax 和 Cross-Entropy 的關(guān)系
那么我們知道了,cross entropy 是用來衡量兩個概率分布之間的距離的,softmax能把一切轉(zhuǎn)換成概率分布,那么自然二者經(jīng)常在一起使用。但是你只需要簡單推導(dǎo)一下,就會發(fā)現(xiàn),softmax + cross entropy 就好像
我們?yōu)槭裁床恢苯?/span>

就是我們前面說的 LogSoftmax。這玩意算起來比 softmax 好算,數(shù)值穩(wěn)定還好一點,為啥不直接算他呢?好消息!
小白學(xué)視覺知識星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程 在「小白學(xué)視覺」公眾號后臺回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實戰(zhàn)項目52講 在「小白學(xué)視覺」公眾號后臺回復(fù):Python視覺實戰(zhàn)項目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機(jī)視覺。 下載3:OpenCV實戰(zhàn)項目20講 在「小白學(xué)視覺」公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。 交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~

