【计算机视觉】分类模型

前言

终于看完了分类模型,其实最初也是冲着后面的应用“语义分析”看的。不过发现有了回归模型的基础,分类模型这一章读起来快了很多,两者交叉的内容还是很多的。不过毕竟是机器学习,基本还是概率论和优化的知识,只是选择了图片作为其应用场景。

一、逻辑回归

这本书的设计思路还是比较一致的,在一个简单基础的模型上不断扩展,最终得到可以解决实际问题的模型,然后再给出几个应用实例。尽管有些应用已经有了更先进的解决方法,但是从这些经典的算法出发还是有利于其学习与理解。
逻辑回归是机器学习的经典模型,尽管之前在机器学习课程中学过,但是经过最近阅读回归模型的部分,又从另一个角度认识了逻辑回归。
首先逻辑回归是一个判别模型,而其输出的取值是二值的,即0或1,所以就可以用伯努利分布来描述w。但伯努利分布的参数λ位于0~1之间,所以一般的线性AX+B便难以表示,所以需要将线性函数的结果传入逻辑sigmoid函数中,将λ的值从[-∞, ∞]映射到[0, 1]。最终的模型是一个伯努利分布,而其参数为sig[a]。
对于sigmoid函数,当a的值趋近于∞的时候函数值趋于1,-∞的时候趋近于-1,而a的取值为0的时候函数值为0.5。显然,其水平位置取决于线性函数a与x的交点,而倾斜度取决于梯度。
尽管使用sigmoid进行了映射,但分类的决策面其实还是线性函数,线性函数a与0的比较决定了w是0还是1。线性函数内部还是可以用通过x←[1, xT]T进行简化,a = ΦTx。
另外,加入sigmoid这个非线性函数后,参数的最大似然估计也困难的多,而为了使用贝叶斯方法提高稳定性也需要作出某些近似。
最大似然估计的直接想到的是累乘λw(1-λ)1-w然后取log求导等于0即可,但事实上无法得到Φ的闭式解,所以需要用一些非线性优化方法比如牛顿法。尽管牛顿法只能得到局部最优解,但是逻辑回归函数是凹函数,所以有唯一最大值。
逻辑回归存在几个问题,也就是我们后面扩展的目标:

  • 按照最大似然估计过于自信
  • 只能描述线性决策边界
  • 效率低且对高维数据容易出现过拟合现象

针对这三个问题,我们依次通过贝叶斯逻辑回归、非线性逻辑回归和boosting增量学习实现。

二、贝叶斯逻辑回归

为了解决逻辑回归“过于自信”的问题,通过贝叶斯公式实现贝叶斯逻辑回归。在贝叶斯方法中学习关于可能参数值Φ的分布,推理中通过新的观测值x*来使用这个分布,得到w*的预测。
首先Φ的先验定义为均值为0的球形协方差较大的多元正态分布,然后通过贝叶斯公式计算后验。由于我们没有使用共轭先验概率,不能通过一个简单的闭式表达式去求取后验概率,所以必须进行近似。书中使用的是拉普拉斯近似,具体数学步骤省略,推理过程的中也存在近似,这也也予以省略。
从最终得到的曲线可以发现,贝叶斯比MLE更为平缓。尽管边界仍是线性的,但不同概率的等高线(除了0.5)是曲线。

三、非线性逻辑回归

显然,上面的方法仍然是线性边界,所以为了创建非线性决策边界,可以用非线性变换得到的z替换x,即sig[ΦTf[x]]。这种方法的思路是任意的非线性激活值可以视为非线性基函数的线性总和。典型的非线性变换包括单位阶跃函数、反正切函数和径向基函数。不过注意基函数也是有参数的,需要进行学习。然而,这个联合优化问题通常是非凸的,所一般只能获得局部最优解。

四、对偶逻辑回归模型

