5. 深度学习——正则化
机器学习面试题汇总与解析——正则化
本章讲解知识点
-
- 什么是正则化
-
- 为什么要使用正则化?
-
- 详细讲解正则化
- 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。
- 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。
- 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
- 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
- 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。
-
关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。
-
关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。
1. 什么是正则化
1.1 定义与作用
正则化是在训练机器学习模型时使用的一种技术,旨在减小模型的过拟合(overfitting)风险。过拟合是指模型在训练数据上表现很好,但在未见过的测试数据上表现较差的现象。
正则化通过在损失函数中引入惩罚项来限制模型的复杂度,以防止模型过度拟合训练数据。惩罚项会在优化过程中对模型的参数进行调整,以平衡模型的拟合能力和泛化能力。
正则化的作用包括:
-
防止过拟合:正则化技术通过限制模型的复杂度,减少模型对训练数据的过度拟合,提高模型在未见过的数据上的泛化能力。
-
特征选择:L1 正则化可以使得部分参数变为 0,从而实现特征选择,选择对目标变量有较大影响的特征,减少冗余特征的影响。
-
改善模型稳定性:正则化可以降低模型对数据中噪声的敏感性,提高模型的稳定性。
总之,正则化是一种重要的技术,可以提高机器学习模型的泛化能力,减少过拟合问题。选择适当的正则化方法和参数可以根据具体的问题和数据集进行调整。
1.2 常见的正则化方法
-
L1 正则化(L1 Regularization):在损失函数中加入模型参数的 L1 范数,即参数的绝对值之和。L1 正则化倾向于生成稀疏的参数,使得部分参数变为 0,从而达到特征选择的效果。
-
L2 正则化(L2 Regularization):在损失函数中加入模型参数的 L2 范数,即参数的平方和的开方。L2 正则化会使得模型的参数向较小的值靠近,避免参数过大,从而防止过拟合。
-
Dropout:Dropout 是一种特殊的正则化方法,它在模型的训练过程中随机地将一些神经元的输出设置为 0,从而强制模型去学习多个独立的子模型。这种随机的神经元失活可以减少神经网络的复杂性,提高模型的泛化能力。
2. 为什么要使用正则化?
2.1 过拟合与欠拟合
讲正则化前,需要先讲过拟合与欠拟合。神经网络在完成学习后,对应就是一个函数,网络学习的过程,就是这个函数拟合数据分布的过程:
如图中,绿色就是拟合刚好的函数。而左边的蓝色就是过拟合,拟合得太好了,针对以后的新数据可能泛化性能就差;而右边的蓝色就是欠拟合,没有很好的拟合现有的数据分布。
过拟合(Overfitting)和欠拟合(Underfitting)是机器学习中常见的两个问题,它们都与模型的泛化能力有关。
过拟合指的是模型在训练数据上表现得很好,但在未见过的测试数据上表现较差。过拟合的原因是模型过于复杂,过度拟合了训练数据中的噪声和细节,导致对新样本的预测能力下降。
欠拟合指的是模型无法在训练数据上达到很好的拟合效果,无法捕捉到数据中的关键模式和规律。欠拟合的原因通常是模型过于简单或者数据量不足。
2.2 过拟合与欠拟合的评判标准
过拟合:训练集效果很好,测试集效果较差
欠拟合:训练集效果差,测试集效果也差。
2.3 正则化的作用
正则化应用于过拟合的场景,正则化可以减轻过拟合现象,使得网络更好地拟合数据。正则化通过在损失函数中引入惩罚项来限制模型的复杂度,以防止模型过度拟合训练数据。惩罚项会在优化过程中对模型的参数进行调整,以平衡模型的拟合能力和泛化能力。
2.4 正则化的原理
我们从损失函数入手,前面的文章我们讲过均方误差损失函数,神经网络学习的过程就是最小化我们的损失函数,如下:
这个 可以是二次曲线、三次曲线,甚至 n 次曲线,但是不管它是几次曲线,从高等数学的泰勒展开原理我们可以得知, 可以表示为多项式的趋近: 。
好,那么直观来看, 都是特征,网络为什么出现过拟合?就是因为特征分得太细、太多。我们举个例子,我们可以根据“头发长短”、“繁殖器官”这两个特征基本就可以很好的区分“男”、“女”,泛化性能更好,虽然会将“女装大佬”分错,但是“女装大佬”毕竟是少数。而如果我们特征分得更细化,“胡子长短”、“喉结大小”、“指甲长短”,这样虽然可以区分出“女装大佬”,但是这就过拟合了,网络很可能会将“小喉结的男人”都区分成女人了,错误率就提高了,反而过拟合了。
所以一个网络过拟合,可能就是特征过多,**那我们减少特征不就可以减轻过拟合了吗?**即减少 的个数。问题就转化为求 0 范数(向量中非 0 元素的个数)了。减少 的个数就是最小化 。我们将这一项加入目标函数中,就是我们说的正则项了:
所以最终的目标就是既要损失函数最小,又要控制特征的数量,那么就是两者求和最小,要在这两者的约束下进行网络优化,这就是我们的最终目标了。
3. 详细讲解正则化
3.1 正则化
对于待正则的网络层参数 , 正则化为:
其中, 控制正则项大小,较大的 取值将较大程度约束模型复杂度;反之亦然。需注意, 不仅可以约束参数量,还可以使参数更稀疏。因为对目标函数经过优化后,一部分参数会变为 0(一部分特征被去除了,减轻模型过拟合),另一部分参数为非零实值。非零实值说明这部分参数是最重要的特征。这样一看, 还可以用来挑选特征。
L1 正则化的优点和应用包括:
-
特征选择:L1 正则化倾向于生成稀疏的参数,即将一部分参数变为 0,从而实现特征选择。这样可以降低特征的维度,减少冗余特征的影响,提高模型的泛化能力。
-
模型解释性:L1 正则化可以将一些特征的权重设置为 0,这样可以更容易解释模型的结果,确定对预测结果贡献较大的特征。
-
防止过拟合:L1 正则化可以限制模型的复杂度,防止模型过度拟合训练数据,提高模型在未见过的数据上的泛化能力。
-
稀疏性:L1 正则化可以产生稀疏的参数,使得模型的计算效率更高,减少存储空间。
3.2. 正则化
正则化我们理解后, 正则化也就很简单了,就是乘方加和,L2正则化是一种用于降低模型复杂度和防止过拟合的正则化技术。它通过在损失函数中引入模型参数的L2范数的平方作为惩罚项来实现:
正则化会使部分特征趋近于 0,也就达到正则化的目的了。
此外, 正则化和 正则化也可以联合使用,例如:
这种形式也被称为“Elastic 网络正则化”。
L2 正则化的优点和应用包括:
-
参数稳定性:L2 正则化可以使得模型的参数更加稳定,减少参数的摆动,使得模型对训练数据中的噪声和细节不敏感,提高模型的泛化能力。
-
防止过拟合:L2 正则化限制了模型参数的大小,使得模型更加平滑,减少模型对训练数据的过拟合现象。
-
权重衰减:L2 正则化可以促使模型参数向较小的值靠拢,从而实现权重衰减的效果,减少复杂模型对训练数据的过度拟合。
-
泛化能力:L2 正则化可以提高模型在未见过的数据上的泛化能力,使得模型更具有普适性和适应性。
正则化和 正则化总结:
正则化通过在损失函数中引入惩罚项来限制模型的复杂度,以防止模型过度拟合训练数据。惩罚项会在优化过程中对模型的参数进行调整,以平衡模型的拟合能力和泛化能力。
我们以一次和二次为例,正则项的图分别是一个矩形和圆形,如图:
那这有什么关系呢?我们把损失函数(包括正则项)整个画出来就知道了。
左边是二次正则项,右边是一次正则项
可以直观的理解为,我们最小化损失函数就是求蓝圈+红圈的和的最小值,而这个值通在很多情况下是两个曲面相交的地方。
可以看到二次正则项的优势,处处可导,方便计算。
3.3. 随机失活(dropout)
随机失活(Dropout)是一种常用的正则化技术,用于减少深度神经网络的过拟合。它通过在训练过程中随机将一部分神经元的输出设置为零,即失活,以及对前向传播和反向传播过程进行缩放,以达到正则化的效果。
随机失活(dropout)是神经网络中相当常用的网络正则化方法。原理就在于,即使一张图像缺少少量部分,但我们人眼依然能分辨出目标。那一张图像可以有不同的地方缺失,这样就如同样本变多了,我们知道训练样本越大,网络越不容易拟合。
对网络来说,每一层有很多个网络节点,那我们让一部分节点失活,在该 epoch 中不参与网络训练,这样就可以避免网络过拟合。
随机失活(dropout)在实际使用过程中,就有一个失活率 ,当然这个失活率不能太大。常用的 0.2-0.3
3.4. 验证集的使用
我们可以将数据集划分为训练集、验证集、测试集,在训练过程中使用训练集,在每一个 epoch 结束后使用验证集验证模型效果,画出训练曲线,这样就可以判断是否过拟合了。当发现网络有点过拟合了,当然就是“早停(Early Stopping)”了,可以直接停止训练了。
3.5. 数据增强(Data Augmentation)
数据增强是一种通过对训练数据进行变换或扩充来增加样本数量的正则化方法。例如,在图像分类任务中,可以对图像进行旋转、平移、缩放等变换,生成新的样本,增加训练数据的多样性,提高模型的泛化能力。
3.6. BN(Batch Normolization)
Batch Normalization(批归一化)是一种常用的正则化技术,用于加速神经网络的训练和减少模型的过拟合。它通过在网络的每个隐藏层中对每个批次的输入进行归一化,将输入的均值和方差调整到一个稳定的范围内。
BN(Batch Normolization)是 Google 提出的用于解决深度网络梯度消失和梯度爆炸的问题,可以起到一定的正则化作用。我们来说一下它的原理:
批规范化,即在模型每次随机梯度下降训练时,通过 mini-batch 来对每一层卷积的输出做规范化操作,使得结果(各个维度)的均值为 0,方差为 1。
BN 操作共分为四步。输入为 ,第一步计算均值:
第二步计算数据方差:
第三步进行规范化:
第四步尺度变换和偏移:
表示 mini-batch 中的数据个数,可以看出,BN 实际就是对网络的每一层都进行白化操作。白化操作是线性的,最后的“尺度变换和偏移”操作是为了让 BN 能够在线性和非线性之间做一个权衡,而这个偏移的参数 和 是神经网络在训练时学出来的(即当 和 时),从而保证整个网络的容量(capacity)。
经过 BN 操作,网络每一层的输出小值被“拉大”,大值被“缩小”,所以就有效避免了梯度消失和梯度爆炸。总而言之,BN 是一个可学习、有参数(γ、β)的网络层。
参数(γ、β)有什么作用
在 Batch Normalization(批归一化)中,γ(gamma)和β(beta)是可学习的参数,用于对归一化后的输入进行线性变换和缩放。
对网络某一层 A 的输出数据做归一化,然后送入网络下一层 B,这样是会影响到本层网络 A 所学习到的特征的。比如网络中间某一层学习到特征数据本身就分布在 S 型激活函数的两侧,如果强制把它给归一化处理、标准差也限制在了 1,把数据变换成分布于 S 函数的中间部分,这样就相当于这一层网络所学习到的特征分布被搞坏了。于是 BN 最后的“尺度变换和偏移”操作,引入了可学习参数 γ、β,这就是算法关键之处。引入了这个可学习重构参数 γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。
3.7. Bagging 和 Boosting(模型融合)
Bootstrap、Bagging 和 Boosting 是集成学习中常用的技术,用于提高机器学习模型的性能和泛化能力。它们都是通过组合多个基础模型来构建一个更强大的模型。
-
Bootstrap(自助法): Bootstrap 是一种用于数据采样的技术,用于生成多个训练集。它基于有放回地从原始训练数据集中抽取样本,构成一个新的训练集。通过对原始数据集的多次重采样,可以生成多个不同的训练集,每个训练集都是原始数据集的一部分。具体地:Bootstrap 是一种抽样方法,即随机抽取数据并将其放回。如一次抽取一个样本,然后放回样本集中,下次可能再抽取这个样本。接着将每轮未抽取的数据合并形成袋外数据集(Out of Bag, OOB),用于模型中的测试集。
-
Bagging(袋装法): Bagging 是一种集成学习方法,通过在 Bootstrap 生成的多个训练集上训练多个独立的基础模型,并将它们的预测结果进行平均或投票来进行最终预测。每个基础模型都是独立训练的,它们之间没有依赖关系。Bagging 可以减少模型的方差,提高模型的稳定性和泛化能力。
-
Boosting(提升法): Boosting 也是一种集成学习方法,与 Bagging 不同的是,Boosting 是通过逐步构建一个强大的模型。Boosting 从一个小的训练集开始,训练一个基础模型,并根据其表现调整样本的权重,使得被错误分类的样本在后续训练中得到更多的关注。通过迭代地训练多个基础模型,并根据其表现进行加权组合,Boosting 可以构建一个更准确的模型。
在 Bagging 中,多个基础模型是独立训练的,它们可以并行运行,每个模型之间没有关联。而在 Boosting 中,多个基础模型是依次训练的,每个模型的训练都会受到前面模型的影响。Boosting 通过逐步纠正错误来改进模型的性能。
总体而言,Bootstrap 提供了样本采样的方法,Bagging 通过平均或投票的方式组合多个独立模型的预测结果,Boosting 通过迭代地训练和加权组合多个基础模型来提升模型的性能。
采用模型融合的方式也可以避免过拟合。
3.8 参数共享(Parameter Sharing)
参数共享是一种在神经网络中常用的正则化方法,特别适用于卷积神经网络(CNN)。通过在神经网络的不同层之间共享参数,可以减少模型的参数数量,提高模型的效率和泛化能力。
3.9 数据标准化(Data Standardization)
数据标准化是对数据进行预处理的一种方式,将数据按特征进行缩放,使得每个特征的均值为 0,标准差为 1。这有助于使不同特征之间的尺度一致,提高模型的收敛速度和性能。
常见的数据标准化方法包括以下几种:
-
Z-Score 标准化: Z-Score 标准化是将数据转化为以均值为 0,标准差为 1 的标准正态分布。对于给定的特征,可以使用以下公式进行 Z-Score 标准化: 其中, 是原始数据, 是均值, 是标准差。通过减去均值并除以标准差,将数据映射到以均值为 0,标准差为 1 的分布上。
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
- 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 - 本专栏适合于算法、机器学习求职的学生或人士。 - 本专栏特点: - 本专栏囊括了深度学习、机器学习、NLP、特征工程等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共301道,知识点讲解全面,事半功倍,为大家春秋招助力。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。