机器学习/神经网络Loss函数总结
目录
- Softmax Cross Entropy Loss
- Sigmoid Binary Cross Entropy Loss
- Exponential Loss
- Logistic Loss
- Hinge Loss
- Squared Hinge Loss
- Focal Loss
前言
监督学习通过最小化损失函数,来更新梯度,实现算法的收敛,以下是大家见过无数次的机器学习原理通式:θ∗=argminθ1N∑i=1NL(yi,f(xi;θ))+λΦ(θ)\theta^*=\arg\min_{\theta}\frac{1}{N}\sum_{i=1}^NL\big(y_i,f(x_i;\theta)\big)+\lambda \Phi(\theta) θ∗=argθminN1i=1∑NL(yi,f(xi;θ))+λΦ(θ)左侧的 L(yi;f(xi;θ))L\big(y_i;f(x_i;\theta)\big)L(yi;f(xi;θ)) 即为通常意义上的损失函数;右侧 λΦ(θ)\lambda \Phi(\theta)λΦ(θ) 为正则项,泛指为预防过拟合而对相关参数进行惩罚的监督机制。正则项共有三种,分别为 L0L_0L0 范数、L1L_1L1 范数和 L2L_2L2 范数:
- L0L_0L0 范数:非零参数的个数 =∑iδ(θi≠0)=\sum_i\delta(\theta_i\ne0)=∑iδ(θi̸=0)
- L1L_1L1 范数:参数绝对值之和 =∑i∣θi∣=\sum_i|\theta_i|=∑i∣θi∣
- L2L_2L2 范数:参数平方和的算术平方根 =∑iθi2=\sqrt{\sum_i\theta_i^2}=∑iθi2
下面开始正文部分。
一、回归
L1 Loss
L=∣y^−y∣L=|\hat y-y|L=∣y^−y∣该函数常用于收敛以回归目的的输出,代表一次线性差值。前提假设是输出结果的数学意义在值域上全局相等,且对输出结果偏高和偏低的惩罚一致。弱点是对近点 (∣y^−y∣|\hat y-y|∣y^−y∣接近于0) 的惩罚不够平滑,难以收敛至最优点。应用至批量数据即为 MAE。
L2 Loss
L=(y^−y)2L=(\hat y-y)^2L=(y^−y)2L2 Loss 应用最小二乘法的收敛思路。在 L1 Loss 的基础上将绝对值改为均方,解决了 L1 Loss 的问题,但同时导致离群点惩罚过高。应用至批量数据即为 MSE。
Smooth L1 Loss
L={12(y^−y)2 if ∣y^−y∣<1∣y^−y∣−12otherwiseL = \begin{cases} \frac{1}{2} ({\hat y} - y)^2 & \text{ if } |{\hat y} - y| < {1} \\ |{\hat y} - y| - \frac{1}{2} & \text{otherwise} \end{cases}L={21(y^−y)2∣y^−y∣−21 if ∣y^−y∣<1otherwise针对 L1 Loss 和 L2 Loss 的缺点,Smooth L1 Loss 采用了一种折中方案。通过设立阈值 1,偏离小于 1 的用最小二乘法计算损失,而大于 1 的用线性误差。这样一来完美解决了以上问题。在 RPN (区域建议网络)中,Smooth L1 Loss 被用于收敛锚框坐标偏移量。
Huber Loss
L={12(y^−y)2 if ∣y^−y∣<ρρ(∣y^−y∣−ρ2)otherwiseL = \begin{cases} \frac{1}{2} ({\hat y} - {y})^2 & \text{ if } |{\hat y} - {y}| < {\rho} \\ \rho \big(|{\hat y} - {y}| - \frac{\rho}{2}\big) & \text{otherwise} \end{cases}L={21(y^−y)2ρ(∣y^−y∣−2ρ) if ∣y^−y∣<ρotherwiseHuber Loss 是 Smooth L1 Loss 的阈值设定上的拓展,当 阈值 ρ=1\rho =1ρ=1 时,Huber Loss 等同于 Smooth L1 Loss。
Log Cosh Loss
cosh(y,y^)=ey−y^+e−(y−y^)2cosh(y,\hat y) = \frac{e^{y-\hat y}+e^{{-(y-\hat y)}}}{2}cosh(y,y^)=2ey−y^+e−(y−y^) L=log[cosh(y,y^)]L=log\big[ cosh(y,\hat y) \big]L=log[cosh(y,y^)]Cosh 函数在 y=y^y=\hat yy=y^ 时达到极小值,使得损失函数最小。与 Huber Loss 同样,Log Cosh Loss 能减小对离群点的惩罚,而平滑近点的损失,囊括 Huber Loss 的所有优点。但相对于 Huber Loss,Log Cosh Loss 二阶可导,使得通过牛顿法计算海森矩阵 (Hessian Matrix),实现算法优化成为可能。
二、分类
Softmax Cross Entropy Loss
该函数常用于以分类为目的设计的神经网络,典型的代表是 CNN。当我们希望神经网络的输出是一列向量,而向量中分类所对应的位置为最大值时,适用该函数。当网络输出为 Z∈RkZ \in \mathbb{R}^{k}Z∈Rk,函数将进行以下处理:
Z′=softmax(Z)Z' = softmax(Z)Z′=softmax(Z)
L=−∑i[δ(i=y)log(Zi′)+δ(i≠y)log(1−Zi′)]L=-\sum_i \big[\delta (i=y)log(Z'_i)+\delta (i\ne y)log(1-Z'_i)\big]L=−i∑[δ(i=y)log(Zi′)+δ(i̸=y)log(1−Zi′)]y∈{1,2,...,k}y\in \{1,2,...,k\}y∈{1,2,...,k} 为分类标签值所对应的分类,δ∈{0,1}\delta \in \{0,1\}δ∈{0,1} 为符号函数。特别地,如果分类结果之间相互独立,可以将损失函数简化为:L=−log(Zy′) L=-log(Z'_y)L=−log(Zy′)这样一来,损失函数的计算仅参考标签值所对应分类的 softmax 值 Zy′Z'_yZy′,而不再参考其他分类的输出值,这样的设计在进行多分类任务时能大大减小计算复杂度,提高运行效率。
Sigmoid Binary Cross Entropy Loss
Sigmoid Binary Cross Entropy Loss 更贴近 Cross Entropy 的原始定义,用于二分类任务,如在 RPN 中用于判断锚框是否为前景。该损失函数的计算前提包括,标签值 yyy 取值为 0 或 1,以及分类输出 z∈Rz\in \mathbb Rz∈R 为一个浮点数值,数学意义以 0 为中心左右对称分布。公式如下:L=−y×log[σ(z)]−(1−y)×log[1−σ(z)] L=-y\times log\big[\sigma (z)\big]-(1-y)\times log\big[1-\sigma (z)\big]L=−y×log[σ(z)]−(1−y)×log[1−σ(z)]当标签值 yyy 等于 0 时,我们希望分类输出越接近于负无穷大越好;反之,当标签值 yyy 等于 1 时,我们希望分类输出更接近于正无穷大;当分类输出为 0,代表模型赋予两个分类同样权重,无法区别。该函数与 Softmax Cross Entropy Loss 的一大区别在于前者利用的是单数值输出,而后者利用的是长度等于分类类别数量的极大似然概率分布序列。
Exponential Loss
L=exp(−y^⋅y)L = \exp(- {\hat y} \cdot y)L=exp(−y^⋅y)同样用于二分类任务,输出和标签需要同时满足来自于值集 {−1,1}\{-1,1\}{−1,1}。常用于 Boosting 集成学习,由于在反向传播时披露的参数细节过少,不太招深度学习待见。
Logistic Loss
L=log[1+exp(−y^⋅y)]L = \log\big[1 + \exp(- {\hat y} \cdot y)\big]L=log[1+exp(−y^⋅y)]又称为 Log Loss,用于 Logistic Regression,机理与 Exponential Loss 类似。
Hinge Loss
L=max(0,margin−y^⋅y)L = max(0, {margin} - {\hat y} \cdot y)L=max(0,margin−y^⋅y)看到 Hinge Loss 就应该能联想到大名鼎鼎的 SVM。该损失函数的核心思想是,当 y^\hat yy^ 与 yyy 异号时,距离越远损失越大;当 y^\hat yy^ 与 yyy 同号时,若 y^\hat yy^ 小于 margin/ymargin/ymargin/y,则努力让 y^\hat yy^ 靠近 margin/ymargin/ymargin/y,若 y^\hat yy^ 大于等于 margin/ymargin/ymargin/y,则不予置理。从 SVM 原理推及该函数,marginmarginmargin 设立太小会导致超平面划分不够精确,设立太大会导致因划分正确的元素奖励过大而导致的异常收敛。
Squared Hinge Loss
L=max(0,margin−y^⋅y)2L = max(0, {margin} - {\hat y} \cdot y)^2L=max(0,margin−y^⋅y)2Squared Hinge Loss 在 Hinge Loss 基础上加以平方,如此以来,若 y^\hat yy^ 大于 margin/ymargin/ymargin/y 则同样进行梯度更新,可解决上述使用 Hinge Loss 时 marginmarginmargin 设立过大导致的异常收敛问题。
Focal Loss
分类算法的训练很重要的一点,是训练样本中各类别的参与比例不能相差过大。这样的问题通常容易在 Faster R-CNN 等目标检测神经网络中出现,源于大多数时候图像中真正属于前景的部分非常少,绝大多数都是背景负案例。负案例在计算损失函数时参与比例过大,会导致梯度更新向负案例偏移,进行无效收敛。Focal Loss 通过将案例比例引入到函数的计算中,得以解决该项问题。定义神经网络输出为经过 Sigmoid 激活函数激活的 z∈[0,1]z\in [0,1]z∈[0,1],标签为 y∈{0,1}y\in \{0,1\}y∈{0,1},其中 0 代表占比为多数的负案例,1 代表占比较小的正案例。损失函数定义如下: L=−αy(1−z)γlog(z)L=-\alpha_y(1-z)^\gamma log(z)L=−αy(1−z)γlog(z)当 y=0y=0y=0 时 αy\alpha_yαy 取值为样本中正案例的比例,y=1y=1y=1 时 αy\alpha_yαy 取值为样本中负案例的比例。进一步地,该公式引入 (1−z)γ(1-z)^\gamma(1−z)γ 用于控制易分和难分的案例比,加速收敛。γ\gammaγ 取值越大,代表损失函数越倚重难分案例。相关论文链接。
三、生成/相似判别
KL Divergence Loss
KL Divergency (KL散度) 又称 Kullback-Leibler Divergence,或相对熵 (Relative Entropy),是信息论中的重要概念,反映两组概率分布间的非对称性差异 (用 Q 的分布来拟合 P 所造成的损失),相关数学公式如下:D(p∣∣q)=∑x∈qp(x)logp(x)q(x)=Eplogp(X)q(X)D(p||q)=\sum_{x\in q}p(x)log\frac{p(x)}{q(x)}=\mathbb{E}_plog\frac{p(X)}{q(X)}D(p∣∣q)=x∈q∑p(x)logq(x)p(x)=Eplogq(X)p(X)移步至机器学习领域,当输出和标签为长度相同、元素之间一一对应的概率分布序列时,可使用:L=∑iYilog(YiZi)(0×log00=0×log0q=p×logp0=0)L = \sum_{i} {Y_i} \log(\frac{Y_i}{Z_i})\\ \big(0\times log\frac{0}{0}=0\times log\frac{0}{q}=p\times log\frac{p}{0}=0\big)L=i∑Yilog(ZiYi)(0×log00=0×logq0=p×log0p=0)该函数的特别之处在于可以衡量单向相似度,适用于包括自然语言生成、语音合成和图像生成的任何生成式架构。
CTC Loss
…
Triplet Loss
…
- 机器学习总结(七):基本神经网络、BP算法、常用激活函数对比
- 机器学习09--神经网络的激活函数(Activation Function)及python代码实现
- 周志华 《机器学习》之 第五章(神经网络)概念总结
- 深度学习/神经神经网络常用激活函数总结
- 【机器学习】神经网络-激活函数-面面观(Activation Function) (Sigmoid Relu tanh)
- cs231n 卷积神经网络与计算机视觉 5 神经网络基本结构 激活函数总结
- 机器学习(11.3)--神经网络(nn)算法的深入与优化(3) -- QuadraticCost(二次方代价函数)数理分析
- 【机器学习】神经网络-激活函数-面面观(Activation Function)
- 机器学习笔记-神经网络中激活函数(activation function)对比--Sigmoid、ReLu,tanh
- 机器学习——神经网络、深度学习 知识点总结 及 面试题汇总
- 神经网络激活函数总结
- 神经网络激活函数总结
- 神经网络常用激活函数总结
- 机器学习笔记六 - 朴素贝叶斯的多项式事件模型、神经网络、支持向量机的函数间隔与几何间隔
- 机器学习第5章第1节(下) : 针对两类函数训练神经网络
- 【机器学习】神经网络-激活函数-面面观(Activation Function)
- 系统学习机器学习之神经网络(十二) --人工神经网络总结
- 【机器学习】随机初始化思想神经网络总结
- 神经网络的激活函数总结
- 机器学习——神经网络、深度学习 知识点总结 及 面试题汇总