分享

机器学习面经-过拟合欠拟合、梯度消失爆炸、正则化

本帖最后由 nettman 于 2023-8-22 15:23 编辑


一、简介
在机器学习中,有几个重要的现象和技术对于模型的训练和泛化能力起着至关重要的作用。

过拟合(Overfitting)是指在训练数据上表现良好,但在未见过的测试数据上表现较差的现象。过拟合发生时,模型在训练集上学习到了数据的噪声和细节,而未能捕获数据的通用规律。过拟合通常发生在模型复杂度过高、训练数据过少或者特征过于丰富的情况下。解决过拟合的常用方法是增加训练数据、减少模型复杂度,或者使用正则化技术。

欠拟合(Underfitting)是指模型在训练数据上无法很好地拟合,导致训练和测试误差都较大的现象。欠拟合通常发生在模型复杂度不足或者训练数据质量较差的情况下。解决欠拟合的常用方法包括增加模型复杂度、优化特征选择、增加特征数量等。

梯度消失和梯度爆炸是指在深度神经网络中,通过反向传播算法计算梯度用于更新参数。梯度消失是指在深层网络中,由于链式法则的连乘,导致梯度逐渐变小,从而导致较早层的参数更新非常缓慢,导致这些层的权重几乎没有更新。梯度爆炸是指梯度变得非常大,导致参数更新过程不稳定。这两个问题会影响深层神经网络的训练效果。解决这些问题的方法包括使用梯度剪裁(Gradient Clipping)等技术。

正则化(Regularization)是一种常用的降低过拟合的技术。它通过在损失函数中加入惩罚项,限制模型的参数大小,从而防止模型过度拟合训练数据。常见的正则化方法有L1正则化和L2正则化。L1正则化通过增加参数的绝对值作为惩罚,倾向于使参数变得稀疏;L2正则化通过增加参数的平方作为惩罚,倾向于使参数较小。正则化技术可以帮助模型更好地泛化到未见过的数据,提高模型的泛化性能。

二、面经
1、在项目实践中是否遇到过过拟合或者欠拟合的现象,是怎么解决的?

2、droupout是什么,介绍一下?

3、dropout它在这个预测和训练的时候有什么区别呢?

4、介绍一下BN的原理,推导一下BN?

5、BN和LN的区别是什么?

6、所有的模型都可以加BN层吗?

7、BN一般放在什么位置?

8、Pytorch中bn层在训练和测试中有什么不同,怎么实现的?

9、bn和dropout同时使用产生的问题?

10、梯度消失和梯度爆炸产生的原因?

11、如何确定是否出现梯度爆炸?

12、如何缓解梯度消失,梯度爆炸?

13、梯度下降陷入局部最优有什么解决办法

14、推导一下反向传播算法(BP)?

15、什么是L1 L2正则,介绍一下?

16、为什么l1能产生稀疏解?

17、L1 L2正则项适用场景,特征稀疏的时候用哪个比较好?

三、面经参考回答
1、在项目实践中是否遇到过过拟合或者欠拟合的现象,是怎么解决的?

参考回答:

过拟合:

从数据入手,获得更多的训练数据。因为更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。当然,直接增加实验数据一般是很困难的,但是可以通过一定的规则来扩充训练数据。比如,在图像分类的问题上,可以通过图像的平移、旋转、缩放等方式扩充数据。
降低模型复杂度。适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等。
添加L1,L2正则化。
添加Dropout。
添加BN层。
采用集成学习相关方法。
我们可以将数据集划分为训练集、验证集、测试集,在训练过程中使用训练集,在每一个epoch结束后使用验证集验证模型效果,画出训练曲线,这样就可以判断是否过拟合了。当发现网络有点过拟合了,可以直接停止训练了。
欠拟合:

添加新的特征,当特征不足或者特征与样本标签之间的相关性不足时,往往会发生欠拟合的一些现象,通过挖掘“上下文特征”“ID类特征”“组合特征”等新的特征,往往能够取得更好的效果。在深度学习中,有很多模型可以帮助完成特征工程,如因子分解机、梯度提升决策树、等都可以成为丰富特征的方法。
增加模型复杂度。简单模型的学习能力较差,通过增加模型的复杂度可 以使模型拥有更强的拟合能力。例如,在线性模型中添加高次项,在神经网络模型中增加网络层数或神经元个数等。
减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现 象时,则需要有针对性地减小正则化系数。
2、droupout是什么,介绍一下?

