为什么使用损失函数

θj+1=θjηJ(θj)θj\theta_{j+1}=\theta_j-\eta\frac{\partial J(\theta_j)}{\partial \theta_j}

θj+1\theta_{j+1}:更新后的权重;η\eta:学习率;J(θj)θj\frac{\partial J(\theta_j)}{\partial \theta_j}:权重的梯度。
J(θj)θj\frac{\partial J(\theta_j)}{\partial \theta_j}<0时,θ\theta向右;
J(θj)θj\frac{\partial J(\theta_j)}{\partial \theta_j}>0时,θ\theta向左;
即,θ\theta每次更新,都朝最小的方向。

损失函数的性质

  1. 连续可导,且导数不是处处为零。
  2. 非负。因为损失函数最小时,预测和真实值完全一致,损失函数为零,也就是说,损失函数最小为零,即非负。

常用的损失函数

均方误差(MSE)

均方误差是常用的回归损失函数。
MSE=1ni=1n(yiyi^)2MSE=\frac{1}{n}\sum^n_{i=1}(y_i-\hat{y_i})^2

yi^=wixi+bi\hat{y_i}=w_ix_i+b_i

MSEwi=2xi(wixi+biyi)=2xi(y^iyi)\frac{\partial MSE}{\partial w_i}=2x_i(w_ix_i+b_i-y_i)=2x_i(\hat{y}_i-y_i)


L(y,y^)=1ni=1n(yiyi^)2L(y,\hat{y})=\frac{1}{n}\sum^n_{i=1}(y_i-\hat{y_i})^2

L(y,y^)w=2x(wx+by)=2x(y^y)\frac{L(y,\hat{y}) }{\partial w}=2x(wx+b-y)=2x(\hat{y}-y)

y^i\hat{y}_iyiy_i相差越大,loss越大。
机器学习-损失函数

平均绝对误差(MAE)

MAE=1ni=1nyiyi^MAE=\frac{1}{n}\sum^n_{i=1}|y_i-\hat{y_i}|

yi^=wixi+bi\hat{y_i}=w_ix_i+b_i

MAEwi={xi,wixi+biyi<0xi,wixi+biyi>0\frac{\partial MAE}{\partial w_i}=\left\{ \begin{aligned} -x_i,w_ix_i+b_i-y_i<0 \\ x_i,w_ix_i+b_i-y_i>0 \\ \end{aligned} \right.
机器学习-损失函数
MSE和MAE的区别:

  1. MSE比MAE更敏感,训练速度更快。
  2. MSE对于异常值也非常敏感,而MAE对异常值的抑制更好一点。

问题:分类问题能用MSE吗?
答案:是可以的,但是一般不用。
以逻辑回归为例:a=11+eza=\frac{1}{1+e^{-z}}

z=wx+bz=wx+b

MSE=12(ay)2MSE=\frac{1}{2}(a-y)^2

MSEwi=MSEaazzw=(ay)σ(z)x\frac{\partial MSE}{\partial w_i}=\frac{\partial MSE}{\partial a}\frac{\partial a}{\partial z}\frac{\partial z}{\partial w}=(a-y)\sigma^{'}(z)x

σ(z)=(1a)a\sigma'(z)=(1-a)a


L(y,y^)=12(y^y)2L(y,\hat{y})=\frac{1}{2}(\hat{y}-y)^2

L(y,y^)w=(y^y)σ(z)x\frac{L(y,\hat{y}) }{\partial w}=(\hat{y}-y)\sigma'(z)x

zz较大或较小时,σ(z)0\sigma'(z)\thickapprox0,所以训练的很慢,故一般不用MSE来作为分类问题的损失函数。
分类问题的损失函数,我们希望损失函数的导数为(ay)x(a-y)x

交叉熵损失函数(cross_entropy)

信息量

一个事件发生的概率越大,则信息量越小。I(x)=log(P(x))I(x)=-log(P(x))

例如:
事件A:锅考试及格的概率为P(xA)=0.1P(xA)=0.1, I(xA)=log(0.1)=3.3219I(xA)=-log(0.1)=3.3219
事件B:盆小考试及格的概率为P(xB)=0.999P(xB)=0.999, I(xB)=log(0.999)=0.0014I(xB)=-log(0.999)=0.0014

pp是真实分布(在分类中对应类别标签),qq是模型预测出来的概率分布,交叉熵是非对称的,描述的是假设一个预测的概率分布qq服从的是真实分布pp,所需要的平均信息量。(越小越好)
如果预测的分布qq越接近真实的分布pp,那么这个信息量就越小。
H(p,q)=p(x)logq(x)H(p,q)=-p(x)logq(x)

以逻辑回归为例:
a=11+eza=\frac{1}{1+e^{-z}}

z=wx+bz=wx+b

cross_entropy=yloga(1y)log(1a)cross\_entropy=-yloga-(1-y)log(1-a)

cross_entropyw=cross_entropyaazzw=(ya+1y1a)σ(z)x=(ay)x\frac{\partial cross\_entropy}{\partial w}=\frac{\partial cross\_entropy}{\partial a}\frac{\partial a}{\partial z}\frac{\partial z}{\partial w}=(-\frac{y}{a}+\frac{1-y}{1-a})\sigma'(z)x=(a-y)x

L(y,y^)=(y^logyi+(1y^)log(1yi))L(y,\hat{y})=-(\hat{y}logy_i+(1-\hat{y})log(1-y_i))

L(y,y^)w=(yy^)x\frac{\partial L(y,\hat{y})}{\partial w}=(y-\hat{y})x

多分类交叉熵损失函数

  1. softmax loss
    ai=softmax(zi)=eyii=1neyia_i=softmax(z_i)=\frac{e^{y_i}}{\sum^n_{i=1}e^{y_i}}

L(y,y^)=1ni=1ny^ilog(ai)L(y,\hat{y})=-\frac{1}{n}\sum^n_{i=1}\hat{y}_ilog(a_i)

  1. focal loss
    Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。
    ai=softmax(zi)=eyii=1neyia_i=softmax(z_i)=\frac{e^{y_i}}{\sum^n_{i=1}e^{y_i}}

L(y,y^)=1ni=1ny^ii(1ai)γlog(ai)L(y,\hat{y})=-\frac{1}{n}\sum^n_{i=1}\hat{y}_i\partial_i(1-a_i)^\gamma log(a_i)

论文中α=0.25,γ=2效果最好。
机器学习-损失函数
3. 合页损失hinge_loss
也叫铰链损失,是svm中使用的损失函数。
由于合页损失优化到满足小于一定gap距离就会停止优化,而交叉熵损失却是一直在优化,所以,通常情况下,交叉熵损失效果优于合页损失。
L(y,y^)=1ni=1nmax(0,1y^iyi)L(y,\hat{y})=\frac{1}{n}\sum^n_{i=1}max(0,1-\hat{y}_iy_i)

总结

回归用MSE,分类用交叉熵。

相关文章:

  • 2021-04-20
  • 2021-09-26
  • 2021-11-30
  • 2021-12-09
  • 2021-11-14
  • 2021-08-05
猜你喜欢
  • 2021-08-05
  • 2021-06-04
  • 2022-01-06
  • 2021-08-05
  • 2017-11-30
相关资源
相似解决方案