1. 简介
接上一篇博客【NLP笔记:常用激活函数考察整理】,这里,我们来考察一下机器学习中常用的一些损失函数。
不过,说是整理,事实上实际写的时候才发现,平时用的激活函数也确实比较少,毕竟做的主要都是生成、序列标注以及分类问题,而这些问题本质来说事实上也都是分类问题,因此基本都是使用的cross entropy损失函数,其他的损失函数使用确实不多。
因此,后续的整理方面难免会有些遗漏的地方,希望读者见谅,并欢迎在评论区中进行补充。
2. loss function整理
1. MSE(Mean Square Error)
MSE算是最为直接的一种loss了,直接将预测结果与真实结果之间的欧几里得距离作为loss,从而将预测结果与真实结果相逼近。
其定义式为:
M
S
E
=
1
N
∑
i
(
y
i
−
f
(
x
i
)
)
2
MSE = \sqrt{\frac{1}{N}\sum_{i}(y_i-f(x_i))^2}
MSE=N1i∑(yi−f(xi))2
MSE常被用于回归问题中当作损失函数。
2. MAE(Mean Abosolute Error)
MAE算是MSE的一种变体,它同样求取的是预测结果与真实结果之间的距离,不过距离函数从欧氏距离修改为了曼哈顿距离。
其定义公式如下:
M
A
E
=
1
N
∑
i
∣
y
i
−
f
(
x
i
)
∣
MAE = \frac{1}{N}\sum_i|y_i - f(x_i)|
MAE=N1i∑∣yi−f(xi)∣
但是就印象而言,感觉MAE的使用场景还是少,至少我个人基本没用过这个loss函数。
3. CrossEntropy
crossentropy是分类问题中常用的一种loss函数,其更为详细的内容描述我们已经在之前的博客【NLP笔记:浅谈交叉熵(cross entropy)】做过了一番讨论,因此这里就不再详细展开了,仅仅给出其定义公式如下:
C S E = − 1 N ∑ i y i ⋅ l o g ( f ( x i ) ) CSE = -\frac{1}{N}\sum_i y_i \cdot log(f(x_i)) CSE=−N1i∑yi⋅log(f(xi))
4. KLDivergence
KL Divergence同样在我们之前的博客【NLP笔记:浅谈交叉熵(cross entropy)】中进行了一些简单的介绍。
他衡量的是两个概率分布之间的距离,事实上,对于目标概率分布确定的情况下,他和cross entropy之间就只相差一个常数罢了。
我们给出KL Divergence的定义公式如下:
K L D = 1 N ∑ i y i ⋅ l o g ( f ( x i ) / y i ) = 1 N ∑ i y i ⋅ l o g ( f ( x i ) ) − 1 N ∑ i y i ⋅ l o g ( y i ) = H ( x ) − C S E ( x ) \begin{aligned} KLD &= \frac{1}{N}\sum_{i} y_{i} \cdot log(f(x_i)/y_i) \\ &= \frac{1}{N}\sum_{i} y_{i} \cdot log(f(x_i)) - \frac{1}{N}\sum_{i} y_{i} \cdot log(y_i) \\ &= H(x) - CSE(x) \end{aligned} KLD=N1i∑yi⋅log(f(xi)/yi)=N1i∑yi⋅log(f(xi))−N1i∑yi⋅log(yi)=H(x)−CSE(x)
5. Regularization
正则项严格来说算不上是一个loss函数,他是对模型中参数的一种限制,用于规避过拟合的问题。
他们的思路也很直接,就是在loss函数当中加入一个额外的附加项,用于对参数大小进行限制。
典型的两种正则方法为L1正则和L2正则,其定义公式分别为:
-
L1正则:
L o s s = L o s s + α ⋅ ∑ i j ∣ w i j ∣ Loss = Loss + \alpha \cdot \sum_{ij}|w_{ij}| Loss=Loss+α⋅ij∑∣wij∣
-
L2正则:
L o s s = L o s s + α ⋅ ∑ i j w i j 2 Loss = Loss + \alpha \cdot \sum_{ij}w_{ij}^2 Loss=Loss+α⋅ij∑wij2
通过L1、L2正则,模型在学习过程中就会限制参数 w w w的整体取值不至于太大,从而令过拟合现象大大减弱。
当然,既然提到了正则函数,那就不得不说一下面试中时常问到的L1正则稀疏化的问题。
直观上的解释可以从下图(图片来自于网上)从一窥大概:
更详细的解释可以参考下述博客:
其中最后一部分写的相当好。
简而言之,可以将损失函数在极小值位置附近进行展开,显然即有:
J ( w ) = J 0 ( w 0 ) + 1 2 ⋅ ( w − w 0 ) ⋅ ∂ 2 J 0 ∂ w 2 ∣ w = w 0 ⋅ ( w − w 0 ) T + R ( w ) J(w) = J_0(w_0) + \frac{1}{2}\cdot(w-w_0)\cdot\frac{\partial^2 J_0}{\partial w^2}|_{w = w_0}\cdot(w-w_0)^T + R(w) J(w)=J0(w0)+21⋅(w−w0)⋅∂w2∂2J0∣w=w0⋅(w−w0)T+R(w)
其中, R ( w ) R(w) R(w)为正则函数项,而 ∂ 2 J 0 ∂ w 2 ∣ w = w 0 \frac{\partial^2 J_0}{\partial w^2}|_{w = w_0} ∂w2∂2J0∣w=w0则为Hessian矩阵,为简单起见,我们可以将其视为一个对角矩阵。而 w 0 w_0 w0为原损失函数 J 0 J_0 J0的最优解。
那么,针对L1正则的情况,我们可以计算得到:
w
i
^
=
s
i
g
n
(
w
i
)
⋅
m
a
x
(
∣
w
i
∣
−
α
H
i
,
0
)
\hat{w_i} = sign(w_i)\cdot max(|w_i| - \frac{\alpha}{H_i}, 0)
wi^=sign(wi)⋅max(∣wi∣−Hiα,0)
而针对L2正则的情况,则有:
w i ^ = H i H i + α ⋅ w i \hat{w_i} = \frac{H_i}{H_i + \alpha}\cdot w_i wi^=Hi+αHi⋅wi
可以看到:
- l2正则化的效果主要是对原最优解的每个元素进行不同比例的放缩;
- l1正则化的效果则更倾向于将原最优解的元素部分置零(稀疏化),部分进行平移操作。
3. 总结
这里简单考察了一下一些常用的loss函数,主要其实也就是MSE以及Cross Entropy,顺便复习了一下正则函数相关的内容,主要是L1、L2正则方法。
其他事实上还有不少的loss function,比如HingeLoss等,不过由于我个人平时没怎么用过,因此这里就不多做展开了,有兴趣的读者可以自行查看下方参考链接中的一些博客进行一下考察。