盤點深度學習中的損失函數


損失函數度量的是訓練的模型與真實模型之間的距離。一般以最小化損失函數為目標,對模型進行不斷優化。

常見的損失函數在計算過程中都會接受兩個參數:模型預測值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)

余弦相似度

余弦相似度是兩個向量的夾角的余弦值。

一般計算方法為:

\[cosine\_similarity = \frac{a \cdot b}{||a|| ||b||} \]

keras計算的時候,會把上式拆成兩個l2_norm的相乘:

loss = -sum(l2_norm(y_true) * l2_norm(y_pred))

這里的l2_norm就是

\[l2\_norm(x) = \frac{x}{max(\sum_i x_i^2, epsilon)} \]

epsilon就是為了避免向量的元素和為0

api: keras.losses.cosine_similarity(y_true, y_pred, axis=-1)

keras把計算的值取負了,這樣越接近-1相似度越高。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM