找回密码
 立即注册
查看: 225|回复: 0

深度学习 Deep Learning 5 机器学习基础(一)

[复制链接]
发表于 2022-8-11 17:31 | 显示全部楼层 |阅读模式
AI-Bear:本系列为《深度学习》书籍阅读笔记,记录知识内容与个人的理解。欢迎讨论和指正!
Chapter 5 机器学习基础

机器学习本质上来讲,是一种应用统计学。它更强调用计算机从统计上估计复杂的函数,而不强调证明这些函数的置信区间。
5.1 学习算法

机器学习算法是可以从数据中学习的算法。Mitchell给出了一种“学习”的定义:一个计算机算法可以学习关于某类任务T和效果衡量指标P的经验E,指的是任务T的指标P可以由经验E提升。
任务T:机器学习要解决的是那些难以通过人类设计的固定程序解决的难题。学习的过程并非任务本身,学习是我们试图获得解决问题的能力的途径。机器学习任务通常被描述为机器学习系统应该如何处理一个样例。
指标P:为了评估机器学习算法的能力,我们需要设计可量化的指标来评价它的性能。有些任务中,可以根据目标直观地设计评价指标,如分类任务。而对于复杂的任务,如序列生成,很难决定如何去衡量生成效果。还有一些任务中,我们知道优化的目标是什么,但该目标却难以直接衡量,需要转化为其他目标,如概率密度估计。
经验E:有监督学习和无监督学习之间没有严格的界限。一般来讲,有监督学习数据集中包含特征和输出的标签。学习算法寻找一个函数,将输入特征映射为输出标签。无监督学习中,学习算法学习数据集的内在结构特性。
5.2 容量,过拟合和欠拟合

机器学习的核心挑战就在是在新的,未曾见过的数据上有好的效果。这种能力被称为泛化。机器学习和优化问题的区别在于,除了优化在训练数据上的训练误差,还需要尽可能降低泛化误差。泛化误差也称为测试误差,是指模型在未见过的测试集上的期望误差,一般通过在和训练集分离的测试集上计算得到。
模型在训练过程中,最小化训练误差,但我们关心的实际上是泛化误差。如何在只能观察到训练集,不能观察到测试集的情况下减小泛化误差呢?假如训练集和测试集是完全随意收集的,的确没办法。但如果训练集和测试集服从服从独立同分布的,即两个数据集中的所有样本彼此之间相互独立,但从同一概率分布中产生。由此,对于随机选择的模型,其在训练集上的训练误差和在测试集上的泛化误差相等。
因此,模型两方面的能力将衡量学习算法的好坏:其减小训练误差的能力,和缩小训练误差与泛化误差的能力。这两种能力对应了机器学习的两个核心挑战:欠拟合和过拟合。
我们可以通过调整模型的容量来决定模型更倾向于欠拟合还是过拟合。模型容量是指能拟合函数范围的大小。模型容量小时,更容易欠拟合。模型容量较大时,更易过拟合。控制模型容量的一个办法是限制其假设空间,即学习算法可以从中选择的函数集合。此时,我们限制的是模型的表示容量(representation capacity)。然而在实际训练中,模型并不一定可以找到假设空间中的最佳函数,而是仅仅找到了可以显著降低训练误差的函数。这种限制是由优化算法的不完美导致的。优化算法等限制因素导致模型实际可以搜索到的函数集合称为模型的有效容量。模型的有效容量小于其表示容量。
当模型容量与任务的复杂性以及训练数据量相称时,其效果是最好的。根据奥卡姆剃刀原理,当一组假设均可以很好地解释已知的观测结果时,应该选择其中最简单的。
统计学系理论提出了很多量化模型容量的方式,其中最著名的就是Vapnik-Chervonenkis dimension(VC dimension)。VC dimension衡量一个二元分类器的容量。其衡量的是分类器可以区分的最大类别数目。
根据统计学系理论,训练误差与泛化误差之间差别的上限,随模型容量的增大而增大,随训练样本数的增加而减小。这从理论上说明机器学习,深度学习算法是可行的。但在实际中却没有太多指导意义。一方面是因为由此确定的上界太松了,另一方面是因为深度学习模型的有效容量受优化算法的限制,而我们对其中包含的非凸优化问题的特性所知甚少,故而难以估计深度学习模型的容量。一般来讲,泛化误差是模型容量的U型曲线函数。



图1: 训练误差,泛化误差与模型容量的关系。图片来自《深度学习》

参数模型,如线性回归,学习一个由参数描述的函数,它的大小是有限的,且在观测到任何数据之间就已经确定。而非参数模型则没有这类限制。有些非参数模型只是理论的抽象,无法实现,如搜索所有概率分布的算法。也有一些可以实现的非参数模型,其复杂度是关于训练数据集大小的函数,如最近邻回归算法。还可以通过将参数模型包裹在其他可以增加参数的算法中,设计非参数模型。