下面是为了解决逻辑回归的另外一个问题,在原始线性模型中,对观测数据x的每一个维度都有一个相对应的梯度向量Φ,在其非线性扩展中对于变换空间中每一个数据维度z也都有一个相对应的梯度向量。
为了解决这个问题,我们使用对偶形式。在对偶参数化中,将梯度参数Φ表示为Φ = XΨ。Ψ的维度是I × 1,如果I小于x的维度,那么参数的个数将会减少。
参数减少的代价是我们只能从观测数据样本所扩展的空间中选取梯度向量Φ。
将Φ = XΨ代入回归模型即可推导出对偶逻辑回归模型。得到的模型非常类似原始的逻辑回归模型。在最大似然估计方法中,对对数似然使用牛顿法进行非线性最优化以得到参数Ψ,在贝尔意思方法中对Ψ使用正态先验概率。
对偶逻辑回归模型在最大似然估计中给出了与原始逻辑回归模型相同的结果,而且与贝叶斯方法的结果也非常类似。由于参数更少,所以拟合速度更快。

五、核函数回归

对偶逻辑回归模型可以进一步挖掘其优势,其学习和推理都取决于数据内基xiTxj,而其非线性版本的算法也是取决于内积,所以也可以使用核化的思想。核逻辑回归的贝叶斯形式也就是高斯过程分类。

六、相关向量分类

可以看出分类模型很多内容和上一章回归模型都是对应的。上一章有相关向量机,在这一章有相关向量分类的内容。
尽管上面提到的核逻辑回归的贝叶斯方法是非常有用的,但是需要计算变换空间的新数据样本和所有样本训练之间的点积,所以计算复杂度非常大。如果模型能够只依赖少量的数据样本其销量便可以进一步提高。为此给每个非零加权训练样本加入了惩罚函数,用一维t分布代替对偶参数Ψ的正态先验概率。将贝叶斯方法应用于参数Ψ的模型中即是相关向量分类。
这里计算过程中存在两个近似,一个是拉普拉斯近似,另外一个是将隐变量取最大化而不是对它们做积分,最后对数化求导。对于隐含变量hi很大的情况,相应的数据可以删除,只留下依赖少量数据的核分类器,从而估计效率可以提高。
相关向量分类既降低了计算量,也解决了过拟合问题。

七、增量拟合和boosting

相关向量模型采用了一个先验概率,以使得在对偶逻辑归回中的参数Ψ较为稀疏,因此该模型基于原始参数Φ的少量数据就有可能建立一个稀疏逻辑回归方法,并由此建立一个只是用数据子集的分类器。
增量拟合的方法与之不同,是用贪心算法依次只添加一个参数,添加参数是为了在每个阶段改善目标函数然后将参数固定。但是由于首先将模型中较多的判别部分添加进去,因此添加很小一部分参数之后就可以结束这个操作。
举个例子,将激活值ai表示为Φ0+∑Φkf[xi, ξk]。f可以是反正切函数、径向基函数,一个固定的非线性函数。
在增量学习过程中,每个阶段增加一个新项,直到添加一个常数Φ0,之前的添加项都不会有所改变为止。各个步骤都是通过MLE实现。
可以看出,这个过程并没有对参数统一处理,所以在一定程度上是不理想的,但它有三个不错的性质。

  • 创建了稀疏模型:当顺序操作时权重Φk趋于减少,后续的基函数对模型的影响越来越少。所以操作在适当时候停止也不怎么会影响总体性能。
  • 上述逻辑回归模型适用于原始数据的维度D很小或者训练样本I的个数很少时,但这种情况比较少见。而增量拟合的一大优势则是数据是高维数据并且有大量的训练样本时,它仍然适用。
  • 学习复杂度相对较低,因为只优化每个阶段的几个参数。

