斯坦福CS231n课程Lecture_3

To be continued

Recall

​ 接上讲,此时我们需要优化我们的权重矩阵使得分类器具有更好的性能。我们需要做以下两件事情。

  1. 定义一个损失函数来衡量最终得分的好坏
  2. 想出一个方法能够寻找到合适的参数(权重)使得损失函数最小

损失函数

合页损失

​ 假设我们拥有三个样本分别属于不同的类别,同时我们存在一个权重矩阵\(w\)使得最终得分如下。

​ 以多分类支持向量机的合页损失举例,对于\(x_i\)(图像样本)以及\(y_i\)(标签)\(s\)(分数向量),有如下表达式👇:对于该样本对应的类别分数我们不进行计算(也就是说如果第一个样本是一只猫,我们并不对cat这一类别进行损失计算,我们只在乎其他类别)

​ 如果正确类别的分数减去其它类别的分数大于1,则损失为0,如果差值小于1,则其损失为其它类别的分数减去正确类别的分数+1。对所有的其他的C-1个类别都进行计算并求和则得到我们的最终的Loss。

为什么+1,1只是一个安全边界。我把它理解为对于错误分类的容忍程度。

例子

生动形象,一眼理解的例子👇

问题

  1. 如果car类别的分数变化了一点点,loss会有什么变化?

其他类别分数距离安全边界都较远,变化一点实际上损失依然为0

  1. 最小/大的损失为多少?

最小为0,最大为无穷

  1. 初始化权重矩阵时我们通常会将其赋予一个较小的值,若他们约等于0,loss会发生什么变化

这会导致分数向量皆为0,损失则都为1

  1. 如果将正确类别分数也求和在内会发生什么?

loss+1

  1. 如果我们求平均而非求和呢?

没区别,相当于对损失进行了缩放。

  1. 如果我们使用平方和呢?

这就有区别了,因为这已经不是线性缩放了,可以说是另一个损失函数了。

  1. 如果我们找到了一个使得loss为0的权重举证,它是唯一的吗

不唯一,\(w\)为0,\(2w\)也为0,类推下去有很多。也许你会考虑到那个为1的安全边界,因为loss为0,因此所有分数差值皆超过了安全边界1,将\(w\)放大甚至会更远,因此无需考虑。

代码实现

正则化

过拟合

​ 如下图所示,假设对于蓝色圆形(训练数据),我们拟合出了能够完全符合其位置的蓝色曲线。但是当我们将方形绿色(测试数据)加入其中时,可以发现它完全无法拟合。这就是一种过拟合状态。

​ 根据奥卡姆剃刀原则,我们的权重矩阵应当越简单越好。因此除了先前提到的损失,我们应当加入一个正则化项\(\lambda R(W)\)来缓解过拟合现象。

正则化方法

​ 正则化方法有很多种,你可以使用L1范数进行正则化,还有L2、Dropout等等。式中的\(\lambda\)可以理解为一个权衡因子来控制正则化程度。

L2正则化

​ L2正则化可以让权重衰减到更小的值,因此也叫做权重衰减。

​ 理论上发生数据的过拟合现象会使得我们的参数波动幅度过大,因此进行权重衰减来抑制这一现象理论上可以缓解过拟合,当然实际上也是可行的。

交叉熵损失(Softmax)

​ 我们的损失函数也可以这样写,利用Softmax处理而成。总体流程就是:

  1. \(e\)的指数
  2. 归一化
  3. 取对数求和

交叉熵损失只对正确类别感兴趣,而非所有类别。

\[ score=-log(\frac{e^s_k}{\sum_je^s_j}) \]

问题

  1. 初始化权重矩阵时我们通常会将其赋予一个较小的值,若他们约等于0,loss会发生什么变化

输出的score皆约等于0,取e指数再归一化后的分数向量皆为1/c,最后的loss应为\(-log(\frac{1}{c})\)

  1. 最小/大损失应为多少?

理论上取e指数后再归一化,其定义域在[0,1]之间,对应的值域则为[0,正无穷)。当然现实中一般不会出现归一化后取到两端的数值,因此它们应当都是开区间。

万事俱备

​ 现在,我们已经有了训练数据,同时也拥有了分数计算函数以及损失函数。万事俱备只欠东风,我们现在仅仅缺的便是一个优化方法来寻找到一个合适的权重\(w\)使得我们的损失函数最小化。