Softmax是機器學習中最常用的輸出函數之一,網上有很多資料介紹它是什麼以及它的用法,但卻沒有資料來介紹它背後的原理。本文首先簡單地介紹一下Softmax,然後著重從數學分析的角度來分析一下它背後的原理。
作者:無影隨想
時間:2016年1月。
出處:http://www.zhaokv.com/2016/01/softmax.html
聲明:版權所有,轉載請聯繫作者並註明出處
Softmax是機器學習中最常用的輸出函數之一,網上有很多資料介紹它是什麼以及它的用法,但卻沒有資料來介紹它背後的原理。本文首先簡單地介紹一下Softmax,然後著重從數學分析的角度來分析一下它背後的原理。
分類問題是監督學習中最重要的問題之一,它試圖根據輸入$\bf{x}$來預測對應標簽$y$的概率。Softmax便是計算標簽概率的重要工具之一:
${\bf p}=\rm{softmax}({\bf a})\Leftrightarrow p_i=\frac{\exp({a_i})}{\sum_j\exp({a_j})}$
其中$a_i$是模型對於第$i$個分類的輸出。接下來簡單地證明一下:通過對數最大似然以及梯度下降方法可以使$p_i$逼近第$i$個分類的真實概率。對數最大似然中的損失函數為$L_{NLL}({\bf p},y)=-\log p_y$,對它關於${\bf a}$求導得:
$\frac{\partial}{\partial a_k}L_{NLL}({\bf p},y)=\frac{\partial}{\partial a_k}(-\log p_y)=\frac{\partial}{\partial a_k}(-a_y+\log\sum_j e^{a_j})$
$=-{\bf 1}_{y=k}+\frac{e^{a_k}}{\sum_j{e^{a_j}}}=p_k-{\bf 1}_{y=k}$
即$\frac{\partial}{\partial {\bf a}}L_{NLL}({\bf p},y)=({\bf p}-{\bf e}_y)$,其中${\bf e}_y=[0,\cdots,0,1,0,\cdots,0]$是一個向量,除了位置$y$為1之外全是0。相同${\bf x}$的樣本對應相同的${\bf a}$,我們可以看到,隨著越來越多樣本參與梯度下降,$p_i$會逼近第$i$個分類的真實概率,即${\bf p}=\mathbb{E}[{\bf e}_{y}|{\bf x}]$,因為$\lim\limits_{N\to\infty}\frac{1}{N}\sum\limits_{i=1}^N({\bf p}-{\bf e}_y^{(i)})=0$,其中$\lim\limits_{N\to\infty}\frac{1}{N}\sum\limits_{i=1}^N{\bf e}_y^{(i)}$是真實概率。
從收斂速度方面,對數最大似然與梯度下降在Softmax身上簡直是絕配。對於一個輸入為${\bf x}$的樣本,假設它的真實分類是$i$,對於模型的第$j(j\neq i)$個輸出有$\frac{\partial}{\partial a_j}L_{NLL}({\bf p}, y)=p_j$,如果$p_j\approx 0$(即模型認為不太可能是分類$j$,預測結果與實際相符),梯度接近0,會進行很小的修正,如果$p_j\approx 1$(即模型非常有信心地預測是分類$j$,預測結果與實際相反),梯度接近1,會進行很大的修正。另外,對於模型的第$i$個輸出有$\frac{\partial}{\partial a_i}L_{NLL}({\bf p}, y)=1-p_i$,如果$p_i\approx 0$(即模型認為不太可能是分類$i$,預測結果與實際相反),梯度接近1,會進行很大的修正,如果$p_i\approx 1$(即模型非常有信心地預測是分類$i$,預測結果與實際相符),梯度接近0,會進行很小的修正。綜上,在Softmax上使用對數最大似然作為損失函數,梯度下降情況非常理想——預測錯誤時修正大,預測正確時修正小。
當然也有人在Softmax上嘗試其他損失函數,比如最有名的最小二乘。結果是兩者並不搭,因為在最小二乘下模型如果預測完全錯誤時修正也會非常小。設${\bf y}={\bf e}_i$(註意這裡的${\bf y}$是黑體),對最小二乘$L_2({\bf p}({\bf a}),{\bf y})=||{\bf p}({\bf a})-{\bf y}||^2$關於$a_i$(假設$i$是正確類別)求導得
$\frac{\partial}{\partial a_i}L_2({\bf p}({\bf a}),{\bf y})=\frac{\partial{L_2({\bf p}({\bf a}), {\bf y})}}{\partial {\bf p}({\bf a})}\frac{\partial {\bf p}({\bf a})}{\partial a_i}$
$=\sum_{j\neq i}2(p_j-{\bf y}_j)p_j(0-p_i)+2(p_i-{\bf y}_i)p_i(1-p_i)$
如果對於正確類別$i$模型的預測是$p_i\approx 0$(與實際強烈不符),顯然有$\frac{\partial}{\partial a_i}L_2({\bf p}({\bf a}),{\bf y})\approx 0$,也就是說梯度下降對模型幾乎不修正,可見Softmax搭配最小二乘的梯度下降情況並不好。
PS:Softmax還有一個重要性質是平移不變性,即${\rm softmax}({\bf a})={\rm softmax}({\bf a}+b)$,因為$\frac{\exp({a_j+b})}{\sum_k\exp({a_k+b})}=\frac{\exp({a_j})}{\sum_k\exp({a_k})}$。由於平移不變性的存在,模型只需要學到${\bf a}$中元素的相對大小,而不需要學到絕對大小。另外,我們還可以根據${\rm softmax}({\bf a})={\rm softmax}({\bf a}-\max_ia_i)$有效地減少計算誤差。
綜上所述,首先,Softmax的確可以表示概率,且隨著樣本的增多通過對數最大似然與梯度下降可以無限逼近真實概率值;其次,Softmax與對數最大似然這一組合在梯度下降中有很好的修正速度;最後,因為平移不變性,我們只需要關心模型不同類別輸出間的相對大小,不需要關心絕對大小。