AI基础知识总结
1 为什么要对特征做归一化
特征归一化是将所有特征都统一到一个大致相同的数值区间内,通常为[0,1]。常用的特征归一化方法有:
- Min-Max Scaling
对原始数据进行线性变换,使结果映射到[0,1]的范围,实现对数据的等比例缩放。
其中,分别为数据的最小值和最大值 - Z-Score Normalization
将原始数据映射到均值为0,标准差为1的分布上。
其中为原始特征的均值,而为原始特征的标准差。
在采用基于梯度更新的学习方法(包括线性回归,逻辑回归,支持向量机,神经网络等)对模
型求解的过程中,未归一化的数值特征在学习时,梯度下降较为抖动模型难以收敛,通常需要较长的时间模型才能收敛;而归一化之后的数值特征则可以使得梯度下降较为稳定,进而减少梯度下降的次数,也更容易收敛。下图中,左边为特征未归一化时模型的收敛过程:而右边是经过特征归一化之后模型的收敛过程。
2 什么是组合特征?如何处理高维组合特征?(这里的特征组合主要指的是类别特征(Categorical Feature)之间的组合)
狭义的组合特征即将类别特征(Categorical feature)两个或者多个特征组合(数学里面的组合概念)起来,构成高阶组合特征。
比如:假设Mac笔记本电脑的CU型号和SSD大小对是否购买行为的影响用下面的表格表示
那么CPU型号和SSD大小的组合特征对是否购买行为的影响为
组合特征的不同取值的个数(number of unique values)为单个特征的不同取值的个数的乘积。假设数据的特征向量为X=(x1,x2,......,x),其中为特征xi和特征xj的组合特征,|xi|表示特征xi不同取值的个数,|xj|表示特征xj不同取值的个数。
假设采用以线性模型为基础的模型来拟合特征时,比如以逻辑回归为例:
需要学习的参数的长度为;如果||,则参数规模为mn。当m和n非常大时,经过特征组合后的模型就会变得非常复杂。一个可行的方法就是,做特征的 embedding,即将xi,xj分别用长度为k的低维向量表示(k<<m,k<<n)那么学习参数的规模则变为mk+nk+kk.
3 请比较欧式距离与曼哈顿距离?
欧式距离,即欧几里得距离,表示两个空间点之间的直线距离。
曼哈顿距离,所有维度距离绝对值之和。
在基于地图,导航等应用中,欧式距离表现得理想化和现实上的距离相差较大;而曼哈顿距离就较为合适;另外欧式距离根据各个维度上的距离自动地给每个维度计算了一个贡献权重,这个权重会因为各个维度上距离的变化而动态的发生变化;而曼哈顿距离的每个维度对最终的距离都有同样的贡献权重。
4 为什么一些场景中使用余弦相似度而不是欧式距离
假设有A和B两个向量,其余弦相似度定义为即两个向量夹角的余弦。
- 1.它关注的是向量之间的角度关系,相对差异,而不关心它们的绝对大小
- 2.其取值范围在[-1,1]之间
- 3.两个向量相同时为1,正交时为0,相反时为-1.即在取值范围内,余弦距离值越大,
两个向量越接近.
余弦距离为向量之间的相似度量提供了一个稳定的指标,无论向量维度多与少;特征的取值范围大与小。余弦距离的取值范围始终都能保持在[1,1]余弦相似度广泛应用在文本,图像和视频领域。相比之下欧氏距离则受到维度多少,取值范围大小以及可解释性的限制。当特征的取值以及特征向量经过模长归一化之后,余弦距离和欧氏距离又存在以下的单调关系。
5 One-hot的作用是什么?为什么不直接使用数字作为表示
One-hot 主要用来编码类别特征, 即采用哑变量(dummy variables) 对类别进行编码。它的作用 是避免因将类别用数字作为表示而给函数带来抖动。直接使用数字会给将人工误差而导致的假 设引入到类别特征中,比如类别之间的大小关系,以及差异关系等等。
6 在模型评估过程中,过拟合和欠拟合具体指什么现象?
过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现好,但是在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好。用模型在数据上的偏差和方差指标来表示就是。欠拟合时候,偏差和方差都比较大,而过拟合时,偏差较小但方差较大。
7 降低过拟合和欠拟合的方法
- 降低过拟合的方法
- 1.特征
减少不必要的特征- 1.根据特征的重要性,直接删除稀疏特征。
- 2.通过收集更多的数据,或者用数据增广的方法,产生更多的训练数据从而阻
止模型学习不相关的特征。
- 2.模型复杂度
降低模型复杂度- 1.神经网络,减少网络层数和神经元个数
- 2.决策树模型中降低树的深度,进行剪枝
- 3.正则化
加入正则化项并提高正则化项的系数。- 1.对复杂模型和系数比较大的模型进行惩罚,使得算法倾向于训练简单的模型。
- 4.多模型决策
采用 bagging或者 stacking的集成方法;将多个模型融合起来共同决策。以减少
模型预测的 variance. - 5.模型训练
训练模型时采用早停策略或采用知识蒸馏方法进行训练 - 6.数据目标
比如用于分类任务的标签平滑方法,即在One-hot表示的 ground true标签里
面,将值为1的一小部分值减掉,均分到其他为0的位值上。
- 1.特征
- 降低欠拟合的方法:
- 1.特征
添加新特征- i. 比如上下文特征
- ii. ID类特征
- ⅲ. 组合特征等等
- 2.模型复杂度
增加模型复杂度- i. 比如在线性模型中添加高次项。
- ii. 在神经网络模型中增加网络层数或者神经元个数。
- 3.正则化
减少正则化项的系数
- 1.特征
8 L1和L2正则先验分别服从什么分布
L1正则先验分布是 Laplace分布,L2正则先验分布是 Gaussian分布
Laplace分布
Gaussian分布
接下来从最大后验概率的角度进行推导和分析。在机器学习建模中,我们知道了x和y以后,需要对参数进行建模。那么后验概率表达式如下。
P=log P(y|X, w)P(w)= logP(y|X, w)+ log P(w)
可以看出来后验概率函数为在似然函数的基础上增加了logP(w),P(w)的意义是对权重系数w的概率分布的先验假设,在收集到训练样本X,y后,则可根据w在X,y下的后验概率对w进行修正,从而做出对w的更好地估计。若假设的w先验分布为0均值的高斯分布,即
则有
可以看到,在高斯分布下的效果等价于在代价函数中增加L2正则项。若假设服从均值为0,参数为的拉普拉斯分布,即
则有
可以看到,在拉普拉斯分布下的效果等价于在代价函数中增加L1正项.
9 对于树形结构为什么不需要归一化?
决策树的学习过程本质上是选择合适的特征,分裂并构建树节点的过程;而分裂节点的标准是由树构建前后的信息增益,信息增益比以及基尼系数等指标决定的。这些指标与当前特征值的大小本身并无关系。
10 什么是数据不平衡,如何解决?
数据不平衡主要指的是在有监督机器学习任务中,样本标签值的分布不均匀。这将使得模型更倾向于将结果预测为样本标签分布较多的值,从而使得少数样本的预测性能下降。绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。
- 解决方法:
- 1.重新采样训练集
- a.欠采样-减少丰富类的大小来平衡数据集
- b.过采样-增加稀有样本,通过使用重复,自举或合成少数类
- 2.设计使用不平衡数据集的模型
- a.在代价函数中惩罚稀有类别的错误分类。
- 1.重新采样训练集
11 逻辑回归相比线性回归,有何异同?
逻辑回归和线性回归之间既有区别又有联系。逻辑回归和线性回归最大的不同点是逻辑回归解决的是分类问题而线性回归则解决的是回归问题。逻辑回归又可以认为是广义线性回归的一种特殊形式,其特殊之处在于其目标(labeltarget的取值服从二元分布。
所谓逻辑回归是一种特殊的广义线性回归,我们可以通过狭义线性回归到逻辑回归的转化过程来理解
狭义线性回归的表达式可表示为
如果我们希望这个模型可以对二分类任务做出预测,即目标满足0,1分布。那么希望预测出来的值经过某种转换之后,大部分可以分布在0,1两个值附近。
我们发现 sigmoid函数可以帮助我们做这样的转换, sigmoid函数的表达式为
令:
则:
可以看到相比于狭义线性回归采用作为预测结果,逻辑回归则采用log作为预测结果。逻辑回归还可以表示为:
通过以上的步骤推演,我们知道逻辑回归的求值计算其实就是在线性回归的基础上,再做一个 sigmoid计算。所以它们都可以用相同的方法比如梯度下降来求解参数。
12 回归问题常用的性能度量指标
- 点对点误差
1.mse(Mean Square Error)均方误差-该统计参数是预测数据和原始数据对应误差的平方和的均值
2.rmse(Root Mean Square Error)-观测值与真值偏差的平方和与观测次数n比值的平方根,用来衡量观测值同真值之间的偏差
3.mae(Mean Absolute Error)-计算模型输出与真实值之间的平均绝对误差
- 带归一化的误差求解法法
4.mape(Mean Absolute Percentage Erro不仅考虑预测值与真实值误差,还考虑误差
与真实值之间的比例
5.mspe(Mean Square Percentage Error)-平均平方百分比误差
- 点对面误差
6.r- -Square决定系数(coeffcient of determination)
其中RSS(residual sum of squares)的表达式为:
TSS(total sum of squares)的表达式为:
13 分类问题常用的性能度量指标
准确率所有预测正确的样本(正样本预测为正负样本预测为负)与所有样本的比值。
精确率-精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
召回率召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为
负类(FN)
F1值-F1值是精确率和召回率的调和值
Auc(Area Under Curve),曲线下的面积这里的Curve指的的是roc(receiver operating
characteristic curve)接收者操作特征曲线,是反映敏感性(sensitivity)和特异性(-specificity-)
连续变量的综合指标,ROC曲线上每个点反映着对同一信号刺激的感受性。ROC曲线是通过取不同的阈值来分别计算在每个阈值下,伪正类率FPR(False Positive Rate)和真正类率R(True Positive Rate)的值来绘制的。
14 逻辑回归的损失函数
逻辑回归的预测结果服从0,1二项分布假设预测为1的概率为p,则
写出似然函数来为
其中n为样本数,y是 label取值为0或1。对上面的似然函数两边求对数可得
极大似然估计方法就是要求函数参数使得 log最大,所以我们也可以将目标定为求函数参数使得logl(w)最小。取平均之后,就得到最终的目标函数为:
15 逻辑回归处理多标签分类问题时,一般怎么做?
如果y不是在[0,1]中取值,而是在K个类别中取值,这时问题就变为一个多分类问题。有两种方式可以处理该类问题:
当K个类别不是互斥的时候,即每次对样本进行分类时,不需要考虑它是不是还可能是别的类别;那么我们可以为每个类别建立一个逻辑回归模型。用它来判断样本是否属于当前类别。
当K个类别是互斥的时候,即y=i的时候意味着y不能取其他的值,这种情况下 Softmax回归更合适一些。 Softmax回归是直接对逻辑回归在多分类的推广,相应的模型也可以叫做多元逻辑回归(Multinomial Logistic Regression)模型通过softmax函数来对概率建模,具体形式如下
决策函数为:
对应的损失函数为:
16 写出全概率公式&贝叶斯公式
全概率公式:
贝叶斯公式:
17 朴素贝叶斯为什么“朴素naive”?
朴素贝叶斯,(Navie Bayesian)中的朴素可以理解为是“简单、理想化”的意思,因为
“朴素”是假设了样本特征之间是相互独立、没有相关关系。这个假设在现实世界中是很不真实的,属性之间并不是都是互相独立的,有些属性也会存在相关性,所以说朴素贝叶斯是一种很“朴素”的算法。
18 朴素贝叶斯有没有超参数可以调?
基础朴素贝叶斯模型的训练过程,本质上是通过数学统计方法从训练数据中统计先验概率P(c)和后验概率P(xi|c);而这个过程是不需要超参数调节的。所以朴素贝叶斯模型没有可调节的超参数。虽然在实际应用中朴素贝叶斯会与拉普拉斯平滑修正(Laplacian smoothing correction)一起使用,而拉普拉斯平滑修正方法中有平滑系数这一超参数,但是这并不属于朴素贝叶斯模型本身的范畴。
19 朴素贝叶斯的工作流程是怎样的?
朴素贝叶斯的工作流程可以分为三个阶段进行,分别是准备阶段、分类器训练阶段和应用阶段。
准备阶段:这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,去除高度相关性的属性(如果两个属性具有高度相关性的话,那么该属性将会在模型中发挥了2次作用,会使得朴素贝叶斯所预测的结果向该属性所希望的方向偏离,导致分类出现偏差),然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。(这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响。)
分类器训练阶段:这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。从公式上理解,朴素贝叶斯分类器模型的训练目的就是要计算一个后验概率P(c|x)使得在给定特征的情况下,模型可以估计出每个类别出现的概率情况。
因为P(x)是一个先验概率,它对所有类别来说是相同的;而我们在预测的时候会比较每个类别相对的概率情况,选取最大的那个作为输出值。所以我们可以不计算P(x)。所以贝叶斯学习的过程就是要根据训练数据统计计算先验概率P(c)和后验概率P(x|c)
应用阶段:这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系并选出概率值最高所对应的类别;用公式表示即为:
20 朴素贝叶斯对异常值敏不敏感?
基础的朴素贝叶斯模型的训练过程,本质上是通过数学统计方法从训练数据中统计先验概率P(c)和后验概率P(xic),少数的异常值,不会对统计结果造成比较大的影响。所以朴素贝叶斯模型对异常值不敏感。
21 什么是集成学习算法?
集成学习(Ensemble Learning)就是将多个机器学习模型组合起来,共同工作已达到优化算法的目的。
- 集成学习的一般步骤是:
- 1.生产一组“个体学习器”(individual
leaner); - 2.用某种策略将它们结合起来。
个体学习器通常由一个现有的学习算法从训练数据产生。在同质集成(系统中个体学习器的类型相同)中,个体学习器又被称为“基学习器”而在异质集成(系统中个体学习的类型不同)中,个体学习器又被称为“组件学习器”(component learner)。
集成学习的思想类似我们俗话常说的“三个臭皮匠胜过一个诸葛亮”。
22 集成学习主要有哪几种框架, 并简述它们的工作过程?
集成学习主要的集成框架有, Bagging, Boosting和Stacking.其中 Bagging和Boosting为同质集成,而 Stacking和 Boosting为异质集成。
- Bagging(Bootstrap Aggregating); Bagging的核心思想为并行地训练一系列各自独立的同类模型,然后再将各个模型的输出结果按照某种策略进行聚合(例如分类中可采用投票策略,回归中可采用平均策略)。 Bagging方法主要分为两个阶段:
- Bootstrap阶段,即采用有放回的抽样方法,将训练集分为n个子样本集;并用基学习器对每组样本分别进行训练,得到n个基模型。
- Aggregating阶段,将上一阶段训练得到的n个基模型组合起来,共同做决策。在分类任务中,可采用投票法比如相对多数投票法,即将结果预测为得票最多的类别。而在回归任务中可采用平均法,即将每个基模型预测得到的结果进行简单平均或者加权平均来获得最终的预测结果。
- Stacking; Stacking的核心思想为并行地训练一系列各自独立的不同类模型,然后通过训练一个元模型(meta-model-)来将各个模型的输出结果进行结合。也可以用两个阶段来描述 Stacking算法:
- 第一阶段,分别采用全部训练样本训练n个组件模型,要求这些个体学习器必须是异构的,也就是说采用的学习方法不同;比如可以分别是线性学习器,SVM,决策树模型和深度模型。
- 第二阶段,训练一个元模型(meta-model)来将各个组件模型的输出结果进行结合。具体过程是,将各个学习器在训练集上得到的预测结果作为训练特征和训练集的真实结果组成新的训练集;用这个新组成的训练集来训练一个元模型。这个元模型可以是线性模型或者树模型。
- Boosting; Boosting的核心思想为串行地训练一系列前后依赖的同类模型,即后一个模型用来对前一个模型的输出结果进行纠正。 Boosting算法是可将弱学习器提升为强学习的算法。学习过程是:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到实现指定的值T,最终将这T个基学习器进行结合。
23 Boosting算法有哪两类,它们之间的区别是什么?
Boosting算法主要有 AdaBoost( Adaptive Boost)自适应提升算法和Gradient
Boosting梯度提升算法。最主要的区别在于两者如何识别和解决模型的问题。
AdaBoost用分错的数据样本来识别问题,通过调整分错的数据样本的权重来改进模型。
Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型。
24 什么是偏差和方差?
偏差指的是预测值的期望与真实值之间的差距,偏差越大,预测值越偏离真实数据的标签。
方差描述的是预测值的变化范围,离散程度,也就是离预测值期望的距离,方差越大,数据的分布越分散。
可通过打靶射击的例子来做类比理解,我们假设一次射击就是一个机器学习模型对一个样本进行预测,射中红色靶心位置代表预测准确,偏离靶心越远代表预测误差越大。偏差则是衡量射击的蓝点离红圈的远近射击位置即蓝点离红色靶心越近则偏差越小,蓝点离红色靶心越远则偏差越大;方差衡量的是射击时手是否稳即射击的位置蓝点是否聚集,蓝点越集中则方差越小,蓝点越分散则方差越大。
25 为什么说Bagging可以减少弱分类器的方差,而Boosting 可以减少弱分类器的偏差?
Bagging算法对数据重采样,然后在每个样本集训练出来的模型上取平均值。假设有n个随机变量,方差记为,两两变量之间的相关性是0<p<1,则n个随机变量的均值的方差为:
上式中随着n增大,第一项趋于0,第二项趋于,所以 Bagging能够降低整体方差。在随机变量完全独立的情况下,n个随机变量的方差为,n个随机变量的方差是原来的1/n。
Bagging算法对n个独立不相关的模型的预测结果取平均,方差可以得到减少,如果模型之间相互独立,则集成后模型的方差可以降为原来的1/n,但是在现实情况下,模型不可能完全独立,为了追求模型的独立性, Bagging的方法做了不同的改进,比如随机森林算法中,每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有的属性中选最有属性,这就为了避免弱分类器之间过强的关联性,通过训练集的重采样也能够带来弱分类器之间的一定独立性这样多个模型学习数据,不会因为一个模型学习到数据某个特殊特性而造成方差过高。
设单模型的期望为μ,则 Bagging的期望预测为:
说明 Bagging整体模型的期望近似于单模型的期望,这意味整体模型的偏差也与单模型的偏差近似。所以Bagging不能减少偏差。
Boosting算法训练过程中,我们计算弱分类器的错误和残差,作为下一个分类器的输入,这个过程本身就在不断减小损失函数,其偏差自然逐步下降。但由于是采取这种串行和自适应的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低方差。所以说Boosting主要还是靠降低偏差来提升预测精度。
26 简述一下随机森林算法的原理
随机森林算法是 Bagging集成框架下的一种算法,它同时对训练数据和特征采用随机
抽样的方法来构建更加多样化的基模型随机森林具体的算法步骤如下:
- 1.假如有N个样本,则有放回的随机选择个样本(每次随机选择一个样本,然后返回继续选择)。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。
- 2.当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m<<M然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。
- 3.决策树形成过程中每个节点都要按照步骤2来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。
-
4.按照步骤1~3建立大量的决策树,这样就构成了随机森林了。
27 随机森林的随机性体现在哪里?
随机森林的随机性体现在每颗树的训练样本是随机的,树中每个节点的分裂属性集合
也是随机选择确定的。
- 1.随机采样:随机森林在计算每棵树时,从全部训练样本(样本数为n)中选取一个可能有重复的、大小同样为n的数据集进行训练(即 booststrap采样)。
- 2.特征选取的随机性:在每个节点随机选取所有特征的一个子集,用来计算最佳分割方式。
28 随机森林算法的优缺点?
- 优点
- 特征和数据的随机抽样
- 1.它可以处理很高维度(特征很多)的数据,并且不用降维,无需做特征选择
- 2.如果有很大一部分的特征遗失,仍可以维持准确度。
- 3.不容易过拟合
- 4.对于不平衡的数据集来说,它可以平衡误差。
- 5.可以判断出不同特征之间的相互影响(类似于控制变量法)
- 树模型的特性
- 6.它可以判断特征的重要程度
- 算法结构
- 7.训练速度比较快,容易做成并行方法
- 8.实现起来比较简单
- 缺点
- 1.随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。(决策树的学习本质上进行的是决策节点的分裂,依赖于训练数据的空间分布)
- 2.对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的
29 随机森林为什么不能用全样本去训练m棵决策树?
随机森林的基学习器是同构的,都是决策树,如果用全样本去训练m棵决策树的话;基模型之间的多样性减少,互相相关的程度增加,不能够有效起到减少方差的作用对于模型的泛化能力是有害的。
30 随机森林和GBDT的区别?
- 1.随机森林采用的 bagging思想,而GBDT采用 b的思想
- 2.组成随机森林的树可以并行生成;而GBDT只能是串行生成。
- 3.随机森林对异常值不敏感;GBDT对异常值非常敏感。
- 4.随机森林对训练集一视同仁:GBDT对训练集中预测错误的样本给予了更多关注。
- 5.随机森林是通过减少模型方差提高性能:GBDT是通过减少模型偏差提高性能。
- 6.对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。
- 7.组成随机森林的树可以是分类树,也可以是回归树;而GBDT只能由回归树组成。
31 简述GBDT原理
- 梯度提升树的训练过程大致是这样的:
1.根据训练集训练一颗初始决策树;
2.计算之前所有树在此数据集上预测结果之和与真实结果的差值,又叫做残差。
3.把残差作为当前树作为拟合的目标在训练集上训练。
4.重复2,3步骤,直到达到设置的阈值(树的个数,早停策略等) - 采用伪代码表示如下:
输入:训练数据集D={(x1,y1),(x2,y2),...,(xnyn)},其中
输出:提升树
1)初始化fo(x)=0
2)对
a.计算残差
b.拟合残差学习一个回归树,得到
c.更新
3)得到回归问题的提升树
上述的伪代码描述中,我们对GBDT算法做了一下三个简化:
1.用残差来表示提升树的负梯度;
2.假设所有树的贡献权重都相同;
3.没有把回归树的在叶子节点上的拟合信息体现出来。
接下来我们将简化的信息补全,得到下面GBDT算法的伪代码:
1)通过最小化损失最小化初始模型:
2)对
a.计算负梯度:
b.训练一个回归树去拟合目标值,树的终端区域为
c.对,计算步长
d.更新模型:
3)输出.
其中每个树的终端区域代表当前树上叶子节点所包含的区域,步长为第m棵树
上第j个叶子节点的预测结果。
32 GBDT如何用于分类?
GBDT在做分类任务时与回归任务类似,所不同的是损失函数的形式不同。我们以二分类的指数损失函数为例来说明:
我们定义损失函数为:
其中∈y={-1,+1},则此时负梯度为
对于各个叶子节点最佳拟合的值为:
通过与GBDT伪代码中步骤b和步骤C类比来理解。
33 GBDT常用损失函数有哪些?
回归问题:
MAE,MSE,RMSE(见回归问题常用的性能度量指标?)
补充
Huber Loss(Mae和MSE结合)
1)在0附近可导
2)Huber大部分情况下为MAE,只在误差很小的时候变成了MSE。
分类问题:
对数似然损失函数,应对二分类和多分类问题(见逻辑回归的损失函数?逻辑回归处
理多标签分类问题时,一般怎么做?)
补充
指数损失函数:yi∈y={-1,+1}
34 为什么GBDT不适合使用高维稀疏特征?
高维稀疏的ID类特征会使树模型的训练变得极为低效,且容易过拟合。
- 树模型训练过程是一个贪婪选择特征的算法,要从候选特征集合中选择一个使分裂后收益函数增益最大的特征来分裂。按照高维的ID特征做分裂时,子树数量非常多,计算量会非常大,训练会非常慢。
- 同时,按ID分裂得到的子树的泛化性也比较弱,由于只包含了对应ID值的样本,样本稀疏时也很容易过拟合。
35 GBDT算法的优缺点?
优点:
- 预测阶段的计算速度快,树与树之间可并行化计算(注意预测时候可并行)。
- 在分布稠密的数据集上,泛化能力和表达能力都很好。
- 采用决策树作为弱分类器使得GBDT模型具有1)较好的解释性和鲁棒性,2)
能够自动发现特征间的高阶关系,并且也3)不需要对数据进行特殊的预处理
如归一化等。
缺点:
- GDBT在高维稀疏的数据集上,表现不佳(见为什么GBDT不适合使用高维稀疏
特征?) - 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练
速度。
36 简述 XGBoost
XGBoost是陈天奇大牛新开发的 Boosting库。它是一个大规模、分布式的通用Gradient Boosting(dt)库,它在 Gradient Boosting框架下实现了GBDT和一些广义的线性机器学习算法。
在面试时,可以通过与GBDT的对比来介绍 XGBoost(见XGBoost和GBDT有什么不同?),
加餐内容一在直播课程中,我还将带大家一起详细了解
- XGBoost如何在目标函数中加入正则化项;
- 如何通过二阶导数优化目标函数;
- 如何通过目标函数来衡量节点分裂的时的目标增益;
- 以及如何通过贪心算法和分桶策略来优化节点分裂的效率。
37 XGBoost和GBDT有什么不同?
- GBDT是机器学习算法, XGBoost是该算法的工程实现。
- 在使用CART作为基础分类器时, XGBoost显示地加入了正则项来控制模型的复
杂度,有利于防止过拟合,从而提高模型的泛化能力。 - GBDT在模型训练时只使用了损失函数的一阶导数信息, XGBoost对代价函数进
行二阶泰克展开,可以同时使用一阶和二阶导数。 - 传统的GBDT采用CART作为基础分类器, XGBoost支持多种类型的基础分类
器,比如线性分类器。 - 传统的GBDT在每轮迭代时使用全部的数据, XGBoost则支持对数据进行采样。
- 传统的GBDT没有涉及对缺失值进行处理, XGBoost能够自动学习出缺失值的处
理策略。 - XGBoost还支持并行计算, XGBoost的并行是基于特征计算的并行,将特征列
排序后以 block的形式存储在内存中,在后面的迭代中重复使用这个结构。
38 XGBoost为什么可以并行训练?
注意 xgboost的并行不是tree粒度的并行, xgboost也是一次迭代完才能进行下一次
迭代的(第t次迭代的代价函数里包含了前面t1次迭代的预测值)
xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点, xgboost在训练之前,预先对数据
进行了排序,然后保存为 block结构,后面的迭代中重复地使用这个结构,大大减小
计算量。这个 block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每
个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法
枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效
率就会变得很低,所以xgboost还提出了一种可并行的直方图算法,用于高效地生成候选的分割点。
39 XGBoost防止过拟合的方法?
1.数据
- 样本采样一在生成每颗树的时候可以对数据进行随机采样。
- 特征采样一而且还可以在生成每棵树的时候,每棵树生成每一层子节点的时候,以及在每次做节点分裂的时候,选择是否对特征进行采样。
2.模型 - 限制树的深度,树的深度越深模型越复杂。
- 设置叶子节点上样本的最小数量,这个值越小则树的枝叶越多模型越复杂;相反如果这个值越大,则树的枝叶越少,模型越简单。这个值太小会导致过拟合,太大会导致欠拟合。
3.正则化 - L1和L2正则化损失项的权重
- 叶子节点数量惩罚项的权重值
40 XGBoost为什么这么快?
1)同时采用了损失函数的一阶导数和二阶导数,使得目标函数收敛更快。
2)在进行节点分类时采用的贪心算法和直方图算法,大大加速了节点分裂的计
算过程。
3)工程优化,使得模型训练时可进行并行计算。
41 简述 kmeans流程
Kmeans算法的基本流程如下:
1.随机初始化k个中心点;
2.计算所有样本到中心点的距离;
3.比较每个样本到k个中心点的距离,并将样本分类到距离最近的中心点所在的
类别中;
4.k个类别组成的样本点重新计算中心点;
5.重复2-4,直到中心点不再变化。
其中,k表示预设的类别个数;两点的距离由欧式距离的平方表示;中心点的计算方
式为,在表示中心点向量的每一个方向上计算当前类所有样本均值。
由于 kmeans的初始化中心点位置是随机的,而在kmeans的优化过程中,每个中心点只在较小的距离范围内更新,所以算法的效果依赖于中心点初始化的效果。对于此问题的一个改进策略在 kmeans++算法中提出。
Kmeans++
- 思想:初始化的聚类中心距离尽可能地远
- 对初始化进行优化
- 流程
1.随机初始化一个中心
2.对于每个样本x,计算距离它最近的中心的距离D(x),每个样本被选为中心点
的概率为。按照轮盘法选择出下一个中心点;
3.重复步骤2,直到选出所有的中心点。
42 kmeans对异常值是否敏感?为何?
Kmeans对异常值较为敏感,因为一个集合的内元素的均值易收到一个极大值的影响。
如图中展示的结果,因为有了一个异常值,这个元素集合的中心点严重偏离了大多数点所在的位置区域;因此在有异常值影响的情况下,均值所计算出来的中心位置不能够反映真实的类别中心。
43 如何评估聚类效果
聚类往往不像分类一样有一个最优化目标和学习过程,而是一个统计方法,将相似的数据和不相似的数据分开。所以,评估聚类效果可以从以下维度入手。
- 聚类趋势(对数据进行评估)
霍普金斯统计量(Hopkins Statistic)评估给定数据集是否存在有意义的可聚类的非随机结构。如果一个数据集是有随机的均匀的点生成的,虽然也可以产生聚类结果,但该结果没有意义。聚类的前提需要数据是非均匀分布的。该值在区间[0,1]之间,[0.01,0.3]表示数据接近随机分布,该值为0.5时数据是均匀分布的,[0.7,0.99]表示聚类趋势很强。 - 判定聚类的簇数是否为最佳
可用业务分析法,观察法,手肘法和Gap Statistic方法找到最佳的分类数与实际簇
数做比较(见超参数k如何选择?) - 聚类质量
因为没有标签,所以一般通过评估类的分离情况来决定聚类质量。类内越紧密,类间距离越小则质量越高。
44 超参数k如何选择?
- 根据业务,比如希望把用户分层高中低三种;
- 观察法,对于低纬度数据适用,;对数据进行可视化或者PCA降维可视化之后,
可大致观测出数据分布自然显示的类别数; - 手肘法
所有样本点到它所存在的聚类中心点的距离之和,作为模型的衡量,
计算
k越大,Dk会越小;绘制Dk关于k的函数图像,观察是否存在某个值,当k大于这个值之后,Dk的减小速度明显变缓或者基本不变,则这个值所在的点即为拐点,拐点处的k值就是要选择的最佳分类个数; - Gap Statistic
均匀分布产生和原始样本一样多的随机样本,对随机样本做kmeans得到
重复多次可以获得, Gap statistic取大值所对应的K就是最佳的K。
蒙特卡洛算法的思想。
45 Kmeans算法的优缺点
优点
- 容易理解,聚类效果不错,虽然是局部最优,但往往局部最优就能够给出一个不错的结果;
- 处理大数据集的时候,该算法可以保证较好的伸缩性即稍作改进即可处理大数据集;
- 当数据簇近似高斯分布的时候,效果非常不错;
- 算法复杂度低时间复杂度为0(nkt)其中n为样本数,k为类别数,t为迭代次数;而且通常来说k和t相对于n来说很小。
缺点
- K值需要人为设定,不同K值得到的结果不一样;
- 对初始的类别中心敏感,不同选取方式会得到不同结果;
对异常值敏感; - 样本只能归为一类,不适合多分类任务;
- 不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。
46 请简述SVM 原理
SVM是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
- 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
- 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
47 SVM 为什么采用间隔最大化
当训练数据线性可分时,存在无穷多个分离超平面可以将两类数据正确分开。
感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。
线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是鲁棒的,对未知实例的泛化能力最强。可以借此机会阐述一下几何间隔以及函数间隔的关系。
48 SVM 为什么要引入 核函数
当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解问题中,无需求解真正的映射函数,而只需要知道其核函数。
核函数的定义:
,即在特征空间的内积等于它们在原始样本空间中通过核函数K计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。
49 SVM 核函数之间的区别
SVM核函数有线性核函数,多项式核函数,高斯核(RBF),拉普拉斯核和 Sigmoid
核函数。其中多项式核函数,高斯核(RBF),拉普拉斯核和 Sigmoid核函数通常用来处理线性不可分的情形。而一般选择核函数时通常考虑线性核和高斯核,也就是线性核与RBF核。线性核:主要用于线性可分的情形,参数少,速度快,对于一般数据,分类效果已经很理想了。RBF核:主要用于线性不可分的情形,参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。
50 为什么SVM对缺失数据敏感
这里说的缺失数据是指缺失某些特征数据,向量数据不完整。
SVM没有处理缺失值的策略。而SVM希望样本在特征空间中线性可分,所以特征
空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。
另外,SVM的决策只基于少量的支持向量,若噪音样本出现在支持向量中,容易对决
策造成影响,所以SVM对噪音敏感。
51 SVM算法的优缺点
优点:
- 1、可以有效解决高维特征的分类和回归问题
- 2、无需依赖全体样本,只依赖支持向量
- 3、有大量的核技巧可以使用,从而可以应对线性不可分问题
- 4、样本量中等偏小照样有较好的效果
缺点:
- 1、如果特征维度远大于样本个数,SVM表现一般
- 2、SVM在样本巨大且使用核函数时计算量很大
- 3、非线性数据的核函数选择依旧没有标准
- 4、SVM对缺失和噪声数据敏感
- 5、特征的多样性导致限制了SVM的使用,因为S本质上是属于一个几何模型,这个模型需要去定义 instance之间的 kernel或者 similarity(线性SM中的内积),而我们无法预先设定一个很好的 similarity.这样的数学模型使得SM更适合去处理“同性质”的特征。
52 SVM的超参数C如何调节
在使用SVM库时候,通常有两个需要手工调节的关键参数
- 1.参数C
- 2.核函数(Kernel)
用于C可以看做与正则化参数入作用相反(见简述S软间隔推导过程),则对于C的调节: - 低偏差,高方差,即遇到了过拟合时;减少C值。
- 高偏差,低方差,即遇到了欠拟合时:增大C值。
53 SVM的核函数如何选择
- 当特征维度n较高,而样本规模m较少时,不宜使用核函数或者选用线性核的SVM,否则容易引起过拟合。
- 当特征维度n较低,而样本规模m足够大时,考虑使用高斯核函数。不过在使用高斯核函数前,需要进行特征缩放(scaling))
54 简述SVM硬间隔推导过程
空间超平面的方程为Wx+b=0,W为平面法向量。
点到平面的距离为
我们令
最大化间隔即为
而最大等价于最小,所以问题等价于
定义拉格朗日函数
所以原问题的对偶问题为
先求min令其对w和b的偏导为0得出
那么对偶问题变成了
因为我们的原问题中有不等式约束,因此上述的过程满足KKT条件,非拉格朗日参数的偏导为0;拉格朗日项为0;拉格朗日乘子小于0,拉格朗日参数大于0,即要求
那么对于任意的训练样本总满足或,若,则样本不会被记入
f(x)的表达式中(根据a1对w的表达式得出),若,则必有,所对应的样本点位于最大间隔边界上,是一个支持向量。训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。
对偶问题是一个二次规划问题,可以通过SMO方法求出,这里不多做讨论。求出最佳的之后,根据
所以超平面可表示为
其中为支持向量的拉格朗日参数。
我们复盘一下这个过程,有以下重点内容:
- 1.通过点到平面的距离,构建我们要求解的带有约束条件的原始问题
- 2.将对原始问题的求解经拉格朗日转换后求解它的对偶问题,并通过对朗格朗日
函数求偏导,把求解的参数简化为一个a - 3.通过SMO来求解对偶问题得到最佳的a
- 4.而根据a与w和b的关系,得到最佳超平面的表达式。
- 5.而根据KKT条件,我们过滤掉了大部分的样本,只保留了支持向量来求解最佳
超平面。
如果再进一步浓缩,大家可以记忆这个过程为: - 1.构建最大间隔问题,写出超平面表达式。
- 2.通过拉格朗日函数,对偶问题转化,和SMO方法求解表达式参数。
- 3.KKT条件过滤样本,求出最终超平面表达式。
55 简述SVM软间隔推导过程
如果样本近似线性可分,允许少数分类错误,那么可以使用软间隔的SM
为每个样本引入一个松弛向量,使得样本可以在两个间隔平面中间,即
那么目标函数变为了
其中C为惩罚系数,平衡间隔最大和误差分类个数最少,
其拉格朗日函数为
同硬间隔类似,对w,b,ε求偏导为0可得
将结果带入回L则得到对偶问题为
软间隔的KKT条件要求
对于任意样本,总有或,若,则样本不会被记入f(x)的表达式中,若,则必有,所对应的是一个支持向量;若,则,进而有,即该样本潜在最大间隔边界上;若,则有,此时若,则样本落在最大间隔内部,若则样本被错误分类。
56 简述决策树的构建过程
- 构建根节点,将所有训练数据都放在根节点
- 选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集在
当前条件下获得最好的分类 - 如果子集非空,或未达到停机条件,递归1,2步骤,直到所有训练数据子集都
被正确分类或没有合适的特征为止
57 ID3决策树与C4.5决策树的区别
按照(简述决策树的构建过程)中所描述的,构建决策树过程中一个关键步骤就是选择一个最优特征;而ID3决策树与C4.5决策树一个最大的区别就是在选择最优特征时所依赖的标准不同。
在ID3决策树中,选择最佳特征通过信息增益指标来选择,所谓信息增益可以定义
为:
数据集对于某特征的信息增益=数据集的经验熵这个特征对数据集的条件经验熵
其中D为数据集,A表示数据集样本上的某个特征,H(D)为数据集的经验熵;H(D|A)表示特征A对数据集D的经验条件熵。
其中K表示D中类别的数量,表示第k个类别所包含样本的个数。
其中n表示在特征A上不同取值的个数,表示在特征上取第i个值且类别为k时的样本个数。
在C4.5决策树中,为了解决信息增益偏向于选择取值较多的特征的问题,选择最佳特征通过信息增益熵来选择,所谓信息增益熵可以定义为:
其中表示,训练数据集D关于特征A的值的熵。
其中n表示特征A上取得不同值的个数,表示在特征A上取值为第1个时,样本的个数。
此外1)ID3只能处理离散型变量,而C4.5通过将连续值离散化来处理连续型变量。
2)ID3没有对缺失值的处理策略,而C4.5通过引入有缺失值样本对所有样本的比例来处理缺失值带来的“信息增益失真”的问题。
58 CART回归树算法推导
在CART树的构建过程中,假设决策树是一颗二叉树;决策树的生成过程就是递归地构建二叉决策树的过程。对回归树来说用,我们这里讨论一个基本形式即为平方误差最小化准则,进行特征选择,生成二叉树。
输入:训练数据集D
输出:回归树f(x)
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉树:
1)选择最优切分变量(特征)j与切分点(特征值域上的值)s,求解
2)用选定的(j,s)划分区域并决定相应的输出值,其中R1(j,s)是划分后的左子区
域,而R2(j,s)是划分后的右子区域;C1是左子区域上的预测值(此区域上所有样本真实值的均值),而c2是右子区域上的预测值(此区域上所有样本真实值的均值)。
3)递归地对两个子区域调用步骤1),2),直到满足停机条件。常用的停机条件有a.树的深度b.叶子区域的个数c.叶子区域上样本的个数等。
4)将输入空间划分为M个区R1,R2,…,RM,生成决策树,划分的空间即为叶子节点上的空间:
大家可以对照 XGBoost节点分裂的过程来学习CART回归树的生成过程。
59 决策树的优缺点
优点:
- 缺失值不敏感,对特征的宽容程度高,可缺失可连续可离散
- 可以计算特征重要性,且可解释性强
- 算法对数据没有强假设
可以解决线性及非线性问题 - 有特征选择等辅助功能
缺点:
- 处理关联性数据比较薄弱重要性强且关联的特征都得到了重视
- 正负量级有偏样本的样本效果较差
- 单棵树的拟合效果欠佳,容易过拟合
60 决策树如何防止过拟合?说说具体方法。
我们在讨论防止机器学习过拟合的时候,通过分类的方法,大致确立了这么几个改进方向,1)数据2)模型3)正则化4)训练。在这个题目中,我们重点讨论如何通过
改进决策树模型来防止过拟合,当然其他几个方向对防止决策树过拟合同样适用。
通过改进模型来防止过拟合的主要思路是简化模型,使得模型能够学习样本中的共同特征(即主要特征),而摈弃个性化的特征即次要特征)。而对树模型进行简化的方法又可以分为预剪枝(在训练过程中进行剪枝),和后剪枝(在决策树构建完成之后进行剪枝)
预剪枝的主要方法有:
- 1)限制树的深度一当树到达一定深度的时候,停止树的生长
- 2)限制叶子节点的数量
- 3)规定叶子区域内最少的样本数,未达到最少样本数的叶子区域不做分裂
- 4)计算每次分裂对测试集的准确度提升
后剪枝的核心思想是让算法生成一颗完全生长的决策树,然后最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子节点替代,该节点的类别同样按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。
61 为什么必须在神经网络中引入非线性?
如果神经网络中没有引入非线性层,那么神经网络就变成了线性层的堆叠。而多层线性网络的堆叠本质上还是一个线性层,我们以两层线性网络的堆叠为例
我们用f(x)表示第一层线性网络,g(x)表示第二层线性网络,则两层网络的堆叠表示
为:
我们令:
那么原来的表达式就变为:
所以h(x)还是一个线性函数。而我们知道线性函数的表现力是有限的,它只能表示特征与目标值之间比较简单的关系,相反带有非线性层的神经网络被证明可以表示任何函数。所以为了使得网络设计发挥作用,并且提高网络的表现力,必须要在神经网络中引入非线性。
62 Relu在零点不可导,那么在反向传播中怎么处理?
RL虽然在零点不可导,但是我们在做反向传播的计算时,对Relu这个函数的导数分情况讨论,即ReLU在零点时人为地给它赋予一个导数,比如0或者1。例如在下面ReLU的反向传播函数实现中,将ReLU在零点位置的导数设置为0.
63 relu的优缺点
优点:
- 1.使用ReLU的SGD算法的收敛速度比 sigmoid和tanh快;
- 2.在x>0上,不会出现梯度饱和,梯度消失的问题。
- 3.计算复杂度低,不需要进行指数运算,只要一个阈值(0)就可以得到激活值
缺点:
- 1.ReLU的输出不是0均值的,它将小于0的值都置为0使得所有参数的更新方向都相同,导致了 ZigZag现象
- Dead ReLU Problem(relu神经元坏死现象):某些神经元可能永远不被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)
- 3.ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩
张。
64 BN解决了什么问题
Bn(Batch Normalization)的提出是为了解决 Internal Covariate Shift的问题,即当深度神经网络经过多层的计算,输入到每一层的数据分布发生了严重的改变,这种输入数据上的抖动和变化,使得网络参数难以学习,随着网络的加深模型更加难以收敛。
Batch Normalization层的引入,使得每一层的输入数据都归一化到近似于均值为0方差为1的分布上,从而大大缓解了 Internal Covariate Shift的问题此外,BN还给深度神经网络带来了以下好处:
- 1.BN可以解决每一层数据不稳定的问题(上诉提到的问题)
- 2.BN可以解决梯度消失的问题
- a.例如在 Sigmoid激活函数里面,当输入值非常大或者非常小的时候,梯度接近于0;而将数据归一化到(0,1)之间,梯度可以很好地得到更新。
- 3.网络的训练速度加快
- 4.引入BN层之后,使得激活函数的使用更加丰富和灵活。
- 5.使得网络参数初始化和学习率的参数调节更加容易和灵活
65 BN的实现流程
BN的过程可以总结为:
- 按batch进行期望和标准差计算
- 对整体数据进行标准化
- 对标准化的数据进行线性变换
- 其中变换系数需要学习
用公式描述为:
Input: Values of x over a mini-batch:;
Parameters to be learned:
Output:
用 python程序实现的前向计算为:
反向传播计算为:
注:这里的程序实现只给出了一个朴素的版本,并不包含对全连接层以及Conv层结果的区分对待以及工程优化。正反向传播实现里面的Step有一一对应关系,大家可以把两个函数放在一起对照学习。
66 .激活函数有什么作用,常用的的激活函数
如果不用激励函数(其实相当于激励函数是f(x)=x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机了,那么网络的表达能力就相当有限。正因为上面的原因,引入非线性函数作为激励函数之后,深层神经网络表达能力就很强大了(不再是输入的线性组合,而是几乎可以表示任意函数)。
常用的激活函数有: Sigmoid,Tanh,ReLU, Leaky ReLU,
Sigmoid激活函数的公式是:
其图像为:
Sigmoid将回归问题的结果转换到(0,1的范围,图像成中间窄两边宽的结构;即大部分的时候 sigmoid的值集中的在两边。 Sigmoid函数提供了一个很好的适用于二分类的问题的输出结果,以及非线性表达。但是它的缺点也是非常明显的:
- 1.前向传播和反向传播都要做指数计算计算耗费资源较多。
- Sigmoid函数梯度饱和导致神经网络反向传播时出现梯度消失的现象。当神经元的激活在接近0或1处时会饱和,在这些区域梯度几乎为0,这就会导致梯度消失,几乎就有没有信号通过传回上一层。
- Sigmoid函数的输出不是零中心的。因为如果输入神经元的数据总是正数,那
么关于w的梯度在反向传播的过程中,将会要么全部是正数,要么全部是负数,这将会导致梯度下降权重更新时出现z字型的下降( ZigZag现象)
Tanh函数的数学公式是:
其图像为:
- Sigmoid函数的输出不是零中心的。因为如果输入神经元的数据总是正数,那
Tanh激活函数的提 sigmoid出虽然解决了函数的输出不是0中心的问题,但是它仍然存在两个主要问题:1.函数梯度饱和的问题:2.计算复杂的问题。
ReLU函数的数学公式是:
其图像为:
ReLU激活相较于 sigmoid和tanh函数来说对于随机梯度下降收敛有巨大的作用,很好地解决了梯度消失的问题;同时函数的前向和反向传播计算计算效率也高。
但是RLU存在以下缺点:
- 1.ReL的输出不是零中心的,所以梯度下降时存在 ZigZag现象。
- 2.ReLU函数存在小于等于0一侧,神经元坏死的现象。
Leaky ReLU
函数的公式是:
函数的图像为:
image
其中通常取很小的值比如0.01,这样可以确保负数信息没有全部丢失。解决了ReLU神经元坏死的问题:并且一定程度上缓解了数据均值不为0导致的 ZigZag现象。
67 怎么解决梯度消失问题
梯度消失的原因主要有两个,1.在深度网络中,网络参数的学习是通过反向传播的链式求导法则来求Loss对某个参数的偏导数,然后进行参数更新的。当网络层数很深,而当前的参数所在层又靠近网络的输入时,求导链就会非常长:如果其中的某些中间结果的值很小,并经过链式的累成作用,最终求得的梯度值就会接近于零,而导致参数得不到更新。
可通过以下方法解决梯度消失的问题:
- 1.选用合适的激活函数。比如ReL或者 Leaky ReLU.因为像 sigmoid和tanh这样的激活函数,会出现比较大的梯度饱和区域,使得梯度的取值接近于0
- 2.采用 Batch Normalization层,对网络中计算得到中间值进行归一化,使得中间计算结果的取值在均值为0,方差为1这样的分布内。那么此时,在 sigmoid和tanh中,函数取值处于中间变化较大的部分,梯度取值也相对较大,从而可以防止过拟合。
- 3.使用残差结构,残差结构相当于给靠近输入端的网络层提供了一个与靠近输出端层的直连操作。在反向传播计算时,减少了梯度传播的路径长度,以缓解梯度消失的问题。
- 4.在RNN网络中,可以通过使用LSTM(long-short- term memory networks)长短时记忆网络,来解决信息遗忘和梯度传播的问题。
68 什么是端到端学习
在传统的机器学习系统中,我们通常需要对数据进行多阶段的处理,在每个阶段使用人工特征提取,数据标注或者独立的机器学习模型来完成特定的任务而在端到端学习系统中,可以通过训练一个大的神经网络来完成从原始数据的输入到最终结果输出的整个任务。端到端的学习可以大大较少人工参与,简化解决方案部署流程。
现实中的任务通常非常复杂,将复杂任务拆分成简单的任务解决通常能够达到很好的效果:比如我们在做人脸识别任务时,通常会把这个任务分成三个子任务1.人脸检测:2.人脸关键点对齐和矫正;3.基于切分后的人脸图像的人脸识别。如果要将这个任务变成端到端的任务,需要大量的从输入数据到输出结果的数据集;而现实中我们并没有这样大量的数据。所以在这个任务中端到端学习并不适用,而在有些我们已经有大量数据的任务中,比如语音识别并转换成文本的任务中,端到端学习就表现得很好。
69 Softmax的原理是什么?有什么作用?
Softmax的函数公式是:
Sof'tmax层的结构示意图如下:
它具有以下特性:
- 1.经过 softmax之后,每一路的输出,在(0,1)范围内,即0<yi<1
- 2.所有路输出之和为1,即
- 3.经过 softmax之后,比较大的输入在输出时会变得相对更大。
基于以上三个特性, softmax函数经常被用在分类深度神经网络的输出头,做多分类输出。
70 CNN的平移不变性是什么?如何实现的?
平移不变性(translation invariant)指的是CN对于同一张图及其平移后的版本,都能输出同样的结果。这对于图像分类(image classification)问题来说肯定是最理想的,因为对于一个物体的平移并不应该改变它的类别CNN网络的平移不变性是通过卷积+池化来实现的。
卷积:简单地说,图像经过平移,相应的特征图上的表达也是平移的。在神经网络中,卷积被定义为不同位置的特征检测器也就意味着,无论目标出现在图像中的哪个位置,它都会检测到同样的这些特征,输出同样的响应。
池化:比如最大池化,它返回感受野中的最大值,如果最大值被移动了,但是仍然在这个感受野中,那么池化层也仍然会输出相同的最大值。这两种操作共同提供了一些平移不变性,即使图像被平移,卷积保证仍然能检测到它的特征,池化则尽可能地保持一致的表达。
但是在近几年的研究中,人们发现,当深度网络加深之后,CNN的平移不变性越来越难以保证。比如说,当图像中的物体发生小范围移动的话,网络预测的结果会出现较大的波动。其中一个主要原因来自下采样部分,比如 stride为2的下采样,它是将网络人为的按照规则分块之后,然后再进行采样:这样被采样的对象经过微小平移之后,就会在采样块之间发生位置变化,导致每个采样块采样出来的结果与平移前的结果有所差别,而经过多层这样的采样之后,能够保持平移前结果不变的概率会越来越小。
71 AlexNet, VGG,GoogleNet,ResNet等网络之间的区别是什么?
AlexNet相比传统的CNN,主要改动包括 Data Augmentation(数据增强)、Dropout方法、激活函数用ReLU代替了传统的Tanh或者 Logistic、 Local Response Norma1ization(LRN,实际就是利用临近的像素数据做归一化)、Overlapping Pooling(有重叠,即Poo1ing的步长比Pooling Kernel的对应边要小)、多gpu并行。
VGG很好地继承了 AlexNet的特点,采用了更小的卷积核堆叠来代替大的卷积核,并且网络更深。
GoogLeNet,网络更深,但主要的创新在于他的 Inception,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。相比于前述几个网络,用Inception之后整个网络结构的宽度和深度都可扩大,能够带来2-3倍的性能提升。
ResNet在网络深度上有了进一步探索。但主要的创新在残差网络,网络的提出本质上还是要解决层次比较深的时候无法训练的问题。这种借鉴了 Highway Network思想的网络相当于旁边专门开个通道使得输入可以直达输出,而优化的目标由原来的拟合输出H(x)变成输出和输入的差H(x)-x,其中(X)是某一层原始的期望映射输出,x是输入。
72 pooling层做的是什么
池化层(Pooling Layer)也叫子采样层(Subsampling Layer)它的一个很重要的作用就是做特征选择,减少特征数量,从而减少网络的参数数量。采用了 Pooling
Layer之后,在不增加参数的情况下,可以增大网络对图像的感受野。虽然可以用带步长的卷积(步长大于1)代替Pooling layer也可以实现下采样和增大感受野的作用,但是 Pooling Layer的计算简单,同时也没有可学习的参数,在很多需要做特征图拼接的网络,比如 shuffleNet中是非常适用的。
73 ROI pooling的不足是什么
ROI Pooling(Region of Interests)在 Faster R--cnn中提出,将经过 Backbone之后的 feature map, Pooling到同一个size这个方法有一个主要的缺点:需要进行2次量化取整的操作,会带来精度的损失。
第一次是经过 Region Proposal Networ(RPN)预测得到的 Bounding Box边界框是个 float数值,而不是整数,这样就涉及到一次取整的操作,取整后才可以输入ROI Pooling第二次是 ROI Pooling需要对提取的ROI做 pool ing操作,输出一个77大小的 feature map,即77个bin。这样ROI的长度或者宽度除以7,得到的也是一个float数值,而非整数,这个时候又涉及到一次量化取整的操作。
74 ROI align的具体做法是什么
ROI Align的计算流程如下:
- 1.由输入的 ground truth box大小,经过 backbone的缩放(比如32),得到输出的 shared layer中 ground truth box大小(浮点数而不是整数):
- 2.对于缩放后的 ground truth box,将其平均分为(n,n)大小的小块(这里的n即为 pooling后的 anchor的边长)
- 3.对于每个小块,假设我们的采样率为2,那么在每个小块内,要采样2x2=4个点,四个点的位置按小块内的1/4,3/4位置取;
- 4.按双线性插值计算4个点的像素值,取4个点中的像素值max作为这个小块的
像素值。
75 inception module的优点是什么
Inception module有四个不断代的版本,它的基本并行结构是由 Inception V1确
立下来的。
-
Inception V1
Inception Module基本组成结构有四个成分11卷积,33卷积,55卷积,33最大池化。最后对四个成分运算结果进行通道上组合。这就是 Inception Module的核心思想。通过多个卷积核提取图像不同尺度的信息,最后进行融合,可以得到图像更好的表征。 -
Inception V2
1.用两个33卷积代替55卷积,可以降低参数量。
2.提出和采用了 Batch Normalization -
Inception V3
借鉴 Factorization into small convolutions的思想,将一个二维卷积拆分成两个较小卷积,例如将77卷积拆成17卷积和7*1卷积
1.可以降低参数量。
2.通过这种非对称的卷积拆分,比对称的拆分为几个相同的卷积效果更好,可以处理更多,更丰富的空间特征。 -
Inception V4
借鉴了 ResNet思想,在 Inception module多链路并行的结构上,增加了ResNet直连链路。
76 pytorch实现VGG16的网络
我们可以从两个阶段来理解VGG16网络,第一阶段为特征提取,第二阶段为分类功能头。在特征提取阶段,VGG16分为了5个con+ maxpooling网络块,并且所有的
conv层都是3x3的卷积层,每个块内部卷积的输入与输出 channel维度是一的。在分类功能头部分,由三个全连接线性层加一个 Softmax层做多分类输出。如下图所示:
基于此我们的网络实现可如下进行(我将PyTorch官方的vgg16的实现做了一定的删减,只保留了vgg16的核心内容,以及可扩展的接口结构并对关键代码加入了注释帮助大家理解),注意:每个conv层和FC层之后都加入了一个非线性层: PyTorch中用于分类的nn. CrossEntropyLoss损失函数,本身包含 Sof tmax操作,所以在网络中没有加入 Softmax层。
77 faster RCNN中RPN相比之前做了什么优化
经典的检测方法生成检测框都非常耗时,如 OpenCV adaboost使用滑动窗口+图像金字塔生成检测框:或如R-CNN和 Fast R-CNN使用(Selective Search)方法生成检测框。而Faster RCN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是 Faster R--CNN的巨大优势,能极大提升检测框的生成速度。
上图展示了RPN网络的具体结构可以看到RPN网络实际分为2条线,上面一条通过 softmax分类 anchors获得 positive和 negative分类,下面一条用于计算对于 anchors的 bounding box regression偏移量,以获得精确的 proposal。而最后的 Proposal层则负责综合 positive anchors和对 bounding box regression偏移量获取 proposals,同时剔除太小和超出边界的 proposals。
78 dropout 是否用在测试集上
在训练的时候 Dropout打开,功能类似于每次将网络进行采样,只训练一部分网络。而训练结束,在测试集上做测试的时候,就要将这些每次训练好的“子网络”集成起来,一起做决策。所以要关闭Dropout,即关闭网络采样功能。
79 YOLO v3进行了几次下采样
这道题目是对 YOLOv33网络结构的考察。 YOLOv33网络对原始的输入数据进行了5次下采样,采样得到的最小特征图示对原图像进行32倍缩放后的结果;并分别在8倍,16倍和32倍下采样之后进行了bbox的分类和回归定位。
80 列举几个梯度下降的方法
梯度下降方法的演化通常可以从以下三个方面进行总结:
梯度更新计算设计的样本数
- Batch Gradient Descent (BGD)
批量梯度下降,对所有的样本计算梯度后求平均,并更新参数
下降速度很慢,受到内存大小的限制 - Stochastic Gradient Descent (SGD)
随机梯度下降,对每个样本计算梯度,并更新一次参数
SGD的梯度更新速度快
由于样本之间差异的影响,导致梯度下降的方向和大小出现剧烈的波动 - Mini-batch Gradient Descent
小批量梯度下降,每一次梯度更新是基于对小批量样本计算梯度后求平均完成的。
综合了以上两种梯度下降方法的有点,梯度更新快且稳定。
在内存相对较小的情况下,也可以完成对大训练集的训练工作。 - 梯度下降方法的一般公式为:
其中表示上一轮更新后参数值,表示学习率。
梯度下降方向的优化 - Momentum动量算法
其中代表动量,它是之前t次梯度的带权累加:表示历史动量影响的权重。
利用惯性,做动量更新的全局平衡,即每次更新时不仅要考虑当前梯度方向还要考虑历史累积的方向。当前梯度与上次梯度进行加权,如果方向一致,则累加导致更新步长变大;如果方向不同,则相互抵消中和导致更新趋向平衡 - Nesterov Accelerated Gradient (NAG)
梯度不是根据当前位置计算出来的,而是在移动之后的位置计算梯度
这个改进的目的就是为了提前看到前方的梯度并做一定的补偿与平衡。如果
前方的梯度和当前梯度目标一致,两者相加就获得比较大的更新:如果前方梯度同当前梯度不一致,两者相加在数值大小上获得相减的效果,即得到比较小的更新。
梯度更新大小的优化 - Adagrad (Adaptive Subgradient)
一般是一个极小值,作用是防止分母为0.表示了前t步参数梯度的平方累加,把沿路的 Gradient的平方根,作为正则化项
。训练前期,梯度较小,使得正则化项很小,放大梯度。
。训练后期,梯度较大,使得正则化项很大,缩小梯度。
RMSprop
RMSProp算法不是像 AdaGrad算法那样暴力直接的累加平方梯度,而是加了一个衰减系数来控制历史信息的获取多少
综合以上 - Adam
同 RMSprop相比,Adam在对梯度平方(二阶)估计的基础上增加了对梯度(一阶)的估计,相当于采用了 Momentum动量方法。
由于和通常都初始化为0,因此在训练初期或者,接近1时,估计的期望往往偏向于0,为了解决这种偏置,增加了偏置矫正:
。梯度更新公式为:
81 RNN 发生梯度消失的原因是什么?
RNN发生梯度消失的主要原因来自于长程依赖问题。
我们假设最左端的输入为给定值,且神经元中没有激活函数,则前向过程如下:
在t=3时刻,损失函数为,那么如果我们要训练RNN时,实际上就是对,,,,求偏导,并不断调整它们以使得L3尽可能达到最小。那么我们得到反向传播的公式为:
将上述偏导公式与第三节中的公式比较我们发现,随着神经网络层数的加深对而言并没有什么影响,而对,会随着时间序列的拉长而产生梯度消失和梯度爆炸问题。
根据上诉分析整理一下公式可得,在任意时刻t对,求偏导的公式为:
我们发现,导致梯度消失和爆炸的就在于将激活函数展开得到:
而在这个公式中,tanh的导数总是小于1的,如果也是一个大于0小于1的值,那么随着t的增大,上述公式的值越来越趋近于0,这就导致了梯度消失问题。(梯度爆炸问题的原理类似)
82 RNN 中使用 ReLU 可以解决梯度消失问题吗?
虽然ReLU在值大于0处,导数值恒为1可以使得激活函数的导数不至于很小,产生梯度饱和的问题,但是在RNN中,ReLU并不能很好的解决梯度消失的问题,理由如下。
参照题目(RNN发生梯度消失的原因是什么?)的推导过程,我们现将
替换为:
那么
所以,即使采用了ReLU作为激活函数,如果是个大于0小于1的值,也会导致梯度消失的问题。
83 LSTM为什么能解决梯度消失/爆炸的问题 ?
LSTM可以通过门控机制来解决梯度消失和爆炸的问题。
从题目(RNN发生梯度消失的原因是什么?)的分析中,我们知道,RNN产生梯度消失和梯度爆炸的原因在长程依赖。而在LSTM使用门控函数,有选择的让一部分信息通过。门控是由一个sigmoid单元和一个逐点乘积操作组成, sigmoid单元输出1或0,用来判断通过还是阻止,然后训练这些门的组合。所以,当门是打开的(梯度接近于1),梯度就不会消失。并且 sigmoid不超过1,那么梯度也不会爆炸。
84 GRU 和 LSTM 的区别
LSTM的结构和公式如下
遗忘门:
输入门:
输出们:
当前单元状态:
当前时刻的隐层输出:
而GRU的结构和公式如下
两者的区别有:
1.GRU没有输出门
2.它将隐藏状态和cell的记忆状态合并在一起;
3.GRU的参数更少,因而训练稍快或需要更少的数据来泛化;
4.如果有足够的数据,LSTM的强大表达能力可能会产生更好的结果。
85 LSTM算法的不足之处有哪些?
1.LSTM模型出现了,有点像 ResNet模型,可以绕过单元从而记住更长的时间步骤(LSTM之所可以解决梯度问题是因为它避免了无休止的连乘,而是边加边乘,这和resnet本身就是异曲同工的)。但如果面对更长序列的记忆和训练问题,LSTM仍然会暴露出梯度消失的问题。
2.计算费时。每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。
3.LSTM的长时记忆能力有限。
4.容易过拟合,并且 Dropout方法通常不能给LSTM模型带来泛化能力的大幅提升。
86 写出Attention的公式
Attention机制,里面的q,k,v分别代表什么
Attention机制中,Q,K,V分别指的是Query,Key和 Value;每个输入向量的Q,K,V向量是由该输入向量分别与权重矩阵,,做相乘计算得到。通过当前位置的Q与其他位置的K做相乘计算,可得到当前位置对目标位置的 attention权重;再将这个attention权重(经过Softmax后)与目标位置的 Value相乘就得到了当前位置对目标位置的 attention编码。将当前位置对所有位置(包括它自己) attention编码进行相加就得到了当前位置的输出编码。
87 Transformer 中使用多头注意力的好处是什么
将模型分成多个头,形成多个子空间,可以让模型去关注不同方面的信息,从而捕捉更加丰富的特征。
88 Attention 中 self-attention 的时间复杂度
假设输入的序列是n,d为 Embedding的维度。那么Self -attention的时间复杂度是0(n*2,d)。因为Self -attention-的公式为:
包括三个步骤:相似度的计算, Softmax和加权平均
- 对于相似度的计算是Q,K做点乘,其实就是看成是矩阵(n,d)*(n,d)=,得到一个(n,d)的矩阵。
- Softmax的计算,时间复杂度为
- 加权平均可以看作大小为(n,n)和(n,d)的两个矩阵相乘:(n,n)*(n,
d)=,得到一个(n,d)的矩阵 - 因此Self-attention的时间复杂度
89 Transformer 中的 encoder 和 decoder 的异同点
相同点
- 1.在 Transformer网络中, Encoder与 Decoder部分基础模块的数量是一样,都
为6个。 - 2.每个 Encoder或者 Decoder模块都是由Sub-Layer+ Layer Normalization
构成基础层。而Sub-Layer都分别用了 Feed Forward Layer和 Multi-head
Attention Layer.
不同点
- 1.在 Decoder模块中, Multi-head Attention Layer有两层,一层为Masked
Multi-Head Attention另外一层为 Encoder-Decoder Multi-Head Attention
而 Encoder模块中只有一层 Multi-Head Attention. - 2.在 Masked MultiHead Attention中做了Mask操作,即解码序列未到达的位
值将会通过Mask屏蔽掉。 -
3.在 Encoder-Decoder Multi-Head Attention中,来自最后一层 Encoder的k,v
也会被加入计算中。
90 Bert 和 GPT 的异同点
注:在不做特别说明的时候GPT通常指的是GPT-2
共同点:
- 1.Bert和GPT都采用 Transformer作为底层结构
- 2.Bert和GPT都是通用的语言模型,在很多任务上达到了惊人的效果。
不同点:
- 1.模型 - Bert和GPT虽然都采用 transformer,但是Bert使用的是transformer的 encoder,即:Self -Attention,是双向的语言模型;而GPT用的是 transformer中去掉中间 Encoder-Decoder Attention层的 decoder,即: Marked Self Attention,是单向语言模型。
- 2.使用 - Bert是pre -training+fine -tuning,针对具体的任务时需要做fine -tuning,而在GPT中只需要做 pre-training就可以直接使用。
- 3.输入向量 - GPT是 token embedding+ position embedding;Bert是 token embedding+ position embedding+ segment embedding.
- 4.参数量 - Bert是3亿参数量;而GPT是15亿参数量。
- 5.模型训练 - Bert在训练时引入 Marked LM和 Next Sentence Prediction;而GPT只是单纯的用单向语言模型进行训练,没引入这两个。
- 6.适用任务 - Bert不能做生成式任务,而GPT可以。
91 Self-attention对比RNN和CNN在处理NLP任务时分别有哪些优势
在处理NLP任务时,Self -attention与RNN和CNN相比最显著的优势是可以处理长序列问题。当采用CNN或者RNN来处理可变长的NLP序列任务时,可构建如下图示的网络来处理:
a) 卷积神经网络
b) 循环神经网络
但是,我们从图上可以看出来,无论是卷积神经网络还是循环神经网络在处理此类时不可避免的只能进行局部编码。1)对于CNN来说,受到感受野大小的限制,下一层神经网络上的每一个元素只能局部地感受到来此上层的信息。2)对于RNN来说,梯度消失问题导致了RNN只能建立相对短距离的依赖。
如果要建立的全局的依赖关系,传统的神经网络只能通过全连接网络或者多层CNN网络的堆叠来扩大网络的感受野。而这样的网络又没有办法很好得处理可变长度的序列输入。
92 CNN 中的 1*1 卷积有什么作用
- 1)通道的升降
卷积层参数量的计算公式为:
number_ params=in_ channel * kernel_size * kernel_sizeout_ channel
如果要使用一个3x3的卷积做通道的升降,那么参数量将会是用11卷积做通道升降时的9倍。当输入通道和输出通道的维数很大的时候;这样参数量的增加是非常惊人的。 - 2)增强了通道之间的交互和网络的表达能力
举个例子,在一个网络中,如果我们要用一个3x3的卷积来对一个有512 channel个
的 feature map做卷积操作;我们可以先采用一个1x1的卷积对这个 feature map做通道的降维,降到128维;然后在做33的卷积操作,最后再用1x1卷积做通道的升
维,升到512维。这个方案和我们直接用3x3的卷积进行卷积操作相比。1)参数数量上大大减少,直接用3x3的卷积需要的参数量为51251233≈2.35M,而采用11
卷积的方案,参数量为512128112+12812833≈0.28M;可以看到参数量几乎等于原来的1/9。2)通道之间的交互增强在1x1卷积方案中,通道之间的交叉计算做了3次,而3*3原始方案中只进行了1次。3)表达能力增强通常在每次卷积操作之后会加一个非线性层;那么在1x1网络方案中非线性层的数量为3层,而原始3x3网络方案中非线性层之后1层。
93 CNN 和 RNN 在 NLP 应用中各自的优缺点
从结构上来分析,CNN对样本进行逐层抽取,不断扩大感受野,可以应用文本的分类
任务;而RNN网络具有记忆功能对序列建模任务上具有优势。
在IBM2017年的一篇论文中 Comparative Study of CNN and RNN for Natural
Language Processing发现,CNN对句子匹配任务上,较RNN网络具有一定的优势;在某些文本分类任务上,具有和大致RNN相当的能力;而对于序列任务和上下文依赖的任务,RNN具有明显的优势。
另外,当句子长度变长之后,CNN的表现明显不如RNN(如下图)。直观来看,在短句长的任务上,CNN由于其卷积的功能对句子的整体结构有一个总揽的能力,但在长句长时,CNN只能处理其窗口内的信息,相邻窗口的信息只能借助后一层的卷积层来达到信息的融合,这对卷积窗口和移动的步长等等参数依赖是很大的,因此CNN处理NLP任务实际上是具有建模容易、调参难的特点。而RNN则训练时间会相对长很多。
论文地址: https: //arxiv. org/abs/1702. 01923
94 为什么transformer块使用LayerNorm而不是BatchNorm?
BatchNorm操作的是同一个神经元在atch的不同的样本之间做Normalizaiton;做完 Normalization之后,网络的学习可以反映mini -batch样本的整体分布情况;进而平衡样本之间的差异,使得网络学习更加稳定。而在 Transformer中,每个输入样本是一个句子,句子有长有短 Transformer网络中的元素与样本中单个词有对应关系。由于句子同一个 Batch中,句子长短通常是不一样的,通常较短的句子还会有padding补零操作;而且即使是同一个位置,每个词在句子中充当的角色也有很大的差异;所以如果采用 Batch normalization容易引入比较大的噪声。相比之下 Layer Normalization中对同一个样本中,同一层网络中的元素进行 normalization会更加合适。另外Layer Normalization也不容易受 Batch size大小的影响。
95 Self-Attention 中的计算为什么要使用根号缩放
假设两个维向量每个分量都是一个相互独立的服从标准正态分布的随机变量,那么他们的点乘结果会变得很大,并且服从均值为0,方差为的分布,而很大的点乘会让 Softmax函数处在梯度很小的区域(我们在讲 Softmax和 Sigmoid关系的时候讲过,面对二分类情况的时候 Softmax就退化成了 Sigmoid函数;我们知道函数在输入数值较大的区域存在梯度饱和的现象),对每一个分量除以可以让点乘的方差变成1。
96 为什么self-attention model在长距离序列中如此强大
- 1)没有因梯度消失而导致的长序列信息“遗忘”的问题;
- 2)采用全局编码的方式来避免类似于CNN所产生的局部依赖的问题;
- 3)利用Word Embedding+ Position Embedding相结合的方式来处理文本中的序列信息;
- 4)利用注意力机制来“动态”地生成不同连接的权重,从而处理变长的信息序列。
97 Bert 类模型中的绝对位置 embedding 和 相对位置 embedding 怎么理解,各自的优缺点和使用场景
绝对位置 Embedding-Learned Positional Embedding
直接对不一样的位置随机初始化一个 postion embedding,加到 word embedding上输入模型,做为参数进行训练。
相对位置 Embedding-Sinusoidal Positional Encoding
使用正余弦函数表示绝对位置,经过二者乘积获得相对位置。
98 Bert 的预训练任务有哪些,各自的作用是什么
Bert预训练任务有两个 masked language model和 next sentence prediction
Masked Language Model(MLM):在一句话中mask掉几个单词然后对mask掉的单词做预测。随机将输入中15%的词遮蔽起来,通过其他词预测被遮盖的词(这就是典型的语言模型),通过迭代训练,可以学习到词的上下文特征、语法结构特征、句法特征等,保证了特征提取的全面性,这对于任何一项NLP任务都是尤为重要。
Next Sentence Prediction(NSP):判断两句话是否为上下文的关系。输入句子A和句子B,判断句子B是否是句子A的下一句,通过迭代训练,可以学习到句子间的关系,这对于文本匹配类任务显得尤为重要。
99 Roberta、Albert 分别对 Bert 做了哪些改进
- Roberta的改进:
- 1)在模型的规模、算力和数据上:
- a.更多的训练数据,16G->160G更长的训练时间
- b.更大的mini-Batch 256->8K
- 2)在训练方法上:
- a.移去去掉NSP任务 - 使得Bert可以学习更长的依赖关系
- b.动态Mask - 对Mask的内容进行了自助抽样,丰富了训练数据。
- ALBERT的改进:
- 1)两种减少参数方法:矩阵分解、参数共享矩阵分解:在两个大维度之间加入一个小维度,从0(VH)变为0(VE+EH),其
中H远远大于E,以达到降维的作用
参数共享:交叉层参数共享 - 2)SOP代替 Next Sentence Prediction
NSP将主题预测(topic prediction)和连贯性预测(coherence prediction)融合起来学习比较困难,而SOP将负样本换成了同一篇文章中的两个逆序的句子,进而消除主题预测。通过调整正负样本的获取方式去除主题识别的影响,使预训练更关注于句子关系一致性预测 - 3)移出Dropout
100 XLNet 如何实现 Permutation Language Model
PLM(Permutation Language Model)是 XLNet的核心思想,首先将句子的token随机排列,然后采用AR(Autoregressive Language Model)的方式预测句子末尾的单词,这样XLNet即可同时拥有AE和AR(Autoencoder LM)的优势。它按照从左到右的顺序输入数据,也就是说只能看到预测单词的上文,而我们希望在看到的上文中能够出现下文单词,这样就能在只考虑上文的情况下实现双向编码,为了到达这样的效果,XLNet将句子中的单词随机打乱顺序,这样的话对于单词xi,它原先的上下文单词就都有可能出现在当前的上文中了,如下图所示,对于单词x3,改变原先1、2、3、4的排列组合,它的上文中就可能出现x4,这是虽然模型只考虑上文,但是却包含了原先上下文的信息。不过在实际微调中我们不能直接去改变原始输入,输入的顺序还应该是1234,所以顺序的改变应该发生在模型内部,这就用要 Attention mask机制,通过乘以一个mask矩阵的方式来改变序列中单词的顺序。