一文讀懂Softmax函數(shù)
轉(zhuǎn)載自 | 深度學(xué)習(xí)這件小事
作者 | LinT
鏈接 | https://zhuanlan.zhihu.com/p/79585726
Softmax函數(shù)幾乎是深度學(xué)習(xí)中的標(biāo)配了,在人工神經(jīng)網(wǎng)絡(luò)中,幾乎無(wú)處不可見(jiàn)softmax函數(shù)的身影。可以認(rèn)為softmax是arg max操作的一種平滑近似。
0. 引言
文章將softmax的用途總結(jié)為兩種:
分類:給定一系列類別,softmax可以給出某輸入被劃分到各個(gè)類別的概率分布。由于人工智能領(lǐng)域的許多問(wèn)題都可以抽象成分類問(wèn)題,所以softmax最廣泛的應(yīng)用當(dāng)屬分類;
尋址:由于softmax的輸出是一種概率分布的形式,可以用它來(lái)實(shí)現(xiàn)一種軟性的尋址。近幾年逐漸推廣的(軟性)注意力機(jī)制就可以認(rèn)為是一種軟性尋址的方式,根據(jù)各個(gè)鍵向量與查詢向量的相似度從各個(gè)值向量中獲取一定的“信息”。因此使用了softmax的注意力機(jī)制也可以用于外部記憶的訪問(wèn)。
不難發(fā)現(xiàn),在分類問(wèn)題中,我們也可以使用arg max來(lái)找到對(duì)應(yīng)的類別;在尋址問(wèn)題中,一個(gè)直觀的方法也是使用arg max尋找最相似的向量/記憶。但是arg max操作并不具有良好的數(shù)學(xué)性質(zhì),其不可導(dǎo)的性質(zhì)使其無(wú)法直接應(yīng)用基于梯度的優(yōu)化方法。因此在分類和尋址兩種用途中,常常都使用softmax函數(shù)替代arg max。
基于這兩種用途,softmax可以在人工神經(jīng)網(wǎng)絡(luò)中充當(dāng)什么樣的角色,就靠諸君的想象了。這篇文章中,我想簡(jiǎn)單、粗淺地探討一下softmax的一些性質(zhì)與變種。
1. 基本形式
給定一個(gè)
維向量,softmax函數(shù)將其映射為一個(gè)概率分布。標(biāo)準(zhǔn)的softmax函數(shù)
由下面的公式定義[1]:

其中,分母是配分函數(shù)(Partition Function),一般簡(jiǎn)記為
,表示所有狀態(tài)/值的總和,作為歸一化因子;分子是勢(shì)能函數(shù)(Potential Function)。
直觀上看,標(biāo)準(zhǔn)softmax函數(shù)用一個(gè)自然底數(shù)
先拉大了輸入值之間的差異,然后使用一個(gè)配分將其歸一化為一個(gè)概率分布。在分類問(wèn)題中,我們希望模型分配給正確的類別的概率接近1,其他的概率接近0,如果使用線性的歸一化方法,很難達(dá)到這種效果,而softmax有一個(gè)先拉開(kāi)差異再歸一化的“兩步走”戰(zhàn)略,因此在分類問(wèn)題中優(yōu)勢(shì)顯著。
事實(shí)上,在勢(shì)能函數(shù)和配分函數(shù)中,可以采用的底數(shù)不僅僅是自然底數(shù)
,也可以采用一些其他的底數(shù)。原則上,任意
都可以作為這里的底數(shù),越大的底數(shù)越能起到“拉開(kāi)差異”的作用。使用
作為底數(shù)時(shí),將產(chǎn)生以下的非標(biāo)準(zhǔn)softmax函數(shù)[1]:

其中
是一個(gè)實(shí)數(shù),正的
常常在機(jī)器學(xué)習(xí)中使用,在信息檢索的工作DSSM中,
就充當(dāng)了一個(gè)平滑因子[2];負(fù)的
常常在熱力學(xué)系統(tǒng)中使用,由于一些概率圖模型也參考了熱力學(xué)的原理,所以在概率圖模型中也常常能見(jiàn)到這種形式,如玻爾茲曼機(jī)。
2. 導(dǎo)數(shù)與優(yōu)化
標(biāo)準(zhǔn)softmax具有非常漂亮的導(dǎo)數(shù)形式:

這里導(dǎo)數(shù)的推導(dǎo)可以參考 @邱錫鵬 老師的《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》[3]附錄B.2.4的推導(dǎo)。
在分類問(wèn)題中,softmax函數(shù)常常和交叉熵?fù)p失函數(shù)一起使用,此時(shí)交叉熵?fù)p失函數(shù)
對(duì)
的導(dǎo)數(shù),由下面的形式給出:

