损失函数

  • 一、图像分类
    • 交叉熵
  • 二、目标检测
    • 2.1 Focal loss
    • 2.2 L1,L2,smooth L1损失函数
    • 2.3 IOU Loss
    • 2.4 GIOU
    • 2.5 DIOU和CIOU
  • 三、图像识别
    • 3.1 Triplet Loss
    • 3.2 Center Loss
    • 3.3 Sphereface
    • 3.4 Cosface
    • 3.5 Arcface

在深度学习中,损失函数扮演着至关重要的角色。通过对最小化损失函数,使模型达到收敛状态,减少模型预测值的误差。因此,不同的损失函数,对模型的影响是重大的。接下来,总结一下,在工作中经常用到的损失函数:

  • 图像分类:交叉熵
  • 目标检测:Focal loss,L1/L2损失函数,IOU Loss,GIOU ,DIOU,CIOU
  • 图像识别:Triplet Loss,Center Loss,Sphereface,Cosface,Arcface

一、图像分类

交叉熵

在图像分类中,经常使用softmax+交叉熵作为损失函数,
CrossEntropy =−∑i=1np(xi)ln⁡(q(xi))\text { CrossEntropy }=-\sum_{i=1}^{n} p\left(x_{i}\right) \ln \left(q\left(x_{i}\right)\right) CrossEntropy=i=1np(xi)ln(q(xi))
其中,p(x)表示真实概率分布,q(x)表示预测概率分布。交叉熵损失函数通过缩小两个概率分布的差异,来使预测概率分布尽可能达到真实概率分布。
后来,谷歌在交叉熵的基础上,提出了label smoothing(标签平滑)。

在实际中,需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:

无法保证模型的泛化能力,容易造成过拟合;
全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难adapt,会造成模型过于相信预测的类别。
因此,为了减少这种过于自信,同时减缓人为标注的误差带来的影响,需要对p(x)进行变化:
p′(x)=(1−ϵ)δ(k,y)+ϵu(k)p^{\prime}(x)=(1-\epsilon) \delta_{(k, y)}+\epsilon u(k)p(x)=(1ϵ)δ(k,y)+ϵu(k)
其中,δ(k,y)为Dirac函数,u(k)为均匀分布。简单而言,降低标签y的置信度,提高其余类别的置信度。从而,交叉熵变成了:
H(p′,q)=−∑i=1np′(xi)ln⁡(q(xi))=(1−ϵ)H(p,q)+ϵH(p,u)H\left(p^{\prime}, q\right)=-\sum_{i=1}^{n} p^{\prime}\left(x_{i}\right) \ln \left(q\left(x_{i}\right)\right)=(1-\epsilon) H(p, q)+\epsilon H(p, u)H(p,q)=i=1np(xi)ln(q(xi))=(1ϵ)H(p,q)+ϵH(p,u)

二、目标检测

在目标检测中,损失函数一般由两部分组成,classification loss和bounding box regression loss。calssification loss的目的是使类别分类尽可能正确;bounding box regression loss的目的是使预测框尽可能与GT框匹对上。

2.1 Focal loss

该Focal loss损失函数出自于论文《Focal Loss for Dense Object Detection》,主要是解决正负样本之间的不平衡问题。通过降低easy example中的损失值,间接提高了hard example中损失值的权重。Focal loss是基于交叉熵进行改进的:
Focalloss =−αt(1−pt)γlog⁡(pt)=-\alpha_{t}\left(1-p_{t}\right)^{\gamma} \log \left(p_{t}\right)=αt(1pt)γlog(pt)
可以看到,在交叉嫡前增加了 (1−pt)γ\left(1-p_{t}\right)^{\gamma}(1pt)γ, 当图片被错分时, ptp_{t}pt 会很小,(1−pt)\left(1-p_{t}\right)(1pt) 接近于1,所以损失受到的影响不大; 而增加参数 γ\gammaγ 是为了平滑降低esay example 的权重。当 γ=0\gamma=0γ=0 时, Focal loss退化成交叉嫡。对于不同的 γ\gammaγ, 其影响如下图所 示。

2.2 L1,L2,smooth L1损失函数

