CS231n(二)Linear Classification Notes

线性分类器

得分分函数(score function):原始图像数据到类别分值的映射。

损失函数(loss function):用来量化预测分类标签的得分与真实标签的一致性,也就是吻合度。

分类器在最优化过程中,通过更新得分函数的参数来最小化损失函数。

 

得分函数(Score Function)

eg:(10x3072L) x (3072x1L) + (10x1L)

(1) 每个类的分类器就是W的一个行向量。

(2) W和b是可控制改变的。

(3) 一旦训练完成,训练数据就可以丢弃,留下学习到的参数即可。

一般常用的方法是把W和b两个参数放到同一个矩阵中,同时x_i向量就要增加一个维度,这个维度的数值是常量1,这就是默认的偏差维度。这样新的公式就简化成下面这样:

损失函数(Loss Function)

得分函数输出结果与真实结果之间差异越大损失函数输出越大,反之越小。

 

(1)多类支持向量机损失 Multiclass Support Vector Machine Loss

也成为折页损失(hinge loss)

SVM的损失函数想要SVM在正确分类上的得分始终比不正确分类上的得分高出一个边界值\Delta

eg:第i个数据中包含图像x_i的像素和代表正确类别的标签y_i

       则第i个数据针对第j个类别的得分:

       那么第i个数据的svm损失定义为:

用例子演示公式是如何计算的。假设有3个分类,并且得到了分值s=[13,-7,11]。其中第一个类别是正确类别,即y_i=0。同时假设\Delta是10(后面会详细介绍该超参数)。上面的公式是将所有不正确分类(j\not=y_i)加起来,所以我们得到两个部分:

\displaystyle Li=max(0,-7-13+10)+max(0,11-13+10)

将损失函数改写下:

其中w_j是权重W的第j行,被变形为列向量。

正则化(Regularization)

保留所有的特征,但是减少参数的大小。

向某些特定的权重W添加一些偏好,对其他权重则不添加,以此来消除模糊性。这一点是能够实现的,方法是向损失函数增加一个正则化惩罚(regularization penalty)R(W)部分。

最常用的正则化惩罚是L2范式,L2范式通过对所有参数进行逐元素的平方惩罚来抑制大数值的权重:

R(W)=\sum_k \sum_l W^2_{k,l}

上面的表达式中,将W所有元素平方后求和。注意正则化函数不是数据的函数,仅基于权重

完整的多类SVM损失函数,它由两个部分组成:数据损失,即所有样例的的平均损失L_i,以及正则化损失。

完整公式如下所示:

L=\displaystyle \underbrace{ \frac{1}{N}\sum_i L_i}_{data \  loss}+\underbrace{\lambda R(W)}_{regularization \ loss}

将其展开完整公式是:

L=\frac{1}{N}\sum_i\sum_{j\not=y_i}[max(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)]+\lambda \sum_k \sum_l W^2_{k,l}

其中,N是训练集的数据量。现在正则化惩罚添加到了损失函数里面,并用超参数\lambda来计算其权重。该超参数无法简单确定,需要通过交叉验证来获取。

正则化最好的性质就是对大数值权重进行惩罚,可以提升泛化能力。意味着没有哪个维度能够独自对整体分值产生过大的影响。

假设输入向量x=[1,1,1,1],两个权重向量w_1=[1,0,0,0]w_2=[0.25,0.25,0.25,0.25]。那么w^T_1x=w^T_2=1,两个权重向量都得到同样的内积,但是w_1的L2惩罚是1.0,而w_2的L2惩罚是0.25。根据L2惩罚来看,w_2更好,因为它的正则化损失更小。从直观上来看,这是因为w_2的权重值更小且更分散。既然L2惩罚倾向于更小更分散的权重向量,这就会鼓励分类器最终将所有维度上的特征都用起来,而不是强烈依赖其中少数几个维度。这一效果将会提升分类器的泛化能力,并避免过拟合

 

(2)互熵损失 Cross-entropy Loss

softmax分类器

函数映射f(x_i;W)=Wx_i保持不变

交叉熵损失cross-entropy loss)公式如下:

或 

其中f_j表示分类评分向量f中的第j个元素

函数f_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}}被称作softmax函数:其输入值是一个向量,向量中元素为任意实数的评分值(z中的),函数对其进行压缩,输出一个向量,其中每个元素值在0到1之间,且所有元素之和为1。

softmax函数和sigmoid函数类似都可以作为神经网络的激活函数。sigmoid函数将一个realvalue映射到(0,1)的区间,当然也可以是(-1,1),这样可以用来做二分类。而softmax函数把一个k维的realvalue向量[a1,a2,a3,a4...]映射成一个[b1,b2,b3,b4...],其中bi是一个0-1的常数,所有数值和为1,然后可以根据bi的大小来进行多分类任务,如取权重最大时的一维。

实操事项:数值稳定。编程实现softmax函数计算的时候,中间项e^{f_{y_i}}\sum_j e^{f_j}因为存在指数函数,所以数值可能非常大。除以大数值可能导致数值计算的不稳定,所以学会使用归一化技巧非常重要。如果在分式的分子和分母都乘以一个常数C,并把它变换到求和之中,就能得到一个从数学上等价的公式:

\frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\frac{e^{f_{y_i}+logC}}{\sum_je^{f_j+logC}}

C的值可自由选择,不会影响计算结果,通过使用这个技巧可以提高计算中的数值稳定性。通常将C设为logC=-max_jf_j。该技巧简单地说,就是应该将向量f中的数值进行平移,使得最大值为0。

 

SVM和Softmax的比较

以蓝色为例子。

在实际使用中,SVM和Softmax经常是相似的:通常说来,两种分类器的表现差别很小。

相对于Softmax分类器,SVM更加“局部目标化(local objective)”,这既可以看做是一个特性,也可以看做是一个劣势。考虑一个评分是[10, -2, 3]的数据,其中第一个分类是正确的。那么一个SVM(\Delta =1)会看到正确分类相较于不正确分类,已经得到了比边界值还要高的分数,它就会认为损失值是0。SVM对于数字个体的细节是不关心的:如果分数是[10, -100, -100]或者[10, 9, 9],对于SVM来说没设么不同,只要满足超过边界值等于1,那么损失值就等于0。

对于softmax分类器,情况则不同。对于[10, 9, 9]来说,计算出的损失值就远远高于[10, -100, -100]的。

softmax分类器对于分数是永远不会满意的:正确分类总能得到更高的可能性,错误分类总能得到更低的可能性,损失值总是能够更小。但是,SVM只要边界值被满足了就满意了,不会超过限制去细微地操作具体分数。这可以被看做是SVM的一种特性。举例说来,一个汽车的分类器应该把他的大量精力放在如何分辨小轿车和大卡车上,而不应该纠结于如何与青蛙进行区分,因为区分青蛙得到的评分已经足够低了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值