深度學習常用損失函數

損失函數的作用是衡量實際輸出與預計輸出之間的差異,損失函數的設計是深度學習中十分重要的部分,不僅會影響到訓練的速度,還會影響隱含層中數據的分佈情況。目前僅僅是總結了部分常用損失函數的計算方法,其中涉及很多統計學最優化知識,對此僅僅是淺嘗輒止,其中更多的原理還需要以後慢慢總結體會,以下僅簡要記錄其計算方法。

目前記錄的損失函數有限,後續會繼續更新

1 MSE

均方誤差算是最簡單也是最經典的一種計算損失的方法,其中 y^\hat y 爲實際輸出,yy 爲標籤。
mse_loss=1Ni=1N(yiy^i)2 mse\_loss =\frac{1}{N} \sum _{i=1} ^N (y_i - \hat y_i)^2

2 CrossEntropy

交叉熵是從KL散度中引出,用於衡量兩個分佈之間差異的大小,其值總是大於等於0,兩個分佈越相似其值越接近於0。訓練時的標籤可以當成一種分佈,實際輸出堪稱另一種分佈,常與softmax層結合用於分類模型。
CrossEntropy_loss=iyilogy^i CrossEntropy\_loss = -\sum _i y_i·log\hat y_i

3 log損失函數

log損失通常用於邏輯迴歸,是二分類中常用的損失函數,若二分類中使用mse損失會造成最後優化函數爲非凹函數,不利於訓練。其中 xx 表示輸出該特徵,yy 表示所屬類別, p(1/x)p(1/x) 表示輸入特徵 xx 屬於類別 11 的概率。
log_loss={log[p(1/x)],y=1log[1p(1/x)],y=0 log\_loss = \begin{cases} -log[p(1/x)], &&&y=1 \\ -log[1-p(1/x)],&&&y=0 \end{cases}
將上面分類書寫的形式變換一下,便得到了BCE_loss,只不過是換了一個名字而已,效果與上式相同
BCE_loss=ylog(p(y/x))(1y)log(1p(y/x)) BCE\_loss = -y·log(p(y/x)) - (1-y)·log(1 - p(y/x))
邏輯迴歸是分類網絡中基礎又重要的一個網絡,GAN網絡中的discriminator便是使用這種二分類網絡。比較GAN網絡的損失函數便會發現相似之處
minGmaxDV(G,D)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(x)))] \mathop{min} \limits_G\mathop{max} \limits_ D V(G,D) = E_{x∼pdata(x)}[logD(x)]+E_{z∼pz(z)}[log(1−D(G(x)))]

4 Smooth L1

smooth L1是何凱明提出的優化的MSE損失,能有有效地優化梯度爆炸問題。這個例子表明我們可以根據我們網絡的具體表現適當調節我們的損失函數從而解決特定的訓練問題。
KaTeX parse error: Expected & or \\ or \cr or \end at position 57: …i - y_i)^2, &&&\̲m̲b̲o̲x̲{if }&|x_i - y_…

5 F-divergence

F-divergence是一個大的類,其中 FF 表示特定的函數,當函數 FF 不同便表示的不同的散度,上面提到的交叉熵便是 KL散度即 KL-divergence。其中KL使用的 FFtlogtt·logt 。F-divergence損失函數如下:
Df(PdataPg)=xPg(x)f(Pdata(x)Pg(x)) dx D_f (P_{data}||P_g) = \int_x P_g(x)f(\frac{P_{data}(x)}{P_g(x)})\, dx
目前還有很多損失函數沒有總結,比如用於人臉識別的TripletMarginLoss 比起一般的損失函數能夠很好地將不同的人臉特徵分開。總之損失函數對深度學習的影響非常重要,很多時候使用一種損失導致訓練崩壞而換一種損失便能得到不錯的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章