深度学习入门笔记--图像线性分类

来源:互联网 发布:微软编程一小时 编辑:程序博客网 时间:2024/04/27 03:04

这篇博客是为了自己方便回忆知识点做的一些记录和整理,参考资料是知乎专栏的CS231N课程笔记翻译

想看详细版请点链接:

https://zhuanlan.zhihu.com/p/21930884?refer=intelligentunit%20%E8%BF%99%E4%B8%AA%E6%98%AFCS231n%E7%9A%84%E7%BF%BB%E8%AF%91%E7%AC%94%E8%AE%B0



计算机识别图像的困难与挑战

  • 视角变化(Viewpoint variation)
  • 大小变化(Scale variation)
  • 形变(Deformation)
  • 遮挡(Occlusion)
  • 光照条件(Illumination conditions)
  • 背景干扰(Background clutter)
  • 类内差异(Intra-class variation)

图像分类流程

输入->学习->评价


从图像到标签分值的参数化映射

该方法的第一部分就是定义一个评分函数,这个函数将图像的像素值映射为各个分类类别的得分,得分高低代表图像属于该类别可能性的高低。

线性分类器

\displaystyle f(x_i,W,b)=Wx_i+b

其中W被称为权重(weights),b被称为偏差向量(bias vector)




上面举的例子的分类结果显然不好,分类器输出狗的概率最高,但实际上这是一只猫。

将线性分类器看做模板匹配

关于权重W的另一个解释是它的每一行对应着一个分类的模板。从这个角度看,线性分类器就是再利用学习到的模板针对图像做模板匹配。

偏差和权重的合并技巧

将偏差值b也放入到W的参数矩阵中

\displaystyle f(x_i,W,b)=Wx_i+b

变为

\displaystyle f(x_i,W)=Wx_i

变换方法如图示


多类支持向量机损失 Multiclass Support Vector Machine Loss

第i个数据中包含图像x_i的像素和代表正确类别的标签y_i。评分函数输入像素数据,然后通过公式f(x_i,W)来计算不同分类类别的分值。这里我们将分值简写为s。针对第j个类别的得分就是第j个元素:s_j=f(x_i,W)_j。针对第i个数据SVM的损失函数定义如下:

\displaystyle L_i=\sum_{j\not=y_i}max(0,s_j-s_{y_i}+\Delta)

max(0,-)通常被称为折叶损失,有时候会听到人们使用平方折叶损失SVM,它使用的是max(0,-)^2,将更加强烈地惩罚过界地边界值。


多类SVM想要正确类别的分类分数比其他不正确分类类别的分数要高,而且至少高出delta的边界值。如果其他分类分数进入了红色的区域,甚至更高,那么就开始计算损失。如果没有这些情况,损失值为0.

正则化(Regularization):

有可能存在多种参数组合能使分类效果达到最佳,比如,给参数整体乘上一个常数。

为了解决这个问题,我们要给某些特定的权重W添加一些偏好,其他的权重则不添加。方法是向损失函数增加一个正则化惩罚(regularization penalty)。

常用的正则化惩罚是L2范式

R(W)=\sum_k \sum_l W^2_{k,l}

这样我们得到了完整的多类SVM损失函数

L=\displaystyle \underbrace{ \frac{1}{N}\sum_i L_i}_{data \  loss}+\underbrace{\lambda R(W)}_{regularization \ loss}


完整展开公式如下:

L=\frac{1}{N}\sum_i\sum_{j\not=y_i}[max(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)]+\lambda \sum_k \sum_l W^2_{k,l}

其中超参数\lambda的值无法简单确定,需要通过交叉验证来获取。

实际考虑

设置Delta

\Delta大多数情况下都被设为1 。detla和lambda一起控制同一个权衡:损失函数中的数据损失和正则化损失之间的权衡。


Softmax分类器

SVM将输出f(x_i,W)作为每个分类的评分(因为无法定标,所以难以直接解释)。与SVM不同,Softmax的输出(归一化的分类概率)更加直观,并且从概率上可以解释,这一点后文会讨论。在Softmax分类器中,函数映射f(x_i;W)=Wx_i保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。公式如下:

\displaystyle Li=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})或等价的L_i=-f_{y_i}+log(\sum_je^{f_j})


上式中,使用f_j来表示分类评分向量f中的第j个元素,和之前一样,整个数据集的损失值是数据集中所有样本数据的损失值L_i的均值。

其中函数f_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}}被称作softmax函数。


信息论视角:

在“真实”分布p和估计分布q之间的交叉熵定义如下:
\displaystyle H(p,q)=-\sum_xp(x) logq(x)

因此,Softmax分类器所做的就是最小化在估计分类概率(就是上面的e^{f_{y_i}}/\sum_je^{f_j})和“真实”分布之间的交叉熵。


SVM和Softmax的比较



针对一个数据点,SVM和Softmax分类器的不同处理方式的例子。两个分类器都计算了同样的分值向量f(本节中是通过矩阵乘来实现)。不同之处在于对f中分值的解释。

SVM分类器将他们看作是分类评分,它的损失函数鼓励正确的分类。

Softmax分类器将这些数值看作是每个分类没有归一化的对数概率,鼓励正确分类的归一化的对数概率变高,其余的遍地。




原创粉丝点击