损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数是指经验风险损失函数加上正则项。
0-1损失是指预测值和目标值不相等为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)
特点:
Hinge损失函数标准形式如下:
L ( y , f ( x ) ) = max ( 0 , 1 − y f ( x ) ) L(y, f(x))=\max (0,1-y f(x)) L(y,f(x))=max(0,1−yf(x))
特点:
log对数损失函数的标准形式如下:
L ( Y , P ( Y ∣ X ) ) = − log P ( Y ∣ X ) L(Y, P(Y \mid X))=-\log P(Y \mid X) L(Y,P(Y∣X))=−logP(Y∣X)
特点:
Logistic损失标准形式如下:
L ( y , f ( x ) ) = log 2 ( 1 + e − y f ( x ) ) L(y, f(x))=\log_2 (1+e^{-yf(x)}) L(y,f(x))=log2(1+e−yf(x))
特点:
交叉熵损失函数的标准形式如下:
L ( y , f ( x ) ) = − 1 n ∑ x [ y ln f ( x ) + ( 1 − y ) ln ( 1 − f ( x ) ) ] L(y, f(x))=-\frac{1}{n} \sum_{x}[y \ln f(x)+(1-y) \ln (1-f(x))] L(y,f(x))=−n1x∑[ylnf(x)+(1−y)ln(1−f(x))]
特点:
绝对值损失函数是计算预测值与目标值的差的绝对值:
M A E = 1 n ∑ i = 1 n ∣ Y i − f ( x i ) ∣ MAE=\frac{1}{n}\sum_{i=1}^n|Y_i-f(x_i)| MAE=n1i=1∑n∣Yi−f(xi)∣
特点:
M A P E = 1 n ∑ i = 1 n ∣ ( Y i − f ( x i ) ) Y i ∣ MAPE=\frac{1}{n}\sum_{i=1}^n|\frac{(Y_i-f(x_i))}{Y_i}| MAPE=n1i=1∑n∣Yi(Yi−f(xi))∣
特点:
平方损失函数标准形式如下:
M S E = 1 n ∑ i = 1 n ( Y i − f ( x i ) ) 2 MSE=\frac{1}{n}\sum_{i=1}^n (Y_i-f(x_i))^{2} MSE=n1i=1∑n(Yi−f(xi))2
特点:
Huber损失标准形式如下:
f ( x ) = { ( Y − f ( X ) ) 2 , ∣ Y − f ( X ) ∣ ≤ δ 2 δ ∣ Y − f ( X ) ∣ − δ 2 , ∣ Y − f ( X ) ∣ > δ f(x)=\left\{ \begin{aligned} &(Y-f(X))^{2}, &|Y-f(X)| \leq\delta\\ &2\delta|Y-f(X)|-\delta^2, &|Y-f(X)| > \delta \end{aligned} \right. f(x)={(Y−f(X))2,2δ∣Y−f(X)∣−δ2,∣Y−f(X)∣≤δ∣Y−f(X)∣>δ
特点:
区别:交叉熵函数使用来描述模型预测值和真实值的差距大小,越大代表越不相近;似然函数的本质就是衡量在某个参数下,整体的估计和真实的情况一样的概率,越大代表越相近。
联系:交叉熵函数可以由最大似然函数在伯努利分布的条件下推导出来,或者说最小化交叉熵函数的本质就是对数似然函数的最大化。
分析一下两个误差函数的参数更新过程就会发现原因了。
对于均方误差损失函数,更新参数 w w w 和 b b b :
w = w − η ∂ L o s s ∂ w = w − η ( f ( x ) − y ) σ ′ ( z ) x b = b − η ∂ L o s s ∂ b = b − η ( f ( x ) − y ) σ ′ ( z ) \begin{gathered} w=w-\eta \frac{\partial Loss}{\partial w}=w-\eta(f(x)-y) \sigma^{\prime}(z) x \\ b=b-\eta \frac{\partial Loss}{\partial b}=b-\eta(f(x)-y) \sigma^{\prime}(z) \end{gathered} w=w−η∂w∂Loss=w−η(f(x)−y)σ′(z)xb=b−η∂b∂Loss=b−η(f(x)−y)σ′(z)
其中 z = w x + b z=wx+b z=wx+b,因为sigmoid的性质,导致 σ ′ ( z ) \sigma^{\prime}(z) σ′(z)在 z z z取大部分值时会很小(如下图标出来的两端,几乎接近于平坦),这样会使得 η ( f ( x ) − y ) σ ′ ( z ) \eta(f(x)-y) \sigma^{\prime}(z) η(f(x)−y)σ′(z)很小,导致参数 w w w和 b b b更新非常慢。
对于交叉熵损失函数,参数更新公式为:
w = w − η ∂ L o s s ∂ w = w − η ( f ( x ) − y ) x b = b − η ∂ L o s s ∂ b = b − η ( f ( x ) − y ) \begin{gathered} w=w-\eta \frac{\partial Loss}{\partial w}=w-\eta(f(x)-y) x \\ b=b-\eta \frac{\partial Loss}{\partial b}=b-\eta(f(x)-y) \end{gathered} w=w−η∂w∂Loss=w−η(f(x)−y)xb=b−η∂b∂Loss=b−η(f(x)−y)
可以看到参数更新公式中没有 σ ′ ( z ) \sigma^{\prime}(z) σ′(z)这一项,权重的更新受 ( f ( x ) − y ) (f(x)-y) (f(x)−y)影响,受到误差的影响,所以当误差大的时候,权重更新快;当误差小的时候,权重更新慢。这是一个很好的性质。
所以当使用sigmoid作为激活函数的时候,常用交叉熵损失函数而不用均方误差损失函数。
参考文章:常见的损失函数(loss function)总结