斯坦福CS231n - CNN for Visual Recognition(2)-lecture3(上)線性分類器、損失函數

本節主要講了線性分類器(svm和softmax),損失函數以及最優化(梯度下降)的問題

線性分類

  由於之前KNN分類器的缺點,讓我們很自然地去尋找有更加強大地方法去完成圖像分類任務,這種方法主要有兩部分組成:
評分函數(score function),它是原始圖像數據到類別分值的映射(f(x)=Wx )。
損失函數(loss function),它是用來量化預測分類標籤的得分與真實標籤之間一致性的。
  這種方法其實最後可以轉化成一個最優化問題,在最優化過程中,將通過更新評分函數的參數來最小化損失函數值。

1 評分函數

   評分函數,就是從圖像到標籤分值的參數化映射。舉例來說,在CIFAR-10中,我們有一個N=50000的訓練集,每個圖像有D=32x32x3=3072個像素,而K=10,這是因爲圖片被分爲10個不同的類別(狗,貓,汽車等)。我們現在定義評分函數爲:f:RDRK ,該函數是原始圖像像素到分類分值的映射。
線性分類器
  一個線性映射:

f(xi,W,b)=Wxi+b

  在上式中,假設每個圖像數據都被拉長爲一個長度爲D的列向量,大小爲[D x 1]。其中大小爲[K x D]的矩陣W和大小爲[K x 1]列向量b爲該函數的參數(parameters)。以CIFAR-10爲例,將圖像拉成[3072 x 1]的列向量,W爲[10x3072],b爲[10x1]。f(xi,W,b) 輸出爲[10 x 1]的列向量(10個數字對應不同分類的分值)。
其中,參數W被稱爲權重(weights)。b被稱爲偏差向量(bias vector)。

補充說明:

  • 通過矩陣乘法Wxi 能並行地評估10個不同的分類器(每個分類器對應一個分類),其中每個類的分類器就是W的一個行向量。
  • 參數W和b是可控制改變的。我們的目標就是通過設置這些參數,使得計算出來的分類分值情況和訓練集中圖像數據的真實類別標籤相符。
  • 該方法通過訓練數據學習參數W和b,當訓練完成,時訓練數據可丟棄,留下學習到的參數即可。
  • 分類時只需要做一個矩陣乘法和一個矩陣加法就能對一個測試數據分類。

這裏寫圖片描述

  上面例子中,原始像素點向量xi經過W和b映射爲對應結果類別的得分f(xi,W,b)=Wxi+b 。不過上面這組參數是不太恰當的,圖片是貓,但是狗狗分最高,這樣就很自然地引出參數優化問題了。

線性分類器另一種理解:將線性分類器看做模板匹配:關於權重W的另一個解釋是它的每一行對應着一個分類的模板(有時候也叫作原型)。一張圖像對應不同分類的得分,是通過使用內積(也叫點積)來比較圖像和模板,然後找到和哪個模板最相似。

偏差和權重的合併技巧:它能夠將我們常用的參數和合二爲一。回憶一下,分類評分函數定義爲:

f(xi,W,b)=Wxi+b

  分開處理這兩個參數(權重參數和偏差參數)有點笨拙,一般常用的方法是把兩個參數放到同一個矩陣中,同時向量就要增加一個維度,這個維度的數值是常量1,這就是默認的偏差維度。這樣新的公式就簡化成下面這樣:

f(xi,W,b)=Wxi

  還是以CIFAR-10爲例,那麼的大小就變成[3073x1],而不是[3072x1]了,多出了包含常量1的1個維度。W大小就是[10x3073]了。中多出來的這一列對應的就是偏差值,具體見下圖:
這裏寫圖片描述

