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

1. 什么是 Softmax?


所有的值都是 [0, 1] 之間的(因?yàn)楦怕时仨毷?[0, 1])
所有的值加起來(lái)等于 1

2. 文檔里面跟 Softmax 有關(guān)的坑
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è):
因?yàn)?全連接層 出來(lái)的結(jié)果,其實(shí)是無(wú)界的(有正有負(fù)),這個(gè)跟概率的定義不一致,但是你如果他看成 概率的 log,就可以理解了。
softmax 的作用,我們都知道是 normalize probability。在 softmax 里面,輸入
都是在指數(shù)上的
,所有把
想成 log of probability 也就順理成章了。
3. Softmax 就是 Soft 版本的 ArgMax
舉個(gè)栗子,假如 softmax 的輸入是:
softmax 的結(jié)果是:
我們稍微改變一下輸入,把 3 改大一點(diǎn),變成 5,輸入是
softmax 的結(jié)果是:
這種 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,
,要么就直接 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)




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í)候,比如
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 的梯度


,那么他的梯度也是非常小的,幾乎得不到任何梯度。有些時(shí)候,這會(huì)造成梯度非常的稀疏,優(yōu)化不動(dòng)。
6. Softmax 和 Cross-Entropy 的關(guān)系
那么我們知道了,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>

就是我們前面說(shuō)的 LogSoftmax。這玩意算起來(lái)比 softmax 好算,數(shù)值穩(wěn)定還好一點(diǎn),為啥不直接算他呢?好消息!
小白學(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)出群,謝謝理解~