利用L1,L2或者smooth L1损失函数,来对4个坐标值进行回归。smooth L1损失函数是在Fast R-CNN中提出的。三个损失函数,如下所示:
L1=∣x∣L 1=|x|L1=x
L2=x2L 2=x^{2}L2=x2
smoothL1={ 0.5x2if ∣x∣<1∣x∣−0.5otherwise \begin{array}{cc}0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise }\end{array}0.5x2x0.5ifx<1otherwise

从损失函数对x的导数可知:L1损失函数对x的导数为常数,在训练后期,x很小时,如果learning rate
不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。L2损失函数对x的导数在x值很大时,其导数也非常大,在训练初期不稳定。smooth L1完美的避开了L1和L2损失的缺点。

在一般的目标检测中,通常是计算4个坐标值与GT框之间的差异,然后将这4个loss进行相加,构成regression loss。

但使用上述的3个损失函数,会存在以下的不足:

上面的三种Loss用于计算目标检测的Bounding Box Loss时,独立的求出4个点的Loss,然后进行相加得到最终的Bounding Box Loss,这种做法的假设是4个点是相互独立的,实际是有一定相关性的;
实际评价框检测的指标是使用IOU,这两者是不等价的,多个检测框可能有相同大小的Loss,但IOU可能差异很大,为了解决这个问题就引入了IOU LOSS

2.3 IOU Loss

该IOU Loss是旷视在2016年提出的《UnitBox: An Advanced Object Detection Network》。该论文的主要观点之一是:

  • 使用基于欧式距离的L-n损失函数,其前提是假设4个坐标变量都是独立的,但实际上,这些坐标变量是具有一定的关联性。
  • 评价指标使用了IOU,而回归坐标框又使用4个坐标变量,这两者是不等价的。
  • 具有相同的欧式距离的框,其IOU值却不是唯一的。
    所以,提出了IOU loss,直接使用IOU作为损失函数:
    Loss⁡IOU=−ln⁡(IOU)\operatorname{Loss}_{I O U}=-\ln (I O U)LossIOU=ln(IOU)
    同时,也会有人使用的是:
    Loss⁡IOU=1−IOU\operatorname{Loss}_{I O U}=1-I O ULossIOU=1IOU

2.4 GIOU

该GIOU Loss损失函数是斯坦福于2019年提出的《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》。在上面的IOU Loss中,无法对两个不重叠的框进行优化,而且IOU Loss无法反映出两个框到底距离有多远。为了解决这个问题,作者提了GIOU来作为损失函数:
GIOU=IOU−C−(A⋃B)CG I O U=I O U-\frac{C-(A \bigcup B)}{C}GIOU=IOUCC(AB)
其中,C表示两个框的最小外接矩阵面积。即先求出两个框的IOU,然后求出外接矩阵C的面积,减去A与B的面积。最终得到GIOU的值。


GIOU具有以下的性质:

  • GIOU可以作为一种衡量距离的方式, Los⁡sGIOU=1−GIOU\operatorname{Los} s_{G I O U}=1-G I O ULossGIOU=1GIOU
  • GIOU具有尺度不变性
  • GIOU是IOU的下限, GIOU⁡(A,B)≤IOU⁡(A,B)\operatorname{GIOU}(A, B) \leq \operatorname{IOU}(A, B)GIOU(A,B)IOU(A,B) 。当矩形框A 、类似 时, lim⁡A→BGIOU⁡(A,B)=IOU⁡(A,B)\lim _{A \rightarrow B} \operatorname{GIOU}(A, B)=\operatorname{IOU}(A, B)limABGIOU(A,B)=IOU(A,B)
  • 当矩形框A \quad B重叠时, GIOU⁡(A,B)=IOU⁡(A,B)G \operatorname{IOU}(A, B)=\operatorname{IOU}(A, B)GIOU(A,B)=IOU(A,B)
  • 当矩形框A、B不相交时, GIOU⁡(A,B)=−1\operatorname{GIOU}(A, B)=-1GIOU(A,B)=1
    总的来说,GIOU包含了IOU所有的优点, 同时克服了IOU的不足。

2.5 DIOU和CIOU