其中
是真實(shí)標(biāo)簽對(duì)應(yīng)的one-hot編碼向量。這樣的導(dǎo)數(shù)在優(yōu)化時(shí)非常方便,實(shí)現(xiàn)起來(lái)也非常簡(jiǎn)單。
由于softmax函數(shù)先拉大了輸入向量元素之間的差異,然后才歸一化為一個(gè)概率分布,在應(yīng)用到分類問(wèn)題時(shí),它使得各個(gè)類別的概率差異比較顯著,最大值產(chǎn)生的概率更接近1,這樣輸出分布的形式更接近真實(shí)分布。
但是當(dāng)softmax函數(shù)被應(yīng)用到尋址時(shí),例如注意力機(jī)制中,softmax這個(gè)拉大元素間差異的過(guò)程可能會(huì)導(dǎo)致一定的問(wèn)題。假設(shè)輸入向量有唯一的最大值,如果將arg max操作定義為指示最大值的一個(gè)one-hot編碼函數(shù)
,在非標(biāo)準(zhǔn)softmax中有[1]:

* 這里的證明參見(jiàn)下方的補(bǔ)充(A)。
如果將非標(biāo)準(zhǔn)softmax的
融入到輸入中,則容易看出:當(dāng)輸入的方差/數(shù)量級(jí)較大時(shí),softmax的輸出會(huì)比較接近一個(gè)one-hot向量。根據(jù)式
,其導(dǎo)數(shù)的兩個(gè)項(xiàng)會(huì)比較接近,導(dǎo)致導(dǎo)數(shù)變成0矩陣。這也就導(dǎo)致了梯度彌散的問(wèn)題,不利于優(yōu)化,具體討論可以參考我先前的一篇回答[4]。這也是為什么注意力機(jī)制中常常使用縮放點(diǎn)積形式的注意力。
插一句題外話,開(kāi)篇提到softmax是arg max操作的一種平滑近似,而針對(duì)max操作的近似,其實(shí)有一個(gè)LogSumExp[5]操作(也叫作softmax),其導(dǎo)數(shù)形式就是softmax函數(shù),是不是很有趣呢?
3. Softmax的解釋
Softmax可以由三個(gè)不同的角度來(lái)解釋。從不同角度來(lái)看softmax函數(shù),可以對(duì)其應(yīng)用場(chǎng)景有更深刻的理解。
3.1 是arg max的一種平滑近似[1]
前面提到過(guò),softmax可以當(dāng)作arg max的一種平滑近似,與arg max操作中暴力地選出一個(gè)最大值(產(chǎn)生一個(gè)one-hot向量)不同,softmax將這種輸出作了一定的平滑,即將one-hot輸出中最大值對(duì)應(yīng)的1按輸入元素值的大小分配給其他位置。如式
所示,當(dāng)?shù)讛?shù)增大時(shí),softmax逐漸收斂為arg max操作。
在機(jī)器學(xué)習(xí)應(yīng)用中,我們往往不(直接)需要一個(gè)arg max的操作,這時(shí)候顯然數(shù)學(xué)性質(zhì)更好、更容易優(yōu)化的softmax就是我們的第一選擇。
3.2 歸一化產(chǎn)生一個(gè)概率分布
Softmax函數(shù)的輸出符合指數(shù)分布族的基本形式

