softmax的基本概念
-
分類問題
一個簡單的圖像分類問題,輸入圖像的高和寬均爲2像素,色彩爲灰度。
圖像中的4像素分別記爲x1,x2,x3,x4。
假設真實標籤爲狗、貓或者雞,這些標籤對應的離散值爲y1,y2,y3。
我們通常使用離散的數值來表示類別,例如y1=1,y2=2,y3=3。
-
權重矢量
o1=x1w11+x2w21+x3w31+x4w41+b1
o2=x1w12+x2w22+x3w32+x4w42+b2
o3=x1w13+x2w23+x3w33+x4w43+b3
- 神經網絡圖
下圖用神經網絡圖描繪了上面的計算。softmax迴歸同線性迴歸一樣,也是一個單層神經網絡。由於每個輸出o1,o2,o3的計算都要依賴於所有的輸入x1,x2,x3,x4,softmax迴歸的輸出層也是一個全連接層。
softmax回歸是一個單層神經網絡
既然分類問題需要得到離散的預測輸出,一個簡單的辦法是將輸出值oi當作預測類別是i的置信度,並將值最大的輸出所對應的類作爲預測輸出,即輸出 iargmaxoi。例如,如果o1,o2,o3分別爲0.1,10,0.1,由於o2最大,那麼預測類別爲2,其代表貓。
- 輸出問題
直接使用輸出層的輸出有兩個問題:
- 一方面,由於輸出層的輸出值的範圍不確定,我們難以直觀上判斷這些值的意義。例如,剛纔舉的例子中的輸出值10表示“很置信”圖像類別爲貓,因爲該輸出值是其他兩類的輸出值的100倍。但如果o1=o3=103,那麼輸出值10卻又表示圖像類別爲貓的概率很低。
- 另一方面,由於真實標籤是離散值,這些離散值與不確定範圍的輸出值之間的誤差難以衡量。
softmax運算符(softmax operator)解決了以上兩個問題。它通過下式將輸出值變換成值爲正且和爲1的概率分佈:
y^1,y^2,y^3=softmax(o1,o2,o3)
其中
y^1=∑i=13exp(oi)exp(o1),y^2=∑i=13exp(oi)exp(o2),y^3=∑i=13exp(oi)exp(o3).
容易看出y^1+y^2+y^3=1且0≤y^1,y^2,y^3≤1,因此y^1,y^2,y^3是一個合法的概率分佈。這時候,如果y^2=0.8,不管y^1和y^3的值是多少,我們都知道圖像類別爲貓的概率是80%。此外,我們注意到
iargmaxoi=iargmaxy^i
因此softmax運算不改變預測類別輸出。
- 計算效率
- 單樣本矢量計算表達式
爲了提高計算效率,我們可以將單樣本分類通過矢量計算來表達。在上面的圖像分類問題中,假設softmax迴歸的權重和偏差參數分別爲
W=⎣⎢⎢⎡w11w21w31w41w12w22w32w42w13w23w33w43⎦⎥⎥⎤,b=[b1b2b3],
設高和寬分別爲2個像素的圖像樣本i的特徵爲
x(i)=[x1(i)x2(i)x3(i)x4(i)],
輸出層的輸出爲
o(i)=[o1(i)o2(i)o3(i)],
預測爲狗、貓或雞的概率分佈爲
y^(i)=[y^1(i)y^2(i)y^3(i)].
softmax迴歸對樣本i分類的矢量計算表達式爲
o(i)y^(i)=x(i)W+b,=softmax(o(i)).
- 小批量矢量計算表達式
爲了進一步提升計算效率,我們通常對小批量數據做矢量計算。廣義上講,給定一個小批量樣本,其批量大小爲n,輸入個數(特徵數)爲d,輸出個數(類別數)爲q。設批量特徵爲X∈Rn×d。假設softmax迴歸的權重和偏差參數分別爲W∈Rd×q和b∈R1×q。softmax迴歸的矢量計算表達式爲
OY^=XW+b,=softmax(O),
其中的加法運算使用了廣播機制,O,Y^∈Rn×q且這兩個矩陣的第i行分別爲樣本i的輸出o(i)和概率分佈y^(i)。
交叉熵損失函數
對於樣本i,我們構造向量y(i)∈Rq ,使其第y(i)(樣本i類別的離散數值)個元素爲1,其餘爲0。這樣我們的訓練目標可以設爲使預測概率分佈y^(i)儘可能接近真實的標籤概率分佈y(i)。
Loss=∣y^(i)−y(i)∣2/2
然而,想要預測分類結果正確,我們其實並不需要預測概率完全等於標籤概率。例如,在圖像分類的例子裏,如果y(i)=3,那麼我們只需要y^3(i)比其他兩個預測值y^1(i)和y^2(i)大就行了。即使y^3(i)值爲0.6,不管其他兩個預測值爲多少,類別預測均正確。而平方損失則過於嚴格,例如y^1(i)=y^2(i)=0.2比y^1(i)=0,y^2(i)=0.4的損失要小很多,雖然兩者都有同樣正確的分類預測結果。
改善上述問題的一個方法是使用更適合衡量兩個概率分佈差異的測量函數。其中,交叉熵(cross entropy)是一個常用的衡量方法:
H(y(i),y^(i))=−j=1∑qyj(i)logy^j(i),
其中帶下標的yj(i)是向量y(i)中非0即1的元素,需要注意將它與樣本i類別的離散數值,即不帶下標的y(i)區分。在上式中,我們知道向量y(i)中只有第y(i)個元素y(i)y(i)爲1,其餘全爲0,於是H(y(i),y^(i))=−logy^y(i)(i)。也就是說,交叉熵只關心對正確類別的預測概率,因爲只要其值足夠大,就可以確保分類結果正確。當然,遇到一個樣本有多個標籤時,例如圖像裏含有不止一個物體時,我們並不能做這一步簡化。但即便對於這種情況,交叉熵同樣只關心對圖像中出現的物體類別的預測概率。
假設訓練數據集的樣本數爲n,交叉熵損失函數定義爲
ℓ(Θ)=n1i=1∑nH(y(i),y^(i)),
其中Θ代表模型參數。同樣地,如果每個樣本只有一個標籤,那麼交叉熵損失可以簡寫成ℓ(Θ)=−(1/n)∑i=1nlogy^y(i)(i)。從另一個角度來看,我們知道最小化ℓ(Θ)等價於最大化exp(−nℓ(Θ))=∏i=1ny^y(i)(i),即最小化交叉熵損失函數等價於最大化訓練數據集所有標籤類別的聯合預測概率。
softmax:
https://blog.csdn.net/boke14122621/article/details/104316090
多層感知機:
https://blog.csdn.net/boke14122621/article/details/104320813
語言模型及RNN:
https://blog.csdn.net/boke14122621/article/details/104321048