斯坦福cs231n计算机视觉——线性分类器(中 下),损失函数和最优化

week 2  10/15-10/21

损失函数和最优化:cs231n_2018_lecture03

观看视频 p7 和 p8,了解更多关于线性分类器,损失函数以及优化器的相关知识

学习线性分类笔记中(链接: https://zhuanlan.zhihu.com/p/20945670),线性分类笔记下(链接:https://zhuanlan.zhihu.com/p/21102293)和最优化笔记上(链接: https://zhuanlan.zhihu.com/p/21360434)和最优化笔记下(https://zhuanlan.zhihu.com/p/21387326),了解 SVM 和梯度下降法。

 

损失函数 Loss function

我们将使用损失函数(Loss Function)(有时也叫代价函数Cost Function目标函数Objective)来衡量我们对结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差异越大,损失函数输出越大,反之越小。

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

\displaystyle L_i=\sum_{j\not=y_i}max(0,s_j-s_{y_i}+\Delta)

SVM的损失函数想要正确分类类别y_i的分数比不正确类别分数高,而且至少要高\Delta。如果不满足这点,就开始计算损失值。

正则化(Regularization):上面损失函数有一个问题。假设有一个数据集和一个权重集W能够正确地分类每个数据(即所有的边界都满足,对于所有的i都有L_i=0)。问题在于这个W并不唯一:可能有很多相似的W都能正确地分类所有的数据。

换句话说,我们希望能向某些特定的权重W添加一些偏好,对其他权重则不添加,以此来消除模糊性。这一点是能够实现的,方法是向损失函数增加一个正则化惩罚(regularization penalty)R(W)部分。最常用的正则化惩罚是L2范式,L2范式通过对所有参数进行逐元素的平方惩罚来抑制大数值的权重:

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

完整公式如下所示:

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}

Softmax分类器

在Softmax分类器中,函数映射f(x_i;W)=Wx_i保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失cross-entropy loss)。公式如下:

\displaystyle Li=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}}) 或等价的 L_i=-f_{y_i}+log(\sum_je^{f_j})

 

 

SVM和Softmax的比较

SVM当一个数据点超过阈值,它就放弃这个点了,不关心这个数据点。而Softmax总是试图不断提高,每一个数据点都会越来越好。这是两个函数的差异。

而softmax分类器可以计算出这三个标签的”可能性“是[0.9, 0.09, 0.01],这就让你能看出对于不同分类准确性的把握。为什么我们要在”可能性“上面打引号呢?这是因为可能性分布的集中或离散程度是由正则化参数λ直接决定的,λ是你能直接控制的一个输入参数。举个例子,假设3个分类的原始分数是[1, -2, 0],那么softmax函数就会计算:


[1,-2,0]\to[e^1,e^{-2},e^0]=[2.71,0.14,1]\to[0.7,0.04,0.26]

现在,如果正则化参数λ更大,那么权重W就会被惩罚的更多,然后他的权重数值就会更小。这样算出来的分数也会更小,假设小了一半吧[0.5, -1, 0],那么softmax函数的计算就是:

[0.5,-1,0]\to[e^{0.5},e^{-1},e^0]=[1.65,0.73,1]\to[0.55,0.12,0.33]
 

现在看起来,概率的分布就更加分散了。还有,随着正则化参数λ不断增强,权重数值会越来越小,最后输出的概率会接近于均匀分布。这就是说,softmax分类器算出来的概率最好是看成一种对于分类正确性的自信。和SVM一样,数字间相互比较得出的大小顺序是可以解释的,但其绝对值则难以直观解释

 

最优化笔记上

我们可以通过数学公式来解释损失函数的分段线性结构。对于一个单独的数据,有损失函数的计算公式如下:

Li=\sum_{j\not=y_i}[max(0,w^T_jx_i-w^T_{y_i}x_i+1)]

通过公式可见,每个样本的数据损失值是以W为参数的线性函数的总和(零阈值来源于max(0,-)函数)。W的每一行(即w_j),有时候它前面是一个正号(比如当它对应错误分类的时候),有时候它前面是一个负号(比如当它是是正确分类的时候)。为进一步阐明,假设有一个简单的数据集,其中包含有3个只有1个维度的点,数据集数据点有3个类别。那么完整的无正则化SVM的损失值计算如下:


L_0=max(0,w^T_1x_0-w^T_0x_0+1)+max(0,w^T_2x_0-w^T_0x_0+1)     -->针对数据1,属于类别1。
L_1=max(0,w^T_0x_1-w^T_1x_1+1)+max(0,w^T_2x_1-w^T_1x_1+1)     -->针对数据2,属于类别2。
L_2=max(0,w^T_0x_2-w^T_2x_2+1)+max(0,w^T_1x_2-w^T_2x_2+1)     -->针对数据3,属于类别3。
L=(L_0+L_1+L_2)/3                                                                                    -->整个训练集的平均损失函数。

因为这些例子都是一维的,所以数据x_i和权重w_j都是数字。观察w_0,可以看到上面的式子中一些项是w_0的线性函数,且每一项都会与0比较,取两者的最大值。可作图如下:——————————————————————————————————————

 

 

从一个维度方向上对数据损失值的展示。x轴方向就是一个权重,y轴就是损失值。数据损失是多个部分组合而成。其中每个部分要么是某个权重的独立部分,要么是该权重的线性函数与0阈值的比较。你可能根据SVM的损失函数的碗状外观猜出它是一个凸函数

不可导的损失函数。作为一个技术笔记,你要注意到:由于max操作,损失函数中存在一些不可导点(kinks),这些点使得损失函数不可微,因为在这些不可导点,梯度是没有定义的。但是次梯度(subgradient)依然存在且常常被使用。在本课中,我们将交换使用次梯度梯度两个术语。

损失函数可以量化某个具体权重集W的质量。而最优化的目标就是找到能够最小化损失函数值的W 。我们现在就朝着这个目标前进,实现一个能够最优化损失函数的方法。对于有一些经验的同学,这节课看起来有点奇怪,因为使用的例子(SVM 损失函数)是一个凸函数问题。但是要记得,最终的目标是不仅仅对凸函数做最优化,而是能够最优化一个神经网络,而对于神经网络是不能简单的使用凸函数的最优化技巧的。

策略#1:一个差劲的初始方案:随机搜索

即遍历法,尝试不同的w,选择最小的一个。

策略#2:随机本地搜索

每走一步前,尝试几个方向,选最最小方向走

策略#3:跟随梯度

 

作业:

  1. 简述 KNN 和线性分类器的优劣
  2. (可选)学习矩阵求导(链接 https://zhuanlan.zhihu.com/p/25063314 )的方法
  3. 完成assignment1 中 svm.ipynb
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值