机器学习的基本概念 - ShawnZhang31/opencv3-for-faces-with-dlib GitHub Wiki
机器学习的基本概念
主要说明说明Dlib landmark检测背后使用的机器学习的理论。弄懂这些理论之后就可以自由的定义脸部关键特征点和形状检测器。
1. 监督学习(Supervised) vs 无监督学习(Unsupervised)
在监督学习中,输入给算法的是包含标签的数据集。比如,面对识别技术就是典型的监督学习,这是因为作为训练集的一部分,我们需要提供一张或多张某个人的面部照片,并明确告诉算法招聘中的人是谁。
无监督学习提供给算法的是没有标签的数据。聚类就是典型的无监督学习,聚类算法可以在我们给出的数据没有任何标签的情况下将数据分成不同的簇。
在Dlib的脸部关键特征点检测(Facial Landmark Detection)的训练阶段,需要准备号带有标签的数据:
- 几千张面部的照片
- 每张照片都要精确的标记出关键点的位置 因此面部关键特征点检测是一个监督学习的算法。
2. 分类(Classification) vs 回归(Regression)
几乎所有的机器学习的问题回归到本质都是这两个问题.
分类:在分类问题中,算法输出的是一个离散的标签。例如我们常见的性别检测算法。输入一张照片,算法检测照片中的人物的性别是男还是女,输入的值只能是这两个可能中的一个。
回归:与分类问题不同,回归问题的输出常常是一个连续的值。例如我们常见的年龄检测算法,输入一张照片,算法输出的是连续的年龄数值。
如此看来,脸部关键特征点检测(Facial Landmark Detection)是一个回归问题,因为我们获取到的是每个关键特征点的x和y坐标的值,而这个值又是连续的。
3. 决策树(Decision Trees)
**决策树(Decision Tress)**相当意思,它总是在树杈的每个节点提出问题,并根据问题的答案决定下一步该如何做。你正在寻找的答案就是其中的一个叶子节点。
决策树可以用来解决分类问题,也可以用来解决回归问题。当用来觉得分类问题的时候,叶子节点就是分类标签。当用来解决回归问题的时候,叶子节点就是簇元的中心。
3.1 分类树(Classification Trees)
上面的图片作为一个分类树,输出数据被分为三类:Red, Blue, Yellow,输入数据有两个变量X和Y。我们通过输入变量来预测输出分类。
3.2 回归树(Regression Trees)
回归问题的输出是一个连续的数值或者一个向量。上图中输出变量同样是X和Y,而回归问题的输出需要预测圆圈里面的数值。回归书将X-Y空间分成三个部分,这一点和分类问题非常像。然而与分类不同的是,回归问题输出的是簇里面所有值的平均值。
增加回归树的层次,就可以进一步划分空间了。实际上,只要你的计算能力够,你可以尽可能大的增加回归树的深度,其训练的结果也会在训练集上表现的更加完美。
那是不是意味着我们可以无限度的增减树的层次?显示不是的,因此在机器学习的角度,我们不会根据算法在训练集的结果来看评价算法的表现,而是通过检验集来评定的,这就涉及到了另外一个概念泛化。如果对数的层次划分的太深的话会造成在训练集上的过拟合,但在检验集上表现较差.
你是不是在想,在现实世界中X和Y是什么?举个例子,假设天气预报需要根据当地的气温和湿度来预测下雨的概率。在这个应用场景中气温和湿度就是输入变量X和Y。下雨的可能性就是需要想要预测的结果。对于上图来说,就是圆圈内数值.
3.3 训练决策树有什么意义?
训练决策与意味着找出在每个节点上要拆分的特征和要使用的阈值。
3.4 使用决策树的优点和缺点
决策树有如下优点:
- 实现简单
- 训练速度快。已经有大量成熟的算法来划分变量空间
- 易懂。即便是非专业人士也可以看懂
决策树也有很多不足的地方,当时最为显著的两个缺点是: - 对数据中微小的变动非常敏感
- 非常容易过拟合。 对于现实世界中的问题,使用一个决策时是一个非常糟糕的想法,使用多个决策树组成的集合来处理问题才是有效的做法。这既是机器学习中的集成算法(Ensemble Methods)。
4. 机器学习中的:集成算法(Ensemble Methods)
看过《爱情公寓》的朋友知道,有一集曾小贤去参加“谁是百万富翁?”的游戏,假设你是曾小贤,现在有一道题难住你了你可以使用如下方法处理:
- 50:50:系统移除2个不正确的答案,剩下两个答案,这样你就有50%的几率答对题目成为百万富翁,当然,你也可能回答错误,重新编程一个穷光蛋。
- 咨询专家
- 向现场观众求助:主持人会发出现场观众投票,然后选择得票最高的选项
现在你该怎么选择?
线程有一个专家,不,是一个砖家,他有66%的几率回答对问题,这是不是比自己瞎蒙的50%好一点。
然而,你最终选择了向现场关注求助,因为有信息表明,观众投票的正确率高达91%。
用毛爷爷的话这叫“群众的智慧是无穷的”,在机器学习的领域,行话叫做**“集成学习”**.
集成学习领域有两个关键属于: - Bagging
- Boosting
4.1 Bagging
Bagging 是由Bootstrap Aggregating 合成的。
Bootstrap一种创建随机数据子集的方法。比方书你有一个大小为N的数据集,你随机从N中采样了M的数据点。M其实就是N的子集。
而对于Bagging而言,一个随机采样的子集又来训练一个机器学习模型,另外一个随机采样的子集用来训练另外一个机器学习模型。对这个过程重复多次,最终我们可以获得通过不同的随机子集训练的不同的机器学习模型的集合。对一个随机采样的自己进行训练叫做Bootstrap,那么将不同的Bootstrap集合在一起就是用Bagging了,这也是Bagging名词的由来。
在回归问题中,根据不同的随机子集训练了不同的回归器,将这些回归器的回归其运算的输出进行平均就是最终的结果。
在分类问题中,根据不同的随机子集训练了不同的分类器,不同的分类器对结果进行投票,得票最高的就是最终的结果。
4.2 Boosting
Boosting是另外一种集成学习技术,与不同的模型单独训练的Bagging不同, boosting的模型是按照一定的顺序训练的。
后面训练的模型在可以前面训练的模型表现不佳的地方表现的更好。这些模型的中每一个都是单薄的,但是一旦把他们组合在一起之后就异常强大,因为在这个序列中后面训练的模型可以修正前面模型的错误。
4.3 Gradient Boosting
概括的讲,Gradient Boosting就是Bootsing在回归问题上的应用。如下图所示:
在这里例子中,训练集由图中的曲线的采样点组成,这些点使用红色圆点表示。
这里,我们使用最简单的决策树桩(深度为1的决策树)作为回归器来分析这些数据。最符合上面数据的决策树桩如下图所示:
上面的决策树桩的输出用蓝色曲线表示:
由于决策树桩非常简单,智能产生单步功能。
第一步的回归其所预测的误差被称为残差(Residual)。残差是红色曲线的Y值减去蓝色曲线的Y值获得的。
上图中绿色曲线就是第一步中的残差。
在第二步的回归器是处理第一步的残差。下图中的红色的点就是第一步的残差。蓝色曲线是第二阶段的回归器。
如果我们将第一步和第二部的回归器结合在一起,我们就可以获得一个全新的回归器,这个回归器比第一步的回归器更加适合原始的数据曲线。
在第三步,我们可以为第二步的残差找一个回归器,然后结合这三个回归器。下图显示了三个回归器结合之后的效果。
以此类推,当我们进行到第九步的时候,回归器就相当的好了:
上面的例子仅仅是一个对Gradient Boosting的简单描述,在显示世界的问题中,我们使用的决策树的层次要比这个深许多。在例子中,我们使用均方差作为损耗函数,并试图将红点和蓝点之间的均方差缩小的最小。在实际问题中,还有多的的损耗函数。而且**学习效率(Learn Rate)**也被用来控制一个回归器加到最终曲线上的误差矫正量。