其中
。
不難理解,softmax將輸入向量歸一化映射到一個(gè)類別概率分布,即
個(gè)類別上的概率分布(前文也有提到)。這也是為什么在深度學(xué)習(xí)中常常將softmax作為MLP的最后一層,并配合以交叉熵?fù)p失函數(shù)(對(duì)分布間差異的一種度量)。
3.3 產(chǎn)生概率無(wú)向圖的聯(lián)合概率
從概率圖模型的角度來(lái)看,softmax的這種形式可以理解為一個(gè)概率無(wú)向圖上的聯(lián)合概率。因此你會(huì)發(fā)現(xiàn),條件最大熵模型與softmax回歸模型實(shí)際上是一致的,諸如這樣的例子還有很多。由于概率圖模型很大程度上借用了一些熱力學(xué)系統(tǒng)的理論,因此也可以從物理系統(tǒng)的角度賦予softmax一定的內(nèi)涵。
4. Softmax的改進(jìn)與變種
Softmax函數(shù)是一種簡(jiǎn)單優(yōu)美的歸一化方法,但是它也有其固有的缺陷。直觀上看,當(dāng)應(yīng)用到實(shí)際問(wèn)題時(shí),其最大的問(wèn)題就在于配分函數(shù)的計(jì)算:當(dāng)類別的數(shù)量很多時(shí),配分函數(shù)的計(jì)算就成為了推斷和訓(xùn)練時(shí)的一個(gè)瓶頸。在自然語(yǔ)言處理中,類別常常對(duì)應(yīng)詞匯表中的所有詞匯,這個(gè)數(shù)量之大可見(jiàn)一斑,如果直接采用softmax計(jì)算方法,計(jì)算效率會(huì)非常低。因此一般采用一些方法改進(jìn)softmax函數(shù),加速模型訓(xùn)練。這里列舉幾個(gè)自然語(yǔ)言處理中的經(jīng)典改進(jìn)/變種[3]:
層次化softmax:將扁平的
分類問(wèn)題轉(zhuǎn)化為層次化的分類問(wèn)題。將詞匯表中的詞分組組織成(二叉)樹(shù)形結(jié)構(gòu),這樣一個(gè)
分類問(wèn)題,可以轉(zhuǎn)化為多層的二分類問(wèn)題,從而將求和的次數(shù)由
降低到了樹(shù)的深度級(jí)別。這里可以使用的一個(gè)方法是,按照詞匯的頻率求和編碼Huffman樹(shù),從而進(jìn)一步減少求和操作的計(jì)算次數(shù)。采樣方法:使用梯度上升優(yōu)化時(shí),softmax的導(dǎo)數(shù)涉及到一次配分函數(shù)的計(jì)算和一次所有詞匯上的softmax對(duì)詞匯的梯度的期望,這兩個(gè)計(jì)算都可以用采樣方法來(lái)近似,比如重要性采樣,這樣計(jì)算次數(shù)由
減少為采樣樣本數(shù)
的級(jí)別。這種方法的性能很受采樣策略的影響,以重要性采樣方法為例,其效果就依賴于提議分布的選取;采樣樣本數(shù)
的選取也需要考慮精度和訓(xùn)練效率的折衷。噪聲對(duì)比估計(jì)(NCE):將密度估計(jì)問(wèn)題轉(zhuǎn)換為兩類分類問(wèn)題(區(qū)分噪聲與真實(shí)數(shù)據(jù)),從而降低計(jì)算復(fù)雜度。其中配分函數(shù)被替換為了一個(gè)可學(xué)習(xí)的參數(shù),這樣NCE方法能促使輸入的未歸一化向量自己適應(yīng)為一個(gè)歸一化的、接近真實(shí)分布的分布向量。由于不再需要計(jì)算配分函數(shù),訓(xùn)練效率大大提升。這種對(duì)比學(xué)習(xí)思想在深度學(xué)習(xí)中也十分常見(jiàn)。
5. 總結(jié)
前面簡(jiǎn)單討論了softmax的性質(zhì)、解釋與變種,從現(xiàn)在來(lái)看,似乎softmax已經(jīng)是神經(jīng)網(wǎng)絡(luò)中的一根老油條了。Softmax還有哪些可以挖掘的地方呢?作為一個(gè)菜鳥(niǎo),只好先把這個(gè)問(wèn)題拋給諸位了。
A. 補(bǔ)充
突然覺(jué)得式
直接放進(jìn)來(lái)有一點(diǎn)太唐突了,覺(jué)得還是要簡(jiǎn)單證明一下,算是完善一下之前的回答。
假設(shè)固定輸入
不變,變化參數(shù)
,假設(shè)輸入
中有唯一的最大值
,則有:

不妨設(shè)
,可以分類討論一下:
1. 當(dāng)
,則
,此時(shí)

,則
,此時(shí)
,可以得到
取無(wú)窮大時(shí),非標(biāo)準(zhǔn)softmax的輸出收斂到一個(gè)one-hot向量,其中最大輸入對(duì)應(yīng)的輸出值是1,其他輸出是0。
維向量,其中
個(gè)最大值下標(biāo)對(duì)應(yīng)的輸出為
,其它輸出為0。這時(shí)類似上面的證明,很容易驗(yàn)證,當(dāng)
時(shí),softmax依然仍然收斂為arg max操作。參考鏈接:
https://en.wikipedia.org/wiki/Softmax_function
https://posenhuang.github.io/papers/cikm2013_DSSM_fullversion.pdf
https://nndl.github.io
https://www.zhihu.com/question/339723385/answer/782509914
雙一流高校研究生團(tuán)隊(duì)創(chuàng)建 ↓
專注于計(jì)算機(jī)視覺(jué)原創(chuàng)并分享相關(guān)知識(shí) ?
整理不易,點(diǎn)贊三連!