DIOU和CIOU是天津大学于2019年提出的《Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression》。为了解决GIOU收敛慢和提高回归精度,提出DIOU来加速收敛。同时考虑到框回归的3个几何因素(重叠区域,中心点距离,宽高比),基于DIOU,再次提出CIOU,进一步提高收敛速度和回归精度。另外,可以将DIOU结合NMS组成DIOU-NMS,来对预测框进行后处理。

当出现下图的情况(GT框完全包含预测框)时,IOU与GIOU的值相同,此时GIOU会退化成IOU,无法区分其相对位置关系。同时由于严重依赖于IOU项,GIOU会致使收敛慢。

1.基于上述问题,作者提出两个问题
2.直接最小化预测框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。 如何使回归在与目标框有重叠甚至包含时更准确、更快 好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。基于问题一,作者提出了DIoU Loss,相对于GIoU
Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比;针对问题二,作者提出了CIoU
Loss,其收敛的精度更高,以上三个因素都考虑到了。

首先,定义一下基于IOU Loss的损失函数:

Loss =1−IOU+R(B,Bgt)\text { Loss }=1-I O U+R\left(B, B^{g t}\right) Loss=1IOU+R(B,Bgt)
其中, R(B,Bgt)R\left(B, B^{g t}\right)R(B,Bgt) 表示预测框与GT框的惩罚项。在IOU Loss中, R(B,Bgt)=0R\left(B, B^{g t}\right)=0R(B,Bgt)=0 在GIOU中, R(B,Bgt)=C−A⋃BCR\left(B, B^{g t}\right)=\frac{C-A \bigcup B}{C}R(B,Bgt)=CCAB.

而在DIOU中,该思罚项 R(B,BGT)=ρ2(b,b4)c2R\left(B, B^{G T}\right)=\frac{\rho^{2}\left(b, b^{4}\right)}{c^{2}}R(B,BGT)=c2ρ2(b,b4), 其中 bbbbgtb^{g t}bgt 表示预测框与GT框 的中心点, ρ()\rho()ρ() 表示欧式距离, ccc 表示预测框 BBB 与GT框 BgtB^{g t}Bgt 的最小外接矩阵的对角 线距离,如下图所示。

因此, Loss⁡DIOU\operatorname{Loss}_{D I O U}LossDIOU 定义为:
Loss⁡GIOU=1−IOU+ρ2(b,bgt)c2\operatorname{Loss}_{G I O U}=1-I O U+\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}} LossGIOU=1IOU+c2ρ2(b,bgt)
所以, Los⁡sDIOU\operatorname{Los} s_{D I O U}LossDIOU 具有如下性质:

1.DIOU依然具有尺度不变性;
2.DIOU直接最小化两个框的距离,因此收敛会更快;
3.对于目标框包裹预测框的这种情况,DIoU Loss可以收敛的很快,而GIoU Loss此时退化为IoU Loss收敛速度较慢
DIOU同时考虑了重叠面积和中心点之间的距离,但是没有考虑到宽高比。进一步提出了CIOU,同时考虑了这3个因素,在DIOU的惩罚项中加入了αυ:

R(B,Bgt)=RCIOU=ρ2(b,bgt)c2+αvR\left(B, B^{g t}\right)=R_{C I O U}=\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}+\alpha v R(B,Bgt)=RCIOU=c2ρ2(b,bgt)+αv
其中, α\alphaα 表示trade-off参数, vvv 表示宽高比一致性参数。
v=4π2(arctan⁡wgthgt−arctan⁡wh)2α=v(1−IOU)+v\begin{array}{c} v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right)^{2} \\ \alpha=\frac{v}{(1-I O U)+v} \end{array} v=π24(arctanhgtwgtarctanhw)2α=(1IOU)+vv

这里的 vvv 为什么会有 4π2\frac{4}{\pi^{2}}π24 呢? 这里 arctana r c t a narctan 的范围是 [0,π2)。 \left[0, \frac{\pi}{2}\right)_{\text {。 }}[0,2π)
所以, CIOU的损失函数为:
Loss⁡CIOU=1−IOU+ρ2(b,bgt)c2+αv\operatorname{Loss}_{C I O U}=1-I O U+\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}+\alpha v LossCIOU=1IOU+c2ρ2(b,bgt)+αv
而在实际操作中, w2+h2w^{2}+h^{2}w2+h2 是很小的数字,在后向传播时,容易造成梯度爆炸。通 常用1来代替 w2+h2w^{2}+h^{2}w2+h2

