cs231n笔记:线性分类器
cs231n線性分類器學習筆記,非完全翻譯,根據(jù)自己的學習情況總結(jié)出的內(nèi)容:
線性分類
本節(jié)介紹線性分類器,該方法可以自然延伸到神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)中,這類方法主要有兩部分組成,一個是評分函數(shù)(score function):是原始數(shù)據(jù)和類別分值的映射,另一個是損失函數(shù):它是用來衡量預(yù)測標簽和真是標簽的一致性程度。我們將這類問題轉(zhuǎn)化為優(yōu)化問題,通過修改參數(shù)來最小化損失函數(shù)。
首先定義一個評分函數(shù),這個函數(shù)將輸入樣本映射為各個分類類別的得分,得分的高低代表該樣本屬于該類別可能性的高低。現(xiàn)在假設(shè)有一個訓練集,每個樣本都有一個對應(yīng)的分類標簽yi,這里i=1,2....N,并且yi?∈?1…K,這里,N代表樣本個數(shù),樣本的維度為D,共有K個類別。定義評分函數(shù):,該函數(shù)是原始樣本到分類分值的一個映射。
線性分類器:先介紹最簡單的線性映射:,在公式中,每一個輸入樣本都被拉成一個長度為D的列向量,其中W和b都是參數(shù),參數(shù)W被稱為權(quán)重(weights)大小為K x D 和,參數(shù)b為偏置向量(bias vector)大小K x 1,它影響輸出結(jié)果,但是并不和原始樣本產(chǎn)生關(guān)聯(lián)。卷積神經(jīng)網(wǎng)絡(luò)樣本到分類分值的方法和上面一樣,但是映射函數(shù)f(x)將更加的復雜,參數(shù)也更多。
解釋線性分類器
線性分類器各維度的值與權(quán)重相乘,從而得到分類分值。如下圖:首先將這張貓咪的圖片拉伸成一個列向量,與矩陣W相乘,然后得到各個分類的值,可以看出得
到的評分中,貓的評分很低,則這個矩陣W并不好。我們還可以將樣本看做高維空間中的一個樣本點,整個數(shù)據(jù)集就是一個空間點的集合,每個點都有一個標簽,則每個分類類別的分值就是這個空間中一條線性函數(shù)的函數(shù)值。
偏置和權(quán)重的合并技巧:分類的評分函數(shù)為,分開處理參數(shù)W、b有點麻煩,一般常用方法是將W和b合并到同一個矩陣中,同時xi這個向量要增加一個維度,數(shù)值為1。具體見下圖:
左邊是先做矩陣乘法然后做加法,右邊是權(quán)重矩陣增加一個偏置列,輸入向量維度增加1,然后做矩陣乘法。這樣的好處是只用學習到一個權(quán)重矩陣。
損失函數(shù) loss function
? 評分函數(shù)的參數(shù)是矩陣W,數(shù)據(jù)(xi,yi)是給定的不能修改,我們可以通過修改參數(shù)矩陣W來調(diào)整,來使評分函數(shù)與真實的類別一致,即:真實類別的評分應(yīng)該是最高的。我們使用損失函數(shù)(loss function)來衡量對結(jié)果的不滿意程度。當評分函數(shù)與真實結(jié)果相差越大時,損失函數(shù)的值也就越大。
?多類別支持向量機損失(Muliticlass SVM Loss)
損失函數(shù)的類別有很多種,首先介紹多類別SVM損失函數(shù),SVM的損失函數(shù)要SVM在正確類別上的得分要比不正確類別上的得分高出一個Δ,針對第i個樣本的損失函數(shù)為:
稱為合頁損失函數(shù)(hinge loss),其中:為第j個類別的得分,yi是正確類別的標簽。舉例:假設(shè)有3個類別,s=[13,-7,11]。其中第一個類別是正確類別,假設(shè)Δ的值為10,損失函數(shù)(為兩部分的和:
第一部分的值為0,第二部分的值為8。SVM的損失函數(shù)想要正確分類類別yi的分數(shù)要比不正確分類的分數(shù)高,而且至少要高一個Δ(可以這樣寫sj+Δ <=syi),如果不滿足這一點,就需要計算損失值。更加形象化的如圖所示
“SVM的損失函數(shù)想要正確分類類別yi的分數(shù)要比不正確分類的分數(shù)高,而且至少要高一個Δ”,如果其他類別分數(shù)進入紅色區(qū)域,甚至更高,那么就需要計算損失,否則損失為0。我們的目標是找到一些權(quán)重,它們既能夠這樣的要求,又能讓損失值盡可能的小。
?正則化(Regularization):上面損失函數(shù)有一個問題,假設(shè)一組數(shù)據(jù)和權(quán)重W能夠?qū)γ總€樣本正確分類,即:對所有i都有Li=0;問題在于這個W并不唯一,例如W能使損失值都為0,當λ>1時,任何λW都能使損失值為0。所以我們希望向特定的權(quán)重W添加某些偏好,來消除不確定性,可以通過添加正則化懲罰(regularization penalty)來完成,常用的正則化項是L2范式,它通過對所有參數(shù)進行逐元素平方懲罰來抑制較大的權(quán)重:
上面式子僅包含權(quán)重W,不包含樣本,將W所有元素平方求和。給出完整的多分類SVM的損失函數(shù),包含兩部分:數(shù)據(jù)損失,即所有樣本的平均損失和正則化損失:
展開
其中N代表訓練樣本的個數(shù),λ表示正則化項的權(quán)重,它的確定需要動過cross-validation。
L2的一個最大的性質(zhì)是對大數(shù)值權(quán)重的懲罰,提升泛化能力,這就消除了某一個維度對整體分值影響過大的影響。eg:輸入向量x=[1,1,1,1],有兩個權(quán)重向量w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25],那么w1Tx =?w2Tx = 1,兩個權(quán)重向量得到相同的分值1,根據(jù)L2懲罰來看W2更好,因為它的正則化損失值更小。W2懲罰傾向于更小更分散的的權(quán)重向量,這樣就能鼓勵分類器將所有維度上的特征都使用起來。通常只對權(quán)重w 進行正則化,而不正則化偏置b。
代碼:無正則化部分的損失函數(shù),非向量化和半向量化損失的代碼實現(xiàn)
def hinge_unvectorized(x,y,W):"""實現(xiàn)hinge loss function,非向量化-x 樣本,是一個列向量-y 樣本的類別的標簽-W 權(quán)重矩陣返回第i條樣本的損失值"""delta = 1.0scores = W.dot(x)#每一個類別的得分,N x 1correct_class_score = scores[y]#正確類別的得分N = W.shape[0] #類別的個數(shù)loss_i = 0.0 #第i個樣本的loss值for j in range(N):if j == y:continue#跳過正確的類別,循環(huán)其他incorrect classesloss_i += max(0,scores[j] - correct_class_score + delta)return loss_i?
半向量化實現(xiàn)方式
def hinge_halfVectorized(x,y,W):"""半向量化的實現(xiàn)方式"""delta = 1.0scores = W.dot(x)#使用向量方法計算出各個類別的marginsmargins = np.maximum(0,scores - scores[y] + delta)#maximummargins[y] = 0 #減去yi的scoreloss_i = np.sum(margins)#求和return loss_i?
超參數(shù)delat和λ對損失函數(shù)中的數(shù)據(jù)損失和正則化損失之間權(quán)衡,權(quán)重W的大小對于分類分值有著直接的影響,對w進行縮小,那么分類之間的差值也會變小,反之亦然。權(quán)重的大小就能控制差異的變大或縮小,因此delta 為1或100是沒有意義的。因此真正的權(quán)衡是我們允許權(quán)重變大到何種程度(λ來進行控制)。
?softmax分類器
softmax可以理解為邏輯回歸泛化到多分類問題中,SVM分類器輸出f(xi,w)作為每個分類的評分(未標準化的,可能難以理解)。與SVM不同的是softmax輸出的是歸一化后的概率,更加的直觀,可以從概率上給出解釋。在softmax分類器中映射函數(shù)保持不變,但將這些評分值看做每一類別未歸一化的對數(shù)概率,損失函數(shù)為,fj代表評分向量f中第j個元素的值。為softmax函數(shù),它的作用是對評分值進行壓縮到[0,1]范圍。
注意事項:數(shù)值穩(wěn)定。編程實現(xiàn)softmax的時候,計算時候數(shù)值可能非常的大,歸一化的時候除以大數(shù)值會存在數(shù)值不穩(wěn)定。做法是分子分母同時乘以常熟C,并變換到求和之中,得到下面公式
C的值可以自由選擇,通常設(shè)置logC=-max(fi)。這樣將向量f中的數(shù)值進行平移,能提高計算的數(shù)值穩(wěn)定性,例子如下:
f = np.array([123,456,789])#3個類別對應(yīng)的分值,都比較大 p = np.exp(f) / np.sum(np.exp(f))#溢出:結(jié)果array([ 0., 0., nan]) #將f中的值平移,令最大值為0 f -= np.max(f) #向量f減去max(f) f:array([-666, -333, 0]) p = np.exp(f) / np.sum(np.exp(f))#OK,結(jié)果正確?
?關(guān)于命名規(guī)則:SVM分類器使用的是合頁損失函數(shù)(hinge loss),有時又被稱為最大邊界損失(max-margin loss)。softmax分類器使用的是交叉熵損失(cross-entropy loss),softmax分類器的命名是從softmax函數(shù)那里得來,softmax函數(shù)將原始分類評分歸一化到[0,1],這樣處理后才能應(yīng)用到交叉熵。從技術(shù)熵說“softmax損失”是沒有意義的。
SVM和softmax的對比
下圖有助于理解SVM和softmax處理步驟的不同
這個圖舉例說明了SVM和softmax在處理一個樣本點的方式不同。兩個分類器都是通過矩陣相乘的方式計算得到相同的分值向量f,不同之處在于對分值的解釋:SVM將它看做是分類的評分,它的損失函數(shù)鼓勵正確分類的分值比其他分類至少高出一個邊界值(delta)。softmax分類器將這些分值看做是每個分類沒有歸一化的對數(shù)概率值,希望正確分類的歸一化對數(shù)概率值最高,其他的低。
softmax分類器計算出的結(jié)果為eg:[0.9,0.09,0.01],這樣就能得出所有分類標簽的“可能性”,代表不同類別的自信程度。為什么要在“可能性”上面打上引號,這是因為可能性的集中(eg:[1,0,0])或離散程度([0.33,0.33,0.33])是由正則化參數(shù)λ決定,λ是我們能夠直接控制的輸入?yún)?shù)。舉個栗子:
假設(shè)三個分類的原始分數(shù)是[1,-2,0],softmax計算結(jié)果如下:
如果正則化參數(shù)λ變大,那么權(quán)重W就會被懲罰的更多,各個維度的權(quán)重數(shù)值會變小,softmax計算結(jié)果如下:
從例子可以看出,概率的分布變得更加分散了,如果隨著λ的變大,權(quán)重W值會越來越小,最后輸出的概率分布就接近均勻分布。這也就是說,softmax分類器得到的概率值的相對大小是對某種類別的自信程度。
舉例對比SVM和softmax:與softmax相比,SVM更加的“l(fā)ocal?objective”,假設(shè)評分值為[10,-2,3]類別1為正確類別,SVM得到的損失函數(shù)為0,如果分數(shù)是[10, 9, 9] 甚至是 [10, -100, -100],對于SVM來說只要滿足邊界值(margin or delta)大于等于1,損失值都為0.對于softmax,[10,9,9]計算出的損失值遠遠大于[10, -100, -100],它希望正確分類值盡可能的大,錯誤分類值盡可能小,損失值盡可能的小。SVM只要求邊界值被滿足就可以了,不會去限制具體的分數(shù)。打比方來說:汽車分類器應(yīng)該把精力花在如何分辨小轎車和大卡車上,而不應(yīng)被青蛙樣本所影響。因為青蛙的評分已經(jīng)夠低的了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/wxshi/p/6056438.html
總結(jié)
以上是生活随笔為你收集整理的cs231n笔记:线性分类器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day 68 增删改查 语法
- 下一篇: sqlserver字符串多行合并为一行