圖像數據預處理:在機器學習中,對於輸入的特徵做歸一化(normalization)處理是常見的套路。而在圖像分類的例子中,圖像上的每個像素可以看做一個特徵。在實踐中,對每個特徵減去平均值來中心化數據是非常重要的。在這些圖片的例子中,該步驟意味着根據訓練集中所有的圖像計算出一個平均圖像值,然後每個圖像都減去這個平均值,這樣圖像的像素值就大約分佈在[-127, 127]之間了。下一個常見步驟是,讓所有數值分佈的區間變爲[-1, 1]。零均值的中心化是很重要的。


2 損失函數

  回到之前那張貓的圖像分類例子,它有針對“貓”,“狗”,“船”三個類別的分數。我們看到例子中權重值非常差,因爲貓分類的得分非常低(-96.8),而狗(437.9)和船(61.95)比較高。我們將使用損失函數(Loss Function)(有時也叫代價函數Cost Function目標函數Objective)來衡量我們對結果的不滿意程度。直觀地講,當評分函數輸出結果與真實結果之間差異越大,損失函數輸出越大,反之越小。

2.1 多類支持向量機(SVM)損失函數

  SVM的損失函數想要SVM在正確分類上的得分始終比不正確分類上的得分高出一個邊界值Δ
回憶一下,第i個數據中包含圖像xi 的像素和代表正確類別的標籤yi 。評分函數輸入像素數據,然後通過公式f(xi,W) 來計算不同分類類別的分值。這裏我們將分值簡寫爲s 。比如,針對第j個類別的得分就是第j個元素:sj=f(xi,W)j 。針對第i個數據的多類SVM的損失函數定義如下:

Li=jyimax(0,sjsyi+Δ)

  下面圖片是一個具體地例子


這裏寫圖片描述 這裏寫圖片描述

  通過例子可以看出:SVM的損失函數想要正確分類類別yi 的分數比不正確類別分數高,而且至少要高Δ 。如果不滿足這點,就開始計算損失值。
  考慮到我們現在面對的是線性評分函數(f(xi,W)=Wxi ),所以我們可以將損失函數的公式稍微改寫一下(其中wj 是權重W 的第j 行):

Li=jyimax(0,wTjxiwTyixi+Δ)

  總的損失函數:

L=1Ni=1Njyimax(0,wTjxiwTyixi+Δ)

折葉損失(hinge loss):這是一個關於0的閥值:max(0,) 。有時候會聽到人們使用平方折葉損失SVM(即L2-SVM),它使用的是max(0,)2 ,將更強烈(平方地而不是線性地)地懲罰過界的邊界值。不使用平方是更標準的版本,但是在某些數據集中,平方折葉損失會工作得更好。可以通過交叉驗證來決定到底使用哪個。

2.1.1 正則化

引出:假設有一個數據集和一個權重集W能夠正確地分類每個數據。問題在於這個W並不唯一:可能有很多相似的W都能正確地分類所有的數據。比如:如果W能夠正確分類所有數據,即對於每個數據,損失值都是0。那麼當時,任何數乘都能使得損失值爲0,因爲這個變化將所有分值的大小都均等地擴大了,所以它們之間的絕對差值也擴大了。

  我們希望能向某些特定的權重W添加一些偏好,對其他權重則不添加,以此來消除模糊性。這一點是能夠實現的,方法是向損失函數增加一個正則化懲罰(regularization penalty)R(W) 部分。最常用的正則化懲罰是L2範式,L2範式通過對所有參數進行逐元素的平方懲罰來抑制大數值的權重:

R(W)=klW2k,l

  上面的表達式中,將所有元素平方後求和。注意正則化函數不是數據的函數,僅基於權重。包含正則化懲罰後,就能夠給出完整的多類SVM損失函數了,它由兩個部分組成:數據損失(data loss),即所有樣例的的平均損失,以及正則化損失(regularization loss)。完整公式如下所示:

L=1NiLidata loss+λR(W)regularization loss

  也可以展開,得到更具體的完整形式:

