ASV中的度量学习
# 概述
监督度量学习可以分为基于实例的学习和基于proxy的学习【类似于锚点】,常见的度量学习Contrastive, Triplet, Prototypical, GE2E属于前者
# Pairwise Identity Verification via Linear Concentrative Metric Learning[2018]
本文研究了similarity metric learning和distance metric learning,发现相似度学习法更合适
pairwise verification难点在于,不可能通过足够的训练数据创建鲁棒的身份模型;目标是衡量一对样本的差异或是相似度
本文研究2种度量学习:triangular similarity metric learning (TSML)和discriminative distance metric learning (DDML)
映射函数分为线性与非线性,本文认为线性方法(如WCCN)更便于优化,也不太可能过拟合,非线性方法的效果也不比线性法好,而且通常可以在线性层后面再加一层激活函数以实现
本文考察:2种验证场景[人脸识别、说话人识别],2种训练设置[有限数据、无限数据],2种度量学习损失函数[TSML、DDML]和3种映射函数[线性、单层非线性、多层非线性]
与线性模型相比,非线性模型通常首选在冗余训练集上,以很好地捕获数据的基础分布
TSML:
DDML:通常定义一个边界,假设两个距离大于边界的向量被很好地分开
看不下去了...
# 🛠️In defence of metric learning for speaker recognition[2020]
项目地址:https://github.com/clovaai/voxceleb_trainer
人脸识别任务分为开集和闭集,闭集就是一般的分类问题,开集通常通过度量学习进行判断
虽然softmax loss可以学习可分离的embedding,但它们不够有分辨力,因为它没有明确地设计来优化embedding的相似性,因此后面还需要接一个PLDA。
A-Softmax将softmax loss转为基于cosine相似度的损失函数,由此还引申出AM-Softmax(CosFace)和AAM-Softmax(ArcFace),都是从人脸识别领域应用过来的,缺点是训练的时候,损失函数中标量的值和边缘定义很敏感
对于度量学习方面的损失,一般用对比损失contrastive loss或者三元组损失triplet loss,直接优化距离度量,但是需要谨慎地选择输入对
与本文最相关的工作是原型网络prototypical networks,训练过程模仿测试过程,训练一个度量空间,在该空间中通过计算每一类的原型表示(通常为质心)来计算距离。使用多个负样本可以帮助训练稳定,这样损失函数可以强制使得embedding远离所有的负样本,而不是像triplet loss一样,只能设定一个负样本
本文认为,基于度量学习的vanilla triplet loss比基于分类损失的AM-Softmax和AAM-Softmax都强
分类损失:
- Softmax:$L_{\mathrm{S}}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{\mathbf{W}{y{i}}^{T} \mathbf{x}{i}+b{y_{i}}}}{\sum_{j=1}^{C} e^{\mathbf{W}{j}^{T} \mathbf{x}{i}+b_{j}}}$
- AM-Softmax:$L_{\mathrm{C}}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s\left(\cos \left(\theta_{y_{i}, i}\right)-m\right)}}{e^{s\left(\cos \left(\theta_{y_{i}, i}\right)-m\right)}+\sum_{j \neq y_{i}} e^{s\left(\cos \left(\theta_{j, i}\right)\right)}}$
- AAM-Softmax:$L_{\mathrm{T}}=\frac{1}{N} \sum_{j=1}^{N} \max \left(0,\left|\mathrm{x}{j, 0}-\mathrm{x}{j, 1}\right|{2}^{2}-\left|\mathrm{x}{j, 0}-\mathrm{x}{k \neq j, 1}\right|{2}^{2}+m\right)$
度量学习损失:
- Triplet:$L_{\mathrm{T}}=\frac{1}{N} \sum_{j=1}^{N} \max \left(0,\left|\mathbf{x}{j, 0}-\mathbf{x}{j, 1}\right|{2}^{2}-\left|\mathbf{x}{j, 0}-\mathbf{x}{k \neq j, 1}\right|{2}^{2}+m\right)$
- Prototypical:
$$\mathbf{c}{j}=\frac{1}{M-1} \sum{m=1}^{M-1} \mathbf{x}_{j, m}(质心)$$
$$\mathbf{S}{j, k}=\left|\mathbf{x}{j, M}-\mathbf{c}{k}\right|{2}^{2}(欧氏距离)$$
$$L_{\mathrm{P}}=-\frac{1}{N} \sum_{j=1}^{N} \log \frac{e^{\mathbf{S}{j, j}}}{\sum{k=1}^{N} e^{\mathbf{S}_{j, k}}}$$
- Generalised end-to-end:略
- Angular Prototypical:略
# Dimensionality Reduction by Learning an Invariant Mapping[2006]
DrLIM:学习一个全局连续的非线性函数,将数据均匀地映射到输出流形,学习过程中,仅仅依靠邻近关系,且在输入空间中不需要做距离测量
目前的降维技术有如下缺点:
- 对于与训练样本点关系未知的新点,无法提供比较好的映射
- 许多方法假定输入空间中存在一个有意义的(可计算的)距离度量
- 在输出空间中,容易使样本聚集过密而导致解退化,应该找到能够被样本均匀覆盖的流形
本方法的优势:
- 只需要样本点的邻近关系,可以从先验知识(比如,对扭曲的不变性或时间邻近)、手动标注得到,反正不是基于距离测度得到的
- 学习到的函数,对于输入的复杂非线性转换能保持不变性,如亮度变化和几何扭曲
- 学习到的函数可以投影任何未在训练样本中出现过的新样本,不需要先验知识
- 经过映射后的输出是在平滑连续的输出空间上的
通过对比损失函数学习参数化函数$G_{W}$及其参数$W$,通过一个基于能量【大概是因为计算了平方值吧,好大的帽子...】的模型,使用邻近关系去学习映射,对于由各种$W$组成的一组$G_{W}$,目标是找到合适的$W$,使得输入能映射到这样一个流形上,该流形上样本用欧式距离测度:$D_{W}\left(\vec{X}{1}, \vec{X}{2}\right)=\left|G_{W}\left(\vec{X}{1}\right)-G{W}\left(\vec{X}{2}\right)\right|{2}$,用以估计输入样本在输入空间的语义相似度(意思应该是,在低维空间可以用简单的距离测度反映样本在输入空间的邻近关系);本文只假设$G_{W}$可以被$W$微分。
前人工作回顾
- 线性变换:PCA通过最大化方差实现降维,Multi-Dimensional Scaling(MDS)寻找最能保持成对输入点之间距离的投影
- 非线性谱方法:一般包括3步
- 为每个点找到邻近点列表
- 通过邻近信息计算gram matrix
- 找到该矩阵的特征值
- 缺点:对于未知的新样本,需要重新计算整个样本集,尽管后续有了扩展方法,但还是依赖于预定的距离测度
- PCA的非线性版本即为Kernel PCA,先将样本投影到高维空间,再进行主成分分析
本文学习到的映射,会使得接近的点更近,较远的点更远
不同于常见的损失函数,计算所有样本上的累加,本损失函数计算成对样本的损失累加;$Y=0$表示相似,$Y=1$表示不相似
$$\mathcal{L}(W)=\sum_{i=1}^{P} L\left(W,\left(Y, \vec{X}{1}, \vec{X}{2}\right)^{i}\right)$$
$$L\left(W,\left(Y, \vec{X}{1}, \vec{X}{2}\right)^{i}\right)=(1-Y) L_{S}\left(D_{W}^{i}\right)+Y L_{D}\left(D_{W}^{i}\right)$$
$$\begin{array}{l} L\left(W, Y, \vec{X}{1}, \vec{X}{2}\right)= (1-Y) \frac{1}{2}\left(D_{W}\right)^{2}+(Y) \frac{1}{2}\left{\max \left(0, m-D_{W}\right)\right}^{2} \end{array}(m>0为边界)$$
m表示余量,定义了$G_\mathbf{W}(\mathbf{x})$的半径,仅当非相似样本对的距离小于该半径时,$\mathcal{L}_D$才发挥作用【为什么要这样设置?只关注最有迷惑性的非相似点】
$L_{D}$是相当重要的,如果只是简单地最小化$D_{W}$,会导致$D_{W}=L=0$,此时$G_{W}$是一个常数【所有相似点映射到一个点上】;大多数基于能量的模型需要在损失函数中使用一个明确的对比项
弹簧模型分析:相似样本对用
attract-only
弹簧连接,不相似样本对用m-repulse-only
弹簧连接attract-only
:弹簧静止长度为0,两个点距离必然>0,此时只存在吸引力m-repulse-only
:repulse,击退;弹簧静止长度为m,当两个点距离<m时,弹簧产生斥力,当两个点距离>m时,也不会产生让他们回到静止长度的吸引力
将梯度更新类比于弹簧模型,进行公式推导(略)
在相似样本对中,有人认为直接让距离为0也可以达到平衡状态,但是,如果右边的点靠近中间的蓝点,左边的点就必然会远离,所以需要对所有弹簧计算全局损失函数,得到最终的平衡状态
参考资料:
# Margin-based Loss
# A discriminative feature learning approach for deep face recognition[2016]
# 🛠️Large-Margin Softmax Loss for Convolutional Neural Networks[2016]
项目地址:https://github.com/wy1iu/LargeMargin_Softmax_Loss
提出L-Softmax,目的:类内紧缩,类外分离
样本和网络参数之间的可分性可以分解为振幅和角的余弦相似:$\boldsymbol{W}{c} \boldsymbol{x}=\left|\boldsymbol{W}{c}\right|{2}|\boldsymbol{x}|{2} \cos \left(\theta_{c}\right)$,c—class index,$W_C$表示最后一个全连接层的对应参数,相当于线性分类器
- $L=\frac{1}{N} \sum_{i} L_{i}=\frac{1}{N} \sum_{i}-\log \left(\frac{e^{f_{y_{i}}}}{\sum_{j} e^{f_{j}}}\right)$-----softmax loss
- $L_{i}=-\log \left(\frac{e^{\left|\boldsymbol{W}{y{i}}\right|\left|\boldsymbol{x}{i}\right| \cos \left(\theta{y_{i}}\right)}}{\sum_{j} e^{\left|\boldsymbol{W}{j}\right|\left|\boldsymbol{x}{i}\right| \cos \left(\theta_{j}\right)}}\right)$-----softmax loss变形
在真实分类和样本的角度上乘以预设的常数$m$,该参数决定了与真实分类的接近程度,产生了角裕度;当$m=1$时,为常规的softmax loss
$$\begin{aligned} \left|\boldsymbol{W}{1}\right||\boldsymbol{x}| \cos \left(\theta{1}\right) & \geq\left|\boldsymbol{W}{1}\right||\boldsymbol{x}| \cos \left(m \theta{1}\right) \ &>\left|\boldsymbol{W}{2}\right||\boldsymbol{x}| \cos \left(\theta{2}\right) \end{aligned}$$
L-Softmax loss:$L_{i}=-\log \left(\frac{e^{\left|W_{y_{i}}\right|\left|x_{i}\right| \psi\left(\theta_{y_{i}}\right)}}{e^{\left|W_{y_{i}}\right|\left|x_{i}\right| \psi\left(\theta_{y_{i}}\right)}+\sum_{j \neq y_{i}} e^{\left|W_{j}\right|\left|x_{i}\right| \cos \left(\theta_{j}\right)}}\right)$
未完待续...
设置的角裕度越大,网络参数的训练难度也越大
本文忽略偏移$b$,是因为该参数对结果没什么影响
A-Softmax的总结及与L-Softmax的对比——SphereFace - Thaurun - 博客园 (cnblogs.com) (opens new window)
# 🛠️Large Margin Softmax Loss for Speaker Verification[2019]
- 本文指出尽管softmax+交叉熵损失很常用,但只是适合SR,不适合SV;
- 要么是利用提出的triplet loss、speaker identity subspace loss、Gaussian Mixture loss,或者是优化原先的softmax loss;要么是基于距离(center loss)或者是基于角度(angular margin softmax loss)[14-23]
# 🛠️Sphereface:Deep hypersphere embedding for face recognition[2017]
对比损失和三元损失需要精心设计样本对,很耗时,很脆弱
通过softmax loss学习得到的特征自发的具有角度分布
softmax loss = 最后一层全连接层 + softmax函数 + 交叉熵损失
投影后的特征是分布在超球面上的
取比较小的m,比如最小类间距离大于最大类内距离的时候
与L-Softmax的区别:
- L-Softmax更像是正则化方法,在闭集分类问题上有优势
- A-Softmax学习有鉴别能力的embedding,更适合开集验证问题
- L-Softmax中的m只能定性分析,但A-Softmax中的m可以定量分析
若把权重归一化,再把偏移限制为0,最后的决策只与样本和权重的夹角有关(modified softmax loss)
$$\begin{equation} L_{\text {modified }}=\frac{1}{N} \sum_{i}-\log \left(\frac{e^{\left|x_{i}\right| \cos \left(\theta_{y_{i}, i}\right)}}{\sum_{j} e^{\left|x_{i}\right| \cos \left(\theta_{j, i}\right)}}\right) \end{equation}$$
为什么m需要限制为整数?这样cos才可以用倍角公式展开为只有权重和特征的表达式,替换掉夹角之后,可以计算导数
$$L_{\text {ang }}=\frac{1}{N} \sum_{i}-\log \left(\frac{e^{\left|x_{i}\right| \cos \left(m \theta_{y_{i}, i}\right)}}{e^{\left|x_{i}\right| \cos \left(m \theta_{y_{i}, i}\right)}+\sum_{j \neq y_{i}} e^{\left|x_{i}\right| \cos \left(\theta_{j, i}\right)}}\right)$$
讨论了m、CNN层数、数据规模(图是相当不错)
损失函数需要一系列的近似,才能训练成功,但同时也让训练变得不稳定;由此,提出了混合损失函数,加入了传统的softmax loss
# 🛠️NormFace: L2 HyperSphere Embedding for Face Verification[2017]
项目地址:https://github.com/happynear/NormFace
背景:在实际中训练CNN分类模型的时候,使用度量方式都是没有归一化的内积,也就是训练期间使用的相似性或距离度量与测试阶段使用的相似性或距离度量不同;特征归一化操作是可微的,没有理由不把它引进训练阶段
提出了4个问题
为什么用分类损失测试的时候,特征归一化如此有效,尤其是针对softmax loss的时候?
- 上图表明欧式距离有很明显的劣势,不能正确表达类间距离
- 特征向量之间的角度比欧式距离或是内积操作更适合作为评估准则【这就是通常拿softmax loss训练网络,但是用embedding计算余弦相似度去打分的原因;同时也使得训练准则和测试准则不匹配】
- 当没有偏置项时,softmax loss会促使特征有更大的幅值,但是幅值信息对分类没有什么作用,所以归一化可以消除这个特点,然后用余弦相似度进行打分
- 当存在偏置项时,会有某些类的特征向量分布在圆心附近,当进行归一化时,不同类间的特征向量会发生重叠,导致分类错误
- 关于L2-Norm,在网络更新时,范数是会不断增大的,为了防止无限增大,需要weight decay操作【推导没看懂】
为什么用softmax loss直接优化余弦相似度会导致网络不能收敛?
- 余弦相似度的输出范围是[-1,1],而内积层和softmax loss的输出范围为(-20,20)和(-80,80),如此小的范围导致,即便分类准确,概率也很难接近1。
- 如何解决难以收敛的问题?特征向量归一化和权重分量归一化不归一化到1,而是一个大一些的数值$l$;实际操作中,在cosine layer后面直接加个scale layer,该层只有一个可学习的参数$s=l^2$;虽然可以直接指定为超参数,但是本文认为通过网络自动学习更加优雅
- 得到具有余弦距离的softmax loss:$\mathcal{L}{S},=-\frac{1}{m} \sum{i=1}^{m} \log \frac{e^{s \tilde{W}{y{i}}^{T} \tilde{\mathbf{f}}{i}}}{\sum{j=1}^{n} e^{s \tilde{W}{j}^{T} \tilde{\mathbf{f}}{i}}}$
- 在度量学习中,通常会进行特征归一化,并不会有任何问题;但是度量学习的样本对数量不可小觑,所以需要额外的采样和硬挖掘算法
- 对比损失和三元组损失都是在优化归一化后的欧氏距离,同样的,softmax loss也可以用归一化后的欧氏距离进行优化,同时为了统一,将对比损失和三元组损失的其中一个特征向量改为权重分量【如果正确分类,权重分量约等于均值向量】(代理策略)
- $\begin{aligned} \mathcal{L}{\mathcal{S}}, &=-\frac{1}{m} \sum{i=1}^{m} \log \frac{e^{s \tilde{W}{y{i}}^{T} \tilde{\mathbf{f}}{i}}}{\sum{j=1}^{n} e^{s \tilde{W}{j}^{T} \tilde{\mathbf{f}}{i}}} \ &=-\frac{1}{m} \sum_{i=1}^{m} \log \frac{e^{-\frac{s}{2}\left|\tilde{\mathbf{f}}{i}-\tilde{W}{y_{i}}\right|{2}^{2}}}{\sum{j=1}^{n} e^{-\frac{s}{2}\left|\tilde{\mathbf{f}}{i}-\tilde{W}{j}\right|_{2}^{2}}} \end{aligned}$
- $\mathcal{L}{C},= \begin{cases}\left|\tilde{\mathbf{f}}{i}-\tilde{W}{j}\right|{2}^{2}, & c_{i}=j \ \max \left(0, m-\left|\tilde{\mathbf{f}}{i}-\tilde{W}{j}\right|{2}^{2}\right), & c{i} \neq j\end{cases}$
- $\mathcal{L}{\mathcal{T}},=\max \left(0, m+\left|\tilde{\mathbf{f}}{i}-\tilde{W}{j}\right|{2}^{2}-\left|\tilde{\mathbf{f}}{i}-\tilde{W}{k}\right|{2}^{2}\right), \quad c{i}=j, c_{i} \neq k$
- 对比损失和三元组损失使用代理策略的缺点:一些处于类边界的特征无法被优化,因此只能使用更大的margin来弥补这一缺点;如果不进行特征归一化,每次迭代都需要修改margin值,不切实际;反之,进行归一化的话,就可以使用固定的margin了
当使用softmax loss时,如何优化余弦相似度?
加上scale layer
既然在归一化后,softmax loss不能收敛,有其他损失函数可以替代吗?
改造度量学习中的对比损失和三元组损失
给出了2个解决方案:
- 修改softmax loss,优化余弦相似度而不是内积
- 为每个类引入一个代理向量来重新定义度量学习
神经网络中的归一化:
- Batch normalization:减少中间特征的内部协方差偏移,以此加快网络收敛速度
- Weight normalization:归一化卷积层和内积层的权重,加快收敛速度
- Layer normalization:解决Batch normalization依赖batch size的问题
余弦相似度可以看作两个向量内积的归一化版本,与幅值是无关的;
NormFace: L2 Hypersphere Embedding论文笔记 - 知乎 (zhihu.com) (opens new window)
# 🛠️Additive Margin Softmax for Face Verification[2018]
项目地址:https://github.com/happynear/AMSoftmax
原先的margin都是$m\theta$,属于乘法,本文基于NormFace,提出$cos\theta-m$
本文使用了余弦相似度来比较两个特征,为了构建cosine层,在inner product layer执行特征归一化和权重归一化;并且,用全局超参数$s$来缩放cosine值,该值可以通过网络进行更新,但是本文发现收敛缓慢,不如直接取为30;训练阶段,$m$从0线性增加到目标裕量
$\begin{aligned} \mathcal{L}{\mathrm{AMS}} &=-\frac{1}{n} \sum{i=1}^{n} \log \frac{e^{s \cdot\left(\cos \theta_{y_{i}}-m\right)}}{e^{s \cdot\left(\cos \theta_{y_{i}}-m\right)+\sum_{j=1, j \neq y_{i}}^{c} e^{s \cdot \cos \theta_{j}}}} \ &=-\frac{1}{n} \sum_{i=1}^{n} \log \frac{e^{s \cdot\left(W_{y_{i}}^{T} \mathrm{f}{i}-m\right)}}{e^{s \cdot\left(W{y_{i}}^{T} \mathbf{f}{i}-m\right)}+\sum{j=1, j \neq y_{i}}^{c} e^{s W_{j}^{T} \mathbf{f}_{i}}} \end{aligned}$
Softmax loss的决策边界在$d$维特征空间中的$d-1$维超球面上(因为进行了某一维度的归一化)的$d-2$维超平面
权重分量和均值向量的关系在[21, Fig. 6]中有解释,但本文做几何说明时,直接把权重分量记为均值向量
⭐A-Softmax直接作用于$\theta$,属于角裕度;本文直接作用于$cos\theta$,属于余弦裕度:
- 传统softmax中,$\theta=cos\theta$
- 区别在于,当$\theta={0,\pi}$时,余弦有更大的密度
- 如果优化角度,需要在得到$W^Tf$后进行arccos操作
是否需要特征归一化?取决于图片质量,质量很差的时候可以用一下
当$m=0.2$时,就达到了与A-Softmax一致的性能,m增加,类内方差会减小,性能不会下降
# 🛠️CosFace: Large Margin Cosine Loss for Deep Face Recognition[2018]
- 项目地址:https://github.com/yule-li/CosFace
- 直接在cosine margin上进行惩罚
- 未完待续
# Learning towards minimum hyperspherical energy[2018]
# 🛠️⭐ArcFace: Additive Angular Margin Loss for Deep Face Recognition[2019]
项目地址:https://github.com/deepinsight/insightface
角度距离比余弦距离在对角度的影响更加直接
SphereFace中指出,最后一个全连接层的线性转换矩阵【权重分量】在角度空间中可以作为类中心
对特征和权重进行归一化处理后,并缩放$s$倍,在角度部分插入补偿
$$L_{3}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s\left(\cos \left(\theta_{y_{i}}+m\right)\right)}}{e^{s\left(\cos \left(\theta_{y_{i}}+m\right)\right)}+\sum_{j=1, j \neq y_{i}}^{n} e^{s \cos \theta_{j}}}$$
输出了SphereFace,ArcFace,CosFace在训练过程中,特征向量和权重分量的夹角变化,有3个影响因素:起点、终点和斜率【为什么初始是90°附近呢?】
将SphereFace,ArcFace,CosFace融合在一起,得到损失函数
$$L_{4}=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{e^{s\left(\cos \left(m_{1} \theta_{y_{i}}+m_{2}\right)-m_{3}\right)}}{e^{s\left(\cos \left(m_{1} \theta_{y_{i}}+m_{2}\right)-m_{3}\right)}+\sum_{j=1, j \neq y_{i}}^{n} e^{s \cos \theta_{j}}}$$
与其他损失函数作比较:
- Intra-Loss:$L_{5}=L_{2}+\frac{1}{\pi N} \sum_{i=1}^{N} \theta_{y_{i}}$
- Inter-Loss:$L_{6}=L_{2}-\frac{1}{\pi N(n-1)} \sum_{i=1}^{N} \sum_{j=1, j \neq y_{i}}^{n} \arccos \left(W_{y_{i}}^{T} W_{j}\right)$
- Triplet-Loss:$\arccos \left(x_{i}^{p o s} x_{i}\right)+m \leq \arccos \left(x_{i}^{n e g} x_{i}\right)$
在最后一层卷积层后面,用BN-Dropout-FC-BN得到最终512维的特征向量;测试阶段,使用全连接层之前的输出作为embedding;
insightface源码中arcface代码段理解_hanjiangxue_wei的博客-CSDN博客_arcface代码解读 (opens new window)
# [×]Ensemble Additive Margin Softmax for Speaker Verification[2019]
- 南大好喜欢推公式啊...
- 提出EAM-Softmax,将Hilbert-Schmidt independence criterion (HSIC)融合进embedding
# Boundary Discriminative Large Margin Cosine Loss for Text-independent Speaker Verification[2019]
- 基于CosFace,本文提出的训练算法只用在分类边界处的样本上,这些样本通过top-k zero-one loss动态选择
- 对于hard samples,使用cosine margin加以限制
- 如何定义hard samples?夹角越大,说明样本点更靠近决策边界,对$cos\theta$降序排列,选出前$k$个作为easy samples,剩余的$n-k$个则为hard samples,实验证明,取一半是比较好的
- 如何修改softmax loss?给margin加权,但是文中的权重函数是个逻辑运算符,只有[0,1]两种可能
- $L_{b d-l m c}=-\frac{1}{N} \sum_{p=1}^{P} \sum_{j=1}^{n} \log \frac{e^{s\left(\cos \theta_{p, j}-\omega(p, j) m\right)}}{Z}$
- $Z=e^{s\left(\cos \theta_{p, j}-\omega(p, j) m\right)}+\sum_{r \neq p} e^{s\left(\cos \theta_{r, j}\right)}$
- ⭐是否可以把硬决策修改为软决策?
- 实验参数:
- 训练集:2000人,300utts/spk
- 测试机:500人,
- 使用RMSProp优化器;初始学习率为0.1;dropout和L2正则化用于防止过拟合;batch norm用于加快训练过程;batch size为128;
# Dynamic Margin Softmax Loss for Speaker Verification[2020]
- AM-Softmax中,使用的是全局常量margin,但是并不是所有样本的特征向量与类中心的夹角是一样的,而且在训练过程中,夹角也是会不断变化的
# 🛠⭐Rethinking Feature Distribution for Loss Functions in Image Classification[2018]
项目地址:https://github.com/WeitaoVan/L-GM-loss
已经被应用于speaker verification:《End-to-End Residual CNN with L-GM Loss Speaker Verification System》
本文认为深度特征服从高斯分布;通过向softmax loss中引入分类裕度和似然规整,可以同时具有分类能力和特征分布的建模能力
通过样本在特征分布上的似然值,可以更好地辨别难区分的样本点
后验概率用设想的特征分布去求导,分类损失即为后验分布与标签的交叉熵【为什么不用softmax得到的后验分布?这跟GMM-UBM最后有什么区别?】
$$\begin{aligned} \mathcal{L}{c l s} &=-\frac{1}{N} \sum{i=1}^{1 N} \sum_{k=1}^{K} \mathbb{1}\left(z_{i}=k\right) \log p\left(k \mid x_{i}\right) \ &=-\frac{1}{N} \sum_{i=1}^{N} \log \frac{\mathcal{N}\left(x_{i} ; \mu_{z_{i}}, \Sigma_{z_{i}}\right) p\left(z_{i}\right)}{\sum_{k=1}^{K} \mathcal{N}\left(x_{i} ; \mu_{k}, \Sigma_{k}\right) p(k)} \end{aligned}$$
优点:
- 向高斯模型中加入裕度margin是简单直接的,没必要插入复杂的距离函数
- center loss在形式上等价于GM loss中似然规整的一个特殊情况
- GM loss可以估计样本在分布上的似然值,对迷惑样本点分类效果更好
进一步引入了一个似然正则项来衡量训练样本在多大程度上符合假设的分布,因为样本点只要与质心相对近就行,其物理距离可以很远【?】该似然正则项为负值log似然,通过合理地假设先验概率为一常数,可以将似然正则项进行简化:$\mathcal{L}{l k d}=-\sum{i=1}^{N} \log \mathcal{N}\left(x_{i} ; \mu_{z_{i}}, \Sigma_{z_{i}}\right)$
最后,将两个损失函数加权组合:$\mathcal{L}{G M}=\mathcal{L}{c l s}+\lambda \mathcal{L}_{l k d}$
如何在高斯分布中添加margin呢?主要在于高斯分布exp项展开式中的马氏距离:
- 单样本点在单类中的损失:$\mathcal{L}{c l s, i}=-\log \frac{p\left(z{i}\right)\left|\Sigma_{z_{i}}\right|^{-\frac{1}{2}} e^{-d_{z_{i}}}}{\sum_{k} p(k)\left|\Sigma_{k}\right|^{-\frac{1}{2}} e^{-d_{k}}}$,其中马氏距离$d_{k}=\left(x_{i}-\mu_{k}\right)^{T} \Sigma_{k}^{-1}\left(x_{i}-\mu_{k}\right) / 2$
- 直接在马氏距离上添加margin:$\mathcal{L}{c l s, i}^{m}=-\log \frac{p\left(z{i}\right)\left|\Sigma_{z_{i}}\right|^{-\frac{1}{2}} e^{-d_{z_{i}}-m}}{\sum_{k} p(k)\left|\Sigma_{k}\right|^{-\frac{1}{2}} e^{-d_{k}-\mathbb{1}\left(k=z_{i}\right) m}}$
- 引入$\alpha$控制两个类之间的margin:正比于每个样本到质心的距离
理论证明了当类协方差为单位矩阵时,$L_{lkd}=L_{center}$,由此用center loss替代似然正则项会不会更好呢?本文认为,center loss会得到不准确的似然估计。
在训练的时候,通过梯度下降更新协方差矩阵会遇到奇异值问题,因此本文假设协方差为对角的,各类先验相等
# [×]End-to-End Residual CNN with L-GM Loss Speaker Verification System[2018]
- 做了哪些改进?并没有,只是简单的应用
# AdaptiveFace: Adaptive Margin and Sampling for Face Recognition[2019]
- 每个类应该有不同的margin;训练阶段应该选择有价值的类和样本进行训练。因此算是3个自适应改进
- 项目地址:https://github.com/haoliu1994/AdaptiveFace【已删除,被质疑】
L-Softmax把最后一层的偏移量取消;SphereFace提出了A-Softmax,针对L-Softmax做出了微小的改进,归一化了权重,可以看成在一个超球面的流形上对样本进行分类判别;后来AM-Softmax和ArcFace针对SphereFace做了改进,而ArcFace可以看做是针对AM-Softmax的改进版本,直接针对角度去加Margin,这样做的好处是角度距离比余弦距离在对角度的影响更加直接。ArcFace同时对特征和权重归一化等优化。
# Mining-based Loss
# 🛠️⭐Mis-Classified Vector Guided Softmax Loss for Face Recognition[2020]
项目地址:https://github.com/xiaoboCASIA/SV-X-Softmax/
现有margin loss的缺点
- 忽略了hard sample的挖掘【对应$I_k$的定义】
- 只从对应类的角度增大了margin,却没有考虑非对应类【对应公式中黄色部分】
- 每个类的margin的大小都一致且固定不变【对应自适应权重】
将Mining-based Softmax Losses和Margin-based Softmax Losses简单地结合,存在两个问题,一是如果使用soft mining method,那么hard sample就没有明确的定义;如果使用hard mining method【只区分0, 1】,那么easy samples就没有训练到
$$\mathcal{L}{4}=-g\left(p{y}\right) \log \frac{e^{s f\left(m, \theta_{\boldsymbol{w}{y}, \boldsymbol{x}}\right)}}{e^{s f\left(m, \theta{\boldsymbol{w}{y}, \boldsymbol{x}}\right)}+\sum{k \neq y}^{K} e^{s \cos \left(\theta_{\boldsymbol{w}_{k}, \boldsymbol{x}}\right)}}$$
本文认为原先的方法对于hard sample的定义不够明确,比如Focal Loss用the predicted ground truth probability表示难易程度,但这是样本点与样本点之间的关系,本文直接用样本与分类器(权重分量)之间的关系【判断错了就是hard sample?】:
上式中的标黄部分表示针对非对应类的权重调整,分为固定权重和自适应权重
# 🛠️Training Region-based Object Detectors with Online Hard Example Mining
- 项目地址:https://github.com/abhi2610/ohem
# Support Vector Guided Softmax Loss for Face Recognition
# Proxy-based Loss
# MASK PROXY LOSS FOR TEXT-INDEPENDENT SPEAKER RECOGNITION[2020]
结合了proxy-based【基于锚点?】和entity-based【基于实例?】的优点
entity-based的缺点:
- 为了确保所有相似样本的距离小于所有非相似样本的距离,理论上需要对所有样本进行匹配计算【计算量直接上去了】
- 训练阶段是分批训练的,无法考虑到全局整体情况
所谓proxy就是代理的意思,每个class学习得到一个proxy,本来是实例-实例的距离,现在只需要计算实例-proxy的距离,计算量大大降低
加上Anchor锚点的意义:为实例-代理样本对规划动态权重
本文亮点:利用Proxy NCA与Proxy Anchor相似的方法初始化可学习的代理矩阵。在每个minibatch中,用实例-实例对来表示minibatch中涉及到的class【每个class随机保存一个查询实例,与batch质心进行计算】,对于不在minibatch中的class,用实例-代理对来表示
Prototypical:所谓原形,指将每个类别中的样例数据映射到一个空间当中,并且提取他们的“均值”来表示为该类的原形(prototype),这属于实例-实例比较
$$d\left(f\left(x_{i}, \theta\right), f\left(x_{j}, \theta\right)\right)-d\left(f\left(x_{i}, \theta\right), f\left(x_{k}, \theta\right)\right)>m$$
如上式,属于triplet loss,其中$x_i$,$x_j$,$x_k$属于实例
Proxy-Based Loss
Proxy NCA:为每个数据点找到合适的代理,降低训练复杂度,提升收敛速度,分为监督法与非监督法;在监督学习中,使得类中映射后的数据点到代理点的欧式距离比到其他数据点都小
$$L_{N C A}=-\frac{1}{N} \sum_{i=1}^{N} \log \left(\frac{e^{-d\left(x_{i}, p_{i}\right)}}{\sum_{j=1, j \neq i}^{N} e^{-d\left(x_{i}, p_{j}\right)}}\right)$$
Proxy Anchor:将代理点视为锚点,用正负样本对的损失值来训练模型
$$\begin{aligned} L_{\text {Anchor }} &=\frac{1}{\left|P_{+}\right|} \sum_{p \in P_{+}} \log \left(1+\sum_{x \in X_{p}^{+}} e^{-\alpha(s(x, p)-\delta)}\right) \ &+\frac{1}{|P|} \sum_{p \in P} \log \left(1+\sum_{x \in X_{p}^{-}} e^{\alpha(s(x, p)+\delta)}\right) \end{aligned}$$
以上两个方法都没有使用示例-示例距离,也就是说没有用更细粒度的距离/相似关系
本文创新点:
Mask Proxy (MP):结合了实例-实例与实例-代理,对于minibatch涉及到的class使用实例-实例,剩余class使用实例-代理
为minibatch中每个class保存一个查询示例,并定义为$X_Q$,元素不重复
每个class的质心(代理)可以表示为$\begin{array}{r} c_{L_{i}}=\frac{1}{N_{L_{i}}-1} \sum_{j} \atop j \neq i, L_{j}=L_{i} \end{array} x_{j}$
对于$X_Q$中的每个查询实例,计算如下损失:
$$l\left(x_{i}\right)=-\log \left(\frac{e^{s\left(x_{i}, c_{L_{i}}\right)}}{\sum_{L_{j} \neq L_{i} \atop L_{j} \in L_{M}} e^{s\left(x_{i}, c_{L_{j}}\right)}+\sum_{p_{k} \atop L_{p_{k}} \notin L_{M}} e^{s\left(x_{i}, p_{k}\right)}}\right)$$
分子中考虑了实例-代理的相似度,分母第一项考虑了实例-minibatch中所有类的质心(实例-实例),第二项考虑了实例-未涉及的类的代理(实例-代理)
略...
Multinomial Mask Proxy (MMP):MP中的正样本贡献度是一致的,MMP中将其调整为动态规划权重
实心圆表示实例,三角形表示代理,空心圆表示用虚线连接的实心圆的质心,被屏蔽的代理是由一个黑色圆圈包围的三角形,并用虚线屏蔽