最近会更新一个深度学习面试中常见问题,及相应的答案,希望对找工作的朋友有所帮助,总结不易,欢迎持续关注。公众号:羽峰码字,欢迎来撩。
目录
1.如何处理样本不均衡问题
2.数据增强方法
3.过拟合的解决办法
4. 正则化
5. 激活函数
6.梯度爆炸,梯度消失,梯度弥散是什么,为什么会出现这种情况以及处理办法
a. 样本的过采样和欠采样
欠采样 :随机删除观测数量足够多的类,使得两个类别间的相对比例是显著的。虽然这种方法使用起来非常简单,但很有可能被我们删除了的数据包含着预测类的重要信息。
过采样 :对于不平衡的类别,我们使用拷贝现有样本的方法随机增加观测数量。理想情况下这种方法给了我们足够的样本数,但过采样可能导致过拟合训练数据。
过采样和欠采样结合
合成采样( SMOTE ):
1. 基于距离度量的方式计算两个或者多个稀有样本之间的相似性
2. 选择其中一个样本作为基础样本
3. 再在邻居样本中随机选取一定数量的样本对那个基础样本的一个属性进行噪声,每次处理一个属性。通过这样的方式产生新数据。
b. 使用多分类器进行分类
方法一中介绍的过采样,欠采样,都存在相应的问题。
过采样:可能会存在过拟合问题。(可以使用SMOTE算法,增加随机的噪声的方式来改善这个问题)
欠采样:可能会存在信息减少的问题。因为只是利用了一部分数据,所以模型只是学习到了一部分模型。
有以下两种方法可以解决欠采样所带来的问题。
方法一:模型融合 (bagging的思想 )
思路:从丰富类样本中随机的选取(有放回的选取)和稀有类等量样本的数据。和稀有类样本组合成新的训练集。这样我们就产生了多个训练集,并且是互相独立的,然后训练得到多个分类器。
若是分类问题,就把多个分类器投票的结果(少数服从多数)作为分类结果。
若是回归问题,就将均值作为最后结果。
方法二:增量模型 (boosting的思想)
思路:使用全部的样本作为训练集,得到分类器L1
从L1正确分类的样本中和错误分类的样本中各抽取50%的数据,即循环的一边采样一个。此时训练样本是平衡的。训练得到的分类器作为L2.
从L1和L2分类结果中,选取结果不一致的样本作为训练集得到分类器L3.
最后投票L1,L2,L3结果得到最后的分类结果。
c. 将二分类问题转成其他问题
可以将不平衡的二分类问题转换成异常点检测,或者一分类问题(可使用one-class svm建模)
d.改变正负样本在模型中的权重
使用代价函数学习得到每个类的权值,大类的权值小,小类的权值大。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。
不平衡类别会造成问题有两个主要原因:
1.对于不平衡类别,我们不能得到实时的最优结果,因为模型/算法从来没有充分地考察隐含类。
2.它对验证和测试样本的获取造成了一个问题,因为在一些类观测极少的情况下,很难在类中有代表性。
不平衡问题的评价指标
准确度这个评价指标在类别不均衡的分类任务中并不能work。几个比传统的准确度更有效的评价指标:
混淆矩阵(Confusion Matrix):使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP与TN。
精确度(Precision)
召回率(Recall)
F1得分(F1 Score):精确度与找召回率的加权平均。
特别是:
Kappa (Cohen kappa)
ROC曲线(ROC Curves):见Assessing and Comparing Classifier Performance with ROC Curves
此问题引用于:https://www.cnblogs.com/lyr2015/p/8711120.html
几何变换:翻转,旋转,裁剪,变形,缩放
颜色变换:噪声、模糊、颜色变换、擦除、填充
其他:SMOTE,SamplePairing,mixup,mixup,上下采样,增加不同惩罚
什么是过拟合
过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含抽样误差,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。
产生过拟合根本原因:
观察值与真实值存在偏差, 训练数据不足,数据太少,导致无法描述问题的真实分布, 数据有噪声, 训练模型过度,导致模型非常复杂
什么是欠拟合:训练的模型在训练集上面的表现很差,在验证集上面的表现也很差
原因:训练的模型太简单,最通用的特征模型都没有学习到
解决办法:
1、正则化
2、剪枝处理
3、提前终止迭代(Early stopping)
4、权值共享
5、增加噪声
6、Batch Normalization
7、Bagging和Boosting
8、Dropout
正则化的原理:在损失函数上加上某些规则(限制),缩小解空间,从而减少求出过拟合解的可能性。
机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作 l1-norm 和l2-norm,中文称作 L1正则化 和 L2正则化,或者 L1范数 和 L2范数。
1. L0、L1、L2正则化
L0 范数:向量中非0元素的个数。
L1 范数 (Lasso Regularization):向量中各个元素绝对值的和。
L2 范数(Ridge Regression):向量中各元素平方和再求平方根。
2. L1、L2正则化区别,为什么稀疏的解好?
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。
实现参数的稀疏有什么好处吗?
一个好处是可以简化模型,避免过拟合。另一个好处是参数变少可以使整个模型获得更好的可解释性。
3.L1正则化和L2正则化的作用
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。
L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
4.正则化有哪几种,分别有什么作用?
L0 范数和 L1 范数都能够达到使参数稀疏的目的,但 L0 范数更难优化求解,L1 范数是 L0 范数的最优凸近似,而且它比 L0 范数要容易优化求解。
L2 范数不但可以防止过拟合,提高模型的泛化能力,还可以让我们的优化求解变得稳定和快速。L2 范数对大数和 outlier 更敏感。
L1、L2范数,L1趋向于0,但L2不会,为什么?
L1范数更容易产生稀疏的权重,L2范数更容易产生分散的权重
在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
a. 激活函数的意义如下:
①模拟生物神经元特性,接受输入后通过一个阈值模拟神经元的激活和兴奋并产生输出;②为神经网络引入非线性,增强神经网络的表达能力;③导出神经网络最后的结果(在输出层时)。
b. 激活函数至少应该满足以下几点:
c. 常用的激活函数:
sigmoid,tanh,ReLU, leaky ReLU, PReLU, ELU,random ReLU,Swish, SoftPlus, Maxout等。
d. sigmoid和relu的优缺点
Relu优点:(1)relu函数在大于0的部分梯度为常数,所以不会产生梯度弥散现象.。而对于sigmod函数,在正负饱和区的梯度都接近于0,可能会导致梯度消失现象。(2)Relu函数的导数计算更快,所以使用梯度下降时比Sigmod收敛起来要快很多。
Relu缺点:Relu死亡问题。当 x 是小于 0 的时候,那么从此所以流过这个神经元的梯度将都变成 0;这个时候这个 ReLU 单元在训练中将死亡(也就是参数无法更新),这也导致了数据多样化的丢失(因为数据一旦使得梯度为 0,也就说明这些数据已不起作用)。
Sigmod优点:具有很好的解释性,将线性函数的组合输出为0,1之间的概率。
Sigmodu缺点:(1)激活函数计算量大,反向传播求梯度时,求导涉及除法。(2)反向传播时,在饱和区两边导数容易为0,即容易出现梯度消失的情况,从而无法完成深层网络的训练。
e. softmax和sigmoid在多分类任务中的优劣
多个sigmoid与一个softmax都可以进行多分类.如果多个类别之间是互斥的,就应该使用softmax,即这个东西只可能是几个类别中的一种。如果多个类别之间不是互斥的,使用多个sigmoid。
一、梯度弥散
1.1 什么是梯度弥散?
梯度弥散就是梯度消失,导数为0
1.2 梯度弥散造成的问题
靠近输出层的隐藏层梯度大,参数更新快,所以很快就会收敛;
靠近输入层的隐藏层梯度小,参数更新慢,几乎就和初始状态一样,随机分布。
由于神经网络前几层的权重更新过慢,或者没有更新,从而导致了整个网络
的学习性能下降,达不到训练的标准。
1.3 梯度弥散造成的原因
激活函数的"饱和"。
样本中的奇异样本引起模型无法收敛。
使用反向传播算法传播梯度的时候,随着网络传播深度的增加,
梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢。
不能有效学习。
从数学的角度看,是因为梯度连乘的问题,是梯度消失问题的所在。
学习率过大而导致模型震荡无法收敛。
1.4 梯度弥散的解决办法
使用ReLU,Leaky_ Relu等 激活函数替代Sigmoid。
网络层中的数据进行 batch normalization(批量标准化)。
数据归一化、数据清洗。
使用更好的网络,比如ResNet。
降低学习率。
二、梯度爆炸
1.1 什么是梯度爆炸?
梯度的衰减是有连续乘法导致的,如果在连续乘法中出现一个非常大的值,最后计算出的梯度就会很大,就想当优化到断崖处时,会获得一个很大的梯度值, 如果以这个梯度值进行更新,那么这次迭代的步长就很大,可能会一下子飞出了合理的区域。
1.2 梯度爆炸造成的问题
● 前面网络层的梯度通过训练变大,后面网络层的梯度指数级增大。
● 神经网络模型无法收敛,达不到训练结果。
1.3 梯度爆炸造成的原因
神经网络初始化的权值过大,每层网络反向求导的结果都大于1,
这样梯度相乘就会变得更大。
学习率非常大而导致梯度爆炸
1.4 梯度爆炸的解决方式
重设初始化权值(指定正态分布采样)
学习率调小