L=1Nijyi[max(0,f(xi;W)jf(xi;W)yi+Δ)]+λklW2k,l

  其中,N是訓練集的數據量。現在正則化懲罰添加到了損失函數裏面,並用超參數λ 來計算其權重。該超參數無法簡單確定,需要通過交叉驗證來獲取。

  引入正則化懲罰最好的性質就是對大數值權重進行懲罰,可以提升其泛化能力,避免過擬合。因爲這就意味着沒有哪個維度能夠獨自對於整體分值有過大的影響。
  舉個例子,假設輸入向量x=[1,1,1,1] ,兩個權重向量w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25] ,那麼wT1x=wT2x=1 ,兩個權重向量都得到同樣的內積,但是w1 的L2懲罰是1.0,而w2 的L2懲罰是0.25。因此,根據L2懲罰來看,w2 更好,因爲它的正則化損失更小。從直觀上來看,這是因爲的權重值更小且更分散。既然L2懲罰傾向於更小更分散的權重向量,這就會鼓勵分類器最終將所有維度上的特徵都用起來,而不是強烈依賴其中少數幾個維度。

  要注意的是,和權重不同,偏差沒有這樣的效果,因爲它們並不控制輸入維度上的影響強度。因此實際中通常只對權重W 正則化,而不正則化偏差b

  接下來要做的,就是找到能夠使損失值最小化的權重了。

2.1.2 實際應用

設置Δ :該超參數在絕大多數情況下設爲Δ=1.0 是安全的。超參數Δλ 看起來是兩個不同的超參數,但實際上他們一起控制同一個權衡:即損失函數中的數據損失和正則化損失之間的權衡。這是因爲權重W 的大小對於分類分值有直接影響(當然對他們的差異也有直接影響):當我們將W 中值縮小,分類分值之間的差異也變小,反之亦然。因此,不同分類分值之間的邊界的具體值(比如Δ=1Δ=100 )從某些角度來看是沒意義的,因爲權重自己就可以控制差異變大和縮小。也就是說,真正的權衡是我們允許權重能夠變大到何種程度(通過正則化強度來控制)。
其他多類SVM公式。需要指出的是,上面展示的多類SVM只是多種SVM公式中的一種。另一種常用的公式是One-Vs-All(OVA)SVM,它針對每個類和其他類訓練一個獨立的二元分類器。還有另一種更少用的叫做All-Vs-All(AVA)策略。

2.2 Softmax分類器

  Softmax分類器就可以理解爲邏輯迴歸分類器面對多個分類的一般化歸納。SVM將輸出f(xi,W) 作爲每個分類的評分(因爲無定標,所以難以直接解釋)。與SVM不同,Softmax的輸出(歸一化的分類概率)更加直觀,並且從概率上可以解釋。在Softmax分類器中,函數映射f(xi,W)=Wxi 保持不變,但將這些評分值視爲每個分類的未歸一化的對數概率,並且將折葉損失(hinge loss)替換爲交叉熵損失(cross-entropy loss)。公式如下:

Li=logefyijefjLi=fyi+logjefj

  我們使用fj 來代表得分向量f 的第j 個元素值。和前面提到的一樣,總體的損失也是Li 遍歷訓練集之後的均值,再加上正則化項R(W) ,而函數fj(z)=ezjkezk 被稱之爲softmax函數
信息論解釋
  在”真實“分佈p和估計分佈q之間的交叉熵定義如下:
H(p,q)=xp(x)logq(x)

  Softmax分類器所做的就是最小化估計分類概率(efyi/jefj )和“真實“分佈之間交叉熵。
概率論解釋
P(yixi;W)=efyijefj

  其實可以看做給定圖片數據xi 和類別yi 以及參數W 之後的歸一化概率。在概率的角度理解,我們在做的事情,就是最小化錯誤類別的負log似然概率,也可以理解爲進行最大似然估計Maximum Likelihood Estimation (MLE)。這個理解角度還有一個好處,這個時候我們的正則化項R(W) 有很好的解釋性,可以理解爲整個損失函數在權重矩陣W 上的一個高斯先驗,所以其實這時候是在做一個最大後驗估計Maximum a posteriori (MAP)。

