损失函数一般使用 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x))表示,代表预测值和实际值的偏差程度,一般是追求越小越好。
此外,再看一些定义:
在回归任务中,预测值和实际值都是实数,一般采用残差 y − f ( x ) y-f(x) y−f(x) 来度量两者的不一致程度.。
顾名思义,均方误差(MSE)度量的是预测值和实际观测值间差的平方的均值。它只考虑误差的平均大小,不考虑其方向。
进一步也可以演变为均方根误差函数。
R M S E = ∑ i = 0 n ( y i − y ^ i ) 2 n R M S E=\sqrt{\frac{\sum_{i=0}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}}{n}} RMSE=n∑i=0n(yi−y^i)2
和 MSE 一样,这种度量方法也是在不考虑方向的情况下衡量误差大小。
与其它损失函数相比,这个函数在机器学习领域没有那么常见。它与 MAE 相似,唯一的区别是这个函数没有用绝对值。用这个函数需要注意的一点是,正负误差可以互相抵消。
MAPE = ∑ i = 1 n ∣ y i − y ^ i y i ∣ × 100 n \text { MAPE }=\sum_{i=1}^{n}\left|\frac{y_{i}-\hat{y}_{i}}{y_{i}}\right| \times \frac{100}{n} MAPE =i=1∑n∣ ∣yiyi−y^i∣ ∣×n100
相比 RMSE,MAPE 相当于把每个点的误差进行了归一化, 降低了个别离群点带来的绝对误差的影响。
L Huber ( f , y ) = { ( f − y ) 2 , ∣ f − y ∣ ⩽ δ 2 δ ∣ f − y ∣ − δ 2 , ∣ f − y ∣ > δ L_{\text {Huber }}(f, y)= \begin{cases}(f-y)^{2}, & |f-y| \leqslant \delta \\ 2 \delta|f-y|-\delta^{2}, & |f-y|>\delta\end{cases} LHuber (f,y)={(f−y)2,2δ∣f−y∣−δ2,∣f−y∣⩽δ∣f−y∣>δ
当δ~ 0时,Huber损失会趋向于MAE;当δ~ ∞(很大的数字),Huber损失会趋向于MSE。
为何使用Huber损失函数?
使用MAE用于训练神经网络的一个大问题就是,它的梯度始终很大,这会导致使用梯度下降训练模型时,在结束时遗漏最小值。对于MSE,梯度会随着损失值接近其最小值逐渐减少,从而使其更准确。
在这些情况下,Huber损失函数真的会非常有帮助,因为它围绕的最小值会减小梯度。而且相比MSE,它对异常值更具鲁棒性。因此,它同时具备MSE和MAE这两种损失函数的优点。不过,Huber损失函数也存在一个问题,我们可能需要训练超参数δ,而且这个过程需要不断迭代。
当
指预测值和目标值不相等为1, 否则为0:
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y, f(X))=\left\{\begin{array}{l}1, Y \neq f(X) \\ 0, Y=f(X)\end{array}\right. L(Y,f(X))={1,Y=f(X)0,Y=f(X)
应用:感知机模型
特点:属于非凸函数,一般来说不适用于其他的分类模型。
L ( Y , P ( Y ∣ X ) ) = − log P ( Y ∣ X ) = − log ∏ i = 1 P ( Y = y i ∣ X = x i ) = − l o g ∏ i = 1 ∏ j = 1 p i j y i j = ∑ i = 1 N ∑ j = 1 M y i j log ( p i j ) → − 1 N ∑ i = 1 N ∑ j = 1 M y i j log ( p i j ) \begin{aligned} L(Y, P(Y \mid X))&=-\log P(Y \mid X)\\ &=-\log \prod _{i=1}P(Y=y_i|X=x_i)\\ &=-log \prod_{i=1}\prod_{j=1}p_{ij}^{y_{ij}}\\ &=\sum_{i=1}^{N} \sum_{j=1}^{M} y_{i j} \log \left(p_{i j}\right)\\ &\to -\frac{1}{N} \sum_{i=1}^{N} \sum_{j=1}^{M} y_{i j} \log \left(p_{i j}\right)\\ \end{aligned} L(Y,P(Y∣X))=−logP(Y∣X)=−logi=1∏P(Y=yi∣X=xi)=−logi=1∏j=1∏pijyij=i=1∑Nj=1∑Myijlog(pij)→−N1i=1∑Nj=1∑Myijlog(pij)
其中, Y = y 1 , . . . , y M Y={y_1,...,y_M} Y=y1,...,yM为输出变量, X = x 1 , . . . , x N X={x_1,...,x_N} X=x1,...,xN为输入变量, M为分类别数, yij是一个二值指标(取0或者1), 表示类别 j 是否是输入实例 xi 的真实类别. p i j p_{ij} pij 为模型或分类器预测输入实例 xi 属于类别 j 的概率。
应用:逻辑回归模型
对于(0-1)二分类,可以改写为如下形式:
− 1 N ∑ i = 1 N ( y i log p i + ( 1 − y i ) log ( 1 − p i ) ) -\frac{1}{N} \sum_{i=1}^{N}\left(y_{i} \log p_{i}+\left(1-y_{i}\right) \log \left(1-p_{i}\right)\right) −N1i=1∑N(yilogpi+(1−yi)log(1−pi))
特点:
L ( Y , P ( Y ∣ X ) ) = exp [ − y f ( x ) ] L(Y, P(Y \mid X))=\exp[-yf(x)] L(Y,P(Y∣X))=exp[−yf(x)]
应用:AdaBoost算法
特点:对离群点、噪声非常敏感
hinge损失函数表示如果被分类正确,损失为0,否则损失就为 1 − y f ( x ) 1-yf(x) 1−yf(x)。
L ( y , f ( x ) ) = m a x ( 0 , 1 − y f ( x ) ) L(y,f(x)) = max(0,1-yf(x)) L(y,f(x))=max(0,1−yf(x))
应用:SVM
特点
一般的 f ( x ) f(x) f(x) 是预测值,在-1到1之间, y y y 是目标值(-1或1)。其含义是, f ( x ) f(x) f(x) 的值在-1 和+1之间就可以了,并不鼓励 ∣ f ( x ) ∣ > 1 |f(x)|>1 ∣f(x)∣>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。
健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释。
等价于对数损失函数
在用sigmoid作为激活函数的时候,为什么要用交叉熵损失函数,而不用均方误差损失函数?
参考:https://zhuanlan.zhihu.com/p/58883095