深度学习与计算机视觉(二)线性SVM与Softmax分类器
- 2、線性SVM與Softmax分類器
- 2.1 得分函數(score function)
- 2.1.1 線性分類器
- 2.1.2 理解線性分類器
- 2.2 損失函數
- 2.2.1 多類別支持向量機損失(Multiclass SVM loss)
- 2.2.2 正則化
- 2.3 實際中的考慮點
- 2.3.1 設定Delta
- 2.3.2 關于二元(Binary)支持向量機
- 2.3.3 關于非線性SVM
- 2.4 Softmax分類器
- 2.4.1 從信息論角度理解
- 2.4.2 從概率角度理解
- 2.4.3 實際工程的注意點:數據穩定性
- 2.4.4 softmax名字的說明
- 2.5 SVM與Softmax
- 2.5.1 損失函數
- 2.5.2 分類器的本質
- 2.5.3 實際應用中的SVM與Softmax分類器
- 2.1 得分函數(score function)
- 2、線性SVM與Softmax分類器
2、線性SVM與Softmax分類器
鑒于kNN的分類弊端,本節介紹一種新的分類器,其中由兩個很重要的概念:
得分函數:將原始數據映射到每個類的打分的函數
損失函數:用于量化模型預測結果和實際結果之間吻合度的函數
得到損失函數之后,我們就將問題轉化為一個最優化的問題,目標是得到讓我們的損失函數取值最小的一組參數。
2.1 得分函數(score function)
首先我們定義一個有原始的圖片像素值映射到最后類目得分的函數,也就是這里提到的得分函數。
假設我們的訓練數據為xi∈RDxi∈RD,對應的標簽yiyi,這里i=1…Ni=1…N
表示NN個樣本,yi∈1…Kyi∈1…K表示K類圖片。
比如CIFAR-10數據集中N=50000,而D=32x32x3=3072像素,K=10,因為這時候我們有10個不同的類別(狗/貓/車…),我們實際上要定義一個將原始像素映射到得分上函數f:RD?RKf:RD?RK
2.1.1 線性分類器
簡單的線性映射:f(xi,W,b)=Wxi+bf(xi,W,b)=Wxi+b
加到圖像的像素都拉長為[D x 1]的列向量,兩個參數W為[K x D],b為[K x 1],在CIFAR-10中,每張圖片平展開得到一個[3072 x 1]的向量,那W就應該是一個[10 x 3072]的矩陣,b為[10 x 1]的向量。
說明幾個點:
- 我們知道一次矩陣運算,我們就可以借助W把原始數據映射為10個類別的得分。
- 其實我們的輸入(x i ,y i ) 其實是固定的,我們現在要做的事情是,我們要調整W, b使得我們的得分結果和實際的類目結果最為吻合。
- 我們可以想象到,這樣一種分類解決方案的優勢是,一旦我們找到合適的參數,那么我們最后的模型可以簡化到只有保留W, b即可,而所有原始的訓練數據我們都可以不管了。
- 識別階段,我們需要做的事情僅僅是一次矩陣乘法和一次加法,這個計算量相對之前…不要小太多好么…
2.1.2 理解線性分類器
我們用一個實際的例子來表示這個得分映射的過程,大概就是下圖這個樣子:
原始像素點向量x i 經過W和b映射為對應結果類別的得分f(x i ,W,b)=Wx i +b 。不過上面這組參數其實給的是不太恰當的,因為我們看到在這組參數下,圖片屬于狗狗的得分最高 -_-||
1)劃分的第一種理解
圖像被展平之后,向量維度很高,高維空間比較難以想象,簡化,假設將圖像的像素輸入,看出可以壓縮到二維空間之中的點,那我們想想,分類器其實就是在做下圖所示的事情:
W中的每一列對應類別中的類,而當我們改變W中的值的時候,圖上的線的方向會跟著改變。
b是一個偏移量,它表示當我們直線的方向確定之后,能夠更適當的平移到合適的位置,如果沒有b的話,所有的直線都會經過原點,這種強制條件下顯然不能保證很好的平面類別分割。
2)劃分的第二種理解
W的每一行可以看做是其中一個類別的模板,而我們輸入圖像相對這個類別的得分,實際上是像素點和模板匹配度(通過內積運算獲得),而類目識別實際上就是在匹配圖像和所有類別的模板中,找到匹配度最高的那個。
感覺和KNN有些類似,不過我們這里不再像KNN那樣比對所有的圖像,而是比對類別的模板,這樣對比次數只和類目數k有關系,所以計算量會小很多,且不再使用L1 / L2距離,而是使用內積進行計算。
這里展示了CIFAR-10上學習到的模板的樣子:
3)偏移量的處理
線性分類器:f(xi,W,b)=Wxi+bf(xi,W,b)=Wxi+b
公式中有W和b兩個參數,我們知道調節兩個參數比調節一個參數要麻煩很多,所以我們將其組合起來,放到一個參數中去。
我們現在要做的運算是矩陣乘法再加偏移量,最常用的合并方法就是將b加入W中:
我們給輸入的像素矩陣加上一個1,從而把b拼接到W里變成一個變量。依舊拿CIFAR-10舉例,原本是[3072 x 1]的像素向量,我們添上最后那個1變成[3073 x 1]的向量,而[W]變成[W b]。
4)關于數據的預處理
實際應用中,我們很多時候并不是把原始的像素矩陣作為輸入,而是會預先做一些處理,比如說,有一個很重要的處理叫做『去均值』,他做的事情是對于訓練集,我們求得所有圖片像素矩陣的均值,作為中心,然后輸入的圖片先減掉這個均值,再做后續的操作。有時候我們甚至要對圖片的幅度歸一化/scaling。去均值是一個非常重要的步驟,原因我們在后續的梯度下降里會提到。
2.2 損失函數
通過參數W和b可以完成由像素到類目得分的過程,同時,我們知道訓練數據(xi,yi)(xi,yi)是給定的,可以通過調整參數來使得映射的結果和實際的類別吻合。
上面預測貓、狗的例子中,預測的結果和實際結果相差很大,于是我們要想辦法將這個偏差表示出來。
能夠完成偏差表示的工具叫做“損失函數”,也就是當偏差很大的時候,損失函數值會很大,我們訓練的目標就轉化為最小化損失函數。
2.2.1 多類別支持向量機損失(Multiclass SVM loss)
如果要用一句精簡的話來描述它,就是它(SVM)希望正確的類別結果獲得的得分比不正確的類別,至少要高上一個固定的大小Δ 。
2.2.2 正則化
把W參數的這種不確定性去除掉,這就是我們要提到的正則化,我們需要在原來的損失函數上再加上一項正則化項(regularization penalty R(W) ),最常見的正則化項是 L2 范數,它會對幅度很大的特征權重給很高的懲罰:
根據公式可以看到,這個表達式R(W)把所有W的元素的平方項求和了。而且它和數據本身無關,只和特征權重有關系。
我們把兩部分組(數據損失/data loss和正則化損失/regularization loss)在一起,得到完整的多類別SVM損失權重,如下:
也可以展開,得到更具體的完整形式:
其中,N是訓練樣本數,我們給正則化一個參數λλ,但是這個參數的設定只有通過實驗確定,也就是通過交叉驗證確定。
假定我們的輸入圖片像素矩陣是x=[1,1,1,1]x=[1,1,1,1] ,而現在我們有兩組不同的W權重參數中對應的向量w1=[1,0,0,0]w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25]w2=[0.25,0.25,0.25,0.25]。那我們很容易知道wT1x=wT2x=1w1Tx=w2Tx=1,所以不加正則項的時候,這倆得到的結果是完全一樣的,也就意味著——它們是等價的。但是加了正則項之后,我們發現w2w2總體的損失函數結果更小(因為4*0.25^2<1),于是我們的系統會選擇w2w2 ,這也就意味著系統更『喜歡』權重分布均勻的參數,而不是某些特征權重明顯高于其他權重(占據絕對主導作用)的參數。
之后的系列里會提到,這樣一個平滑的操作,實際上也會提高系統的泛化能力,讓其具備更高的通用性,而不至于在訓練集上過擬合。
另外,我們在討論過擬合的這個部分的時候,并沒有提到b這個參數,這是因為它并不具備像W一樣的控制輸入特征的某個維度影響力的能力。還需要說一下的是,因為正則項的引入,訓練集上的準確度是會有一定程度的下降的,我們永遠也不可能讓損失達到零了(因為這意味著正則化項為0,也就是W=0)。
2.3 實際中的考慮點
2.3.1 設定Delta
我們在計算Multi SVM loss的時候,Δ是我們提前設定的一個參數。這個值咋設定?莫不是…也需要交叉驗證…?其實基本上大部分的場合下我們設Δ=1.0 都是一個安全的設定。我們看公式中的參數Δ 和λ似乎是兩個截然不同的參數,實際上他倆做的事情比較類似,都是盡量讓模型貼近標準預測結果的時候,在 數據損失/data loss和 正則化損失/regularization loss之間做一個交換和平衡。
在損失函數計算公式里,可以看出,權重W的幅度對類別得分有最直接的影響,我們減小W,最后的得分就會減少;我們增大W,最后的得分就增大。從這個角度看,Δ 這個參數的設定(Δ=1 或者Δ=100 ),其實無法限定W的伸縮。而真正可以做到這點的是正則化項,λ 的大小,實際上控制著權重可以增長和膨脹的空間。
2.3.2 關于二元(Binary)支持向量機
二元支持向量機的公式如下:
我們可以理解為類別yi∈?1,1yi∈?1,1 ,它是我們的多類別識別的一個特殊情況,而這里的CC和λλ是一樣的作用,只不過他們的大小對結果的影響是相反的,也就是C∝1/λC∝1/λ。
2.3.3 關于非線性SVM
如果對機器學習有了解,你可能會了解很多其他關于SVM的術語:kernel,dual,SMO算法等等。在這個系列里面我們只討論最基本的線性形式。當然,其實從本質上來說,這些方法都是類似的。
2.4 Softmax分類器
兩種最常見的分類器,包括SVM和Softmax,它們有著截然不同的損失函數,softmax分類器就是邏輯回歸二分類器泛化到多類的情形,不像SVM直接給類目打分f(xi,W)f(xi,W)并作為輸出,softmax分類器從新的角度做了不一樣的處理,即需要將得分映射到概率域,不使用hinge loss了,而是用交叉熵損失函數:
其中,使用fifi來表示分向量ff的第j個元素值,總體的損失也是LiLi遍歷訓練集之后的均值,再加上正則化項R(W)R(W),而函數fj(z)=ezj∑kezkfj(z)=ezj∑kezk 被稱為softmax函數,其輸入值是一個實數向量zz,然后在指數域做了一個歸一化,保證其和為1,映射為概率。
2.4.1 從信息論角度理解
2.4.2 從概率角度理解
2.4.3 實際工程的注意點:數據穩定性
f = np.array([123, 456, 789]) # 3個類別的預測示例 p = np.exp(f) / np.sum(np.exp(f)) # 直接運算,數值穩定性不太好# 我們先對數據做一個平移,所以輸入的最大值為0: f -= np.max(f) # f 變成 [-666, -333, 0] p = np.exp(f) / np.sum(np.exp(f)) # 結果正確,同時解決數值不穩定問題2.4.4 softmax名字的說明
準確地說,SVM分類器使用hinge loss(有時候也叫max-margin loss)。而Softmax分類器使用交叉熵損失/cross-entropy loss。Softmax分類器從softmax函數(恩,其實做的事情就是把一列原始的類別得分歸一化到一列和為1的正數表示概率)得到,softmax函數使得交叉熵損失可以用起來。而實際上,我們并沒有softmax loss這個概念,因為softmax實質上就是一個函數,有時候我們圖方便,就隨口稱呼softmax loss。
2.5 SVM與Softmax
2.5.1 損失函數
下圖是表示從輸入端到分類結果的過程中,兩者分別做了什么工作:
區別就是拿到原始像素數據映射得到的得分之后的處理,而正因為處理方式不同,我們定義不同的損失函數,有不同的優化方法。
2.5.2 分類器的本質
SVM下,我們能完成類別的判定,但是實際上我們得到的類別得分,大小順序表示著所屬類別的排序,但是得分的絕對值大小并沒有特別明顯的物理含義。
Softmax分類器中,結果的絕對值大小表征屬于該類別的概率。
舉個例子說,SVM可能拿到對應 貓/狗/船 的得分[12.5, 0.6, -23.0],同一個問題,Softmax分類器拿到[0.9, 0.09, 0.01]。這樣在SVM結果下我們只知道『貓』是正確答案,而在Softmax分類器的結果中,我們可以知道屬于每個類別的概率。
但是,Softmax中拿到的概率,其實和正則化參數λ 有很大的關系,因為λ 實際上在控制著W的伸縮程度,所以也控制著最后得分的scale,這會直接影響最后概率向量中概率的『分散度』,比如說某個λ下,我們得到的得分和概率可能如下:
[1,?2,0]→[e1,e?2,e0]=[2.71,0.14,1]→[0.7,0.04,0.26][1,?2,0]→[e1,e?2,e0]=[2.71,0.14,1]→[0.7,0.04,0.26]
而我們加大λ ,提高其約束能力后,很可能得分變為原來的一半大小,這時候如下:
[0.5,?1,0]→[e0.5,e?1,e0]=[1.65,0.37,1]→[0.55,0.12,0.33][0.5,?1,0]→[e0.5,e?1,e0]=[1.65,0.37,1]→[0.55,0.12,0.33]
因為λ的不同,使得最后得到的結果概率分散度有很大的差別。在上面的結果中,貓有著統治性的概率大小,而在下面的結果中,它和船只的概率差距被縮小。
2.5.3 實際應用中的SVM與Softmax分類器
實際應用中,兩類分類器的表現是相當的。當然,每個人都有自己的喜好和傾向性,習慣用某類分類器。
一定要對比一下的話:
SVM其實并不在乎每個類別得到的絕對得分大小,舉個例子說,我們現在對三個類別,算得的得分是[10, -2, 3],實際第一類是正確結果,而設定Δ=1 ,那么10-3=7已經比1要大很多了,那對SVM而言,它覺得這已經是一個很標準的答案了,完全滿足要求了,不需要再做其他事情了,結果是 [10, -100, -100] 或者 [10, 9, 9],它都是滿意的。
然而對于Softmax而言,不是這樣的, [10, -100, -100] 和 [10, 9, 9]映射到概率域,計算得到的交叉熵損失是有很大差別的。所以Softmax是一個永遠不會滿足的分類器,在每個得分計算到的概率基礎上,它總是覺得可以讓概率分布更接近標準結果一些,交叉熵損失更小一些。
有興趣的話,W與得分預測結果demo是一個可以手動調整和觀察二維數據上的分類問題,隨W變化結果變化的demo,可以動手調調看看。
總結
以上是生活随笔為你收集整理的深度学习与计算机视觉(二)线性SVM与Softmax分类器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公积金是啥 什么是公积金
- 下一篇: 银行查流水需要带些什么证明