SVM与SoftMax分类器
出處:http://blog.csdn.net/han_xiaoyang/article/details/49999299?
聲明:版權(quán)所有,轉(zhuǎn)載請注明出處,謝謝。
轉(zhuǎn)給自己
1. 線性分類器
在深度學(xué)習(xí)與計(jì)算機(jī)視覺系列(2)我們提到了圖像識別的問題,同時提出了一種簡單的解決方法——KNN。然后我們也看到了KNN在解決這個問題的時候,雖然實(shí)現(xiàn)起來非常簡單,但是有很大的弊端:
- 分類器必須記住全部的訓(xùn)練數(shù)據(jù)(因?yàn)橐闅v找近鄰啊!!),而在任何實(shí)際的圖像訓(xùn)練集上,數(shù)據(jù)量很可能非常大,那么一次性載入內(nèi)存,不管是速度還是對硬件的要求,都是一個極大的挑戰(zhàn)。
- 分類的時候要遍歷所有的訓(xùn)練圖片,這是一個相當(dāng)相當(dāng)相當(dāng)耗時的過程。
這個部分我們介紹一類新的分類器方法,而對其的改進(jìn)和啟發(fā)也能幫助我們自然而然地過渡到深度學(xué)習(xí)中的卷積神經(jīng)網(wǎng)。有兩個重要的概念:
- 得分函數(shù)/score function:將原始數(shù)據(jù)映射到每個類的打分的函數(shù)
- 損失函數(shù)/loss function:用于量化模型預(yù)測結(jié)果和實(shí)際結(jié)果之間吻合度的函數(shù)
在我們得到損失函數(shù)之后,我們就將問題轉(zhuǎn)化成為一個最優(yōu)化的問題,目標(biāo)是得到讓我們的損失函數(shù)取值最小的一組參數(shù)。
2. 得分函數(shù)/score function
首先我們定義一個有原始的圖片像素值映射到最后類目得分的函數(shù),也就是這里提到的得分函數(shù)。先籠統(tǒng)解釋一下,一會兒我們給個具體的實(shí)例來說明。假設(shè)我們的訓(xùn)練數(shù)據(jù)為,對應(yīng)的標(biāo)簽yi,這里i=1……N表示N個樣本,yi∈1…K表示K類圖片。
比如CIFAR-10數(shù)據(jù)集中N=50000,而D=32x32x3=3072像素,K=10,因?yàn)檫@時候我們有10個不同的類別(狗/貓/車…),我們實(shí)際上要定義一個將原始像素映射到得分上函數(shù)
2.1 線性分類器
我們先丟出一個簡單的線性映射:?
在這個公式里,我們假定圖片的像素都平展為[D x 1]的向量。然后我們有兩個參數(shù):W是[K x D]的矩陣,而向量b為[K x 1]的。在CIFAR-10中,每張圖片平展開得到一個[3072 x 1]的向量,那W就應(yīng)該是一個[10 x 3072]的矩陣,b為[10 x 1]的向量。
?
這樣,以我們的線性代數(shù)知識,我們知道這個函數(shù),接受3072個數(shù)作為輸入,同時輸出10個數(shù)作為類目得分。我們把W叫做權(quán)重,b叫做偏移向量。
說明幾個點(diǎn):
- 我們知道一次矩陣運(yùn)算,我們就可以借助W把原始數(shù)據(jù)映射為10個類別的得分。
- 其實(shí)我們的輸入(xi,yi)其實(shí)是固定的,我們現(xiàn)在要做的事情是,我們要調(diào)整W, b使得我們的得分結(jié)果和實(shí)際的類目結(jié)果最為吻合。
- 我們可以想象到,這樣一種分類解決方案的優(yōu)勢是,一旦我們找到合適的參數(shù),那么我們最后的模型可以簡化到只要保留W, b即可,而所有原始的訓(xùn)練數(shù)據(jù)我們都可以不管了。
- 識別階段,我們需要做的事情僅僅是一次矩陣乘法和一次加法,這個計(jì)算量相對之前…不要小太多好么…
提前劇透一下,其實(shí)卷積神經(jīng)網(wǎng)做的事情也是類似的,將原始輸入的像素映射成類目得分,只不過它的中間映射更加復(fù)雜,參數(shù)更多而已…
2.2 理解線性分類器
我們想想,其實(shí)線性分類器在做的事情,是對每個像素點(diǎn)的三個顏色通道,做計(jì)算。咱們擬人化一下,幫助我們理解,可以認(rèn)為設(shè)定的參數(shù)/權(quán)重不同會影響分類器的『性格』,從而使得分類器對特定位置的顏色會有自己的喜好。
舉個例子,假如說我們的分類器要識別『船只』,那么它可能會喜歡圖片的四周都是藍(lán)色(通常船只是在水里海里吧…)。
我們用一個實(shí)際的例子來表示這個得分映射的過程,大概就是下圖這個樣子:
原始像素點(diǎn)向量xixi經(jīng)過W和b映射為對應(yīng)結(jié)果類別的得分。不過上面這組參數(shù)其實(shí)給的是不太恰當(dāng)?shù)?#xff0c;因?yàn)槲覀兛吹皆谶@組參數(shù)下,圖片屬于狗狗的得分最高 -_-||
2.2.1 劃分的第1種理解
圖片被平展開之后,向量維度很高,高維空間比較難想象。我們簡化一下,假如把圖片像素輸入,看做可以壓縮到二維空間之中的點(diǎn),那我們想想,分類器實(shí)際上在做的事情就如下圖所示:
W中的每一列對應(yīng)類別中的每一類,而當(dāng)我們改變W中的值的時候,圖上的線的方向會跟著改變,那么b呢?對,b是一個偏移量,它表示當(dāng)我們的直線方向確定以后,我們可以適當(dāng)平移直線到合適的位置。沒有b會怎么樣呢,如果直線沒有偏移量,那意味著所有的直線都要通過原點(diǎn),這種強(qiáng)限制條件下顯然不能保證很好的平面類別分割。
2.2.2 劃分的第2種理解
對W第二種理解方式是,W的每一行可以看做是其中一個類別的模板。而我們輸入圖片相對這個類別的得分,實(shí)際上是像素點(diǎn)和模板匹配度(通過內(nèi)積運(yùn)算獲得),而類目識別實(shí)際上就是在匹配圖像和所有類別的模板,找到匹配度最高的那個。
是不是感覺和KNN有點(diǎn)類似的意思?是有那么點(diǎn)相近,但是這里我們不再比對所有圖片,而是比對類別的模板,這樣比對次數(shù)只和類目數(shù)K有關(guān)系,所以自然計(jì)算量要小很多,同時比對的時候用的不再是l1或者l2距離,而是內(nèi)積計(jì)算。
我們提前透露一下CIFAR-10上學(xué)習(xí)到的模板的樣子:
你看,和我們設(shè)想的很接近,ship類別的周邊有大量的藍(lán)色,而car的旁邊是土地的顏色。
2.2.3 關(guān)于偏移量的處理
我們先回到如下的公式:?
公式中有W和b兩個參數(shù),我們知道調(diào)節(jié)兩個參數(shù)總歸比調(diào)節(jié)一個參數(shù)要麻煩,所以我們用一點(diǎn)小技巧,來把他們組合在一起,放到一個參數(shù)中。
?
我們現(xiàn)在要做的運(yùn)算是矩陣乘法再加偏移量,最常用的合并方法就是,想辦法把b合并成W的一部分。我們仔細(xì)看看下面這張圖片:
我們給輸入的像素矩陣加上一個1,從而把b拼接到W里變成一個變量。依舊拿CIFAR-10舉例,原本是[3072 x 1]的像素向量,我們添上最后那個1變成[3073 x 1]的向量,而[W]變成[W b]。
2.2.4 關(guān)于數(shù)據(jù)的預(yù)處理
插播一段,實(shí)際應(yīng)用中,我們很多時候并不是把原始的像素矩陣作為輸入,而是會預(yù)先做一些處理,比如說,有一個很重要的處理叫做『去均值』,他做的事情是對于訓(xùn)練集,我們求得所有圖片像素矩陣的均值,作為中心,然后輸入的圖片先減掉這個均值,再做后續(xù)的操作。有時候我們甚至要對圖片的幅度歸一化/scaling。去均值是一個非常重要的步驟,原因我們在后續(xù)的梯度下降里會提到。
2.3 損失函數(shù)
我們已經(jīng)通過參數(shù)W,完成了由像素映射到類目得分的過程。同時,我們知道我們的訓(xùn)練數(shù)據(jù)(xi,yi)是給定的,我們可以調(diào)整的是參數(shù)/權(quán)重W,使得這個映射的結(jié)果和實(shí)際類別是吻合的。
我們回到最上面的圖片中預(yù)測 [貓/狗/船] 得分的例子里,這個圖片中給定的W顯然不是一個合理的值,預(yù)測的結(jié)果和實(shí)際情況有很大的偏差。于是我們現(xiàn)在要想辦法,去把這個偏差表示出來,擬人一點(diǎn)說,就是我們希望我們的模型在訓(xùn)練的過程中,能夠?qū)敵龅慕Y(jié)果計(jì)算并知道自己做的好壞。
而能幫助我們完成這件事情的工具叫做『損失函數(shù)/loss function』,其實(shí)它還有很多其他的名字,比如說,你說不定在其他的地方聽人把它叫做『代價函數(shù)/cost function』或者『客觀度/objective』,直觀一點(diǎn)說,就是我們輸出的結(jié)果和實(shí)際情況偏差很大的時候,損失/代價就會很大。
2.3.1 多類別支持向量機(jī)損失/Multiclass Support Vector Machine loss
膩害的大神們定義出了好些損失函數(shù),我們這里首先要介紹一種極其常用的,叫做多類別支持向量機(jī)損失(Multiclass SVM loss)。如果要用一句精簡的話來描述它,就是它(SVM)希望正確的類別結(jié)果獲得的得分比不正確的類別,至少要高上一個固定的大小Δ。
我們先解釋一下這句話,一會兒再舉個例子說明一下。對于訓(xùn)練集中的第i張圖片數(shù)據(jù)xi,我們的得分函數(shù),在參數(shù)W下會計(jì)算出一個所有類得分結(jié)果,其中第j類得分我們記作,該圖片的實(shí)際類別為yi,則對于第i張樣本圖片,我們的損失函數(shù)是如下定義的:
?
?
看公式容易看瞎,譯者也經(jīng)常深深地為自己智商感到捉急,我們舉個例子來解釋一下這個公式。?
假如我們現(xiàn)在有三個類別,而得分函數(shù)計(jì)算某張圖片的得分為f(xi,W)=[13,?7,11],而實(shí)際的結(jié)果是第一類(yi=0)。假設(shè)Δ=10(這個參數(shù)一會兒會介紹)。上面的公式把錯誤類別(j≠yi)都遍歷了一遍,求值加和:?
?
仔細(xì)看看上述的兩項(xiàng),左邊項(xiàng)-10和0中的最大值為0,因此取值是零。其實(shí)這里的含義是,實(shí)際的類別得分13要比第二類得分-7高出20,超過了我們設(shè)定的正確類目和錯誤類目之間的最小margin?Δ=10,因此第二類的結(jié)果我們認(rèn)為是滿意的,并不帶來loss,所以值為0。而第三類得分11,僅比13小2,沒有大于Δ=10,因此我們認(rèn)為他是有損失/loss的,而損失就是當(dāng)前距離2距離設(shè)定的最小距離ΔΔ的差距8。
注意到我們的得分函數(shù)是輸入像素值的一個線性函數(shù),因此公式又可以簡化為(其中wj是W的第j行):?
?
我們還需要提一下的是,關(guān)于損失函數(shù)中max(0,-)的這種形式,我們也把它叫做hinge loss/鉸鏈型損失,有時候你會看到squared hinge loss SVM(也叫L2-SVM),它用到的是max(0,?)2,這個損失函數(shù)懲罰那些在設(shè)定ΔΔ距離之內(nèi)的錯誤類別的懲罰度更高。兩種損失函數(shù)標(biāo)準(zhǔn)在特定的場景下效果各有優(yōu)劣,要判定用哪個,還是得借助于交叉驗(yàn)證/cross-validation。
對于損失函數(shù)的理解,可以參照下圖:?
?
2.3.2 正則化
如果大家仔細(xì)想想,會發(fā)現(xiàn),使用上述的loss function,會有一個bug。如果參數(shù)W能夠正確地識別訓(xùn)練集中所有的圖片(損失函數(shù)為0)。那么我們對M做一些變換,可以得到無數(shù)組也能滿足loss function=0的參數(shù)W’(舉個例子,對于λ>1的所有λW,原來的錯誤類別和正確類別之間的距離已經(jīng)大于Δ,現(xiàn)在乘以λ,更大了,顯然也能滿足loss為0)。
于是…我們得想辦法把W參數(shù)的這種不確定性去除掉啊…這就是我們要提到的正則化,我們需要在原來的損失函數(shù)上再加上一項(xiàng)正則化項(xiàng)(regularization penalty?R(W)),最常見的正則化項(xiàng)是L2范數(shù),它會對幅度很大的特征權(quán)重給很高的懲罰:?
根據(jù)公式可以看到,這個表達(dá)式R(W)把所有W的元素的平方項(xiàng)求和了。而且它和數(shù)據(jù)本身無關(guān),只和特征權(quán)重有關(guān)系。
?
我們把兩部分組(數(shù)據(jù)損失/data loss和正則化損失/regularization loss)在一起,得到完整的多類別SVM損失權(quán)重,如下:?
?
也可以展開,得到更具體的完整形式:?
其中N是訓(xùn)練樣本數(shù),我們給正則化項(xiàng)一個參數(shù)λ,但是這個參數(shù)的設(shè)定只有通過實(shí)驗(yàn)確定,對…還是得交叉驗(yàn)證/cross-validation。
關(guān)于設(shè)定這樣一個正則化懲罰項(xiàng)為什么能解決W的不確定性,我們在之后的系列里會提到,這里我們舉個例子簡單看看,這個項(xiàng)是怎么起到作用的。
假定我們的輸入圖片像素矩陣是x=[1,1,1,1],而現(xiàn)在我們有兩組不同的W權(quán)重參數(shù)中對應(yīng)的向量w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25]。那我們很容易知道,所以不加正則項(xiàng)的時候,這倆得到的結(jié)果是完全一樣的,也就意味著——它們是等價的。但是加了正則項(xiàng)之后,我們發(fā)現(xiàn)w2總體的損失函數(shù)結(jié)果更小(因?yàn)?*0.25^2<1),于是我們的系統(tǒng)會選擇w2,這也就意味著系統(tǒng)更『喜歡』權(quán)重分布均勻的參數(shù),而不是某些特征權(quán)重明顯高于其他權(quán)重(占據(jù)絕對主導(dǎo)作用)的參數(shù)。
之后的系列里會提到,這樣一個平滑的操作,實(shí)際上也會提高系統(tǒng)的泛化能力,讓其具備更高的通用性,而不至于在訓(xùn)練集上過擬合。
另外,我們在討論過擬合的這個部分的時候,并沒有提到b這個參數(shù),這是因?yàn)樗⒉痪邆湎馱一樣的控制輸入特征的某個維度影響力的能力。還需要說一下的是,因?yàn)檎齽t項(xiàng)的引入,訓(xùn)練集上的準(zhǔn)確度是會有一定程度的下降的,我們永遠(yuǎn)也不可能讓損失達(dá)到零了(因?yàn)檫@意味著正則化項(xiàng)為0,也就是W=0)。
下面是簡單的計(jì)算損失函數(shù)(沒加上正則化項(xiàng))的代碼,有未向量化和向量化兩種形式:
def L_i(x, y, W):"""未向量化版本. 對給定的單個樣本(x,y)計(jì)算multiclass svm loss.- x: 代表圖片像素輸入的向量 (例如CIFAR-10中是3073 x 1,因?yàn)樘砑恿薭ias項(xiàng)對應(yīng)的1到x中)- y: 圖片對應(yīng)的類別編號(比如CIFAR-10中是0-9)- W: 權(quán)重矩陣 (例如CIFAR-10中是10 x 3073)"""delta = 1.0 # 設(shè)定deltascores = W.dot(x) # 內(nèi)積計(jì)算得分correct_class_score = scores[y]D = W.shape[0] # 類別數(shù):例如10loss_i = 0.0for j in xrange(D): # 遍歷所有錯誤的類別if j == y:# 跳過正確類別continue# 對第i個樣本累加lossloss_i += max(0, scores[j] - correct_class_score + delta)return loss_idef L_i_vectorized(x, y, W):""" 半向量化的版本,速度更快。之所以說是半向量化,是因?yàn)檫@個函數(shù)外層要用for循環(huán)遍歷整個訓(xùn)練集 -_-||""" delta = 1.0scores = W.dot(x)# 矩陣一次性計(jì)算margins = np.maximum(0, scores - scores[y] + delta)margins[y] = 0 loss_i = np.sum(margins)return loss_idef L(X, y, W):""" 全向量化實(shí)現(xiàn) :- X: 包含所有訓(xùn)練樣本中數(shù)據(jù)(例如CIFAR-10是3073 x 50000)- y: 所有的類別結(jié)果 (例如50000 x 1的向量)- W: 權(quán)重矩陣 (例如10 x 3073)"""#待完成...說到這里,其實(shí)我們的損失函數(shù),是提供給我們一個數(shù)值型的表示,來衡量我們的預(yù)測結(jié)果和實(shí)際結(jié)果的差別。而要提高預(yù)測的準(zhǔn)確性,要做的事情是,想辦法最小化這個loss。
2.4 一些現(xiàn)實(shí)的考慮點(diǎn)
2.4.1 設(shè)定Delta
我們在計(jì)算Multi SVM loss的時候,Δ是我們提前設(shè)定的一個參數(shù)。這個值咋設(shè)定?莫不是…也需要交叉驗(yàn)證…?其實(shí)基本上大部分的場合下我們設(shè)定Δ=1.0都是一個安全的設(shè)定。我們看公式中的參數(shù)Δ和λ似乎是兩個截然不同的參數(shù),實(shí)際上他倆做的事情比較類似,都是盡量讓模型貼近標(biāo)準(zhǔn)預(yù)測結(jié)果的時候,在 數(shù)據(jù)損失/data loss和 正則化損失/regularization loss之間做一個交換和平衡。
在損失函數(shù)計(jì)算公式里,可以看出,權(quán)重W的幅度對類別得分有最直接的影響,我們減小W,最后的得分就會減少;我們增大W,最后的得分就增大。從這個角度看,Δ這個參數(shù)的設(shè)定(Δ=1或者Δ=100),其實(shí)無法限定W的伸縮。而真正可以做到這點(diǎn)的是正則化項(xiàng)λ的大小,實(shí)際上控制著權(quán)重可以增長和膨脹的空間。
2.4.2 關(guān)于二元/Binary支持向量機(jī)
如果大家之前接觸過Binary SVM,我們知道它的公式如下:?
?
我們可以理解為類別yi∈?1,1,它是我們的多類別識別的一個特殊情況,而這里的C和λλ是一樣的作用,只不過他們的大小對結(jié)果的影響是相反的,也就是
2.4.3 關(guān)于非線性的SVM
如果對機(jī)器學(xué)習(xí)有了解,你可能會了解很多其他關(guān)于SVM的術(shù)語:kernel,dual,SMO算法等等。在這個系列里面我們只討論最基本的線性形式。當(dāng)然,其實(shí)從本質(zhì)上來說,這些方法都是類似的。
2.5 Softmax分類器
話說其實(shí)有兩種特別常見的分類器,前面提的SVM是其中的一種,而另外一種就是Softmax分類器,它有著截然不同的損失函數(shù)。如果你聽說過『邏輯回歸二分類器』,那么Softmax分類器是它泛化到多分類的情形。不像SVM這種直接給類目打分f(xi,W)并作為輸出,Softmax分類器從新的角度做了不一樣的處理,我們依舊需要將輸入的像素向量映射為得分,只不過我們還需要將得分映射到概率域,我們也不再使用hinge loss了,而是使用交叉熵?fù)p失/cross-entropy loss,形式如下:?
?
我們使用fj來代表得分向量f的第j個元素值。和前面提到的一樣,總體的損失/loss也是Li遍歷訓(xùn)練集之后的均值,再加上正則化項(xiàng)R(W),而函數(shù)被稱之為softmax函數(shù):它的輸入值是一個實(shí)數(shù)向量z,然后在指數(shù)域做了一個歸一化(以保證之和為1)映射為概率。
2.5.1 信息論角度的理解
對于兩個概率分布p(“真實(shí)的概率分布”)和估測的概率分布q(估測的屬于每個類的概率),它們的互熵定義為如下形式:?
而Softmax分類器要做的事情,就是要最小化預(yù)測類別的概率分布(之前看到了,是)與『實(shí)際類別概率分布』(p=[0,…1,…,0],只在結(jié)果類目上是1,其余都為0)兩個概率分布的交叉熵。
另外,因?yàn)榛レ乜梢杂渺丶由螷L距離/Kullback-Leibler Divergence(也叫相對熵/Relative Entropy)來表示,即,而p的熵為0(這是一個確定事件,無隨機(jī)性),所以互熵最小化,等同于最小化兩個分布之間的KL距離。換句話說,交叉熵想要從給定的分布q上預(yù)測結(jié)果分布p。
2.5.2 概率角度的理解
我們再來看看以下表達(dá)式?
其實(shí)可以看做給定圖片數(shù)據(jù)xi和類別yi以及參數(shù)W之后的歸一化概率。在概率的角度理解,我們在做的事情,就是最小化錯誤類別的負(fù)log似然概率,也可以理解為進(jìn)行最大似然估計(jì)/Maximum Likelihood Estimation (MLE)。這個理解角度還有一個好處,這個時候我們的正則化項(xiàng)R(W)有很好的解釋性,可以理解為整個損失函數(shù)在權(quán)重矩陣W上的一個高斯先驗(yàn),所以其實(shí)這時候是在做一個最大后驗(yàn)估計(jì)/Maximum a posteriori (MAP)。
2.5.3 實(shí)際工程上的注意點(diǎn):數(shù)據(jù)穩(wěn)定性
在我們要寫代碼工程實(shí)現(xiàn)Softmax函數(shù)的時候,計(jì)算的中間項(xiàng)efyi和∑jefj因?yàn)橹笖?shù)運(yùn)算可能變得非常大,除法的結(jié)果非常不穩(wěn)定,所以這里需要一個小技巧。注意到,如果我們在分子分母前都乘以常數(shù)C,然后整理到指數(shù)上,我們會得到下面的公式:?
?
C的取值由我們而定,不影響最后的結(jié)果,但是對于實(shí)際計(jì)算過程中的穩(wěn)定性有很大的幫助。一個最常見的C取值為。這表明我們應(yīng)該平移向量f中的值使得最大值為0,以下的代碼是它的一個實(shí)現(xiàn):
f = np.array([123, 456, 789]) # 3個類別的預(yù)測示例 p = np.exp(f) / np.sum(np.exp(f)) # 直接運(yùn)算,數(shù)值穩(wěn)定性不太好# 我們先對數(shù)據(jù)做一個平移,所以輸入的最大值為0: f -= np.max(f) # f 變成 [-666, -333, 0] p = np.exp(f) / np.sum(np.exp(f)) # 結(jié)果正確,同時解決數(shù)值不穩(wěn)定問題2.5.4 關(guān)于softmax這個名字的一點(diǎn)說明
準(zhǔn)確地說,SVM分類器使用hinge loss(有時候也叫max-margin loss)。而Softmax分類器使用交叉熵?fù)p失/cross-entropy loss。Softmax分類器從softmax函數(shù)(恩,其實(shí)做的事情就是把一列原始的類別得分歸一化到一列和為1的正數(shù)表示概率)得到,softmax函數(shù)使得交叉熵?fù)p失可以用起來。而實(shí)際上,我們并沒有softmax loss這個概念,因?yàn)閟oftmax實(shí)質(zhì)上就是一個函數(shù),有時候我們圖方便,就隨口稱呼softmax loss。
2.6 SVM 與 Softmax
這個比較很有意思,就像在用到分類算法的時候,就會想SVM還是logistic regression呢一樣。?
我們先用一張圖來表示從輸入端到分類結(jié)果,SVM和Softmax都做了啥:?
?
區(qū)別就是拿到原始像素數(shù)據(jù)映射得到的得分之后的處理,而正因?yàn)樘幚矸绞讲煌?#xff0c;我們定義不同的損失函數(shù),有不同的優(yōu)化方法。
2.6.1 另外的差別
- SVM下,我們能完成類別的判定,但是實(shí)際上我們得到的類別得分,大小順序表示著所屬類別的排序,但是得分的絕對值大小并沒有特別明顯的物理含義。
- Softmax分類器中,結(jié)果的絕對值大小表征屬于該類別的概率。
舉個例子說,SVM可能拿到對應(yīng) 貓/狗/船 的得分[12.5, 0.6, -23.0],同一個問題,Softmax分類器拿到[0.9, 0.09, 0.01]。這樣在SVM結(jié)果下我們只知道『貓』是正確答案,而在Softmax分類器的結(jié)果中,我們可以知道屬于每個類別的概率。
但是,Softmax中拿到的概率,其實(shí)和正則化參數(shù)λλ有很大的關(guān)系,因?yàn)棣藢?shí)際上在控制著W的伸縮程度,所以也控制著最后得分的scale,這會直接影響最后概率向量中概率的『分散度』,比如說某個λ下,我們得到的得分和概率可能如下:?
而我們加大λ,提高其約束能力后,很可能得分變?yōu)樵瓉淼囊话氪笮?#xff0c;這時候如下:?
?
因?yàn)棣说牟煌?#xff0c;使得最后得到的結(jié)果概率分散度有很大的差別。在上面的結(jié)果中,貓有著統(tǒng)治性的概率大小,而在下面的結(jié)果中,它和船只的概率差距被縮小。
2.6.2 應(yīng)用中的SVM與Softmax分類器
實(shí)際應(yīng)用中,兩類分類器的表現(xiàn)是相當(dāng)?shù)摹.?dāng)然,每個人都有自己的喜好和傾向性,習(xí)慣用某類分類器。
一定要對比一下的話:
SVM其實(shí)并不在乎每個類別得到的絕對得分大小,舉個例子說,我們現(xiàn)在對三個類別,算得的得分是[10, -2, 3],實(shí)際第一類是正確結(jié)果,而設(shè)定Δ=1Δ=1,那么10-3=7已經(jīng)比1要大很多了,那對SVM而言,它覺得這已經(jīng)是一個很標(biāo)準(zhǔn)的答案了,完全滿足要求了,不需要再做其他事情了,結(jié)果是 [10, -100, -100] 或者 [10, 9, 9],它都是滿意的。
然而對于Softmax而言,不是這樣的, [10, -100, -100] 和 [10, 9, 9]映射到概率域,計(jì)算得到的交叉熵?fù)p失是有很大差別的。所以Softmax是一個永遠(yuǎn)不會滿足的分類器,在每個得分計(jì)算到的概率基礎(chǔ)上,它總是覺得可以讓概率分布更接近標(biāo)準(zhǔn)結(jié)果一些,交叉熵?fù)p失更小一些。
有興趣的話,W與得分預(yù)測結(jié)果demo是一個可以手動調(diào)整和觀察二維數(shù)據(jù)上的分類問題,隨W變化結(jié)果變化的demo,可以動手調(diào)調(diào)看看。?
?
參考資料與原文
cs231n 線性分類器 SVM與softmax
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的SVM与SoftMax分类器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CNN卷积神经网络:权值更新公式推导
- 下一篇: 读《围城》有感