deep learning中各种loss function大杂烩

deep learning中各种loss function大杂烩

    • Softmax Loss
    • Center Loss
    • Triplet Loss

学习深度学习也有一段时间啦,很多论文都会在 loss function 上做文章,说明还是非常最重要的呢,因此总结一下自己对不同的loss function的理解。

Softmax Loss

网络的全连接层出来后,会加上一个softmax层,softmax的输入是该样本在某个类下的得分(这个得分没有范围限制),经过softmax层之后,输出为该样本属于某个类的概率(范围是0到1)。softmax的计算公式如下,想要更直观地理解公式,可以随便带几个值进去试一试。

e W y i T x i + b y i ∑ j = 1 n e W j T x i + b j \frac{e^{W_{y_{i}}^{T} \boldsymbol{x}_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} \boldsymbol{x}_{i}+b_{j}}} j=1neWjTxi+bjeWyiTxi+byi

softmax loss 就是对计算出来的概率求损失函数值,其公式如下所示,预测错比预测对的损失要大,预测错得离谱比预测错得轻微的损失要大。举个例子,某样本的真是标签是类别3,即y=[0 0 1 0],模型1预测得到的softmax输出为[0.1 0.2 0.6 0.1],即得到正确的分类标签,对应的loss=-log(0.6);模型2预测得到的softmax输出为[0.2 0.4 0.3 0.1],即得到错误的分类标签,对应的loss=-log(0.3);模型3预测得到的softmax输出为[0.2 0.5 0.1 0.2],即得到错误的分类标签,对应的loss=-log(0.1);直观地感受一下,模型1分类正确,模型2、3分类错误,但模型3较模型2错误的更离谱,所以,我们得到的损失函数值排序为:loss=-log(0.6) L S = − ∑ i = 1 m log ⁡ e W y i T x i + b y i ∑ j = 1 n e W j T x i + b j \mathcal{L}_{S}=-\sum_{i=1}^{m} \log \frac{e^{W_{y_{i}}^{T} \boldsymbol{x}_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} \boldsymbol{x}_{i}+b_{j}}} LS=i=1mlogj=1neWjTxi+bjeWyiTxi+byi
下面是用softmax loss 和 LeNets++得到的一个2D的可视化图,可以看出softmax loss可以将不同类区分开但类内的距离较大。
deep learning中各种loss function大杂烩_第1张图片

Center Loss

为了解决上述问题,减小类内距离就好啦。center loss 即引入了聚类中心,使每个类的样本向聚类中心靠拢以减小类内距离。center loss 如下所示:
L C = 1 2 ∑ i = 1 m ∥ x i − c y i ∥ 2 2 \mathcal{L}_{C}=\frac{1}{2} \sum_{i=1}^{m}\left\|\boldsymbol{x}_{i}-\boldsymbol{c}_{y_{i}}\right\|_{2}^{2} LC=21i=1mxicyi22
L S \mathcal{L}_{S} LS L C \mathcal{L}_{C} LC结合得到损失函数为(其中 λ \lambda λ为权衡两种loss的权重系数):
L = L S + λ L C = − ∑ i = 1 m log ⁡ e W y i T x i + b y i ∑ j = 1 n e W j T x i + b j + λ 2 ∑ i = 1 m ∥ x i − c y i ∥ 2 2 \mathcal{L}=\mathcal{L}_{S}+\lambda \mathcal{L}_{C}=-\sum_{i=1}^{m} \log \frac{e^{W_{y_{i}}^{T} \boldsymbol{x}_{i}+b_{y_{i}}}}{\sum_{j=1}^{n} e^{W_{j}^{T} \boldsymbol{x}_{i}+b_{j}}}+\frac{\lambda}{2} \sum_{i=1}^{m}\left\|\boldsymbol{x}_{i}-\boldsymbol{c}_{y_{i}}\right\|_{2}^{2} L=LS+λLC=i=1mlogj=1neWjTxi+bjeWyiTxi+byi+2λi=1mxicyi22
c即为第yi个类的聚类中心,那么问题来了:
(1)在整个训练集上更新聚类中心,工程量大还耗时; → \rightarrow 在mini-batch上更新聚类中心
(2)少数标签错误的样本在聚类的过程中会造成较大的干扰。 → \rightarrow 设置来控制聚类中心更新的学习率 c j t + 1 = c j t − α ⋅ Δ c j t \boldsymbol{c}_{j}^{t+1}=\boldsymbol{c}_{j}^{t}-\boldsymbol{\alpha} \cdot \Delta \boldsymbol{c}_{j}^{t} cjt+1=cjtαΔcjt

加上center loss 后的特征分类可视化图如下所示:
deep learning中各种loss function大杂烩_第2张图片
随着center loss 所占权重的增加,特征的类内距离逐渐减小。

参考论文:https://link.springer.com/content/pdf/10.1007%2F978-3-319-46478-7_31.pdf

Triplet Loss

triplet loss的思想是增大类间距离,减小类内距离。采取的方法是讲一个三元组(anchor, negative, positive)输入进行学习,使得anchor与正样本距离更近,与负样本距离更远。
deep learning中各种loss function大杂烩_第3张图片
triplet loss 公式如下:
L = ∑ i N [ ∥ f ( x i a ) − f ( x i p ) ∥ 2 2 − ∥ f ( x i a ) − f ( x i n ) ∥ 2 2 + α ] + L=\sum_{i}^{N}\left[\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}-\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}+\alpha\right]_{+} L=iN[f(xia)f(xip)22f(xia)f(xin)22+α]+
更多的细节可以参考论文:https://arxiv.org/abs/1503.03832

你可能感兴趣的:(deep learning中各种loss function大杂烩)