機器學習常用損失函數


信息熵

信息熵也被稱為熵,用來表示所有信息量的期望。
公式如下:

例如在一個三分類問題中,貓狗馬的概率如下:

label
predict 0.7 0.2 0.1
信息量 -log(0.7) -log(0.2) -log(0.1)

信息熵為:H = −(0.5∗log(0.5)+0.2∗log(0.2)+0.3∗log(0.3))

針對二分類問題可以簡寫如下:

相對熵(KL散度)

如果對於同一個隨機變量X,有兩個單獨的概率分布P(x)和Q(x),則我們可以使用KL散度來衡量這兩個概率分布之間的差異。
用來表示兩個概率分布的差異
公式如下:

# pytorch代碼
kl_loss = torch.nn.KLDivLoss()
kl_loss_output = klloss(logit1, logit2)

例如在一個三分類問題中,概率如下:

label 1 0 0
predict 0.7 0.2 0.1

則KL散度如下:

交叉熵(CE, Cross Entropy)

交叉熵 = KL散度 + 信息熵,常作為損失函數來最小化KL散度,且計算比KL散度簡單。
常用於計算label和概率之間的差異,計算量比KL散度小
公式如下(可以通過上文信息熵和KL散度推導):

# pytorch代碼
crossentropy_loss = torch.nn.CrossEntropyLoss()
crossentropy_loss_output = crossentropyloss(label, predict)

舉例如下:

label 1 0 0
predict 0.7 0.2 0.1

那么loss計算公式如下:

和MSE對比:當使用sigmoid作為激活函數的時候,常用交叉熵損失函數而不用均方誤差損失函數,因為它可以完美解決平方損失函數權重更新過慢的問題,具有“誤差大的時候,權重更新快;誤差小的時候,權重更新慢”的良好性質。

和方差(SSE)

和方差用來計算兩個概率分布之間的差異,計算公式如下:

均方差(MSE)

均方差也用來計算兩個概率分布之間的差異,計算公式如下:

# pytorch代碼
mse_loss = torch.nn.MSELoss(reduce=True, size_average=True)
mse_loss_output = mse_loss(logit1, logit2)

還是拿三分類問題舉例:

label 1 0 0
teacher_pre 0.7 0.2 0.1
student_pre 0.6 0.2 0.2

那么mse loss = [(0.7-0.6)^2 + (0.2-0.2)^2 + (0.1-0.2)^2] / 3

均方根誤差(RMSE)

也叫回歸系統的擬合標准差,是MSE的平方根,計算公式如下:

SSE、MSE、RMSE三者比較相似,其中MSE常用於模型蒸餾中,用於計算student和teacher的logit之間的概率分布差異

Hinge損失函數

專用於二分類的損失函數,公式如下:

SVM使用的損失函數,如果分類正確,則loss為0,否則損失為1-yf(x),其中1可以作為一個超參數設置為其他值
其中|f(x)|<=1,y是目標值1或者-1


免責聲明!

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



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