Freezing

Freezing

Freeeeeezing......
twitter
github

Stanford CS231n(2017版)-- Lecture 3:Loss Function and Optimization

在否决了 Lecture 2 中的 Nearest Neighbor 之后,接下来要尝试的是 Linear Classification。

Introduction#

我们采用参数化的方法来做分类
image
如上图所示,用一个 103072 的参数矩阵 W,乘上 x (x 是把一个图片上分成 3232 个像素块,每个像素块三个通道值,最后把这 32323 个值展平成一维向量得到的),得到一个 101 的结果,里面包含了 10 种 label 分别的 score,score 最高的就是模型预测的标签。
你可能会好奇:这个 W 矩阵要是经过可视化,会长什么样子呢?会不会相当抽象?
我们把 10
3072 的 W 每行的 32323 个值还原到方形的图片,如下
image
在小数据集上能略微看出一点点人眼能识别的特征。

Multiclass SVM loss#

这个 W 看起来像是决策的 “大脑”,但它里面这么多的数字,我们该如何选择他呢?
我们要引出 “Loss Function”,来量化我们对预测结果的不满意程度。
我们用一个更简单的三个类别的例子:frog cat car

image

想象一个场景:老师叫学生回答一个选择题的答案(标准答案是 A),学生支支吾吾说:“大概率选 A,也有可能选 B”,很显然他对知识的掌握不如那些笃定地回答 A 选项的人。 同理,我们希望给 cat 的最高分要明显大于给 car 和 frog 的分数,这样表明模型很笃定地选择了正确答案。
Multicalss SVM loss 就是这么回事,Li=jyimax(0,SjSyi+1)L_i = \sum_{j \neq y_i} \max(0, S_j - S_{y_i} + 1) 。当我们预测上面第一张图片的类别时,我们得到了第一列三个分数,这个时候SyiS_{y_i}就是 3.2(实际标签 cat 对应的分数,哪怕比 5.1 要小),因为我们知道这张图片实际标签是 cat。接下来我们就当老师来评估一下这个 classifier (也就是权重 W) 答题表现如何。我们设定的标准是:真实标签对应的分数要高过别的分数至少 1 分,才能算你真的懂。3.2 - 1 < 5.1,完犊子,直接大错特错,狠狠地记过。3.2 - 1 > -1.7,不错,没有跟 frog 搞混。 最后的Li=2.9L_i = 2.9 , 要注意!!LiL_i越大说明理解得越烂,所以值越低说明模型理解能力越好。
图二预测得不错,4.9 比另外两个分数都至少大 1;图三预测得最烂,Losses 直接来到了 12.9。

Regularization#

上面那个 Loss Function 看似能够衡量模型的能力,但是,难道在 training set 上经过训练得出了一个 W,使得在 training set 上训练时的 Loss 值越来越低,就足够了吗?
不够,
image
如下图蓝线所示,如果 Loss Function 只有这一项,那么一味地在训练集上学习可能会导致模型专门去 “琢磨” 训练集,走火入魔,导致给你换一些训练集之外的题,就傻眼了。都说 “大道至简”, 一个有好的泛化性能的模型也是这样,我们要让模型 “simple”,并在 test data 上也有很好的表现,如图中绿线所示。
于是我们加上了一个正则项,其中λ\lambda 是一个超参数,用来平衡 data loss 和 regularization loss
这个R(W)R(W)和 loss function 类似,也有很多的选择:

  • L1 正则化: increasing sparsity in the W matrx
  • *L2 正则化: 防止过拟合,平滑权重分布。
  • *Elastic net 正则化: 兼顾 L1 和 L2 的优点
  • Dropout ……..
    image

Softmax#

image
这张图展示了 Softmax Classifier 如何将未归一化分数转换为概率,并通过交叉熵损失评估模型性能。其中 syis_{y_i} 是正确类别的未归一化分数,jesj\sum_j e^{s_j} 是所有类别的未归一化分数总和

Softmax vs. SVM (对比两种 loss function)#

image

顺便看一下这个流程图,非常简洁明了:左下方的xi,yi x_i,y_i是训练集中每张图像的 input 和 真实标签,剩下的连线把前面讲到的所有过程给囊括了。
image

Optimization#

前面 blah blah 说了半天,大家心中可能还是有一个疑惑:那么这个 “大脑” 是怎么训练成的呢?也就是说,How to find the best W?
有几个可能的思路:

  1. random search: 比较垃圾

  2. follow the slope:用下山的例子理解。在数学上就是梯度。
    iteratively, 每一次在 W 的每个数字上加一个小值 h, 看 loss 值变了多少,得到 dW,就像下面这样对每一个 W 中的数字重复操作
    image
    然后从中挑选

    这个方法(本质就是 numerical gradient)在 W 规模变大后就难以实行,计算量太大了。我们仔细想想,我们要求 Loss function 对 W 的导数,Loss function 本来不就是关于 W 的函数吗,直接用求导的方式就行了啊!

Gradient Descent (梯度下降)#

代码如下:


while True:
  weights_grad = evaluate_gradient(loss_fun, data, weights)
  weights += - step_size * weights_grad

Stochastic Gradient Descent(随机梯度下降)#


while True:
  data_batch = sample_training_data(data, 256)
  weights_grad = evaluate_gradient(loss_fun, data, weights)
  weights += - step_size * weights_grad

http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/ 在这个交互可视化界面中可以看到整个训练的过程。

Image Features#

image

用了一个坐标变换:直角坐标到极坐标的例子,把原先不能用 linear classifier 分开的一群点成功用 linear classifier 分开了

Feature Representation 的例子:

  1. Color Histogram
  2. Histogram of Oriented Gradient (HoG)
  3. Bag of words: Build codebook → Encode images

小结#

Lecture3 的内容到此完结,我并没有延伸开很多东西,基本按照课程的内容解读。个人觉得这儿的 Optimization 部分讲的不算很好,只能了解个大概。
Lecture4 内容是 neural networks 和 backpropagation, 移步下一篇笔记~

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。