【知识】常见损失函数
常见损失函数其实不多:MSE均方误差,交叉熵,对数损失,hingeLoss,BPRLoss等。
MSE均方误差
MSE其实很简单:
\[MSELoss = \frac{1}{2N}\sum\limits_{i=1}^N ||y-\hat{y}||^2
\]
一般作为回归问题的损失,作为二分类问题的损失函数会有梯度消失的问题,后面有提到。
交叉熵
交叉熵和logloss对数损失是等价的。概念定义的出发点可能不同,这里我们就不细究了。
\[cross-entropy loss: H(y) = -\sum y_i log\hat{y}_i
\]
其中,yi是true label,y^i则是预测输出的概率,i则代表类别数,比如二分类,yi则从{0,1}中不放回取值,之后求交叉熵求和。多分类则一般将y处理为one-hot(单标签)/multi-hot(多标签)编码,位数为class_num,然后yi对应其中每位。
多分类情况下,交叉熵的yi则应是onehot之后的。
在tf中应用时,发现并没有现成的cross_entropy可用,只有softmax_cross_entropy和sigmoid_cross_entropy。这两个就是softmax+cross_entropy 和 sigmoid+cross_entropy.然后softmax这个只能做多分类单标签。sigmoid则可以做多分类多标签(一个样本可以对应多个类)。具体参考深度学习原理:交叉熵cross-entropy。
指数损失函数
\[L(y,f(x))=\frac{1}{n}\sum_ie^{-y_if(x_i)}
\]
Adaboost算法就使用类指数损失函数。
Hinge Loss 合页损失
\[L(y,f(x))=\frac{1}{N}max(0,1-y_if(x_i))
\]
其中y是label,{-1,+1}。f(x)是预测值,[-1,1]。不鼓励 |y|>1,即让某个样本能够正确分类就可以了。
其他损失函数
0-1损失函数
\[L(y,f(x)) = y==f(x)?0:1
\]
绝对值损失函数
\[L(y,f(x)) = |y-f(x)|
\]
常见面试问题:
MSE为什么不能作为二分类问题的损失函数?
因为这样会产生梯度消失。数学推导如下:
\[MSELoss = \sum\limits_i^N(y_i-\sigma(wx_i))^2,\,\, \sigma(wx_i)=\frac{1}{1+e^{-wx_i}}
\]
\[\frac{\partial MSELoss(w)}{\partial w}= \sum\limits_i^N 2(y_i-\sigma(wx_i))(1-\sigma(wx_i))\sigma(wx_i)(-x_i)= \sum\limits_i^N -2(y_i-\sigma(wx_i))(1-\sigma(wx_i))\sigma(wx_i)x_i
\]
因为\(\sigma(wx_i)\)的优化目标是接近\(y_i\)
所以\(\sigma(wx_i)\)和\((1-\sigma(wx_i))\)中的一个也会越来越接近0,也就是递加项大概率接近0,从而导致梯度消失。
而由逻辑回归推导得,交叉熵的梯度:
\[\frac{\partial CrossEntropyL(w)}{\partial w} = =\sum\limits_{i=1}^N[x_i(1-\sigma(w^Tx_i)-y_i)]
\]
就没有这个问题。

浙公网安备 33010602011771号