【2017年cs231n学习笔记2】Lecture3 损失函数 最优化
这节课的主要内容:
1. 定义一个损失函数(loss function),用将训练集代入其中获得的评分来量化W的好坏。
2. 找到一个高效的方法来寻找使损失函数最小的W,(我们称其为最优化optimization)
损失函数
首先我们定义损失函数的一般形式:
对于一个数据集
Xi代表输入进入分类器的图像像素数据,Yi代表你希望得出的标签。
我们定义其损失函数的一般形式为:
损失函数定义后,我们就需要考虑Li的定以了,这节课介绍了两种Li的形式,第一种是多类支持向量机。
多类支持向量机损失(Multiclass SVM loss)
对于给定的数据
我们定以其Multiclass SVM loss为
首先我们知道,
对这一公式的直观解释是:如果正确分类的值比错误分类的值还大
很明显这是符合建立损失函数的目的的:
如果
按照上面的理解,其实多类SVM loss可以写成:
下面是一个计算
相应的可以计算出对于汽车图
对于青蛙图:
于是损失函数
那么定义了多类SVM损失之后,我们面临两个问题:
1. 根据其公式,如果我们将W能正确分类所有数据,那么乘以一个系数
-如果本身L=0,很明显是不变的。
2. 两个W,
对于第二个问题的思考,为我们引入了一个概念:正则化
正则化(Regularization)
对于正则化一词的理解:
如果在数据中你有一些特殊值,你要消除特殊值带来的影响,有两种方式,一是不用这些特殊值;二是依然使用这些特殊值,但是使用一个函数来抵消其影响,等于将这些特殊值常规化了,所以叫其正则。
我们通过在L中引入正则化部分来使不均衡W有较大的损失函数,从而消除其不良影响,于是获得如下形式的损失函数形式:
如图我们将之前的L称为数据损失,而新加入的项称为正则化,新的损失函数由数据损失和正则化一同构成。
正则化函数
Softmax分类器
除了多类SVM损失以外,还有一个常用的便是Softmax分类器。
在多类支持向量机中,我们对各类进行评分,但是我们并没有为这些评分赋予什么意义,而在softmax中,我们为这些评分赋予了意义,并且我们将使用这些评分来计算类别的概率分布。
其形式为
我们可以通过一个例子来感受softmax分类器:
很直观也很清晰,所以就不多讲了。
最优化(Optimization)
上面我们讲解了如何衡量W的好坏,那么,怎么得出最好的W呢?这其实就是最优化问题。
首先我们定义了损失函数最小的W是最好的W,所以求W最优化的问题,实际上就是求使损失函数最小的W。
我们能想到的最简单的方式就是把随机选取W并代入损失函数去试,不断更新直到找到好的,很明显,这个方法太花时间,太笨了,实际上结果也不甚理想。
于是我们换了一个思路:
假设我们在山中,我们想去山脚,我们会感受所在地的倾斜程度,然后朝着下坡的方向行走,然后在不断的感受和行走中到达了山脚。
人可以用脚去感受,那么机器呢?我们使用斜率(梯度),我们总是沿着梯度下降的方向行走。
对于确定这个方向我们有两种方式,第一种是按照斜率的定义计算:
计算过程如图:
明显这是愚蠢而耗费时间的
庆幸我们有第二种办法:梯度公式
我们通过求W的梯度,而后向负梯度方向移动一定的步长,即是向损失函数减少的方向移动了。
当然,在这里,步长的选择也是一个超参数问题
第二种方法也有问题,当步长选择不恰当的时候,可能带来错误的结果,所以我们一般两种方法相结合。
我们还考虑到:图片的数据量太大了,计算起来太耗时间,有没有优化的方法呢?
有:
比如Stochastic Gradient Descent (SGD)随机梯度下降法。
这一方法是在数据集中随机选取一些一定量的数据来计算梯度,从而减少计算量。
比如提取特征值,将图片提取为一定的特征值数据,从而减少计算量,甚至能使分类器形式更简单。