UMICH CV Linear Classifiers
对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法:
而对于这样一个式子,我们怎么去理解呢?
首先从代数的角度,这个f(x,W)就是一张图片的得分,我们可以将一张图片所有的像素点输入,乘以一个权重矩阵,再加上一个偏置项b,就得到f(x,W)
举个具体的例子:
上面权重矩阵有三行分别对应三种类别,有四列每列对应着一个像素点的权重,最终得到的结果也是一个三行的矩阵,每一行对应着该图片在每个类别上面的得分
下面这张图应该会更加直观:
对于f(x,W)=Wx + b这个式子,我们也可以选择把偏置项合并,呈现下面这个形式:
其次我们从可视化的角度来看,线性分类器实质上是为每个分类创建了一个模板,我们将一个图片输入线性分类器实质上就是寻求与模板的匹配:
最后从几何的角度来看,线性分类器实际上在划分空间,判断输入的图片应该属于哪个分类的空间:
而针对线性分类器存在的问题,我们也可以从以上三个方面来认识:
首先从代数方面,线性分类器意味着我们得到的关系是线性的,我们的权重矩阵减半,相应的分数也会减半,这就很难去包含一些复杂的图形关系,导致分类效果不好
其次从可视化方面,从前面那张图我们可以看到线性分类器得到的仅仅是每类简单的模板,很难去捕捉到数据复杂的特征,上图中马对应的分类甚至有两个头
最后是几何方面,有时候对于线性分类器来说分隔平面是一件无法完成的事,比如说著名的XOR问题等等:
显然对于上面的区域,我们很难训练线性分类器让它来找到划分平面的方法
在大致了解了线性分类器的工作原理之后,我们面临的问题是如何去判断并找出对于分类问题来说最好的权重矩阵
为了做到上面两点,我们需要引入损失函数的概念:
我们通过损失函数来判断权重矩阵的好坏,具体来说,损失函数是在计算我们模型得到的得分与正确分类得分的差距
一个常见的损失函数是SVM loss:
具体来说,上面这个图我们计算了猫这张图片在三个分类上的得分分别是3.2,5.1,-1.7,其中在cat类上的得分3.2是正确分类的得分,所有我们计算其它两个类与该类得分的差距,注意这里还要加上一个1,表示margin,大致的意思就是我们对权重矩阵的要求比较高,正确分类的得分不仅要比其它所有分类高,还要高出一定的分数
在上图中,使用不同的权重矩阵得到了一样的loss值,那么我们怎么去判断哪个权重才是更好的呢?
这里引入了正则化的概念,用于表达对某种权重矩阵的preference,同时也能防止模型的过拟合(一般来说正则化都会选择更简单的模型):
具体来说,比如我们选择L2正则化,现在有w1与w2两个权重矩阵,它们计算的得分一致,但是显然w1正则化的数值比w2要大,所以w2优于w1,L2正则化函数显然倾向于分布比较均匀的权重矩阵,它是将每个权重的平方和累和
另一种常见的损失是交叉熵损失:
这里具体的解释与推导需要用到一些信息论的知识,我这方面也不是很了解,留个坑以后懂了再填吧,感兴趣的同学可以自行搜索,这里的计算过程就和上面这张图一样,先取e的指数然后归一化,再取负对数,这里值得注意的是对数的底数一般都取e,所以最后的损失函数还可以化简一下,在assignment2中的交叉熵损失的实现就是拆分之后的。