1、softmax和softmax loss
softmax:
a为输入的类别特征,k为第几个类别
cross entropy(单样本):
softmax loss:
在实际操作中,会在神经网络的最后一层加一个softmax层,sj表示每个输入类别属于真实类别的概率,m为batch size,n为类别数,xi为第i个样本的特征,yi为xi对应的类标签,Wj和bj为类j的权重及偏置。
由于yj是0和1,所以公式简化为:
yj属于真实类别(0和1),log(Sj) 是对概率(0,1)求对数(-oo,0),负对数就是(0,+oo)
概率在0到1之间,可见,概率越小,log值也越小,而-log值则越大。概率越大,-log值越小。所以只需要优化-log值,让其最小,就能找到概率最大的预测值。
三者关系:
当cross entropy的输入P是softmax的输出时,cross entropy等于softmax loss.Pj是输入的概率向量P的第j个值,所以如果你的概率是通过softmax公式得到的,那么cross entropy就是softmax loss
总结:softmax是**函数,交叉熵是损失函数,softmax loss是使用了softmax funciton的交叉熵损失
softmax的目标是尽可能最大化正确分类的概率,它会忽略掉一些比较难分辨的图片:也就是低质量的图片,而优先拟合高质量的图片因此把特征强行归一化会使得低范数的图片变得高范数,也会获得更多的网络的注意力。
Mnist数据softmax loss特征分类
只能区分类间距
无法拉近类内距
softmax loss只能把不同的类分开,但是不能扩大不同类之间的间距
Siamese network孪生神经网络
Network1 和Network2可以是相同的网络也可以是不同的网络,但是必须共用权重,如果最终的得出的的loss相同,则表明两个网络检测到的是同一个物体。
孪生网络的缺点:每次共用,计算量较大,对硬件设备及要求较高
2、Triplet Loss
两个正样本特征,一个负样本特征,使用其中的一个正样本特征做为锚点,和另外两个特征做距离上的比较。如果锚点和正样本特征的距离大于锚点和负样本特征的距离,就计算损失,反之,不需要计算损失。(该损失函数用于人脸识别效率较低)
这种方法的缺点在于样本多时计算量爆炸。
3、Center Loss
在softmax loss分类的基础上,再对每一个类都维护一个类中心c,然后在特征层如果该样本离类中心的特征太远就要惩罚。也就是所谓的centerloss.
注意:
1、二范数的平方在计算时不用开根号
2、等于平方(x-c)*2
3、N是每个batchsize的大小,求和后再除以N,相当于求均值。由于每批次中都有多个类,每个类有多个样本,所以在实际计算中,求完每个样本和每类中心点的欧氏距离后,得到的距离需要除以每个类别的样本数,相当于对每类样本的距离都做了归一化,防止样本更新失衡。最后再对归一化后的所有距离求均值。
4、由于没法直接获得c,所以将其放到网络里随机生成,在每一个batch里更新一次c,然后将这个梯度形式的距离加到center上,做梯度下降。
5、为了使得模型学到的特征判别度更高,在原有的softmax loss基础上加入了一种新的辅助损失函数center loss,之说以说是辅助损失函数是因为center loss损失函数需要结合softmax loss一起使用,而非替代后者。
6、中心点center每一次是在同一个类只用随机取的,其他的点项这个中心点靠近,中心点在范围内移动,最终同类别的点会聚集到一起,这样可以使得类内聚缩小,但是并不能使类间距扩大
7、用center loss的前提是已经用softmax loss 将不同类别的目标给分开了,之后用center loss缩小类内距(也就达到了相对类间距扩大的目的)
centerloss的改进
通常再增加一个scale度量a,使得center不会抖动,也就是学习率。
参数设置:a一般取0.5
只使用centerloss效果很一般,所以一般是将centerloss与softmax结合起来,引入参数lambda,用来平衡两个损失的比例。模型训练中,lambda越大,提取出来的特征的区分度越高。lambda=0.003和a=0.5时对Face verification任务效果最好。
centerloss不能训练太久,否则会使不同的类的点聚到一起(虽然softmax可以使不同的类分开,但却不能扩大类间距)
Center loss的缺点(是一个辅助函数,单独使用效果不好):
1、类别较多时,对硬件求求较高
由于Center Loss为每个类别需要保留一个类别中心,当类别数量很多(>10000)时,内存消耗非常的大,它对GPU的内存要求较高。
2、L2范数的离群点对loss的影响较大
由于Center Loss是基于L2范数约束的损失函数,如果某个类别的某个离群点较远,会导致损失下降困难,同样由于损失计算的是均值或和,即使整体损失下降,个别的离群点仍然离中心很远。
3、类内距太大
每一类特征占据的空间较大,如果类别过多,就无法清楚的区分每个类别。
4、只适合同类样本差异不大的数据
如果同一类样本很类似如mnist手写数字,人脸数据,那么centerloss往往能够带来效果提升而如果本身同一类样本就差异很大,如cifar100,则不一定
4、arcsoftmax
向量相关性的表示方法:
衡量两个向量的相关性,也就是在计算两个向量之间的差异,差异越小相关性就越大。在实际场景中,比如人脸识别将用户的一张人脸照片提取一组特征,和下一次的照片提取的特征进行比较,通过比较得出的差异值来判断是否为同一人。
衡量向量相关性差异的表示方法有很多,一般分为距离表示方法和相似度表示方法。欧氏距离是最常见的距离度量,余弦相似度则是最常见的相似度度量,很多距离度量和相似度度量都是基于这两者的变形和衍生。
1、欧氏距离(距离度量)
距离度量用于衡量个体在空间上存在的距离,距离越远说明个体间的差异越大。也叫欧几里得距离。欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。
因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。
注意:在求欧式距离之前先把量纲统一化
2.余弦相似度(相似度度量)
余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。
两个向量最大正相关为0度,相似度为1,最大负相关为180度,相似度为-1,不相关为90度,相似度为0,两个向量之间的角度越小,相似度系数越大,两个向量越相关,反之,角度越大,相似度系数越小,越不相关。
所以,要区分两个向量,最好的办法是增大角度θ+m,或者减小相似度系数cos(θ)-m。
余弦相似度
分子为两个向量的内积,分母为两个向量的二范数的乘积
2、余弦相似度
余弦相似度通常用于正空间,因此一般的值为0到1之间,这个界限对任意维度的向量空间都适用,而且余弦相似度最常应用于高维正空间。它通常应用于文本挖掘中的文件比较,另外,在数据挖掘领域,常用来度量集群内部的凝聚力。
余弦距离就是用1减去余弦相似度获得的,余弦相似度的取值范围是[-1,1],方向相同的两个向量之间的相似度是1,余弦距离的取值范围是[0,2]
二维
高维
常用与文本比较,比如对两部电影的评价,观点的相似性
余弦相似度与欧式距离的区别:
如图:AB两点的欧式距离很大,但是余弦相似度很高
两个向量的余弦相似度不能代替两个点的距离,距离越小,相似度越大,但是相似度越大,距离不一定最小。
从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。
如果保持A点的位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦相似度cosθ是保持不变的,因为夹角不变,而A.B两点的距离显然在发生改变,这就是欧氏距离和余弦相似度的不同之处。
举例说明如下:
用户对内容评分,按5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得到的结果是0.98,两者极为相似。
但从评分上看X似乎不喜欢这个内容,而Y则比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度,即所有维度上的数值都减去一个均值。
比如X和Y的评分均值都是3,那么调整后为(-2,-1)
和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异很大,但显然更加符合现实。
适用场景:
根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:
欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;
而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。
余弦相似度和欧氏距离等价性
标准化后的两个向量,它们的欧氏距离的平方与余弦距离成正比,标准化后的向量间的区别主要体现在方向上。
重要结论:cosine similarity is identical to L2-normalized euclidean distance someway.(余弦相似度在某种程度上与L2标准化的欧式距离相同)。
回到之前的问题:
5、L-SoftmaxLoss
6、A-SoftmaxLoss
softmaxloss的输出
通常在训练过程中归一化权值||wll=1并且将偏置biases设置为0:
为了进一步增强特征的可判别性,将角度系数m(>1)加入到损失函数中,即A-Softmax loss角度系数m一般是一个大于1的整数。所以cos(mθ)实际上是一个余弦倍角公式。
当m增大时,角度距离也会增加,当m-1时,角度距离为0。
A-Softmax loss是一种增加角度乘积系数的方式来增大角度分类的。
A-Softmax Loss的性质
性质1:A-Softmax Loss定义了一个大角度间隔的学习方法,m越大这个间隔的角度也就越大,相应区域流形的大小就越小,这就导致了训练的任务也越困难。
性质2:在二分类问题中:,有多分类问题中:
7、AM-SoftmaxLoss
用减小相似度系数的方式来增大向量之间的距离
根据Normface,对特征进行归一化,乘上缩放系数s(默认超参30,人脸识别是改为64较好)(s相当于wx),最终的损失函数变为
这样做的好处在于ASoftmax的倍角计算是要通过倍角公式,反向传播时不方便求导,而只减m反向传播时导数不用变化
公式里第一个m是批次,第二个m是超参数
Asoftmax是用m乘以θ,而AMSoftmax是用cosθ减去m,这是两者的最大不同之处:一个是角度距离,一个是余弦相似度距离。
8、Arc-SoftmaxLoss
根据cos的性质,优化角度距离比优化余弦距离更有效果,因为余弦距离相对更密集。
公式里第一个m是批次,第二个m是超参数,根据cos的性质,优化角度距离比优化余弦距离更有效果,因为余弦距离相对更密集,增大角度比减小相似度距离对分类的影响更加直接,所以可以改为直接增加角度的方式
注意:反三角余弦计算出来的是弧度,而非角度。所以实际增加的m也是增加的弧度。
参考文章:
https://zhuanlan.zhihu.com/p/83772845
https://www.cnblogs.com/heguanyou/p/7503025.html