1. 程式人生 > >2、多類SVM

2、多類SVM

ear 知識點 情況 意義 好的 數量 常常 最優化 矩陣

一、疑問

1. assignments1

  • linear_svm.py文件的函數 svm_loss_naive中,使用循環的方式實現梯度計算

  • linear_svm.py文件的函數 svm_loss_vectorized中,梯度的向量化實現

SVM的損失函數在某個數據點上的計算:

技術分享圖片

對函數進行微分,比如對技術分享圖片進行微分得到:

技術分享圖片

在代碼實現的時候,只需要計算沒有滿足邊界值的分類的數量(因此對損失函數產生了貢獻),然後乘以技術分享圖片就是梯度了。註意,這個梯度只是對應正確分類的W的行向量的梯度,那些技術分享圖片行的梯度是:

技術分享圖片

二、知識點

1. 數據集劃分

  • 訓練集:訓練模型用;

  • 驗證集:用以最優參數的調試選擇;

  • 測試集:測定訓練好的模型的表現情況;

  • 開發集:在實際開發中,訓練集往往包含很多數據,為了節省計算時間,往往使用訓練集的一小部分子集,用作模型的訓練。

2. 梯度檢查

? 數值梯度和解析梯度的值有時候在某個維度會相差較多。這是因為數值梯度的計算采用的是用前後2個很小的隨機尺度(比如0.00001)進行計算,當loss不可導的時候,兩者會出現差異。**

3.損失函數

  • SVM只關心正確分類的得分與錯誤分類的得分至少要高於邊界值,若不滿足,便計算相應的損失值。
  • 折葉損失:$max(0, -)$函數。
  • 平方折葉損失:$max(0, -)^2$**。更強烈得懲罰過界的邊界值。在某些數據集會工作得更好,可以通過交叉驗證來決定使用哪個損失計算函數。
  • 由於max操作,損失函數中存在一些不可導點(kinks),
    這些點使得損失函數不可微,因為在這些不可導點,梯度是沒有定義的。但是次梯度依然存在且常常被使用。

4. 設置Delta

? 超參數delta和$\lambda$一起控制損失函數中數據損失和正則化損失之間的權衡。但是對於通過縮小或擴大權重矩陣的值,改變不同分類值之間的差異,因此,在一定程序上改變delta是沒有意義的。真正的權衡是通過正則化強度來控制權重能夠變大到何種程度。

5. 在初始形式中進行初始化

? 損失函數的最優化的始終在非限制初始形式下進行。很多這些損失函數從技術上來說是不可微的(比如當技術分享圖片時,技術分享圖片函數就不可微分),但是在實際操作中並不存在問題,因為通常可以使用次梯度。

2、多類SVM