损失函数
我们知道线性分类器需要输入数据x和参数w,如果我们想优化w,使模型更精确,如果可以写一个函数自动决定哪些w是最优的,就需要一个度量任意某个w的好坏的方法。可以用一个函数把w当输入,然后看一下得分,定量估计w的好坏。这个函数被称为损失函数。
图像分类问题可以选择多种不同的损失函数。有了损失函数这个概念,就可以定量地衡量任意一个w是好的或者坏的。 通过一种有效的方法在w的可行域内,找到w取什么值,这个是一个优化的过程。
上图是目前的分类结果,车子分类对了猫和青蛙错了。
在一个问题中有X和w两个参数,其中x是图片每个像素点所构成的数据集,y是你希望预测出来的东西,我们称之为标签。在图片分类问题中,我们尝试把CIFAR-10中每个图片分类到10个类中,所以这里y是1-10或0-9。这个整数,表明对每个图片x那个类是正确的。
我们把损失函数基座L_i,我们有了这个关于x的预测函数后,这个函数就是通过样本x和权重矩阵w给出y的预测,在图片分类中就是给出10个数字中的一个。最终的损失函数L是在整个数据集中N个样本的损失函数的总和的平均值。
有了x和y你可以用损失函数定量地描述出参数w是否令人满意,找到在训练集上损害函数极小化的w
多分类svm损失函数
多类别SVM是支持向量机在处理多分类时候的一种推广。
在这里除了给出正确的y,对所有分类y都做了加和,也就是说我们在所有错误的分类上做和,比较正确分类和错误分类的分数,如果正确分数比错误分数高,高出某个安全的边距,我们把这个边际设为1,则l为0,如果真实的分数很高,或者说真实分类的分数比错误分类的分数要高很多,那么损失为0。接下来把图片对每个错误分类的损失加起来。就可以得到这个数据集中样本的最终损失,然后还是一样对整个训练集取平均。
上图x轴表示S_YI是训练集真实分类的分数,y轴是损失,可以看到随着真是分类的分数上升,损失线性会下降。一直到分数超过一个阈值,损失函数会变成0
案例
对第一个训练样本,计算多分类SVM的损失函数,左边要记住我们对所有不正确的分类全都循环一遍。
猫是正确分类的,所以要对汽车青蛙都做一遍运算,来看汽车,汽车式车子分数5.1减去猫的分数3.2再加上1,我们比较猫和车的时候,我们会得到一些损失,因为车的分数比猫还高,这是不好的对这个样本我们得到了2.9的损失值,接下来比较青蛙和猫,-1.7-3.2+1<0故第二项为0,训练样例的多分类支持向量机损失函数是每一对这样的类别构成的损失项的加和。
重复这个过程对分类是汽车得出L为0,我们可以针对其他类别不断迭代。
下图是青蛙可以发现非常大l有12.9。
最终我们对整个训练集的损失函数之和取平均值得到5.3,5.3反映了我们的分类器在数据集上有多不好。
问题
1 损失函数为什么加1
这一定程度是一个任意的选择,我们并不关心损失函数中分数的绝对值,我们只关心这些分数的相对差值,我们只需要正确分类的数远远大于不正确分类的分数,这个自由参数1并不重要,在w的缩放过程中自有参数1会被消失。
2svm损失函数的最大值
损失函数最小值是0
3如何初始化参数
当你初始化参数,并且从头训练,通常你写适用一些很小的随机值来初始化w,在初期倾向于呈现,较小均匀分布的值
4如果你所有的分数都近乎为0,并且差不多相等,那么当你使用多分类SVM时,损失函数预计会如何?
分类数量减去1,如果我们对所有不正确的类别遍历一遍,那么实际上,那么实际遍历了c-1个类别,这些类别中每一个,这两个分数差不相同,所以我们得到了一个1的损失项,因为存在1的边界,我们将会得到c-1。
这个实际是一个有用的测试策略,当你使用这些方法时候,当你使用这些方法时候,你应该预计你的损失函数应该是多大。当开始训练时候你的损失函数在第一次迭代时候损失函数不等于C-1,这意味程序错误需要检查。
5如果我们对于SVM所有错误的分数求和会发生什么,如果我们将所有正确的分数求和会发生什么?
损失函数增加1
6如果我们用了平均值而不是和来计算损失函数
不会改变,任何缩放操作都不会有影响
7如果我们使用如下公式
使L=0的W是否是唯一的
2w 也是0
这回变成一个不同的问题,这个问题在于我们用一种非线性的方法,改变好坏之间的权衡,等于计算了另一种损失函数
损失函数代码
在numpy库中
如果你有许多可以解释你观察结果的假设,一般来讲要选最简约的。我们会直接假设正则化惩罚项,这通常记为R,这样标准损失项就有两个项,数据损失项和正则项,这里有一个超参来平衡这两个项,这个超参数
λ
\lambda
λ
,你需要调整时间在模型中训练。
正则化的主要目的是减轻模型的复杂度,而不是去试图拟合数据
正则化
L1度量复杂度的方法是非零元素的个数,L2则更考虑W的整体分布,所以这取决与你的数据以及具体的问题。
如果你喜欢用贝叶斯,l2的正则化可以很好解释在MAP推理中,当参数向量的高斯先验。
多项逻辑回归分类器(softmax classifier)
我们用这个所谓的softmax损失函数,我们将其指数化以便结果都是正数,接着我们利用这些指数和来归一化它们,当经过处理后,我们得到了概率分布,对于所有类别我们都有了相应的概率,每个概率介于0-1之间,所有类别的概率和等于1。
这正是我们所期待的解释,这是结算出来的概率分布, 它从分数推导出来,我们拿它与我们的目标值或真实概率进行比较,所以我们知道是一只猫时候,目标的概率分布,应该把所有概率集中在猫上,可以得到猫的概率是1,其他概率是0,现在我们需要驱使去得到概率分布,就是那个softmax计算结果,去匹配正确的概率
我们得到3个分数,这些分数同svm损失函数中是一致的,但现在我们不会使用这些分数,我们会将它们放在损失函数里,而是将他们指数化处理,因此他们都是正数,然后将他们归一化确保和是1,这时可推算出损失函数
问题
softmax损失函数的最大值和最小值是多少?
最小值是0 最大值是无穷大 log(0) log(1)
#总结
SVM会得到这个数据点超过阈值后,要正确分类,然后放弃。而softmax总是试图不断提高。
我们有一些xs和ys的数据集,我们使用线性分类器来获得一些分数函数,根据我们输入x计算我们的分数s,然后我们使用损失函数如svm或者softmax,定量计算,预测有多糟糕,然后我们会增加这个损失函数一个正则画的术语,试图喜欢简单的模型。
通常在做机器学习中关键在于,要指定一些函数f,指定一些损失函数,一些正则化术语如何惩罚模型的复杂性,然后把这些东西结合在一起,试图找到W。这最小化了这个最终的损失函数。
我们如何再能真正发现这个w使损失最小化,这引导到了最优化的主题