参考回答:dropout是一种我们在进行神经网络训练的时候,一种正则化的方法,在正常没有dropout的情况下,所有神经元都有正常的进行参数的更新,那么dropout它其实会指定一个概率,在训练过程中,每一次batch都会以这个概率让部分的神经元失活,这样每次只有部分的神经元可以更新权重。

3、dropout它在这个预测和训练的时候有什么区别呢?

参考回答:dropout其实我们在训练模型的时候会用,在预测的时候其实是没有dropout的,就是所有神经元都会参与。然后因为我们在训练的时候会让部分的神经元失活,那么没有失活的部分就会训练的很强,这次batch让这部分训练的很强,下一次让另外一部分训练的很强,所以总体的w权重参数就会增大,后面计算结果的时候会乘以一个概率,也叫做平滑系数,相当于对整体做一个缩放。一般来说,在调用模块中,这一步其实都是封装好的,不需要我们自己去做。

----------------------
下面回帖继续


-----------我的底线--------------
中文版ChatGPT
https://xing.aboutyun.com/

加微信领取Chat GPT教程:
1.一份超值的教程,让你成为职场“大佬”,轻松掌握ChatGPT技能
ChatGPT教程1:如何用ChatGPT自动化操作Excel,十倍提升你的工作效率
ChatGPT教程2:如何让ChatGPT帮你做专业又美观的PPT,人工智能神器ChatGPT高效办公系列2023最新教学
ChatGPT教程3:如何利用ChatGPT免费高效自学编程,再也不用担心学不会编程了!
ChatGPT教程4:2023普通人ChatGPT副业赚钱项目
ChatGPT教程5:ChatGPT全方位必修课 报告 论文
绘图教程6:AI绘图最新Midjourney v5.1 + Raw Mode
绘图教程7:深入实作教学 Midjourney niji journey ChatGPT v5
绘图教程8:最新Midjourney v5 + ChatGPT 咒语生成Prompt Generator

2.领取最新面试教程
1.具备哪些特征,你几乎拿不到任何offer
2.如何避免简历被一眼淘汰:十大致命特征揭秘




获取更多资源:
领取100本书+1T资源
http://www.aboutyun.com/forum.php?mod=viewthread&tid=26480

大数据5个项目视频
http://www.aboutyun.com/forum.php?mod=viewthread&tid=25235

名企资源、名企面试题、最新BAT面试题、专题面试题等资源汇总
https://www.aboutyun.com/forum.php?mod=viewthread&tid=27732




加微信w3aboutyun,可拉入技术爱好者群

已有(1)人评论

跳转到指定楼层
nettman 发表于 2023-8-22 15:22:48
4、介绍一下BN的原理,推导一下BN?
答案:Batch Normalization(BN)的原理是通过对每个小批次的数据进行归一化,来加速深度神经网络的训练并减少梯度消失问题。BN的推导过程相对复杂,涉及对输入数据的平均值和方差进行归一化,然后通过可学习的参数进行缩放和偏移,以恢复数据的表示能力。这里我给出一个简要的步骤:

假设我们有一个批次的输入数据X,维度为 (m, n),其中 m 是批次大小,n 是特征数量。
计算该批次数据的均值 μ 和方差 σ^2:μ = (1/m) * Σ(X),σ^2 = (1/m) * Σ((X - μ)^2)。
对输入数据进行归一化:X_hat = (X - μ) / √(σ^2 + ε),ε 是一个小的常数,用于防止除以零。
将归一化后的数据进行缩放和偏移:Y = γ * X_hat + β,其中 γ 和 β 是可学习的参数。
最终的输出 Y 就是经过归一化、缩放和偏移的数据,可以作为网络的输入。
请注意,上述只是一个简化的推导步骤,实际推导过程涉及更多数学细节。

5、BN和LN的区别是什么?
答案:BN(批归一化)和LN(层归一化)都是用于减少深度神经网络中的内部协变量偏移问题的方法,但它们在应用时有一些区别。主要区别包括:

BN在每个小批次上计算均值和方差,因此受批次大小影响,有一定的噪声稳定性;而LN在每层上计算均值和方差,不受批次大小影响,更适用于递归网络等。
BN对于卷积层和全连接层都适用,而LN主要用于循环神经网络(RNN)等递归结构。
总体来说,BN在深度神经网络中广泛使用,而LN主要用于一些特殊情况下,具体选择取决于应用场景和网络结构。

6、所有的模型都可以加BN层吗?
答案:大多数模型都可以加入BN层,但对于一些架构,如递归网络(RNN)和生成对抗网络(GAN),可能需要进行适当的调整,或者使用其他正则化方法。

7、BN一般放在什么位置?
答案:BN一般放在激活函数之前,即全连接层或卷积层的输出后,激活函数之前。这有助于确保在进行激活函数之前对数据进行归一化和调整。

