斯坦福cs231n学习笔记(3)------线性分类器损失函数

在上一篇中,我们介绍了线性分类器的结构和具体原理,那么这篇我们将介绍如何定义损失函数来衡量在训练数据时的“不理想”程度,进而在这些随机权重中找到比较理想的权重,这也是线性分类器最优化的过程。

如上图所示,不同的权重在不同的图像上的作用效果可好可坏。上图中的猫的权重是2.9,效果不是很好,说明w是有损失的;汽车的权重是6.04,能够正确地将图片进行分类,说明w是没有损失的;而青蛙的权重是-4.34,效果就更差了,说明w的损失值很大。为了得到最小化损失的w,我们就需要用一个损失函数来定量的测定分类器工作的好坏。我们会选择一个随机的w,这个w会有一定的损失值(之所以这样可能是我们并未找到一个很好的分类器)。通过循环的过程,经过每一次循环,w都会有微小的提高,而这部分提高是通过loss值的减小而体现的。接着,我们观察损失函数的梯度,可以确定在哪个方向上loss会减少,我们调整w向这个方向一点点运动,从而降低loss,找到最小化损失的w。

loss的计算方式有很多种,下面逐一介绍:

多类SVM损失(Multiclass SVM loss)


SVM损失公式中,将所有不正确的类别评分(Sj)与正确的类别评分(Syi)之差加上一,与0进行比较,取二者中的最大值,然后将所有的数值进行求和。我们通过一个例子来了解这个公式如何使用的。

计算第一“猫”的例子,得到loss是2.9,其实从计算的过程中,我们能发现,之所以与0作比较取最大值,是能保证在计算结果为负数时取0,可以减少损失函数的梯度。在理想情况下,我们期望最高的loss是2.2[(5.1+3.2-1.7)/3=2.2],但计算结果是2.9,显然这个结果是不理想的。我们来看计算3张图像的loss的结果:

在计算中我们可以发现这样的一个现象,当正确类别的评分比错误类别的评分加一还要多,那么它的损失必然是0。以上我们只是计算了每张图像的loss,为了定义最后的损失函数,我们对公式进行相对的转化,用平均值loss取代具体loss:

Python代码:

def L_i_vectorized(x,y,w):
scores = w.dot(x)
margins = np.maximum(0,scores - scores[y] + 1 )
margins[y] = 0
loss_i = np.sum(margins)
return loss_i

Q:到这里,会产生一个问题,在L=0的情况下,是否能够得到独一无二的W?
A:答案是否,在2w的情况下也可能会是L=0。
用例子解释:还是刚才的例子:

我们计算在w的情况下,loss是0,那么在2w的情况下呢:

So,loss依然是0。w变大,就会使得f(Xi,W)j-f(Xi,W)yi之间的差值变大,也就是它们之间的差值越来越负,最后得到的值会很小,那么loss就会一直为0。

为了解决这一问题,我们选择用正则化(Regulation)来处理损失函数。正则化方法的核心就是使w之间相互竞争,但有的时候会使训练的错误更多,甚至造成错误的分类。但若干实验以及很多论文表示,正则化确实是一种比较实用的方式,经常使用的是L2 Regulation。

L2正则化是将w视为二维矩阵,通过上述式子可知,是将w矩阵中的每个元素的平方取和再加入损失函数当中。L2正则化要做的是尽可能展开w,以便考虑到所有的输入特征或者说是所有的像素,当然这种方式会比只关注一个维度要nice。那么计算损失的完整的式子是这样的:

那我们具体举个例子来说明为什么正则化是一种常用优化损失函数的方法:

在两个f输出结果是相同的情况下,应用L2正则化之后,会选择w2,L2 正则化更好的分散了w值,这是很直观的方法。当然,正则化不仅仅只有这一种,有时候可能会用到下面的几种方式:

Softmax函数

softmax函数又称为交叉熵损失函数,在实际应用中,SVM和softmax相比,softmax会更popular一些。它是在这些类别评分上表明损失的一种不同的函数形式,不是表示某个边界,而是对应不同类别未经标准化的对数概率。softmax function的表达式为:

为了使概率对数最大化,我们在计算loss的时候取负对数,即:

那我们对比一下svm和softmax在计算loss时的区别:
softmax表达式中的log是个线性函数,会关注每一个样本点,对于误差值为 -100 -200 -500 -1000时,都会使softmax的损失函数值增大,但是这样的点不会影响到svm的损失函数,误差值都会取0。So,svm具有附加的稳定性,一旦样例满足边界条件(Sj < Syi-1),这样的样例就不会影响到损失函数,svm只是区分那些距离比较近的样例点,而softmax会将所有的样例点都进行考量。

总之,svm和softmax都是实际应用中比较好的两个例子。

线性分类器损失函数介绍到这里,下一篇将介绍如何在求解全部损失之后,对线性分类器进行优化,也就是梯度下降的问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值