深度學習裡的損失函式與交叉熵
1.MSE損失函式
損失函式是機器學習與深度學習裡面的重要概念。從名字上就可以看出,損失函式(Loss Function)反應的是模型對資料的擬合程度。一般來說,損失函式越小,說明模型對資料的擬合也越好。同時我們還希望當損失函式比較大的時候,對應的梯度也會比較大,這樣梯度下降的時候更新也會快一些。
線性迴歸中,最常用的就是最小平方誤差(MSE)了。MSE也相當簡單:
其中,
為樣本的真實值,
為預測值。
MSE的意義相當明確:如果預測值與真實值的歐式距離越大,損失函式越大。歐式距離越小,損失函式越小。同時,求導也是相當容易:
其中,
是模型中待訓練的引數。
一般來說,MSE是個很中庸的選擇。用了MSE,一般不會有什麼大毛病,但同時也不要指望他有特別優秀的表現。
2.Sigmoid一般不與MSE配合使用
上面求MSE導數的時候,注意到最後有一項是 對引數求導。在深度學習裡,Sigmoid函式是常見的啟用函式。特別注意的是,當使用Sigmoid做啟用函式的時候,損失函式不能選擇MSE。因為Sigmoid的導數為 。假設當預測值為 而真實值為0的時候,此時雖然 很大,但是 太小接近0,收斂速度同樣很慢。
3.常見的損失函式與啟用函式的組合
3.1 MSE + Sigmoid以外的啟用函式
第二部分特意提到,MSE一般不與Sigmoid函式配合使用。
3.2 Cross Entropy + Sigmoid
前面我們提到Sigmoid函式的導數為
。所以我們的損失函式最好是分母上有這一項。所以一般使用交叉熵作為損失函式:
3.3 Softmat + Cross Entropy / log-likehood
對於多分類問題,Softmax是常用的方式。Softmax本質上是一個歸一化變換,能將普通的輸出變成一個概率輸出。
4.KL散度
如果我們有另一個獨立的隨機變數x相關的事件B,該怎麼計算它們之間的區別?
此處我們介紹預設的計算方法:KL散度,有時候也叫KL距離,一般被用於計算兩個分佈之間的不同。看名字似乎跟計算兩個點之間的距離也很像,但實則不然,因為KL散度不具備有對稱性。在距離上的對稱性指的是A到B的距離等於B到A的距離。
舉個不恰當的例子,事件A:張三今天買了2個土雞蛋,事件B:李四今天買了6個土雞蛋。我們定義隨機變數x:買土雞蛋,那麼事件A和B的區別是什麼?有人可能說,那就是李四多買了4個土雞蛋?這個答案只能得50分,因為忘記了"座標系"的問題。換句話說,對於張三來說,李四多買了4個土雞蛋。對於李四來說,張三少買了4個土雞蛋。選取的參照物不同,那麼得到的結果也不同。更嚴謹的說,應該是說我們對於張三和李四買土雞蛋的期望不同,可能張三天天買2個土雞蛋,而李四可能因為孩子滿月昨天才買了6個土雞蛋,而平時從來不買。
KL散度的數學定義:
對於離散事件我們可以定義事件A和B的差別為
對於連續事件,將求和改為積分即可。
由上面的公式可以看出:
5.交叉熵
交叉熵的定義: