? ? loss函數,即損失函數,是決定網絡學習質量的關鍵。若網絡結構不變的前提下,損失函數選擇不當會導致模型精度差等后果。若有錯誤,敬請指正,Thank you!
目錄
一、loss函數定義
二、常見的loss算法種類
1.MSE(均值平方差)
2.交叉熵
三、總結
四、tensorflow相應函數
1.MSE
2.交叉熵
一、loss函數定義
loss函數的作用就是描述模型的預測值與真實值之間的差距大小。我的理解是尋找一個標準來幫助訓練機制隨時優化參數,以便于找到網絡的最高精度下的參數。這個標準不難理解,與我們日常生活中的很多事情一致,例如倒車入庫,在你倒車的同時肯定會一邊打方向盤一邊看倒后鏡一樣(當然具備自動倒車入庫功能的車除外),根據倒后鏡中看到的停車線,隨時調整以便能夠準確入庫,這個停車線就是標準。更通俗的來說,loss函數就是指導模型在訓練過程中朝著收斂的方向前進。
?
二、常見的loss算法種類
1.MSE(均值平方差)
數理統計中演化而來,均方誤差是指參數估計值和參數真實值之差平方的期望值。在此處其主要是對每個預測值與真實值作差求平方的平均值,具體公式如下所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
MSE越小代表模型越好,類似的算法還包括RMSE和MAD。
2.交叉熵
交叉熵(crossentropy)刻畫了兩個概率分布之間的距離,更適合用在分類問題上,因為交叉熵表達預測輸入樣本屬于某一類的概率。其公式如下所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?? ? ? ??
與MSE一樣,交叉熵也是值越小代表模型精度越高。
三、總結
loss函數的選取取決于輸入標簽數據的類型:若輸入的是實數、無界的值,損失函數使用平方差;若輸入標簽是位矢量(分類標志),使用交叉熵更適合。此外預測值與真實值要采用同樣的數據分布,以便于loss函數取得更佳的效果。
四、tensorflow相應函數
由于博主是基于tensorflow的框架來學習深度學習,之后的每篇文章最后一部分都會介紹tensorflow相應函數。
1.MSE
tensorflow沒有單獨的MSE函數,不過可由開發者自己組合即可,如下所示:
#logits為真實值,outputs為預測值
MSE = tf.reduce_mean(tf.square(logits-outputs)))
RMSE = tf.sqrt(tf.reduce_mean(tf.square(logits-outputs)))
mad = tf.reduce_mean(tf.complex_abs(logits-outputs))
2.交叉熵
tensorflow具有多種常見的交叉熵函數:
#Sigmoid交叉熵
tf.nn.simoid_cross_entropy_with_logits(logits,target,name=None)
#softmax交叉熵
tf.nn.softmax_cross_entropy_with_logits(logits,target,name=None)
#Sparse交叉熵
tf.nn.sparse_cross_entropy_with_logits(logits,target,name=None)
#加權Sigmoid交叉熵
tf.nn.weighter_cross_entropy_with_logits(logits,target,pos_weight,name=None)
參考文獻:
1.《深度學習之tensorflow》