8、PyTorch中bn层在训练和测试中有什么不同,怎么实现的?
答案:在PyTorch中,BN层在训练和测试阶段有不同的行为。在训练阶段,BN层会计算每个小批次的均值和方差,并使用这些统计信息来归一化数据。在测试阶段,为了保持一致性,使用移动平均的均值和方差来代替训练阶段的统计信息,以便对新数据进行归一化。

在实现上,PyTorch通过设置model.train()和model.eval()来切换模型的训练和测试模式。在训练模式下,BN层会根据批次数据的均值和方差进行归一化。而在测试模式下,BN层会使用在训练期间计算的移动平均均值和方差,以确保与训练时的分布一致。

9、bn和dropout同时使用产生的问题?
答案:同时使用BN和Dropout可能会导致训练不稳定。这是因为BN在训练过程中对数据进行了归一化,而Dropout在随机地失活神经元。当两者同时使用时,失活的神经元不会得到与其他神经元相同的归一化处理,可能导致不稳定的训练情况。解决方法包括减少Dropout的强度或者只在其中一个阶段使用正则化技术。

10、梯度消失和梯度爆炸产生的原因?
答案:梯度消失的原因是在深层网络中,梯度在反向传播过程中逐层相乘,可能会变得非常小,导致权重更新几乎不发生。梯度爆炸的原因是梯度在反向传播过程中逐层相乘,可能会变得非常大,导致权重更新过大。这可能是因为网络层数太多,权重初始化不当,或者激活函数导致的。

11、如何确定是否出现梯度爆炸?
答案:可以通过观察梯度值是否变得异常地大来判断是否出现梯度爆炸。如果在训练过程中,梯度值呈指数增长,导致权重更新变得非常大,那么可能出现了梯度爆炸问题。

12、如何缓解梯度消失,梯度爆炸?
答案:为了缓解梯度消失,可以使用合适的激活函数,如ReLU,避免使用过多的网络层,以及进行适当的权重初始化,如He初始化。为了缓解梯度爆炸,可以使用权重剪裁、梯度截断等技术,以及使用合适的优化器,如梯度裁剪的梯度下降法。

13、梯度下降陷入局部最优有什么解决办法?
答案:梯度下降陷入局部最优是一个常见的问题。解决方法包括使用随机初始化,多次尝试不同的初始点,使用动量优化器(如Adam),或者使用更复杂的优化算法(如遗传算法)。

14、推导一下反向传播算法(BP)?
答案:反向传播算法是用于训练神经网络的核心算法,通过计算损失函数关于权重的梯度来更新网络的权重。下面是BP算法的简要推导:

假设有一个前馈神经网络,每一层的输出为 a,权重为 W,偏置为 b,激活函数为 f,损失函数为 L。
前向传播:计算每层的输出 a = f(W * a_prev + b),其中 a_prev 为前一层的输出。
计算损失:计算损失函数 L(a, y),其中 y 是期望的输出。
反向传播:计算损失函数关于权重的梯度 ∂L/∂W 和 ∂L/∂b,使用链式法则逐层向后传播。
权重更新:根据梯度和学习率等参数,更新权重 W = W - α * ∂L/∂W 和 b = b - α * ∂L/∂b。
重复上述步骤,直到达到一定的训练迭代次数或收敛条件。
这只是一个简要的BP算法推导,实际推导还需要考虑各种激活函数、损失函数以及优化器的影响。

15、什么是L1 L2正则,介绍一下?
答案:L1正则化和L2正则化是用于控制模型复杂度的方法,通过在损失函数中添加正则项来实现。L1正则化将权重的绝对值作为正则项添加到损失函数中,L2正则化将权重的平方作为正则项添加到损失函数中。

16、为什么L1能产生稀疏解?
答案:L1正则化在优化过程中会使得一部分权重的绝对值变为零,从而产生稀疏解。这是因为L1正则化在最小化损失函数的过程中,会让不重要的权重趋向于变为零,从而有效地选择特征并剔除不相关的特征,从而实现稀疏性。

17、L1和L2正则项适用场景,特征稀疏的时候用哪个比较好?
答案:L1正则项适用于特征稀疏的情况。当数据中有很多不相关或冗余的特征时,L1正则化能够倾向于将权重置为零,从而选择重要的特征,实现稀疏性。相比之下,L2正则化更倾向于将权重平均分配给各个特征,而不太能够实现稀疏性。因此,在特征稀疏的情况下,L1正则化通常更适合用于特征选择和模型简化。









回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条