【DL-CV】线性分类器

【DL-CV】计算机视觉前置了解<前篇---后篇>【DL-CV】损失函数,SVM损失与交叉熵损失

神经网络的变种很多,各种模型满天飞,但是相信大家见得最多的是这种

这是多层感知器(multilayer perceptron/MLP),不加特效的最原始的神经网络,经典中的经典。(如无特别注释,神经网络通常指经典的mlp神经网络)。在接触其他热门变种如卷积神经网络前,我们会好好和MLP这位小朋友玩,了解他的特性,调教教导他,这样遇到其他小朋友才会有法可教,最终征服所有孩子成为孩子王啦。
然而要搞好MLP也是一个漫长的过程,作为第一步,首先来了解线性分类器,并看看它是如何解决图像分类问题的

线性分类器

现在有输入的图像数组x,以及一堆参数W和b,如何组合它们将图像的像素值映射为各个分类类别的得分?最简单的方式就是乘起来求和(线性组合),这就是一个线性分类器。该方法可以地延伸到神经网络和卷积神经网络上

其形式就是一个函数 $$f(x,W,b) = {W*x+b}$$这里的x是图像数据/特征值展开成的列向量;W是参数矩阵,称其为权重(weights);b叫偏置值(bias),与W*x形状相同
但更多时候我们会把W与b合并在一起,然后给x增加一维并用1填充这一维,变成 $f(x,W_{new}) = {W_{new}*x}$ 的形式,这种变换是等价的

注:除了W*x外,x*W也是可以的,取决于x是列向量还是行向量。

理解线性分类器

将每行W和b看做一个模板:假设我们把函数直接用于评分

如图,每种颜色都是服务于某个的类评分的,相当于W和b的每一行都是一个小的分类器/模板。上图的结果很不理想(猫被硬说成是狗),当然后面会有方法实现学习功能让其通过训练集自学到更好的W和b,使得计算出来的类别分值情况和训练集中图像数据的真实类别标签相符。在这你可以暂时忽略这些问题只关注函数本身原理。


将图像看做高维度的点:既然图像被伸展成为了一个高维度的列向量,那么我们可以把图像看做这个高维度空间中的一个点。整个数据集就是一个点的集合,每个点都带有1个分类标签。W和b的作用就相当于在这个空间中划线分开这些点,W相当于斜率(使线旋转),b相当于截距(使线平移)

以红色的汽车分类器为例,红线表示空间中汽车分类分数为0的点的集合,红色的箭头表示分值上升的方向。所有红线右边的点的分数值均为正,且线性升高。红线左边的点分值为负,且线性降低。

和网络的关系

函数我都懂,但这和本文开始的那张图有什么关系?
答案就在藏在矩阵乘法,矩阵的乘法形成了网状结构。每条连线对应权重的一个值,传递时进行乘法操作;所以上层所有的神经元(储存特征值或输入的单元)与下层一个神经元的连线对应一行权重,传递时进行线性组合后加上偏置值,得到的结果还要通过激活函数(后面再讲)最终的到特征值。每传递一层,就相当于执行一次线性分类器和激活函数,其输出可作为下一个线性分类器的输入继续往下传递。像这样多个线性分类器叠加起来,那种网络结构就成型了。

另外补充一下:实际上我们不会/很少用单层神经网络,使用一个线性分类器就实现对图像分类的评分是不现实的,因为这样提取的特征信息太浅了,往往因为颜色或形状相近就会被归为同类。正确做法应该是使用多层网络,对浅层特征进行再组合获得深层特征,最后才根据深层特征值来评分

你可能感兴趣的:(人工智能,计算机视觉,深度学习,python)