图2: 训练数据量对误差的影响。随训练数据的增加,训练和泛化误差均趋近于贝叶斯误差。图片来自《深度学习》

最理想的模型,就是生成数据的概率分布。然而即使我们得到了这个真实的概率分布,仍可能错在误差。这些误差被称为贝叶斯误差,可能是由噪声,或输出还收由输入特征外其他因素影响而产生的。当参数模型的容量未达到最优容量时,其误差值会不断逼近于一个超过贝叶斯误差的数值。贝叶斯误差是模型优化结果的天花板。
没有免费午餐定理
从逻辑上来讲,想要推断出一个可以描述集合中所有成员的规则,必须要得到集合中所有成员的信息。这与机器学习算法从有限数据中学习而取得好的泛化效果是矛盾的。解决这一问题,机器学习提供的是一个概率规则,而非逻辑推理中的确定性规则。换言之,机器学习寻找的一个对集合中绝大多数成员都适用的,可能正确的规则。
尽管如此,根据没有免费的午餐定理,在所有可能的数据生成分布上平均之后,所有分类算法在处理未见过的数据时,错误率是相同的。换句话说,没有哪个机器学习算法比任何其他算法效果都好。不过,这是在我们平均了所有数据分布上的结果得到的结论。当我们限定数据生成分布为现实世界中的数据分布时,我们可以设计在该分布上效果最好的算法。
正则化
没有免费的午餐定理说明,机器学习算法要为特定的任务而设计。因此我们可以为在算法中根据任务特性加入一些偏好信息,协助算法学习得到更好的结果。
前文已经介绍了通过控制模型的假设空间来调整其表示容量的方法。除了假设空间的大小,还可以通过限制假设空间中函数的种类来控制学习算法的效果。
除此之外,还可以在假设空间中的不同解决方案中设计偏好。只有当不偏向的函数效果显著高于偏好的函数时,才选择前者。这种通过偏好模型容量的方式比增加减少假设空间中的函数选择更通用。从假设空间中去除一个函数,也可视为为假设空间中的其他函数设置更高的偏好。
例如,我们可以在函数损失计算时,加入权重衰减(weight decay)正则项。以线性回归函数为例,在损失函数中加入由 \lambda 控制的参数的L2范数正则项,得到新的损失计算函数
J(w) = MSE_{train} + \lambda w^{T}w
其中, \lambda 是预先选择的,控制偏好的参数。当\lambda为0时,没有引入任何偏好。当 \lambda 较大时,偏好参数L2范数较小的模型。算法在优化的过程中,就需要在拟合训练数据和选择尽可能小的参数之间权衡。



图3: 多项式回归在不同正则项权重下训练的结果。图片来自《深度学习》

在损失函数中添加称为正则项的惩罚因子,是一来控制算法的偏好的方式。正则化指的是所有减小算法泛化误差而不是训练误差的修改。但根据没有免费的午餐定理,也不存在在所有情况下都表现最佳的正则化方式,而需要根据具体任务的要求选择。
不过深度学习广泛适用的一个规则就是,许多任务都可以通过通用型的正则化方法高效解决。
5.3 超参数和验证集
超参数指的是机器学习算法中,用来控制学习算法行为的设定。超参数并不由学习算法学习得到(当然可以在学习算法外嵌套一个学习超参数的算法)。有些超参数指所以被设定为超参数而不通过学习获得,是因为它太难优化。更多时候是因为它不适合在训练集上学习得到,如所有和模型容量有关的参数。在训练集上学习此类参数会导致过拟合。
为了解决这一问题,我们需要在训练过程中算法不能看到的数据组成的验证集。同样,测试集中的数据不能参与到任何模型选择的过程,因为其中的数据也不能与验证集有所重叠。
一般我们从训练数据集中分离出一部分数据,作为验证集,用来在训练的过程中和训练之后计算泛化误差和选择合适的超参数。由于验证集被用来选择超参数,因此在其上计算的泛化误差会比实际泛化误差偏小。当所有的训练过程均结束后,再使用验证集计算泛化误差。
交叉验证
当可使用的数据很少时,将数据划分为训练集和测试集,会导致验证集太小,评估结果不置信。在这种情况下,交叉验证就是一种以增加计算量为代价,使用全部数据评估泛化误差的方法。交叉验证不断地随机将数据划分为训练集和测试集,进行训练和验证。最常用的交叉验证方法称为k-fold交叉验证,该方法将数据集划分为无交集的k个子集,每次训练取其中1个子集为测试集,其他k-1个子集为训练集,,计算k次实验中在测试集上的平均误差作为泛化误差。这里的问题是,不存在对该平均误差方差的无偏估计量,但在实际中可以使用近似值。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 10:43 , Processed in 0.087990 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表