另外,提醒一点的是,GIOU、CIOU、DIOU都是衡量方式,在使用时可以代替IOU。但是这里需要考虑的一个问题是,预测框与GT框的匹配规则问题。并不是说anchor一定会去匹配一个不重叠的GT框。类似于SSD中所说,anchor会选择一个重叠最大的GT框进行预测,而这个重叠最大可以使用IOU、GIOU、CIOU、DIOU来进行衡量。

三、图像识别

图像识别问题,包含了行人重识别,人脸识别等问题。此类损失都是通用的,因此放在一起汇总。

3.1 Triplet Loss

该Triplet Loss损失函数提出于2015年的《FaceNet: A Unified Embedding for Face Recognition and Clustering》。该损失函数的主要想法是,拉近同一id之间的距 离,扩大不同id之间的距离。如下图所示,图中的anchor与positive属于同一id, 即 yanchor =ypositive ;y_{\text {anchor }}=y_{\text {positive }} ;yanchor=ypositive; 而anchor与negative属于不同的id, 即 yanchor ≠ynegative ∘y_{\text {anchor }} \neq y_{\text {negative }} \circyanchor=ynegative 通过不断学习后,使得anchor与positive的欧式距离变小, anchor与negative的欧式距离变大。其中,这里的anchor、Positive、negative是图片的d维嵌入向量
(embedding) .

使用数学公式进行表达,triplet loss想达到的效果是:
d(xia,xip)+α≤d(xia,xin)d\left(x_{i}^{a}, x_{i}^{p}\right)+\alpha \leq d\left(x_{i}^{a}, x_{i}^{n}\right) d(xia,xip)+αd(xia,xin)
其中, d()d()d() 表示两个向量之间的欧氏距离, α\alphaα 表示两个向量之间的margin, 防止 d(xia,xip)=d(xia,xin)=0d\left(x_{i}^{a}, x_{i}^{p}\right)=d\left(x_{i}^{a}, x_{i}^{n}\right)=0d(xia,xip)=d(xia,xin)=0 。因此,可以最小化triplet loss损失函数来达到此目 的:
triplet loss =[d(xia,xip)−d(xia,xin)+α]+\text { triplet } \quad \text { loss }=\left[d\left(x_{i}^{a}, x_{i}^{p}\right)-d\left(x_{i}^{a}, x_{i}^{n}\right)+\alpha\right]_{+} tripletloss=[d(xia,xip)d(xia,xin)+α]+
在实际中,通常使用在线训练方式, 选择P的不同的id, 每个id包含K张图片,形成
了batch s_{s}s ize =PK=P K=PK 的mini-batch。从而在这mini-batch种选择hard/easy example 构成loss。

3.2 Center Loss

该Center Loss损失函数提出于《A Discriminative Feature Learning Approach for Deep Face Recognition》。为了提高特征的区分能力,作者提出了center loss损失函数,不仅能缩小类内差异,而且能扩大类间差异。

作者首先在MNIST数据集上进行试验,将隐藏层的最后输出维度改为2,使用softmax+交叉熵作为损失函数,将其结果可视化出来,如下图所示。可以看出,交叉熵可以使每一类分开,数据分布呈射线形,但却不够区分性,即类内差异大。

