对于SVM和softmax的损失函数总结(基于cs231n)
写的非常好的参考:https://blog.****.net/zhangxb35/article/details/55223825
(1)SVM
The Multiclass SVM loss for the i-th example is then formalized asfollows:
hinge loss:
(1)只关注正确分数比不正确分数大delta
对于第i个例子,对于它被分为3个类的score分别为s1,s2,s3,而ground truth是其应该被放进类1,所以计算s2/s3和s1的差值并加上梯度delta。一些比s1高的分数没有多于delta的,将会取0,而其余则取他们的差值.
(2)若损失函数改为:
鉴于前面对s的取值公式,则L可被写作:
有时用他的平方,即max(0,−)2,作为loss,使得惩罚更强烈(二次方而不是线性),对错误容忍降低
(3)hint:一般训练时w初始为很小,故s为较小的均匀分布值,s约等于0,所以在这个损失函数下,loss= 分类数量 - 1。在最开始训练时应考虑预期的损失函数该是多大,用于验证是否有bug
(4)关于hinge loss的求导:
参考:
https://blog.****.net/suichen1/article/details/50503477
(2)softmax
(1)定义
可参考博客:softmax参考
Softmax分类器是二元逻辑斯特回归的多元一般形式。
我们知道max,假如说我有两个数,a和b,并且a>b,如果取max,那么就直接取a,没有第二种可能
但有的时候我不想这样,因为这样会造成分值小的那个饥饿。所以我希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到,那么我用softmax就可以了
现在还是a和b,a>b,如果我们取按照softmax来计算取a和b的概率,那a的softmax值大于b的,所以a会经常取到,而b也会偶尔取到,概率跟它们本来的大小有关。所以说不是max,而是 Soft max
(2)loss function
它的loss function与SVM的不同在于,修改了hinge loss部分,变成了cross-entropyloss。log里面的值就是这组数据正确分类的Softmax值,它占的比重越大,这个样本的Loss也就越小
对于每一个example Li, j是分类结果class中的一个,fyi是把i分类为yi的score,这样可以将Li控制在[0,1]之间
loss性质:
最小值 = 0,所有都分类正确,则-log1 = 0
最大值:无穷,分类正确概率近乎0时,即无穷大
在初始训练时,s约等于0,且都相等时,L=lnC,C即变量个数
(3)梯度下降
这里注意,无论内部的fj如何变化,求导形式都不变,区别只是外面的fj对w求导变化,P - j == yi不变
(相等时为P-1,不相等时为P)