cs231n notes#1: linear-classify

agenda

  • 摘要
  • 直觉解释
  • Loss function
    • 简单说
    • Multiclass Support Vector Machine loss
    • Softmax classifier
    • SVM vs Softmax

abstract

去年看完了cs231n 的视频,一直没有抽出时间总结和弄下作业, 这里总结一下笔记注解,原笔记, 线性分类是基础,中间包括的好多概念后续在CNN,RNN复用,相对比较简单.
线性分类模型:给定N个图片x的byte array长度为D, 固定分类K, 通过被训练过的参数矩阵W([KxD])和b(Kx1), 把一个输入图片经过线性运算 fW(x) + b 映射出对应K个分类的置信度的过程.
已CIFAR-10为例,N = 50,000, 每张的大小D=32x32x3,输出分类K=10,用线性运算做分类, W = 10x3072, b = 10x1, 把输入3072 byte的图像数据map成得分的过程
具有这几个特点:

  • 10个分类并行计算,不存在先后的依赖关系
  • label和输入图片是固定的, 可变的/训练的是参数W, b
  • 比之前单纯对比图像相似度,训练重&识别轻
  • 矩阵乘/加运算快于内存比对

直觉解释

线性函数具有对某种颜色在特定位置的敏感, 这里不是形状或者更高级的特征(the function has the capacity to like or dislike certain colors at certain positions in the image).比如船的分类器在图片边缘蓝色通过激励,使符合的图片得分高
cs231n notes#1: linear-classify_第1张图片

另外一种直观的理解方式:把图像理解成二位空间的一个点, 通过线性分类划分各自的zone,github原图如下:

还有一种直观的解释:把它理解成模板匹配, 图像的一行数据和W的一列match贡献正得分.额外有一点注意因为线性分类的特点,大海蓝色内积得分应高于船的分类,线性分类器对双头马也是高分的,因为训练数据中既有头在左边的也有头在右边的.线性分类对车的识别效果就差很多了,因为激活敏感是基于颜色+位置,车可以有各种各样的颜色.

Loss function

  • 简单说
    线性运算是拟合一个分类, 真实分类和线性运算的结构的间隙大小就用loss函数来表示.
  • Multiclass Support Vector Machine loss(SVM)
    这个loss的主旨是让正确的分类能够比其他分类得分倾向高出一个delta(The SVM loss is set up so that the SVM "wants" the correct class for each image to a have a score higher than the incorrect classes by some fixed margin (\Delta).). 具体的第i个图像x_i,经过线性运算f, 得到score s_i = f(x_i, W), y_i是正确标记的分类
    SVM = Σj !=y_i max(0, s_j - s_{y_i} + delta), 假如忽略delta其他错误分类小于争取分类的得分就是SVM的倾向,loss的倾向就是W改变的方向.

    当delta = 0时, 也叫hinge loss, squared hinge loss SVM (L2-SVM)在计算max做平方操作, 让违规的loss震荡的更加突出.
    cs231n notes#1: linear-classify_第2张图片

    SVM loss'希望/倾向'正确分类的得分比其他分类得分高出一个delta,至于其他错误分类的分高分低,它并不care.
    正规化: 但是这样的loss倾向的函数矩阵不知一个W是,2xW也是,3xW也是...,这样W都会产生同样的loss, 为了避免歧义, 在loss上加一个regularization penalty(R(W)), 以W作为参数,R(W)随W类似单调递减.最常见的是L2: R(W) = ΣiΣjWij^2
    SVM loss = Σj !=y_i max(0, s_j - s_{y_i} + delta) + ΣiΣjWij^2

    setting delta: It turns out that this hyperparameter can safely be set to (\Delta = 1.0) in all cases.对于给定delta,在计算中不可变,只会绝对大小不会影响loss的相对大小(As we shrink all values inside (W) the score differences will become lower, and as we scale up the weights the score differences will all become higher. Therefore, the exact value of the margin between the scores (e.g. (\Delta = 1), or (\Delta = 100)) is in some sense meaningless because the weights can shrink or stretch the differences arbitrarily.)

  • Softmax classifier
    softmax = e^s_i / Σj e^s_j, 最大的好处是按照给定的输入值大小给出总和为1,大小相关的数值,天然的反应了score'大'概率就大.简单实例如下:
    cs231n notes#1: linear-classify_第3张图片

    通常接入softmax的损失函数是cross-entropy loss(交叉熵损失函数), 这里是一篇比较好的介绍交叉熵
    熵体现了可变性,对于很确定的事情熵值低, 对于不确定的事情熵值高.
    cs231n notes#1: linear-classify_第4张图片

    对于一个随机变量X而言,它的所有可能取值的信息量的期望(E[I(x)])就称为熵。
    X的熵定义为: H(X)=Eplog1p(x)=−∑x∈Xp(x)logp(x),如果p(x)是连续型随机变量H(X)=−∫x∈Xp(x)logp(x)dx.把熵作为两个分布差异的度量就是相对熵(relative entropy)又称为KL散度(Kullback-Leibler divergence).DKL(p||q) = Hp(q)−H(p), H(p)作为真是分布可以理解为一个常量, Hp(q) = DKL(p||q) + H(p)变向的描述p q分布的差异,也就是交叉熵.CEH(p,q) = Ep[−logq]=−∑x∈p(x)logq(x)

SVM vs Softmax

cs231n notes#1: linear-classify_第5张图片

两个loss的倾向是不同的,大小不具有可比性.
In practice, SVM and Softmax are usually comparable. The performance difference between the SVM and Softmax are usually very small, and different people will have different opinions on which classifier works better.
SVM不care 错误的差异, softmax care.
作者做了一个online的小玩具直观可以diff两者感官上的不同. http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/

你可能感兴趣的:(cs231n notes#1: linear-classify)