因此,作者想要在保持数据的可分性前提下,进一步缩小类内之间的差异。为了达到这个目的,提出了center loss损失函数:
LC=12∑i=1m∥xi−cyi∥22L_{C}=\frac{1}{2} \sum_{i=1}^{m}\left\|x_{i}-c_{y_{i}}\right\|_{2}^{2} LC=21i=1mxicyi22
其中, cyic_{y_{i}}cyi 表示第 yiy_{i}yi 类的中心。因此,通常将center loss和交叉嫡进行结合,构成组 合损失函数:
L=LS+λLC=−∑i=1mlog⁡eWyiTxi+byi∑i=1neWjTxj+byi+λ2∑i=1m∥xi−cyi∥22L=L_{S}+\lambda L_{C}=-\sum_{i=1}^{m} \log \frac{e^{W_{y_{i}}^{T} x_{i}+b_{y_{i}}}}{\sum_{i=1}^{n} e^{W_{j}^{T} x_{j}+b_{y_{i}}}}+\frac{\lambda}{2} \sum_{i=1}^{m}\left\|x_{i}-c_{y_{i}}\right\|_{2}^{2} L=LS+λLC=i=1mlogi=1neWjTxj+byieWyiTxi+byi+2λi=1mxicyi22
其中,λ表示center loss的惩罚力度。同样在MNIST中,其结果如下图所示。可以看到随着λ的增加,约束性更强,每一类会更聚集在类内中心处。

在使用Center Loss损失函数时,需要引入两个超参: α\alphaαλ\lambdaλ 。其中, λ\lambdaλ 表示center Ioss的思罚力度; 而 α\alphaα 控制类内中心点 cyic_{y_{i}}cyi 的学习率。类内中心点 cyic_{y_{i}}cyi 应该随着特征 的不同,会产生变化。一般会在每个mini-batch中更新类内中心点 cyic_{y_{i}}cyi :
cjt+1=cjt−αΔcjtc_{j}^{t+1}=c_{j}^{t}-\alpha \Delta c_{j}^{t} cjt+1=cjtαΔcjt

3.3 Sphereface

该Sphereface提出于《SphereFace: Deep Hypersphere Embedding for Face Recognition》,其也称A-Softmax损失函数。作者认为,triplet loss需要精心构建三元组,不够灵活;center loss损失函数只是强调了类内的聚合度,对类间的可分性不够重视。因此,作者提出了疑问:基于欧式距离的损失函数是否适合模型学习到具有区分性的特征呢?

