上周由于略微感冒,稍微延迟了一下更新的节奏。在上一篇中,主要读到了基于梯度下降的方法来对神经网络进行训练的基础思想。 这次的课件是随后一篇,话题是关于神经网络训练的一些实践性的补充内容。
本文还是以翻译PPT页内容为主,打星号的部分则是我的补充说明。
1 通用近似定理——Universal approximation theorem
(红字)1989年——首个神经网络通用近似的论文被提出了。
通用近似原理指出,无论我们尝试进行何种函数的机器学习,我们都能确保有一个足够大的MLP(多层感知机)能表达出这一函数。
*简单来说这一理论确认了神经网络在任意复杂函数拟合领域的通用可行性。这里我补充一段知乎AI的详解:
通用逼近定理是指神经网络理论中的一个基本定理,它表明给定足够的网络复杂性,特别是隐藏层的神经元数量,前馈神经网络能够以任意精度逼近任何连续函数。这意味着,只要有足够的神经元,一个单隐藏层的前馈神经网络可以近似任何连续函数,无论该函数多么复杂。这一定理是多层感知机(MLP)的数学基础,证明了神经网络作为一种函数逼近器的潜力。它强调了神经网络通过增加隐藏层神经元的数量来提高逼近能力的能力。
尽管通用逼近定理提供了理论上的保证,实际应用中仍需考虑网络的训练、激活函数的选择以及过拟合等问题。此外,该定理不涉及函数的外推能力,即超出训练数据范围的预测能力,也不保证网络能够泛化到未见过的数据。
(红字)1996年——人们你提出了“没有免费午餐”(NFL)定理。
没有免费午餐定理——没有一种通用的机器学习算法是在任意情况下都好于其它算法的。
*这个理解起来就不复杂了,即机器学习需要具体问题具体分析。
由于理论上神经网络能表达任意函数,我们该如何使模型的学习能较好地处理(基于)现实世界的问题所生成的数据呢?
2 选择模型容量:避免过拟合和欠拟合——Selecting model capacity: avoid overfitting and underfitting
绘制直线(线性方程)
绘制抛物线(二次方程)
绘制任意曲线
(从图中3个方案)该选择哪种模型用于区分X和O的方案?
图(c)——过拟合:过于复杂,无法概括成测试集合。
(过拟合)是神经网络面临的核心挑战,因为它有着过多的参数。
为检测出过拟合,需要通过分析模型的误差(损失)——通过在训练数据和测试数据上进行测试的方式:
随着训练步骤增加,训练数据的误差会如何表现?——误差收敛。
随着训练步骤增加,测试数据的误差会如何表现?——误差收敛之后又放大。
为何训练误差收敛,而测试误差放大?——训练数据中的建模噪声(例如:过拟合),其降低训练误差是——以损失了对未观测过的测试数据的概括能力为代价的。
更早停止(训练),或添加训练数据。这个系列后续会介绍更多的相关技术。
*课件中第一句overfitting应该是写错了。
为检测欠拟合,需要通过分析模型的误差(损失)——通过在训练数据上进行测试的方式(和测试数据可作为备选):
增加表达的复杂度,例如增加神经网络的层或者单元数量。
目标:训练一个合适的模型,它有着既不太小又不太大的容量,能在预测之前没有“见过”的测试数据时有足够好的概括能力。
3 选择模型超参数——Selecting model hyperparameters
核心挑战:如何选择模型以避免重复观察测试数据(会导致过拟合)?
*围绕这一思路,后面的方法主要就是试图在一轮训练中避免多次执行训练数据。
*如图,浅绿色是训练数据,这里被划分为5份;依次选择其中一个fold作为该轮的“测试数据”,用于测试超参数情况,剩下4份用于该轮模型训练。
*fold直译是“折叠”,这里可以理解成“划分好的一份”。中文互联网对这一方法的通常翻译是“K折交叉验证”。
*如图,当划分成3份时,每次使用2份作为训练数据、1份作为测试数据,然后执行3次。
模型性能:在所有折叠的“测试”数据上都有较好的表现。
*因为每一个fold都作为训练数据执行了2次,剩余1次作为了测试数据。
创建多少个子集是合适的?(*图中是5个,后面还略去了10个的情况)
(蓝字)通常来说,选择在全部fold数据集上整体结果最好的超参数。
*由于课件内容讲得比较笼统,这里补充一段中文互联网的说明:
...K的标准值为10,一般默认都是这个值,但是也要看数据集大小情况。对于非常大的数据集,可以使用K的值为5 ,因为这样可以在获得模型平均性能的准确估计的同时降低在不同折上多次拟合和评估模型的计算成本;如果数据相对较小,可以适当增加K的值,但是如果k的值越大,会导致交叉验证算法产生的模型性能估计具有更高的方差;对于非常小的数据集,使用一次叉验证( LOOCV )技术)。
对于统计性不强的数据(或小的数据集),则使用一次性训练、验证集划分。
*这一方法还是一种交叉验证思路。分层的意思是说:在每一折中都保持着原始数据中各个类别的比例关系,比如说:原始数据有3类,比例为1:2:1,采用3折分层交叉验证,那么划分的3折中,每一折中的数据类别保持着1:2:1的比例,这样的验证结果更加可信。
4 学习效率:优化方法——Learning efficiently: optimization methods
由于有着巨量的参数,算法(模型)训练可能会耗费从小时到月的大量时间。
*关于梯度下降相关,可以去看上一篇。网络上也有很多视频动画的方式讲解梯度下降的内容。
*图表中的名称是各种不同的梯度下降算法。这里不一一展开了。
Vanilla方法:随着梯度的影响越来越小,步长也逐渐减少。
Momentum优化——类比:沿着山体向下滚球,它会累计动量。
加速收敛:在梯度方向一致的区域,动量项会累积,使得更新步长增大,从而加速收敛。
减少震荡:在梯度方向变化的区域,动量项会平滑更新方向,减少震荡。
逃离局部最优:动量项的累积效应可以帮助算法跳出局部最优解。
*这里用类比动量的方式引入了mu项和v项——前者类比成摩擦力,后者类比成速度积累。
步长衰减:执行若干个Epoch(*完整遍历数据集的过程)后,减少学习速率。
在(比较好的)训练过程中损失函数会发生什么?——它会收敛。
总的来说,这一篇主要聊了两个模型训练中的实践话题——如何选择超参数、如何更快进行梯度下降过程。
对于超参数选择来说,从目前的内容来看它还不可避免一些人为预设的部分。人们在模型训练的过程中能做的是,使用例如“交叉验证法”之类的方法,来从中挑选相对最优的超参数组合。
而对于梯度下降而言,除了确定合适的学习速率和迭代步长外,人们也发明了各种方式来加速这一过程——例如之前提到的Momentum(动量)方法。
下一篇估计会在下周更新,届时就会读到卷积神经网络了。
评论区
共 条评论热门最新