損失函數度量的是訓練的模型與真實模型之間的距離。一般以最小化損失函數為目標,對模型進行不斷優化。
常見的損失函數在計算過程中都會接受兩個參數:模型預測值y_pred
和正確答案y_true
。
由於背后的數學計算過程相同,所以即使是不同深度學習框架這些損失函數的api也是大同小異。本文以keras為例,羅列出幾個常見的損失函數。
均方誤差 mean squared error, MSE
回歸任務常用的損失函數,也是最簡單粗暴的損失函數。
loss = mean(square(y_true - y_pred), axis=-1)
api: keras.losses.mean_squared_error(y_true, y_pred)
平均絕對誤差 mean absolute error, MAE
loss = abs(y_true - y_pred)
api: keras.losses.mean_absolute_error(y_true, y_pred)
mean absolute percentage error
沒了解過,先記着。
loss = 100 * abs(y_true - y_pred) / y_true
api:keras.losses.mean_absolute_percentage_error(y_true, y_pred)
hinge loss
合頁損失函數
loss = mean(maximum(1 - y_true * y_pred, 0), axis=-1)
api: keras.losses.hinge(y_true, y_pred)
相對熵 Kullback-Leibler divergence, KL散度
loss = y_true * log(y_true / y_pred)
api: keras.losses.KLD()
sparse categorical crossentropy
稀疏的類別交叉熵,主要用於多分類。
其中y_pred是一般是未經處理的logits,當然也可以是softmax歸一化后的概率分布(keras默認)
y_true是標簽
categorical crossentropy
類別交叉熵,和sparse categorical crossentropy唯一的區別就是,這里的y_true是one-hot形式
binary_crossentropy 二元交叉熵
對於二分類的問題,多分類的交叉熵直接使用二元交叉熵
api:keras.losses.binary_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)
余弦相似度
余弦相似度是兩個向量的夾角的余弦值。
一般計算方法為:
keras計算的時候,會把上式拆成兩個l2_norm的相乘:
loss = -sum(l2_norm(y_true) * l2_norm(y_pred))
這里的l2_norm
就是
epsilon就是為了避免向量的元素和為0
api: keras.losses.cosine_similarity(y_true, y_pred, axis=-1)
keras把計算的值取負了,這樣越接近-1相似度越高。