日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习与计算机视觉(二)线性SVM与Softmax分类器

發布時間:2023/12/15 pytorch 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习与计算机视觉(二)线性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、線性SVM與Softmax分類器

鑒于kNN的分類弊端,本節介紹一種新的分類器,其中由兩個很重要的概念:

  • 得分函數:將原始數據映射到每個類的打分的函數

  • 損失函數:用于量化模型預測結果和實際結果之間吻合度的函數

得到損失函數之后,我們就將問題轉化為一個最優化的問題,目標是得到讓我們的損失函數取值最小的一組參數。

2.1 得分函數(score function)

首先我們定義一個有原始的圖片像素值映射到最后類目得分的函數,也就是這里提到的得分函數。

假設我們的訓練數據為xiRDxi∈RD,對應的標簽yiyi,這里i=1Ni=1…N
表示NN個樣本,yi1Kyi∈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λλ是一樣的作用,只不過他們的大小對結果的影響是相反的,也就是C1/λ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)=ezjkezkfj(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分类器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。