本節主要講了線性分類器(svm和softmax),損失函數以及最優化(梯度下降)的問題
線性分類
由於之前KNN分類器的缺點,讓我們很自然地去尋找有更加強大地方法去完成圖像分類任務,這種方法主要有兩部分組成:
評分函數(score function),它是原始圖像數據到類別分值的映射(
損失函數(loss function),它是用來量化預測分類標籤的得分與真實標籤之間一致性的。
這種方法其實最後可以轉化成一個最優化問題,在最優化過程中,將通過更新評分函數的參數來最小化損失函數值。
1 評分函數
評分函數,就是從圖像到標籤分值的參數化映射。舉例來說,在CIFAR-10中,我們有一個N=50000的訓練集,每個圖像有D=32x32x3=3072個像素,而K=10,這是因爲圖片被分爲10個不同的類別(狗,貓,汽車等)。我們現在定義評分函數爲:
線性分類器
一個線性映射:
在上式中,假設每個圖像數據都被拉長爲一個長度爲D的列向量,大小爲[D x 1]。其中大小爲[K x D]的矩陣W和大小爲[K x 1]列向量b爲該函數的參數(parameters)。以CIFAR-10爲例,將圖像拉成[3072 x 1]的列向量,W爲[10x3072],b爲[10x1]。
其中,參數W被稱爲權重(weights)。b被稱爲偏差向量(bias vector)。
補充說明:
- 通過矩陣乘法
Wxi 能並行地評估10個不同的分類器(每個分類器對應一個分類),其中每個類的分類器就是W的一個行向量。 - 參數W和b是可控制改變的。我們的目標就是通過設置這些參數,使得計算出來的分類分值情況和訓練集中圖像數據的真實類別標籤相符。
- 該方法通過訓練數據學習參數W和b,當訓練完成,時訓練數據可丟棄,留下學習到的參數即可。
- 分類時只需要做一個矩陣乘法和一個矩陣加法就能對一個測試數據分類。
上面例子中,原始像素點向量xi經過W和b映射爲對應結果類別的得分
線性分類器另一種理解:將線性分類器看做模板匹配:關於權重W的另一個解釋是它的每一行對應着一個分類的模板(有時候也叫作原型)。一張圖像對應不同分類的得分,是通過使用內積(也叫點積)來比較圖像和模板,然後找到和哪個模板最相似。
偏差和權重的合併技巧:它能夠將我們常用的參數和合二爲一。回憶一下,分類評分函數定義爲:
分開處理這兩個參數(權重參數和偏差參數)有點笨拙,一般常用的方法是把兩個參數放到同一個矩陣中,同時向量就要增加一個維度,這個維度的數值是常量1,這就是默認的偏差維度。這樣新的公式就簡化成下面這樣:
還是以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個數據中包含圖像
下面圖片是一個具體地例子
通過例子可以看出:SVM的損失函數想要正確分類類別
考慮到我們現在面對的是線性評分函數(
總的損失函數:
折葉損失(hinge loss):這是一個關於0的閥值:
2.1.1 正則化
引出:假設有一個數據集和一個權重集W能夠正確地分類每個數據。問題在於這個W並不唯一:可能有很多相似的W都能正確地分類所有的數據。比如:如果W能夠正確分類所有數據,即對於每個數據,損失值都是0。那麼當時,任何數乘都能使得損失值爲0,因爲這個變化將所有分值的大小都均等地擴大了,所以它們之間的絕對差值也擴大了。
我們希望能向某些特定的權重W添加一些偏好,對其他權重則不添加,以此來消除模糊性。這一點是能夠實現的,方法是向損失函數增加一個正則化懲罰(regularization penalty)
上面的表達式中,將所有元素平方後求和。注意正則化函數不是數據的函數,僅基於權重。包含正則化懲罰後,就能夠給出完整的多類SVM損失函數了,它由兩個部分組成:數據損失(data loss),即所有樣例的的平均損失,以及正則化損失(regularization loss)。完整公式如下所示:
也可以展開,得到更具體的完整形式:
其中,N是訓練集的數據量。現在正則化懲罰添加到了損失函數裏面,並用超參數
引入正則化懲罰最好的性質就是對大數值權重進行懲罰,可以提升其泛化能力,避免過擬合。因爲這就意味着沒有哪個維度能夠獨自對於整體分值有過大的影響。
舉個例子,假設輸入向量
要注意的是,和權重不同,偏差沒有這樣的效果,因爲它們並不控制輸入維度上的影響強度。因此實際中通常只對權重
接下來要做的,就是找到能夠使損失值最小化的權重了。
2.1.2 實際應用
設置
其他多類SVM公式。需要指出的是,上面展示的多類SVM只是多種SVM公式中的一種。另一種常用的公式是One-Vs-All(OVA)SVM,它針對每個類和其他類訓練一個獨立的二元分類器。還有另一種更少用的叫做All-Vs-All(AVA)策略。
2.2 Softmax分類器
Softmax分類器就可以理解爲邏輯迴歸分類器面對多個分類的一般化歸納。SVM將輸出
我們使用
信息論解釋
在”真實“分佈p和估計分佈q之間的交叉熵定義如下:
Softmax分類器所做的就是最小化估計分類概率(
概率論解釋
其實可以看做給定圖片數據
數值穩定
編程實現softmax函數計算的時候,中間項
3 SVM與Softmax分類器比較
兩個分類器都計算了同樣的分值向量
SVM分類器中,我們得到的類別得分,大小順序表示着所屬類別的排序,但是得分的絕對值大小並沒有特別明顯的物理含義。而Softmax分類器中,結果的絕對值大小表徵屬於該類別的概率。
Softmax中拿到的概率,其實和正則化參數
而我們加大
現在看來,最後得到的結果概率分佈更加分散了。
在實際使用中,SVM和Softmax經常是相似的:通常說來,兩種分類器的表現差別很小。
SVM更加“局部目標化(local objective)”,這既可以看做是一個特性,也可以看做是一個劣勢。考慮一個評分是
而對於softmax分類器,對於[10, 9, 9]來說,計算出的損失值就遠遠高於
參考資料
鏈接: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