softmax来由
阅读Softmax vs. Softmax-Loss: Numerical Stability的总结
softmax函数的定义:
σi(z)=ezi∑mj=1ezj,i=1,2,...,mzi=wTix+bi
式中z是第i个类别的线性预测结果,softmax对z进行指数运算使其变为非负,然后除以所有项之和进行归一化。
σi(z)
也就是数据x属于类别i的概率,学术中称为最大似然(likelihood)。
如果已知x对应的类别是y,则
σy(z)
应该表现出大概率结果,即最大化。这里需要注意的是,
σy(z)
是一个归一化的正数,值域为[0,1],其最大化情况下损失函数应最小化(接近0)。损失函数通常是使用 negative log-likelihood 而不是 likelihood,也就是说最小化
−log(σy(z))
的值,因此第y类的softmax-loss的定义为:
Ly,z=−log(ezy∑mj=1ezj)=log(∑j=1mezj)−zy
因此在反向传播计算梯度时:
∂Ly,z∂zk=ezk∑mj=1ezj−δky=σk(z)−δkyδky={1,0,k=yk≠y
softmax的问题是当线性概率z的值过大过小时,通过指数运算可能导致underflow和overflow,也就是输出值为NAN。解决办法是:对于overflow,使每一个线性概率减去最大值,使线性概率的最大值为0,再进行指数运算;对于underflow,由于最后结果为0,与实际情况非常近似,因此不再考虑。
softmax的演变
1、原始softmax
由上所示,针对多类别的softmax损失函数:
LS=−1n∑i=1nlog(eWTyixi+byi∑nj=1eWTjxi+bj)
xi
表示第i维深度特征,属于第
yi
类,W表示最后一个全连接层中第j列的权重值,b是偏置项。
研究人员发现训练样本中各类别的样本数量以及测试样本的不同分布,最后所得模型提取得特征存在类内方差大、类间差异不明显的问题,严重影响到了模型的性能。
通过取消b,并对权重归一化,可得:
WTjxi=∥Wj∥∥xi∥cosθjLLS=−1n∑i=1nloge||xi||cos(θyi)e||xi||cos(θyi)+∑cj=1,j≠yie||xi||cos(θj)
权重归一化针对样本数据不足时,通过先念知识提升性能。但样本不均衡的问题仍然存在,norm后仍然和二范数、样本数、样本总质量正相关。样本数稀少的类别会导致每次训练反传时产生几乎一样的作用,而所有类别的分布初始化是独立同分布的,经过大致相同的训练过程可能出现混叠的情况。可参考
知乎博文。
3、SphereFace(Multiplicative Angular Margin)
SphereFace中对角度添加裕量m,并将余弦函数改为分段函数:
ψ(θyi)=(−1)kcos(mθyi))−2k+λcosθyi)1+λ,θ∈[kπm,(k+1)πm]
LAS=−1n∑i=1nloge||xi||ψ(θyi)e||xi||ψ(θyi)+∑cj=1,j≠yie||xi||cos(θj)
超参数
λ
从1000逐渐降到5来收窄每一类的角度空间,但也加大了模型训练的难度。
有研究人员继续对特征进行归一化处理,进一步化简公式。
高质量人脸的L2范数较大,低质量的人脸L2范数较小,通过特征归一化能提高当前深度学习框架对人脸验证的性能。特征归一化和权重归一化的目的是消除径向变化,使每一个特征都分别在超球面上。余弦裕度损失函数如下:
ψ(θ)=cosθ−m
LAMS=−1n∑i=1nloges⋅(cos(θyi)−m)es⋅(cos(θyi)−m)+∑cj=1,j≠yies⋅cosθj
其特点为 :易实现、易收敛、性能好。该方法在质量较差的数据集上能取得好的效果,但在质量好的数据集上效果不如不进行特征归一化的模型。
角度上的裕度相当于超球面的弧度,相较余弦裕度有更清晰的几何解释。
LArcFace=−1n∑i=1nloges⋅(cos(θyi+m))es⋅(cos(θyi+m))+∑cj=1,j≠yies⋅cosθj
cos(θ+m)=cosθcosm−sinθsinm
作者认为相较于余弦裕度,本公式的magin值能通过
sinθ
实现动态调整。
PS:个人感觉那个
cos(θ1+m)
的点应该是绿色角顶点映射到权重向量的位置,也就是说少了一条虚线。
有的研究人员认为对特征直接进行L2归一化并不能改变特征所在的象限,而且其中还涉及一些超参数调节问题。对于SphereFace,作者定义了对特征x的处理函数,因此:
Lsf=−∑i=1nloge||Φ(xi)||cos(mθyi)∑cj=1e||Φ(xi)||cos(θj)
Φ(xi)=xi−οiσi
ο,σi
分别是
x,xi
的均值向量、标准偏差,通过相似度比较函数对原点矩阵非常敏感,因此需要设置一个很大的衰减因子来更新原点矩阵和方差:
{οnewσnew=ρ⋅οold+(1−ρ)⋅οb=ρ⋅σold+(1−ρ)⋅σb
由于相似度比较对
ο
非常敏感,因此设置
ρ
为0.995来保证每次迭代时不会变化很大。
为了降低超参数的调节难度,作者提出自适应参数
η
,并得到:
LAAM=∑iN−log(pAAMyi)
pAAMyi=e||Φ(xi)||cos(ηθyi)e||Φ(xi)||cos(ηθyi)+∑k≠yie||Φ(xi)||cos(ηθk)
η=⎧⎩⎨⎪⎪⎪⎪1,π/3θyi,10,π/3<θyi<=π;π/30<θyi<=π/3;θ<=π/30.
作者认为大角度差异导致的梯度足够反向传播,设置系数为1;小角度差异下为了保证相同的反向传播力度,设置系数为10;在中间情况下,更小的角度差异需要更大的margin系数来保证分类性能。
作者提示单独使用AAM-softmax不稳定,因此和SphereFace的损失函数相结合,其平衡系数
λ=3
:
L=λLsf+LAAMλ+1.0
softmax的问题
ArcFace中曾提到:
Due to the limitation of GPU memory, it is hard to train Softmax-based methods,e.g. phereFace, CosineFace and ArcFace, with millions of identities.
不太清楚具体指什么原因。
第二个问题是知乎博文中提到的当前样本均衡难以解决的问题,导致以计算类中心的方法难以提升到更好的效果。