從數學分析的角度來看Softmax

做者:無影隨想 
時間:2016年1月。 
出處:https://zhaokv.com/machine_learning/2016/01/softmax-calculous-perspective.html
聲明:版權全部,轉載請註明出處php

 

Softmax是機器學習中最經常使用的輸出函數之一,網上有不少資料介紹它是什麼以及它的用法,但卻沒有資料來介紹它背後的原理。本文首先簡單地介紹一下Softmax,而後着重從數學分析的角度來分析一下它背後的原理。html

 

分類問題是監督學習中最重要的問題之一,它試圖根據輸入$\bf{x}$來預測對應標籤$y$的機率。Softmax即是計算標籤機率的重要工具之一:app

${\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)}$是真實機率。htm

 

從收斂速度方面,對數最大似然與梯度降低在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上使用對數最大似然做爲損失函數,梯度降低狀況很是理想——預測錯誤時修正大,預測正確時修正小get

固然也有人在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與對數最大似然這一組合在梯度降低中有很好的修正速度;最後,由於平移不變性,咱們只須要關心模型不一樣類別輸出間的相對大小,不須要關心絕對大小。

相關文章
相關標籤/搜索