數值穩定
  編程實現softmax函數計算的時候,中間項efyijefj 因爲存在指數函數,所以數值可能非常大。除以大數值可能導致數值計算的不穩定,所以學會使用歸一化技巧非常重要。如果在分式的分子和分母都乘以一個常數C ,並把它變換到求和之中,就能得到一個從數學上等價的公式:

efyijefj=CefyiCjefj=efyi+logCjefj+logC

  C 的值可自由選擇,不會影響計算結果,通過使用這個技巧可以提高計算中的數值穩定性。通常將C 設爲logC=maxjfj 。該技巧簡單地說,就是應該將向量f 中的數值進行平移,使得最大值爲0。


3 SVM與Softmax分類器比較


這裏寫圖片描述

  兩個分類器都計算了同樣的分值向量f 。不同之處在於對f 中分值的解釋:SVM分類器將它們看做是分類評分,它的損失函數鼓勵正確的分類(本例中是藍色的類別2)的分值比其他分類的分值高出至少一個邊界值。Softmax分類器將這些數值看做是每個分類沒有歸一化的對數概率,鼓勵正確分類的歸一化的對數概率變高,其餘的變低。SVM的最終的損失值是1.58,Softmax的最終的損失值是0.452。

  SVM分類器中,我們得到的類別得分,大小順序表示着所屬類別的排序,但是得分的絕對值大小並沒有特別明顯的物理含義。而Softmax分類器中,結果的絕對值大小表徵屬於該類別的概率。

  Softmax中拿到的概率,其實和正則化參數λ 有很大的關係,因爲λ 實際上在控制着W 的伸縮程度,所以也控制着最後得分,這會直接影響最後概率向量中概率的分散度,比如說某個λ 下,我們得到的得分和概率可能如下:

[1,2,0][e1,e2,e0]=[2.71,0.14,1][0.7,0.04,0.26]

  而我們加大λ ,提高其約束能力後,那麼權重W就會被懲罰的更多,數值就會更小,這時分數也更小,假設變爲一半:
[0.5,1,0][e0.5,e1,e0]=[1.65,0.37,1][0.55,0.12,0.33]

  現在看來,最後得到的結果概率分佈更加分散了。

  在實際使用中,SVM和Softmax經常是相似的:通常說來,兩種分類器的表現差別很小。
  SVM更加“局部目標化(local objective)”,這既可以看做是一個特性,也可以看做是一個劣勢。考慮一個評分是[10,2,3] 的數據,其中第一個分類是正確的,那麼一個SVM(Δ=1 )會看到正確分類相較於不正確分類,已經得到了比邊界值還要高的分數,它就會認爲損失值是0。SVM對於數字個體的細節是不關心的:如果分數是[10,100,100] 或者[10,9,9] ,對於SVM來說沒什麼不同,只要滿足超過邊界值等於1,那麼損失值就等於0。這可以被看做是SVM的一種特性。舉例說來,一個汽車的分類器應該把他的大量精力放在如何分辨小轎車和大卡車上,而不應該糾結於如何與青蛙進行區分,因爲區分青蛙得到的評分已經足夠低了。
  而對於softmax分類器,對於[10, 9, 9]來說,計算出的損失值就遠遠高於[10,100,100] 的。換句話來說,softmax分類器對於分數是永遠不會滿意的:正確分類總能得到更高的可能性,錯誤分類總能得到更低的可能性,損失值總是能夠更小。
  


參考資料

鏈接:http://cs231n.github.io/linear-classify/
鏈接:https://zhuanlan.zhihu.com/p/20918580?refer=intelligentunit
   https://zhuanlan.zhihu.com/p/20945670?refer=intelligentunit
   https://zhuanlan.zhihu.com/p/21102293?refer=intelligentunit
鏈接:http://blog.csdn.net/han_xiaoyang/article/details/49999583

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章