二、損失函數
-
損失函數定義:損失函數是用來衡量模型參數的質量的函數,衡量方式是比較網絡輸出和真實輸出的差異
-
別名:損失函數(loss function),代價函數(cost function),目標函數(objective function),誤差函數(error function)
1.多分類損失函數
- 在多分類任務通常使用softmax將logits轉換為概率的形式,所以多分類的交叉熵損失也叫做softmax損失,它的計算方法是:L=?∑i=1nyilog(S(fθ(xi)))L=-\sum_{i = 1}^ny_ilog(S(f_\theta(x_i)))L=?∑i=1n?yi?log(S(fθ?(xi?)))
- yiy_iyi?:真實值標簽(one_hot熱編碼)
- f(x)f(x)f(x)是樣本屬于某一類別的預測分數
- S(fθ(xi))S(f_\theta(x_i))S(fθ?(xi?)):網絡輸出結果的概率值
- i=1i=1i=1:樣本個數
- 在pytorch中使用nn.CrossEntropyLoss()實現
2.二分類任務損失函數
- 在處理二分類任務時, 使用sigmoid激活函數,則損失函數也會進行相應的調整,使用二分類的交叉熵損失函數:L=?ylogy^?(1?y)log(1?y^)L = -ylog\hat y-(1-y)log(1-\hat y)L=?ylogy^??(1?y)log(1?y^?)
- y是樣本x中屬于某一個類別的真實概率
- y^\hat yy^?是嚴格不能屬于某一類別的預測概率
- LLL用來衡量真實值y與預測值y^\hat yy^?之間的差異性的損失結果
- 在pytorch中使用nn.BCELoss()實現
3.回歸任務損失函數-MAE損失函數
- Mean absolute loss(MAE)也被稱為L1 Loss,是以絕對誤差作為距離,損失函數公式:L=1n∑i=1n∣yi=fθ(xi)∣L = \frac{1}{n}\sum_{i = 1}^n|y_i=f_\theta(x_i)|L=n1?∑i=1n?∣yi?=fθ?(xi?)∣
- 特點:
- 由于L1 loss具有稀疏性,為了懲罰較大的值,因此常常將其作為正則項添加到其他loss中作為約束;
- L1 loss的最大問題時梯度在零點不平滑,導致會跳過極小值(最優解)
4.回歸任務損失函數-MSE損失函數
- Mean Squared Loss/Quadratic Loss(MSE loss)也被稱作L2 loss,或歐氏距離,它以誤差的平方和的均值作為距離損失函數公式:L=1n∑i=1n(yi?fθ(xi))2L = \frac{1}{n}\sum_{i = 1}^n(y_i-f_{\theta(x_i)})^2L=n1?∑i=1n?(yi??fθ(xi?)?)2
- 特點:
- L2 loss也常常作為正則項
- 當預測值與目標值相差很大時,梯度容易爆炸(則盡量不會使用這種損失函數)
5.回歸任務損失函數-smooth L1損失函數
- smooth L1說的是光滑之后的L1,損失函數公式為:smoothL1(x)={0.5x2if?∣x∣<1∣x∣?0.5otherwise\text{smooth}_{L_1}(x) =
\begin{cases}
0.5x^2 & \text{if } \vert x \vert < 1 \\
\vert x \vert - 0.5 & \text{otherwise}
\end{cases}smoothL1??(x)={0.5x2∣x∣?0.5?if?∣x∣<1otherwise?
- 其中,x=f(x)?yx = f(x)-yx=f(x)?y為真實值與預測值的差值
- 從圖像中可以看出,該函數實際上就是一個分段函數
- 在[?1,1][-1, 1][?1,1]之間實際上就是L2損失,這樣解決了L1的不光滑問題
- 在[?1,1][-1, 1][?1,1]區間外,實際上就是L1損失,這樣就解決了離群點梯度爆炸的問題