增量方法的一个特例是boosting,常用于计算机视觉应用。即基于阶跃函数和的逻辑回归模型。
(这些非线性函数阶跃函数、sigmoid让我想起了神经网络里的激活函数,两者有什么区别于联系呢?
阶跃函数可以视为一种弱分类器,该模型结合这些弱分类器来计算最终的强分类器。弱分类器相结合的这种方式通常称为boosting,这种特殊的模型成为logitboost。
但因为参数ak的单位阶跃函数的导数不是光华的所以不能简单地基于梯度来拟合这个模型,需要预定义一个关于J个弱分类器的大集合并且假设每个参数向量ak来自此集合,具体也省略了。
后来的弱分类器将会重点关注之前分类器不能很好地分类的数据集中更加复杂的部分。通常,这些数据集都是接近最终决策边界的。
总之,基于反正切函数的分类器更具广泛性,并且也可以用连续优化来拟合。阶跃函数估算速度更快,但是更复杂的函数可以通过查表来近似估计。

八、分类树

设置一个门限函数g,返回0 ~ 1之间的数字,有ai= (1-g)Φ0Txi + gΦ1Txi
可以看出,激活值会根据门限函数的值进行选择,甚至是两者的加权和,然后再传入sigmoid函数。而如果门限函数经过嵌套,可以得到一个更复杂的层次结构树。参数学习过程中,可以使用增量方法。
分类树具有速度上的优势,如果门限函数为二元输出,那么每个数据只能走一条边然后到一个叶节点停止。由于每个数据点经过特殊的处理,因此树通常不需要很深,使得新的数据仍可以非常有效地分类。

九、多分类逻辑回归

目前已经讨论了二元分类,下面要做的便是将其过占到N > 2的情况。可以通过建立N个一对多的二元分类器来实现,每个都计算第n类不同于其他任何类的概率。根据概率最高的一对多分类器来分配最终标签。
原则上用来处理多分类问题的一个更好的方法是将后验函数描述为分类分布(一种特殊的概率分布),其参数λ1 ~ λn即每一类的概率。
softmax就出现了,λn = exp[an] / ∑exp[aj],里面a就是激活值项,每一类一个。
显然,我们可以将这里扩展多元逻辑回归的方法用于各种而分类模型,可以构造贝叶斯、非线性、对偶逻辑回归和核回归方法。也可以再一个boosting框架下逐步训练并结合弱分类器。
(有种继承的感觉,因为有某些共性而可以对于一些方法是通用的

十、随机树、随机森林和随机蕨分类器

这里和上面提到的分类树有一定关系,但是不同的是,假定每个数据点只传向一个分支。随机分类树的函数是在一组预定义的可能函数里面随机选择的,但阈值需要谨慎选定,选取数据的最大似然估计的对数值L作为阈值。
对数似然不是基于阈值的一个平滑函数,因此在实际中,通过经验来选取多个不同的阈值来进行最大似然估计,最后在结果中选取最好的。
递归进行,直到叶子节点。随机分类树的训练速很快,在数据量非常大的情况下,随机分类树依旧能进行训练。
这个模型有两个变体:

  • 蕨:在树的每一层随机选择的函数必须是相同的,或者说相同的函数随后分别作用于通过左分支和右分支的数据。这意味着每个数据点由相同的函数序列处理,当重复估计分类器时,这种方法会很有效。
  • 随机森林:随机树的集合,每个随机树都使用一个不同的随机选取的函数集合,预测后进行评价,得到一个更稳定的分类器。这种方法类似于贝叶斯方法的一个近似。

十一、与非概率模型的联系

本章提到的分类算法要么是基于最大化给定数据训练分类标签的对数伯努利概率,要么是基于最大化给定数据训练分类标签的对数分类概率,都是基于概率的分类算法。
然而非概率分类算法更加普遍,比如多层感知器、adaboost、支持向量机分类等。这些算法的核心就是优化不同的目标函数,所以不仅彼此不同,与本章列举的模型也不相同。
多层感知器(MLP)或神经网络和非线性逻辑回归模型在特殊情况下非常类似在MLP中学习过程称为反向传播,变换遍历z称作隐层。
(我也感觉到了,而且说实话学习了回归与分类这些基本的知识,例如里面的非线性函数、非线性优化、sigmoid、分类树等等,现在对神经网络的理解也不太一样了
adaboost和本章提到的logitboost模型密切相关,但是adaboost是非概率模型,两者性能类似。
支持向量机SVM,记得是我机器学习课程里推导最复杂的模型,它和相关向量分类类似,是一个只依赖少量数据的核分类。它的优势再与模型使用的目标函数是凸的,而相关向量分类使用的目标函数是非凸的,因而只能保证得到一个局部最大值。但SVM也有很多缺点,比如不能给出确定的分类,不易扩展到多分类,相比于相关向量分类,SVM得到的结果稀疏性较低,且对核函数的形式也有更多的限制。
(当时学的时候特别痛苦,我觉得如果能像这门书组织一样由浅入深,抽取普遍规律和基础模型再不断完善,理解起来会好很多

十二、应用

(终于来到应用部分了,不过我只想简单的描述一下,对于具体的论文我也没有阅读过

性别检测

性别检测的目的是通过取值为{0, 1}的标签w来标记图片x中的一小块是否包含男性或者女性的脸。首先对图片进行一定的预处理,包括灰度化、直方图均衡等然后后进行卷积,滤波后的图像再采样得到特征向量,然后再非线性逻辑回归模型中进行训练,最终实现对性别的检测。

脸部和行人检测

这里是04年提出的基于adaboost的脸部检测系统,类似于boosting方法的非概率形式,最终的分类结果基于数据非线性函数和的形式。因为模型是不平滑的(阶跃函数),所以不能使用基于梯度的优化算法。
两方面的设计保证算法能够快速运行:

  • 利用的分类器结构:boosting方法的训练是不断增加的,“弱分类器”不断加入,最终构造出一个越来越复杂的强分类器。
  • 投影都是经过筛选得到的,因此对它们的估计速度很快。

类似的还有行人检测算法,主要的修改是对一系列弱分类器进行扩展,以检测超过一帧的特征,由此可以选择与人体运动有关的短时特征。系统不仅需要单帧图像数据本身,还需要相邻帧之间的差值图像。

语义分割

这里应该也是比较经典的方法,不过感觉现在应该不怎么用了。语义分割的目的是用一个标签w ∈ {1, …, M}来标记每个像素,基于局部图像数x表示M个物体中的哪几个存在。
textonboost基于jointboost算法,通过对一对多的策略进行决策,其中有M个二分类器通过加权求和技术。与每个对象类相关联的加权和使用的是相同的非线性函数,但权值不同,最终决策是基于最大激活值进行。
该方法基于非线性函数对图像的纹理基元进行定义,表示该“类型”的纹理出现在某一位置上。如果该位移为零则确认,否则给出局部上下文信息。对于每一个线性函数而言,在纹理基元技术上增加一个偏移量,其结果通过一个阶跃函数获得。
完整的方法最后还通过条件随机场进行了改善,效果还是不错的。

恢复表面布局

标签取值有1,2和3,代表像素是否包含支撑物(如地面)、垂直物(如建筑物)或天空。Hoiem等在07年提出的一个方法基于一对多的原则构造了三个二元分类器,且均基于logitboost分类树。不同的分类树均被视为一个弱分类器,结果通过加权和或者最终的概率。

人体部位识别

Shotton等在2011年开发的系统通过一个取值方位为{1,…,31}的离散标签w来表明深度图像x中31个身体部位中的哪几个在每一个像素中出现。
这种分类器基于决策树森林算法,最终的概率是不同种分类树预测的平均值。目标树减轻单个决策树利用贪婪算法进行训练时引入的偏差。
对每棵树而言,数据点究竟沿那一条分支的决策,取决于两个点的测量深度差,这两个点都是从当前像素经空间偏移得到的。偏移量与到像素的距离成反比,以确保当人靠近或远离摄像机时所选取的参照位置相同。

后记

本章的分类模型从sigmoid逻辑回归开始,基于回归模型中很多内容,不断丰富不断扩展最终能够解决很多实际问题。感觉经过这种方法的学习,对以前很多机器学习甚至深度学习的概念有了更加深入的理解,或者说能够从另一个角度来看待问题。从中也能看出以前确实学的只是机器学习的皮毛,现在有一定的深入吧。另外感觉PRML真是神书,很多书包括我看的这本都是基于它写的。可惜没来得及好好阅读,当时学机器学习的时候也特别表面。
在经典的分类模型基础上,又有一些集成学习的东西,比如boosting、随机森林算法,但是正如上面提到的,先学了分类树与随机分类树对于随机森林算法、神经网络算法的理解也不一样了。
不过感觉自己很多东西还是没有理解好,尤其是涉及数学推导的地方,只是在思路上有一点点启发,需要学的东西还是很多啊。

发布了75 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Swocky/article/details/104277706