Lecture_3:Loss_Functions_and_Optimization
斯坦福CS231n课程Lecture_3
To be continued
Recall
接上讲,此时我们需要优化我们的权重矩阵使得分类器具有更好的性能。我们需要做以下两件事情。
- 定义一个损失函数来衡量最终得分的好坏
- 想出一个方法能够寻找到合适的参数(权重)使得损失函数最小
损失函数
合页损失
假设我们拥有三个样本分别属于不同的类别,同时我们存在一个权重矩阵\(w\)使得最终得分如下。
以多分类支持向量机的合页损失举例,对于\(x_i\)(图像样本)
以及\(y_i\)(标签)
和\(s\)(分数向量)
,有如下表达式👇:对于该样本对应的类别分数我们不进行计算(也就是说如果第一个样本是一只猫,我们并不对cat这一类别进行损失计算,我们只在乎其他类别)
如果正确类别的分数减去其它类别的分数大于1,则损失为0,如果差值小于1,则其损失为其它类别的分数减去正确类别的分数+1。对所有的其他的C-1个类别都进行计算并求和则得到我们的最终的Loss。
为什么+1,1只是一个安全边界。我把它理解为对于错误分类的容忍程度。
例子
生动形象,一眼理解的例子👇
问题
- 如果car类别的分数变化了一点点,loss会有什么变化?
其他类别分数距离安全边界都较远,变化一点实际上损失依然为0
- 最小/大的损失为多少?
最小为0,最大为无穷
- 初始化权重矩阵时我们通常会将其赋予一个较小的值,若他们约等于0,loss会发生什么变化
这会导致分数向量皆为0,损失则都为1
- 如果将正确类别分数也求和在内会发生什么?
loss+1
- 如果我们求平均而非求和呢?
没区别,相当于对损失进行了缩放。
- 如果我们使用平方和呢?
这就有区别了,因为这已经不是线性缩放了,可以说是另一个损失函数了。
- 如果我们找到了一个使得loss为0的权重举证,它是唯一的吗
不唯一,\(w\)为0,\(2w\)也为0,类推下去有很多。也许你会考虑到那个为1的安全边界,因为loss为0,因此所有分数差值皆超过了安全边界1,将\(w\)放大甚至会更远,因此无需考虑。
代码实现
正则化
过拟合
如下图所示,假设对于蓝色圆形(训练数据)
,我们拟合出了能够完全符合其位置的蓝色曲线。但是当我们将方形绿色(测试数据)
加入其中时,可以发现它完全无法拟合。这就是一种过拟合状态。
根据奥卡姆剃刀原则,我们的权重矩阵应当越简单越好。因此除了先前提到的损失,我们应当加入一个正则化项\(\lambda R(W)\)来缓解过拟合现象。
正则化方法
正则化方法有很多种,你可以使用L1范数进行正则化,还有L2、Dropout等等。式中的\(\lambda\)可以理解为一个权衡因子来控制正则化程度。
L2正则化
L2正则化可以让权重衰减到更小的值,因此也叫做权重衰减。
理论上发生数据的过拟合现象会使得我们的参数波动幅度过大,因此进行权重衰减来抑制这一现象理论上可以缓解过拟合,当然实际上也是可行的。
交叉熵损失(Softmax)
我们的损失函数也可以这样写,利用Softmax处理而成。总体流程就是:
- 取\(e\)的指数
- 归一化
- 取对数求和
交叉熵损失只对正确类别感兴趣,而非所有类别。
\[ score=-log(\frac{e^s_k}{\sum_je^s_j}) \]
问题
- 初始化权重矩阵时我们通常会将其赋予一个较小的值,若他们约等于0,loss会发生什么变化?
输出的score皆约等于0,取e指数再归一化后的分数向量皆为1/c,最后的loss应为\(-log(\frac{1}{c})\)
- 最小/大损失应为多少?
理论上取e指数后再归一化,其定义域在[0,1]之间,对应的值域则为[0,正无穷)。当然现实中一般不会出现归一化后取到两端的数值,因此它们应当都是开区间。
万事俱备
现在,我们已经有了训练数据,同时也拥有了分数计算函数以及损失函数。万事俱备只欠东风,我们现在仅仅缺的便是一个优化方法来寻找到一个合适的权重\(w\)使得我们的损失函数最小化。