不同的机器学习模型如何泛化?¶
你知道不同的机器学习模型是如何泛化的吗?也许你了解决策森林、神经网络、最近邻或 SVM 等模型背后的理论。你甚至可能很清楚哪种模型最适合解决特定问题。但你知道不同的机器学习模型是如何看待世界的吗?你有没有亲眼见过它们是如何以不同方式泛化的?
为了回答这个问题,我将训练不同的表格型机器学习模型来重建图像。我的假设是,这些不同的模型会犯不同类型的错误,这些错误可以追溯到模型的数学定义。这主要是一个游戏式的实验,我希望借此获得一些有趣的图片,并有机会提高我对这些模型的实际理解。
这篇文章并非科学论文,因为它缺乏细节和严谨性。相反,它是一篇趣味文章。
要讨论本文,请加入这个 github 讨论。
实验设置¶
数值灰度图像可以表示为一个 2D 数组 \(M\),其中包含数值,每个元素 \(M[x,y]\) 编码像素 \((x,y)\) 的光强度。彩色图像可以类似地编码,为每个颜色通道(例如 RGB 或 HSL)使用单独的 2D 数组。
图像也可以表示为一个函数 \(f(x,y) := M[x,y]\),定义在图像的整数坐标上,例如 \(x \in [0, \mbox{width} )\)。无法直接在像素之间评估此函数,例如 \(f(0.5, 6.1)\)。我的目标是训练一个机器学习模型来学习这个函数,其中 x,y 坐标是模型的输入特征,函数输出是标签。这带来了一个有趣的特性:(大多数)机器学习模型接受浮点数值,并且能够在训练数据点之间进行插值,也称为泛化。
换句话说,通过在像素之间(例如 \(f(0.5, 6.1)\))评估学习到的模型,我可以提高图像的分辨率:一个 100x100 大小的图像可以转换为 1000x1000 大小的图像。这也意味着我不需要所有像素来训练图像。带有坏点或缺失部分的图像可以被重建。
注 #1: 存在专门的上采样算法,它们会产生更好的结果。我的目标不是尽可能好地重建图像,而是查看表格型机器学习模型在这项任务上是如何失败的 :)
注 #2: 使用模型,可以在图像外部进行外推。然而,由于大多数传统使用的机器学习模型在外推方面表现异常糟糕,我不会探讨这一点。
至于模型,我将使用以下表格数据模型
- 一个决策树(DT),也称为 CART。
- 一个随机森林(RF):一个由经过一定随机性训练的决策树组成的集成模型。
- 一个梯度提升树(GBT):一组按顺序训练的决策树,每棵树都预测前一棵树的误差。
- 一个极端随机树(ERT):一种随机森林,其中分裂(也称为条件)是随机选择的。
- 一个斜决策随机森林(Oblique RF):一种允许同时查看多个属性学习分裂的随机森林。
- 一个k 近邻(kNN):找到训练数据集中 k 个最近的像素,并返回平均值。
- 一个支持向量机(SVM):一种曾流行的模型,它使用到几个锚点的距离作为线性模型的输入特征。
- 一个前馈多层感知机(MLP),也称为神经网络:一系列矩阵乘法交织着激活函数。
重建一个玩具图像¶
第一张图像是一个黑白图像,其中包含一个椭圆、一个正方形和一个位于正方形内的菱形。完整的图像在左侧,右侧显示了放大区域。
这张图像包含水平线和垂直线,决策树应该很容易学习;同时也有对角线和圆形,这对决策树来说应该比较困难。这是因为传统的决策树中,每个条件一次只测试一个属性。
任何足够大的模型,如果使用完整的图像进行训练,都可以记住并重建图像。相反,我将图像分辨率降低了 4 倍,并随机丢弃了剩余像素的 80%,然后要求模型重新生成原始图像。这意味着模型只看到了原始图像数据的大约 \(1.25\% = 1/4^2 * (1-0.8)\)。训练图像是
让我们从一个简单的决策树(DT)模型开始。它能重建图像吗?以下是它的预测。
注意: 我将训练的模型能够输出概率,因此预测结果可以是灰度图像。虽然这样图像看起来更好,但绘制灰度预测图会更难看出错误。
决策树重建的图像看起来很糟糕,但具体问题是什么?
左下角的正方形几乎完美,但左上角的椭圆和右下角的菱形都有“阶梯效应”。背景知识:在这里,决策树是一个条件组成的二叉树,每个条件的形式是 \(x \geq \mbox{某个数值}\) 或 \(y \geq \mbox{某个数值}\)。例如,决策树的顶部可能看起来像这样:
x >= 0.220
├─(pos)─ y >= 0.780
| ├─(pos)─ ...
| └─(neg)─ ...
└─(neg)─ y >= 0.207
├─(pos)─ ...
└─(neg)─ ...
因为每个条件一次只检查一个坐标,这在模型泛化中造成了强烈的水平或垂直偏差。当这些线连接时,就形成了我们看到的阶梯。我可以通过给决策树的每个叶子分配一个随机颜色来证实这一点:
在上图中,均匀的矩形是一个叶子节点。左下角的正方形很好地由单个块表示,但椭圆和菱形的边缘需要许多块。
在上面的预测图中,椭圆边缘侧面有两个小的“生长物”。这是决策树过拟合,也称为幻觉模式。过拟合是决策树的一个问题,也是它们在工业中不常使用的原因之一。
决策树是一个简单的模型。随机森林能做得更好吗?在随机森林中,许多(例如 1000 棵)决策树被平均在一起。这些树经过一些噪声训练,所以它们并不完全相同。以下是随机森林的预测结果:
这好多了。椭圆和菱形的边缘更光滑了,即使它们仍然有阶梯效应。最值得注意的是,不再有过拟合的生长物。这很好地说明了 Breiman 的说法:随机森林不会过拟合,[...]。
那么梯度提升树呢?它是驱动 XGBoost 库的著名算法。GBT 的预测结果如下:
椭圆和菱形的整体形状看起来也比决策树的要好,尽管表面不如随机森林光滑。菱形上也有一些生长物。这是预料之中的,因为 GBT(与随机森林不同)会过拟合。
那么更特殊的决策森林模型呢?
极端随机树是随机森林算法的一种改进,旨在使决策边界更平滑。思想很简单:不是使用数据学习树的条件,而是随机选择条件。以下是极端随机树的预测结果:
正如预期的那样,椭圆和菱形的边界比随机森林的更光滑,但在曾经出现阶梯的地方变得“波浪形”。此外,正方形的角现在更圆润了。
斜决策随机森林是另一种特殊模型,其中单个分裂可以测试多个属性,通常使用线性方程。这应该能消除阶梯效应。以下是斜决策随机森林的预测结果:
这好多了。椭圆光滑,菱形和正方形的边缘都很直。正方形和菱形的角略微圆润,但不如极端随机树那样圆润。此外,椭圆的边缘包含一些平直的部分。这很有道理:它们是线性分裂。
注意: 斜决策随机森林不仅在这个玩具示例中表现良好。在实际应用中,它们也非常有竞争力。
任何决策森林模型都可以变成斜决策模型。以下是斜决策梯度提升树和斜决策决策树的预测结果:
斜决策梯度提升树与斜决策随机森林有点相似,可能在椭圆周围有更锐利的角和更平坦的部分。另一方面,斜决策决策树有很多“尖锐的部分”🔪!
到目前为止,我研究了决策树和决策森林模型。其他类型的模型怎么样?首先,让我们绘制 k 近邻(kNN)模型的预测结果。要进行预测,k 近邻会查看 k 个最近的值并返回最常见的标签。
这很有趣。k 近邻模型没有像决策森林模型那样出现阶梯效应。相反,边缘有一种纹理,看起来几乎是自然的。虽然看起来很漂亮,但在实际应用中并不理想:这种纹理是这些模型通常会遇到的过拟合的产物。注意,外部的矩形也完全缺失了。
支持向量机(SVM)怎么样?以下是它的预测结果:
k 近邻模型过拟合了,而 SVM 模型却遗漏了许多细节,生成的图像非常平滑。注意,椭圆可以用到其焦点距离之和的线性不等式来描述,这正是 SVM 模型可以表达的。如果从图像中移除正方形、菱形和边框,SVM 模型将能完美预测它。
最后,这份列表如果不包含神经网络就不完整了。为了简单起见,以下是一个具有 3 个隐藏层(每层大小为 200)的多层感知机(MLP)的预测结果:
以下是一个具有 8 个隐藏层(每层大小为 200)的多层感知机(MLP)的预测结果:
预测结果很平滑,这对于椭圆来说很好,但对于正方形和菱形来说很糟糕。此外,周围的矩形完全缺失。更令人担忧的是,预测结果的边缘看起来总是超出(正方形)或低于(菱形)原始形状的边缘。这显示了神经网络的一个特点:决策森林或 kNN 模型独立地学习特征空间的不同部分,而神经网络模型则全局地学习模式。这对于泛化在多个地方重复出现的复杂模式(例如,神经网络可以学习圆的概念并在多个地方重复使用)通常很有用,但这使得模型训练起来更复杂。
神经网络的训练参数对最终模型也有很大且难以预测的影响。为了好玩,以下是一个使用一个隐藏层训练的 MLP 的预测结果,以及一个使用 20 个隐藏层(每层大小为 20)训练的 MLP 的预测结果:
重建真实图像¶
现在,我将相同的重建模式应用于彩色图片。我预计错误会更难解释,但我希望获得一些很酷的图片。
我将使用这张玩具老式热气球的图片。这张图片很棒,原因有很多:它包含圆形(对决策森林来说很难),包含锐利的直线边缘(对决策森林来说很容易),并且包含细节。
和之前一样,我大幅降低了图像分辨率并遮盖了一些像素。训练图像的分辨率为 68x102 像素(包括坏点)
从简单开始,决策树的预测结果如下:
你可能以为会得到一个损坏的图像,但模型能够填充坏点并重建图像。然而,重建的图像看起来分辨率仍然很低。为什么?
本质上,训练好的决策树为原始训练图像中的每个像素都生成了一个叶子节点。由于像素是正方形的,决策树很容易对其进行编码,模型也能轻松记住整个图像。但是,模型无法在像素之间进行插值。
随机森林的预测结果如何?
随机森林模型在单个像素之间进行了一定形式的插值/平滑。如果你仔细观察,重建图像中的像素不像原始图像那样均匀。虽然随机森林模型不能外推(即,做出训练中未曾见过的预测),但重建图像中包含了新的颜色:看看气球底部偏绿色的部分。这可以解释为不同颜色通道独立插值的结果。模型的插值在颜色空间中不是有效的插值,因此产生了新的颜色。
梯度提升树的预测结果如下:
重建的图像比随机森林的更加平滑。这很有道理:虽然决策树和随机森林可以为每个像素创建一个叶子节点,但 GBT 模型不能,因为每棵树都是受限的(在此实验中,我将树的深度限制为 6)。相反,GBT 通过叠加多个浅层树来编码像素组。这有两个效果:颜色通道之间的插值同步性较差,导致产生了更多的绿色;以及模型生成了绘图伪影:看看气球条纹延伸到顶部棕色背景上的部分。
斜决策随机森林怎么样?
这是一张令人愉悦的图像。有大量的平滑和像素插值,没有绘图伪影,并且只有少量的偏绿色。模型还能够重建气球周围的一些网(请看原始图像)。有趣的是,在放大图像中仍然有一些水平和垂直的模式。这是由于学习斜决策分裂的算法造成的:水平和垂直分裂仍然是可能的,并且学习算法偏向于它们。
总的来说,这感觉就像我用来给图像风格化的彩色滤镜。
作为参考,这是 XBR 算法的输出。该算法专门用于提高非常低分辨率图像的分辨率,例如老式视频游戏机的精灵图。
其他机器学习模型呢?k 近邻的预测结果如下:
和之前一样,kNN 有幻觉纹理的倾向。
最后,对于最终的图像,让我们看看神经网络的预测结果。由于图像复杂得多,我会给网络更多的参数。以下是几种神经网络配置的预测结果:
模型无法重建图像细节。生成这些图像也比之前测试的其他模型花费的时间显著更多。我确信,如果使用更大的模型并对参数进行更多调整,我可以让神经网络学会图像。然而,这个实验只是一个玩具式的说明,展示了神经网络模型的开发复杂性和训练成本。
结论¶
这是一个有趣的实验,我希望它能让你对不同模型的泛化方式有了新的理解。这种方法有趣的地方在于它能够处理点云(不仅仅是栅格图像),并重建 2D 和 3D 图像(可能包含动画)。我认为这将是一个很棒的后续研究。如果你也尝试了并且得到了很酷的图片/视频,请告诉我 :)。