一、简介在机器学习中,有几个重要的现象和技术对于模型的训练和泛化能力起着至关重要的作用。过拟合(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权重参数就会增大,后面计算结果的时候会乘以一个概率,也叫做平滑系数,相当于对整体做一个缩放。一般来说,在调用模块中,这一步其实都是封装好的,不需要我们自己去做。4、介绍一下BN的原理,推导一下BN?参考回答:Batch Normalization,简称BN,是一种用于深度神经网络中提高训练速度和稳定性的技术。它在网络的每一层对输入进行标准化,以减少梯度消失和爆炸问题,从而加速收敛过程并提高模型的泛化能力。BN的原理:在深度神经网络的训练过程中,每层的输入分布可能会随着训练过程而变化,这导致了梯度消失和爆炸问题,从而使得训练变得困难。BN通过标准化每一层的输入,使其均值为0,方差为1,从而降低了输入分布的变化。此外,BN还引入了可学习的参数,用于对标准化后的数据进行线性变换和平移,以恢复网络的表达能力。这使得网络更容易训练,收敛更快,同时还有一定的正则化作用,有助于防止过拟合。BN的推导过程:通过对每一层的输入都进行批标准化,网络在训练过程中可以更稳定地更新参数,从而加速收敛并提高模型的泛化能力。需要注意的是,在推理(测试)阶段,需要使用训练阶段学到的均值和方差进行标准化,而不是使用当前批次的统计量。如果用一个坐标来表示的话,就是它能够将数据全部拉到以原点为中心附近,将数据中心化,假设我们的激活函数用tanh,我们将数据拉到了0点附近,就能缓解梯度消失,而且梯度也更大,训练速度也更快。另外,加了BN层,也可以将学习率调大一点,这也可以加快训练速度。5、BN和LN的区别是什么?参考回答:Layer Normalization,LN是“横”着来的,对一个样本,经过同一层的所有神经元做归一化。BN:Batch Normalization,BN是“竖”着来的,经过一个神经元的所有样本做归一化,所以与batch size有关系。二者提出的目的都是为了加快模型收敛,减少训练时间。6、所有的模型都可以加BN层吗?参考回答:并不是的,在推荐系统中,用的比较多的是全链接的网络,这种一般可以加BN,但是比如说RNN,LSTM这种,就不适合加BN,一般是加LN,因为它们是基于sequence的建模方式,它的数据的输入是长短不一的,所以加BN的话,它的均值和方差不稳定,不会起到很好的效果,LN的做法是给每一层做一个均值和方差,所以不涉及数据长短不一的问题。7、BN一般放在什么位置?参考回答:一般回加在这一层神经元输入之后,下一层神经元输入之前,一般也就是激活函数层之前。8、Pytorch中bn层在训练和测试中有什么不同,怎么实现的?参考回答:对于BN,在训练时,是对每一批的训练数据进行归一化,即用每一批数据的均值和方差,而在测试阶段,如进行一个样本的观测,并没有batch的概念,因此这个时候用的均值和方差是全部训练数据的均值和方差,可以通过移动平均法求得。对于BN,当一个模型训练完成后,它所有的参数都确定了。9、bn和dropout同时使用产生的问题?参考回答:BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相反可能会得到比单独使用更差的效果。这个我自己在实验中测试过,就是如果两者同时使用的话,训练的得到的效果更差。我看过一些论文说是具体的原因就是因为训练和测试的时候出现的方差偏移导致的,随着网络的加深,这个偏差会越来越大。10、梯度消失和梯度爆炸产生的原因?参考回答:目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。在神经网络中,根据链式法则,它的公式是每一层神经元对上一层的输出的一个loss损失求偏导,然后是一个连乘的形式,公式展开中有一项是激活函数的导数,如果我们这个激活函数使用的是sigmoid或者是tanh,我们知道sigmoid的导数形式是f(x)(1-f(x)),那么这个结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0。同理,如果这个结果大于1的话,误差对输入层的偏导会趋于无穷大。11、如何确定是否出现梯度爆炸?参考回答:训练过程中出现梯度爆炸会伴随一些细微的信号,如:模型无法从训练数据中获得更新(如低损失)。模型不稳定,导致更新过程中的损失出现显著变化。训练过程中,每个节点和层的误差梯度值持续超过 1.0。训练过程中,模型损失变成NaN。12、如何缓解梯度消失,梯度爆炸?参考回答:梯度消失:可以采用ReLU激活函数有效的解决梯度消失的情况,也可以用Batch Normalization解决这个问题。梯度爆炸:1.重新设计网络模型。在深度神经网络中,梯度爆炸可以通过重新设计层数更少的网络来解决。2.梯度剪切,设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。3.使用不同的激活函数。如用ReLU,LeakReLU。4.使用BN,BN可以将每次batch的数据分布拉到一个0点附近,BN将输出从饱和区拉倒了非饱和区。如果我们看TanH的结构,我们就知道,在0点附近梯度更大。可以缓解梯度消失或者爆炸的问题。5.使用残差结构,相比较于以前网络的直来直去结构,残差中有很多这样的跨层连接结构,这样的结构在反向传播中具有很大的好处,6.使用LSTM等门控网络。13、梯度下降陷入局部最优有什么解决办法参考回答:使用模拟退化技术,模拟退火在每一步都以一定的概率接受比当前解更差的结果,从而有助于“跳出”局部极小。在每步迭代过程中,接受“次优解”的概率随着时间的推移而逐渐降低,从而保证算法的稳定。使用随机梯度下降,与标准的梯度下降法精确计算梯度不同,随机梯度下降法在计算梯度时加入了随机的因素。于是,即便陷入局部极小点,它计算出的梯度时加入了随机因素,于是,即便陷入局部极小点,它计算出的梯度可能不为0,这样就有机会跳出局部极小继续搜索。14、推导一下反向传播算法(BP)?参考回答:反向传播(Backpropagation,简称BP)是一种用于训练人工神经网络的算法,通过计算损失函数对网络中每个参数的梯度,并使用梯度下降法来更新参数,以最小化损失函数。下面是反向传播算法的推导过程,涉及了链式法则的应用。假设我们有一个神经网络,其中包含多个层(输入层、隐藏层和输出层),每一层包含多个神经元。我们以均方误差(MSE)作为损失函数,网络的目标是最小化这个损失。各个步骤具体的公式如下:15、什么是L1 L2正则,介绍一下?参考回答:l1和l2正则化方法都可以对模型中参数做一个惩罚,在一定程度上起到防止过拟合的效果。l1正则化是参数的绝对值之和,l2正则化是参数的平方和。16、为什么l1能产生稀疏解?参考回答:从梯度角度讲,L1下各个参数的梯度为1或者-1,所以在参数更新的时候,每次会减去一个数(学习率),所以在一定迭代次数后,参数会变成0;而L2参数每次更新为(1-α)w,所以它相当于是做了平滑,最终使得每个参数比较小。从几何角度讲,以二维坐标为例子,L1的解空间在坐标轴是一个正方形,跟正则项的等高线相交于的概率更大,导致最优参数为0。而L2的解空间是一个圆形,跟正则项相交的概率更小。从贝叶斯的角度来讲,l1服从拉普拉斯分布,它的图像就是在0处有一个高高的凸起,所以从概率上讲,那么最终落在0上的概率很大。l2服从的是高斯分布,那么落在0周围的概率很大,因为高斯分布就是容易落在均值附近。17、L1 L2正则项适用场景,特征稀疏的时候用哪个比较好?参考回答:由于L1、L2的特点,因此它们也有各自不同的适用场景。L1:使模型中尽可能多的参数值为0,因此适用于:模型剪枝,模型压缩,特征选择。是一种从改变模型结构的角度(减少模型参数的数量)解决过拟合的方式。L2:使模型中的所有参数值尽可能小,使得模型尽量不依赖于某几个特殊的特征,而是使每个特征都得到尽量均衡的权重,因此适用于解决普通的过拟合问题,即从参数分布(让分布尽可能的均匀)的角度解决过拟合的问题,这也是常用的解决过拟合的方式。四、小结过拟合和欠拟合都是模型泛化能力的问题,需要在模型复杂度和数据规模之间进行平衡。梯度消失和梯度爆炸会影响神经网络的训练稳定性,需要注意权重初始化和激活函数的选择。正则化是防止过拟合的有力工具,可通过引入惩罚项来控制模型的复杂度。
点赞 9
评论 6
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务