信息熵
信息熵也被稱為熵,用來表示所有信息量的期望。
公式如下:
例如在一個三分類問題中,貓狗馬的概率如下:
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