斯坦福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
SVM的损失函数想要正确分类类别的分数比不正确类别分数高,而且至少要高
。如果不满足这点,就开始计算损失值。
正则化(Regularization):上面损失函数有一个问题。假设有一个数据集和一个权重集W能够正确地分类每个数据(即所有的边界都满足,对于所有的i都有)。问题在于这个W并不唯一:可能有很多相似的W都能正确地分类所有的数据。
换句话说,我们希望能向某些特定的权重W添加一些偏好,对其他权重则不添加,以此来消除模糊性。这一点是能够实现的,方法是向损失函数增加一个正则化惩罚(regularization penalty)部分。最常用的正则化惩罚是L2范式,L2范式通过对所有参数进行逐元素的平方惩罚来抑制大数值的权重:
完整公式如下所示:
将其展开完整公式是:
Softmax分类器
在Softmax分类器中,函数映射保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。公式如下:
或等价的
SVM和Softmax的比较
SVM当一个数据点超过阈值,它就放弃这个点了,不关心这个数据点。而Softmax总是试图不断提高,每一个数据点都会越来越好。这是两个函数的差异。
而softmax分类器可以计算出这三个标签的”可能性“是[0.9, 0.09, 0.01],这就让你能看出对于不同分类准确性的把握。为什么我们要在”可能性“上面打引号呢?这是因为可能性分布的集中或离散程度是由正则化参数λ直接决定的,λ是你能直接控制的一个输入参数。举个例子,假设3个分类的原始分数是[1, -2, 0],那么softmax函数就会计算:
现在,如果正则化参数λ更大,那么权重W就会被惩罚的更多,然后他的权重数值就会更小。这样算出来的分数也会更小,假设小了一半吧[0.5, -1, 0],那么softmax函数的计算就是:
现在看起来,概率的分布就更加分散了。还有,随着正则化参数λ不断增强,权重数值会越来越小,最后输出的概率会接近于均匀分布。这就是说,softmax分类器算出来的概率最好是看成一种对于分类正确性的自信。和SVM一样,数字间相互比较得出的大小顺序是可以解释的,但其绝对值则难以直观解释。
最优化笔记上
我们可以通过数学公式来解释损失函数的分段线性结构。对于一个单独的数据,有损失函数的计算公式如下:
通过公式可见,每个样本的数据损失值是以为参数的线性函数的总和(零阈值来源于
函数)。
的每一行(即
),有时候它前面是一个正号(比如当它对应错误分类的时候),有时候它前面是一个负号(比如当它是是正确分类的时候)。为进一步阐明,假设有一个简单的数据集,其中包含有3个只有1个维度的点,数据集数据点有3个类别。那么完整的无正则化SVM的损失值计算如下:
-->针对数据1,属于类别1。
-->针对数据2,属于类别2。
-->针对数据3,属于类别3。
-->整个训练集的平均损失函数。
因为这些例子都是一维的,所以数据和权重
都是数字。观察
,可以看到上面的式子中一些项是
的线性函数,且每一项都会与0比较,取两者的最大值。可作图如下:——————————————————————————————————————
从一个维度方向上对数据损失值的展示。x轴方向就是一个权重,y轴就是损失值。数据损失是多个部分组合而成。其中每个部分要么是某个权重的独立部分,要么是该权重的线性函数与0阈值的比较。你可能根据SVM的损失函数的碗状外观猜出它是一个凸函数。
不可导的损失函数。作为一个技术笔记,你要注意到:由于max操作,损失函数中存在一些不可导点(kinks),这些点使得损失函数不可微,因为在这些不可导点,梯度是没有定义的。但是次梯度(subgradient)依然存在且常常被使用。在本课中,我们将交换使用次梯度和梯度两个术语。
损失函数可以量化某个具体权重集W的质量。而最优化的目标就是找到能够最小化损失函数值的W 。我们现在就朝着这个目标前进,实现一个能够最优化损失函数的方法。对于有一些经验的同学,这节课看起来有点奇怪,因为使用的例子(SVM 损失函数)是一个凸函数问题。但是要记得,最终的目标是不仅仅对凸函数做最优化,而是能够最优化一个神经网络,而对于神经网络是不能简单的使用凸函数的最优化技巧的。
策略#1:一个差劲的初始方案:随机搜索
即遍历法,尝试不同的w,选择最小的一个。
策略#2:随机本地搜索
每走一步前,尝试几个方向,选最最小方向走
策略#3:跟随梯度
作业:
- 简述 KNN 和线性分类器的优劣
- (可选)学习矩阵求导(链接 https://zhuanlan.zhihu.com/p/25063314 )的方法
- 完成assignment1 中
svm.ipynb