为什么使用损失函数
θj+1=θj−η∂θj∂J(θj)
θj+1:更新后的权重;η:学习率;∂θj∂J(θj):权重的梯度。
∂θj∂J(θj)<0时,θ向右;
∂θj∂J(θj)>0时,θ向左;
即,θ每次更新,都朝最小的方向。
损失函数的性质
- 连续可导,且导数不是处处为零。
- 非负。因为损失函数最小时,预测和真实值完全一致,损失函数为零,也就是说,损失函数最小为零,即非负。
常用的损失函数
均方误差(MSE)
均方误差是常用的回归损失函数。
MSE=n1i=1∑n(yi−yi^)2
yi^=wixi+bi
∂wi∂MSE=2xi(wixi+bi−yi)=2xi(y^i−yi)
即
L(y,y^)=n1i=1∑n(yi−yi^)2
∂wL(y,y^)=2x(wx+b−y)=2x(y^−y)
当y^i和yi相差越大,loss越大。

平均绝对误差(MAE)
MAE=n1i=1∑n∣yi−yi^∣
yi^=wixi+bi
∂wi∂MAE={−xi,wixi+bi−yi<0xi,wixi+bi−yi>0

MSE和MAE的区别:
- MSE比MAE更敏感,训练速度更快。
- MSE对于异常值也非常敏感,而MAE对异常值的抑制更好一点。
问题:分类问题能用MSE吗?
答案:是可以的,但是一般不用。
以逻辑回归为例:a=1+e−z1
z=wx+b
MSE=21(a−y)2
∂wi∂MSE=∂a∂MSE∂z∂a∂w∂z=(a−y)σ′(z)x
σ′(z)=(1−a)a
即
L(y,y^)=21(y^−y)2
∂wL(y,y^)=(y^−y)σ′(z)x
在z较大或较小时,σ′(z)≈0,所以训练的很慢,故一般不用MSE来作为分类问题的损失函数。
分类问题的损失函数,我们希望损失函数的导数为(a−y)x。
交叉熵损失函数(cross_entropy)
信息量
一个事件发生的概率越大,则信息量越小。I(x)=−log(P(x))
例如:
事件A:锅考试及格的概率为P(xA)=0.1, I(xA)=−log(0.1)=3.3219
事件B:盆小考试及格的概率为P(xB)=0.999, I(xB)=−log(0.999)=0.0014
熵
p是真实分布(在分类中对应类别标签),q是模型预测出来的概率分布,交叉熵是非对称的,描述的是假设一个预测的概率分布q服从的是真实分布p,所需要的平均信息量。(越小越好)
如果预测的分布q越接近真实的分布p,那么这个信息量就越小。
H(p,q)=−p(x)logq(x)
以逻辑回归为例:
a=1+e−z1
z=wx+b
cross_entropy=−yloga−(1−y)log(1−a)
∂w∂cross_entropy=∂a∂cross_entropy∂z∂a∂w∂z=(−ay+1−a1−y)σ′(z)x=(a−y)x
即L(y,y^)=−(y^logyi+(1−y^)log(1−yi))
∂w∂L(y,y^)=(y−y^)x
多分类交叉熵损失函数
- softmax loss
ai=softmax(zi)=∑i=1neyieyi
L(y,y^)=−n1i=1∑ny^ilog(ai)
- focal loss
Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。
ai=softmax(zi)=∑i=1neyieyi
L(y,y^)=−n1i=1∑ny^i∂i(1−ai)γlog(ai)
论文中α=0.25,γ=2效果最好。

3. 合页损失hinge_loss
也叫铰链损失,是svm中使用的损失函数。
由于合页损失优化到满足小于一定gap距离就会停止优化,而交叉熵损失却是一直在优化,所以,通常情况下,交叉熵损失效果优于合页损失。
L(y,y^)=n1i=1∑nmax(0,1−y^iyi)
总结
回归用MSE,分类用交叉熵。