首先,重新看一下softmax loss损失函数(即softmax+交叉熵):
Loss⁡i=−log⁡(eWyTxi+byi∑jeWjTxi+bj)=−log⁡(e∥Wyi∥∥xi∥cos⁡(θyi,i)+byi∑je∥Wj∥∥xi∥cos⁡(θj,∂+bj)\operatorname{Loss}_{i}=-\log \left(\frac{e^{W_{y}^{T} x_{i}+b_{y_{i}}}}{\sum_{j} e^{W_{j}^{T} x_{i}+b_{j}}}\right)=-\log \left(\frac{e^{\left\|W_{y_{i}}\right\|\left\|x_{i}\right\| \cos \left(\theta_{y_{i}, i}\right)+b_{y_{i}}}}{\sum_{j} e^{\left\|W_{j}\right\|\left\|x_{i}\right\| \cos \left(\theta_{j, \partial}+b_{j}\right.}}\right) Lossi=log(jeWjTxi+bjeWyTxi+byi)=log(jeWjxicos(θj,+bjeWyixicos(θyi,i)+byi)
其中, θj,i(0≤θj,i≤π)\theta_{j, i} \quad\left(0 \leq \theta_{j, i} \leq \pi\right)θj,i(0θj,iπ) 表示向量 WjW_{j}Wjxix_{i}xi 的夹角。可以看到,损失函数与 ∥Wj∥,θj,i\|W j\|, \theta_{j, i}Wj,θj,ibjb_{j}bj 有关, 令 ∥Wj∥=1\|W j\|=1Wj=1bj=0b_{j}=0bj=0, 则可以得到modified-softmax损 失函数,更加关注角度信息:
Lmodified −softmax =−log⁡(e∥xi∥cos⁡(θyi,ν∑je∥xi∥cos⁡(θj,λ))L_{\text {modified }-\text { softmax }}=-\log \left(\frac{e^{\left\|x_{i}\right\| \cos \left(\theta_{y_{i}, \nu}\right.}}{\sum_{j} e^{\left\|x_{i}\right\| \cos \left(\theta_{j, \lambda}\right)}}\right) Lmodifiedsoftmax=log(jexicos(θj,λ)exicos(θyi,ν)
虽然使用modified-softmax损失函数可以学习到特征具有角度区分性,但这个区分
力度仍然不够大。因此,在 θj,i\theta_{j, i}θj,i 上乘以一个大于1的整数,来提高区分度:
Lang=−log⁡(e∥xi∥cos⁡(mθyi,i)e∥xi∥cos⁡(mθj,∂)+∑j≠yie∥xi∥cos⁡(θj,ϑ))L_{a n g}=-\log \left(\frac{e^{\|x i\| \cos \left(m \theta_{y_{i}, i}\right)}}{e^{\left\|x_{i}\right\| \cos \left(m \theta_{j, \partial}\right)}+\sum_{j \neq y_{i}} e^{\left\|x_{i}\right\| \cos \left(\theta_{j, \vartheta}\right)}}\right) Lang=log(exicos(mθj,)+j=yiexicos(θj,ϑ)exicos(mθyi,i))
这样,能扩大类间距离,缩小类内距离。

下图是论文的实验结果,从超球面的角度进行解释,不同的m值的结果。其中,不同颜色的点表示不同的类别。可以看出,使用A-Softmax损失函数,会将学习到的向量特征映射到超球面上,m=1表示退化成modified-softmax损失函数,可以看出,每个类别虽然有明显的分布,但区分性不够明显。随着m的增大,区分性会越来越大,但也越来越难训练。

3.4 Cosface

该Cosface损失函数是由腾讯在2018年《CosFace: Large Margin Cosine Loss for Deep Face Recognition》中提出的。Cosface损失函数,也称Large Margin Cosine Loss(LMCL)。从名字可以看出,通过对cos的间隔最大化,来实现扩大类间距离,缩小类内距离。

从softmax出发 (与Sphereface类似), 作者发现,为了实现有效的特征学习, ∥Wj=1∣\| W_{j}=1 \midWj=1 |是十分有必要的, 即对权重进行归一化。同时,在测试阶段, 测试用的 人脸对的得分通常是根据两个特征向量之间的余弦相似度进行计算的。这表明, ∥x∣\| x \midx |对得分计算影响不大,因此,在训练阶段将 ∥x∥=s\|x\|=sx=s 固定下来 (在本论文 中, s=64s=64s=64 :
Lns=1N∑i−log⁡escos⁡(θyi,ν∑jescos⁡(θj,jL_{n s}=\frac{1}{N} \sum_{i}-\log \frac{e^{s \cos \left(\theta_{y_{i}, \nu}\right.}}{\sum_{j} e^{s \cos \left(\theta_{j, j}\right.}} Lns=N1ilogjescos(θj,jescos(θyi,ν
其中ns表示归一化版本的softmax loss, θj,i\theta_{j, i}θj,i 表示 WjW_{j}Wjxxx 之间的角度。为了加大区 分性,类似Sphereface一样,引入常数m:
Llmc=1N∑i−log⁡es(cos⁡(θyi,j)−m)es(cos⁡(θyi,ν)−m)+∑j≠yiescos⁡(θj,ȷ^)L_{l m c}=\frac{1}{N} \sum_{i}-\log \frac{e^{s\left(\cos \left(\theta_{y_{i}, j}\right)-m\right)}}{\left.e^{s\left(\cos \left(\theta_{y_{i}, \nu}\right)-m\right)}+\sum_{j \neq y_{i}} e^{s \cos (\theta j, \hat{\jmath}}\right)} Llmc=N1iloges(cos(θyi,ν)m)+j=yiescos(θj,ȷ^)es(cos(θyi,j)m)
其中, W=W∗∥W∗,x=x∗∥m∗∗∣∣,cos⁡(θj,i)=WjTxiW=\frac{W^{*}}{\| W^{*}}, x=\frac{x^{*}}{\|_{m^{*}} *||}, \cos \left(\theta_{j}, i\right)=W_{j}^{T} x_{i}W=WW,x=mx,cos(θj,i)=WjTxi

下图是作者的解释图。第一个表示正常的sotfmax loss,可以看出两个类别的分类边界具有重叠性,即区分性不强;第二个表示归一化版本的softmax loss,此时边界已经很明显,相互没有重叠,但是区分性不足;第三个表示A-softmax,此时横纵坐标变成了θ,从这个角度解释,使用两条线作为区分边界,作者也提出,该损失函数的缺点是不连续;第四个表示Cosface,在cos(θ)下,使用两条线作为区分边界,特征之间没有交集,随着m值增大,区分性也会越来越明显,但训练难度会加大。

3.5 Arcface

该Arcface损失函数提出于 《ArcFace: Additive Angular Margin Loss for Deep Face
Recognition》。类似于Sphereface和Cosface, Arcface同样需要令 ∥W∥=1,∥x∥=s\|W\|=1,\|x\|=sW=1,x=s, 同时也引入常数m, 但与前面两者不同的是, 这里的m是 对 θ\thetaθ 进行修改:
Larcface =1N∑i−log⁡es(cos⁡(θyi,i+m))es(cos⁡(θyi,i+m))+∑j≠yiescos⁡(θj,j)L_{\text {arcface }}=\frac{1}{N} \sum_{i}-\log \frac{e^{s\left(\cos \left(\theta_{y_{i}, i}+m\right)\right)}}{\left.e^{s\left(\cos \left(\theta_{y_{i}, i}+m\right)\right)}+\sum_{j \neq y_{i}} e^{s \cos \left(\theta_{j, j}\right.}\right)} Larcface=N1iloges(cos(θyi,i+m))+j=yiescos(θj,j)es(cos(θyi,i+m))
下图是Arcface的计算流程图, 首先对 xxxWWW 进行标准化,然后进行相乘得到 cos⁡(θj,i)\cos \left(\theta_{j, i}\right)cos(θj,i), 通过 arccos⁡(cos⁡(θj,i))\arccos \left(\cos \left(\theta_{j, i}\right)\right)arccos(cos(θj,i)) 来得到角度 θj,i\theta_{j, i}θj,i, 加上常数 mmm 来加大间距得到
θj,i+m\theta_{j, i}+mθj,i+m, 之后计算 cos⁡(θj,i+m)\cos \left(\theta_{j, i}+m\right)cos(θj,i+m) 并乘上常数 sss, 最后进行常规的softmax loss就 行。

通过对Sphereface、Cosface和Arcface进行整合, 得到了统一的形式:
L=1N∑i−log⁡es(cos⁡(m1θyi,i+m2)−m3)es(cos⁡(m1θyi,i+m2)−m3)+∑j≠yiescos⁡(θj,jL=\frac{1}{N} \sum_{i}-\log \frac{e^{s\left(\cos \left(m_{1} \theta_{y_{i}, i}+m_{2}\right)-m_{3}\right)}}{e^{s\left(\cos \left(m_{1} \theta_{y_{i}, i}+m_{2}\right)-m_{3}\right)}+\sum_{j \neq y_{i}} e^{s \cos \left(\theta_{j, j}\right.}} L=N1iloges(cos(m1θyi,i+m2)m3)+j=yiescos(θj,jes(cos(m1θyi,i+m2)m3)
此时,就可以对该损失函数进行魔改了,作者实验得到,对于部分数据集, m1=1,m2=0.3,m3=0.2m_{1}=1, m_{2}=0.3, m_{3}=0.2m1=1,m2=0.3,m3=0.2m1=0.9,m2=0.4,m3=0.15m_{1}=0.9, m_{2}=0.4, m_{3}=0.15m1=0.9,m2=0.4,m3=0.15 的效果较
好。
同时,作者也尝试将Arcface融入Triplet loss中,但效果不太明显。

以上常用损失函数介绍完成。

参考文献:
[1] https://www.cnblogs.com/dengshunge/p/12252820.html
[2] https://blog.csdn.net/ABV09876543210/article/details/116081657?spm=1001.2014.3001.5501

损失函数--持续更新相关推荐

  1. SKlearn中的函数学习总结(持续更新)

    关于SKlearn中的函数学习及关键代码部分,会持续更新 (参考sklearn官方文档) 一:分类.回归 二:降维 三:模型评估与选择 四:数据预处理 五:模型保存 大类 小类 适用问题 实现文档 说 ...

  2. 机器学习面试经验--2017年持续更新

    机器学习面试经验--2017年持续更新 搜狐面试算法实习生 岗位搜狐后台开发(机器学习NLP) 10:00--11:10 1.首先自我介绍,blabla简单介绍了一下本科研究生学校专业方向,面试官开始 ...

  3. 【持续更新】一些Trick

    这一篇用于记录一些学习中收获的trick,持续更新. Linux 指令 查看GPU状态 :watch -n1 gpustat     查看CPU进程 : top     ssh远程连接服务器: ssh ...

  4. 机器学习算法岗:常见面试问题及解答整理,持续更新

    机器学习算法岗:常见面试问题及解答整理,持续更新 一.决策树ID3和C4.5的差别?各自优点? ID3算法: C4.5算法: 差异: 二.过拟合的原因及如何防止 三.几种模型( SVM,LR,GBDT ...

  5. 机器学习,深度学习基础算法原理详解(图的搜索、交叉验证、PAC框架、VC-维(持续更新))

    机器学习,深度学习基础算法原理详解(图的搜索.交叉验证.PAC框架.VC-维.支持向量机.核方法(持续更新)) 机器学习,深度学习基础算法原理详解(数据结构部分(持续更新)) 文章目录 1. 图的搜索 ...

  6. 【学习经验分享NO.16】超全代码-python画Sigmoid,ReLU,Tanh等十多种激活函数曲线及其梯度曲线(持续更新)

    文章目录 前言 1. Sigmoid 2. tanh 3. ReLU 4. Leaky ReLU 5. ELU 6.PReLU 7. Softmax 8. Swish 9. Maxout 10. So ...

  7. 学习知识汇总(持续更新......)

    章节 内容 常用 Colab使用教程 csdn博客编辑教程目录 新版CSDN编辑器示例(代码及显示样式) 如何快速转载CSDN中的博客 B站视频资料汇总 系统 windows10和安装linux双系统 ...

  8. 基于PaddleOCR的FCENet论文总结和代码详解(持续更新)

    Fourier Contour Embedding for Arbitrary-Shaped Text Detection 文末有总结一些CVPR有关OCR领域的最新论文及代码地址 Contribut ...

  9. 智能交通流量预测方案收集(持续更新)

    交通流量预测应用方案收集(欢迎补充.持续更新-) 论文&方案合集 基于时间图卷积网络(T-GCN)交通流预测(A Temporal Graph Convolutional Network fo ...

最新文章

  1. pytorch 与 numpy 的数组广播机制
  2. 接雨水—leetcode42
  3. 作者:陈威,电子科技大学互联网科学中心硕士生。
  4. linux 导出软件,如何将perf(Linux工具)的输出保存到文件中?
  5. oracle 12c 性能,Oracle 12C 新性能 总结篇
  6. QQ密技68招(超强)
  7. Codejock Suite Pro _16.3.X.国内最新版来了!
  8. 如何将macOS应用程序打包为dmg文件
  9. 【人因工程】认知行为可靠性评价浅谈
  10. 23 期-原文 6.30
  11. 算法精解----log符号什么意思
  12. 浏览器打不开网页 服务器停止响应怎么办,浏览器打不开未响应怎么办
  13. 阿里云-视频点播服务API调用
  14. 度量学习DML之MoCO
  15. 怎么把苹果手机通讯录导入华为手机_怎么恢复手机通讯录?最完整手机通讯录恢复方法大公开...
  16. 机器学习的学习形式分类
  17. Apache Karaf 存在远程代码执行漏洞
  18. TROPOMI(哨兵5P)数据介绍及下载方法
  19. 经典算法—快速排序(Quicksort)使用详解
  20. 同等学力申硕可以获得什么证书?

热门文章

  1. python 读视频_Python3读取视频保存视频
  2. 亚商投资顾问 早餐FM/0411中证金融下调证券公司保证金比例
  3. Windows11 Store应用商店下载的软件,怎么创建快捷方式
  4. 晨星、银河基金业绩排行榜数据转换工具
  5. 【ZJOI2005】沼泽鳄鱼
  6. 山水之道第五境——精灵的天地大阵
  7. python发朋友圈突破朋友圈限制_用Python发一个高逼格的朋友圈
  8. mysql启动报错: 某些服务在未由其他服务器或程序使用时即将自动停止-解决办法
  9. Jump Game/Jump Game II
  10. 激光雷达核心技术及行业格局梳理