您的位置:首页 > 理论基础 > 计算机网络

机器学习/神经网络Loss函数总结

2019-03-16 17:37 120 查看

目录

  • 二、分类
  • 三、生成/相似判别
  • 前言

    监督学习通过最小化损失函数,来更新梯度,实现算法的收敛,以下是大家见过无数次的机器学习原理通式:θ∗=arg⁡min⁡θ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θmin​N1​i=1∑N​L(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∣&lt;1∣y^−y∣−12otherwiseL = \begin{cases} \frac{1}{2} ({\hat y} - y)^2 &amp; \text{ if } |{\hat y} - y| &lt; {1} \\ |{\hat y} - y| - \frac{1}{2} &amp; \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∣&lt;ρρ(∣y^−y∣−ρ2)otherwiseL = \begin{cases} \frac{1}{2} ({\hat y} - {y})^2 &amp; \text{ if } |{\hat y} - {y}| &lt; {\rho} \\ \rho \big(|{\hat y} - {y}| - \frac{\rho}{2}\big) &amp; \text{otherwise} \end{cases}L={21​(y^​−y)2ρ(∣y^​−y∣−2ρ​)​ if ∣y^​−y∣<ρotherwise​Huber 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&#x27; = 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&#x27;_i)+\delta (i\ne y)log(1-Z&#x27;_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&#x27;_y)L=−log(Zy′​)这样一来,损失函数的计算仅参考标签值所对应分类的 softmax 值 Zy′Z&#x27;_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)​=Ep​logq(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∑​Yi​log(Zi​Yi​​)(0×log00​=0×logq0​=p×log0p​=0)该函数的特别之处在于可以衡量单向相似度,适用于包括自然语言生成、语音合成和图像生成的任何生成式架构。

    CTC Loss

    Triplet Loss

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