接下来我们讨论线性分类,线性分类非常重要,同时他也是一个非常简单的算法,有助于我们建立起整个神经网络和整个卷积网络。我们整个神经网络就像是玩积木,从一个个积木拼成一个大的积木,每个小积木就是一个线性分类器,这些分类器最终泛化到整个神经网络,帮助我们理解整个神经网络。
接下来我们还是要继续谈到cifar-10这个数据集,其中cifar-10有5万个训练样例,每个图片大小是32*32,三通道的图像。10000个测试样本。
其中线性分类器是参数模型中最简单的例子。现在,我们的参数模型实际上有两个不同的部分,就以这张猫咪为主,我们把猫咪当做X放入线性分类器中,然后我们会有一另一个参数,通常叫做W,有时候也叫θ,取决于不同的文献里面作者的喜好。而我们要做的就是写一个线性分类函数,其中包括了输入数据X跟参数W,结果就会出现10个数字来描述,在cifar-10中10个对应得类别所对应的分数,根据上述的表述,比如说过猫的分数更大,表明输入X是猫的可能性更大。
所以在KNN中,我们没有设置参数,取而代之的是,我们通常会保留所有种类的训练数据,并且在测试时使用,但是想现在在一个参数化的方法中,我们将总结我们对训练数据的认识并把所有的知识都用到这些参数中,在测试的时候,我们不再需要实际的训练数据,我们只需要这些参数W,这就使得我们的模型更有效率,所以在深度学习中,我们都是在设置正确的F函数的结构。
对于这个线性分类器中,我们能做到最简单的方式,就是相乘,将32*32*3的图片扁平化一个3072*1的列向量,与一个10*3072的向量做乘法,得到一个10*1的得分矩阵,判断其中最高得分的类别,即是我们预测的类别。我们会在添加一个b(bias)偏置项,这里指的是一个10元素的常数的列向量,它不与训练数据交互,而只会给我们一些数据独立的偏好值。所以你会看到,如果你的数据分布式不均匀的,比如,你的猫的图片远多于狗的图片的时候,那么猫对用的偏差元素就是比其他的要高。
接下来我们将线性分类器回归到图像,作为点跟高维空间的概念,我们可以想象成我们每一张图像,都是类似高维空间中一个点的东西,我们在线性决策边缘上尝试画一个线性分类面来划分一个类别和剩余其他类别。通过训练过程,这个线性分类器会尝试绘制这条蓝色直线划分飞机类别与其他类别划分开来。
如果你在训练过程中注意观察,这些线条会随机的开始,然后快速变化,视图将数据正确区分开,但是当你从这个高维空间的角度来考虑线性分类器,你就能再次看到线性分类器中,可能出现的问题。
接下来我们讨论下让KNN完全失效的数据集,假设我们有一个两个类别的数据集,这些数据集可能部分是人为的,我们的数据集有两类,蓝色跟红色,蓝色类别是图像中像素的数量,这个数字大于0并且是奇数,任何像素个数大于0的图像,都归为红色类别,如果你真的去画这些不同的决策,出现这些不同的决策取悦,你能看到我们奇数像素点的蓝色类别,在平面上有两个象限,甚至是两个相反的象限,所以我们没有办法能够绘制一条单独的直线,来划分蓝色跟红色,这是线性分类器的困境,也许归根结底,这不是人工数据,实际上我们是在计算图像中动物或者人数的奇偶数,而非像素点,所以这种划分奇偶数的问题是线性分类器,通过传统方法难以解决
线性分类器难以解决的其他问题是多分类问题,在上图的右侧,可能我们蓝色类别存在于三个不同的象限,然后其他所有都是另一个类别,目前来说不能绘制一条独立的线性边界,所以当我们的数据处于不同的领域空间中,这是另一个线性分类器可能有困境的地方。
线性分类器由很多的问题,不适合很多地方,但是他非常简单,易于理解跟使用。下面我们来做做作业。。。