AI

AI基础知识总结

2020-11-11  本文已影响0人  顾子豪

1 为什么要对特征做归一化

特征归一化是将所有特征都统一到一个大致相同的数值区间内,通常为[0,1]。常用的特征归一化方法有:

在采用基于梯度更新的学习方法(包括线性回归,逻辑回归,支持向量机,神经网络等)对模
型求解的过程中,未归一化的数值特征在学习时,梯度下降较为抖动模型难以收敛,通常需要较长的时间模型才能收敛;而归一化之后的数值特征则可以使得梯度下降较为稳定,进而减少梯度下降的次数,也更容易收敛。下图中,左边为特征未归一化时模型的收敛过程:而右边是经过特征归一化之后模型的收敛过程。


2 什么是组合特征?如何处理高维组合特征?(这里的特征组合主要指的是类别特征(Categorical Feature)之间的组合)

狭义的组合特征即将类别特征(Categorical feature)两个或者多个特征组合(数学里面的组合概念)起来,构成高阶组合特征。
比如:假设Mac笔记本电脑的CU型号和SSD大小对是否购买行为的影响用下面的表格表示



那么CPU型号和SSD大小的组合特征对是否购买行为的影响为


组合特征的不同取值的个数(number of unique values)为单个特征的不同取值的个数的乘积。假设数据的特征向量为X=(x1,x2,......,x),\left|<x_{i}, x_{j}>\right|=\left|x_{i}\right| *\left|x_{j}\right|其中<x_{i}, x_{j}>为特征xi和特征xj的组合特征,|xi|表示特征xi不同取值的个数,|xj|表示特征xj不同取值的个数。
假设采用以线性模型为基础的模型来拟合特征时,比如以逻辑回归为例:
Y=\operatorname{sigmoid}\left(\sum_{i} \sum_{j} w_{i j}<x_{i}, x_{j}>\right)
需要学习的参数w_{i j}的长度为\left|<x_{i}, x_{j}>\right|;如果||x_{i}|=m,| x_{j} \mid=n,则参数规模为mn。当m和n非常大时,经过特征组合后的模型就会变得非常复杂。一个可行的方法就是,做特征的 embedding,即将xi,xj分别用长度为k的低维向量表示(k<<m,k<<n)那么学习参数的规模则变为mk+nk+kk.

3 请比较欧式距离与曼哈顿距离?

欧式距离,即欧几里得距离,表示两个空间点之间的直线距离。
d=\left(\sum_{k=1}^{n}\left|a_{k}-b_{k}\right|^{2}\right)^{\frac{1}{2}}
曼哈顿距离,所有维度距离绝对值之和。
d=\sum_{k=1}^{n}\left|a_{k}-b_{k}\right|
在基于地图,导航等应用中,欧式距离表现得理想化和现实上的距离相差较大;而曼哈顿距离就较为合适;另外欧式距离根据各个维度上的距离自动地给每个维度计算了一个贡献权重,这个权重会因为各个维度上距离的变化而动态的发生变化;而曼哈顿距离的每个维度对最终的距离都有同样的贡献权重。

4 为什么一些场景中使用余弦相似度而不是欧式距离

假设有A和B两个向量,其余弦相似度定义为\cos (A, B)=\frac{A+B}{\left[A\left\|_{2}\right\| B \|_{2}\right.}即两个向量夹角的余弦。

5 One-hot的作用是什么?为什么不直接使用数字作为表示

One-hot 主要用来编码类别特征, 即采用哑变量(dummy variables) 对类别进行编码。它的作用 是避免因将类别用数字作为表示而给函数带来抖动。直接使用数字会给将人工误差而导致的假 设引入到类别特征中,比如类别之间的大小关系,以及差异关系等等。

6 在模型评估过程中,过拟合和欠拟合具体指什么现象?

过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现好,但是在测试集和新数据上的表现较差。欠拟合指的是模型在训练和预测时表现都不好。用模型在数据上的偏差和方差指标来表示就是。欠拟合时候,偏差和方差都比较大,而过拟合时,偏差较小但方差较大。

7 降低过拟合和欠拟合的方法

8 L1和L2正则先验分别服从什么分布

L1正则先验分布是 Laplace分布,L2正则先验分布是 Gaussian分布
Laplace分布
f(x \mid \mu, \delta)=\frac{1}{2 \delta} \exp \left(-\frac{|x-\mu|}{\delta}\right)
Gaussian分布
f(x \mid \mu, \delta)=\frac{1}{\sqrt{2 \pi} \delta} \exp \left(-\frac{(x-\mu)^{2}}{2 \delta^{2}}\right)
接下来从最大后验概率的角度进行推导和分析。在机器学习建模中,我们知道了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均值的高斯分布,即
P(w)=\frac{1}{\sqrt{2 \pi} \delta} \exp \left(-\frac{w^{2}}{2 \delta^{2}}\right)
则有
\begin{aligned} \log P(w) &=\log \Pi_{j} P\left(w_{j}\right)=\log \sum_{j}\left[\frac{1}{ \sqrt{2 \pi \delta}} \exp \left(-\frac{w_{j}^{2}}{2 \delta^{2}}\right)\right] \\ =&-\frac{1}{2 \delta^{2}} \sum_{j} w_{j}^{2}+C \end{aligned}
可以看到,在高斯分布下的效果等价于在代价函数中增加L2正则项。若假设服从均值为0,参数为的拉普拉斯分布,即
P\left(w_{j}\right)=\frac{1}{2 \delta} \exp \left(-\frac{|w|}{\delta}\right)
则有
\begin{aligned} \log P(w)=& \log \prod_{j} P\left(w_{j}\right)=\log \sum_{j}\left[\frac{1}{2 \delta} \exp \left(-\frac{\left|w_{j}\right|}{\delta}\right)\right] \\ &=-\frac{1}{\delta} \sum_{j}\left|w_{j}\right|+C \end{aligned}
可以看到,在拉普拉斯分布下的效果等价于在代价函数中增加L1正项.

9 对于树形结构为什么不需要归一化?

决策树的学习过程本质上是选择合适的特征,分裂并构建树节点的过程;而分裂节点的标准是由树构建前后的信息增益,信息增益比以及基尼系数等指标决定的。这些指标与当前特征值的大小本身并无关系。

10 什么是数据不平衡,如何解决?

数据不平衡主要指的是在有监督机器学习任务中,样本标签值的分布不均匀。这将使得模型更倾向于将结果预测为样本标签分布较多的值,从而使得少数样本的预测性能下降。绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。

11 逻辑回归相比线性回归,有何异同?

逻辑回归和线性回归之间既有区别又有联系。逻辑回归和线性回归最大的不同点是逻辑回归解决的是分类问题而线性回归则解决的是回归问题。逻辑回归又可以认为是广义线性回归的一种特殊形式,其特殊之处在于其目标(labeltarget的取值服从二元分布。
所谓逻辑回归是一种特殊的广义线性回归,我们可以通过狭义线性回归到逻辑回归的转化过程来理解
狭义线性回归的表达式可表示为
y = w*x + b
如果我们希望这个模型可以对二分类任务做出预测,即目标满足0,1分布。那么希望预测出来的值经过某种转换之后,大部分可以分布在0,1两个值附近。


我们发现 sigmoid函数可以帮助我们做这样的转换, sigmoid函数的表达式为
\delta(z)=\frac{1}{1+e^{-z}}
令:
y=\delta(z)
则:
\log \frac{y}{1-y}=z=w * x+b
可以看到相比于狭义线性回归采用作为预测结果,逻辑回归则采用log作为预测结果。逻辑回归还可以表示为:
y=\operatorname{sigmoid}(w * x+b)
通过以上的步骤推演,我们知道逻辑回归的求值计算其实就是在线性回归的基础上,再做一个 sigmoid计算。所以它们都可以用相同的方法比如梯度下降来求解参数。

12 回归问题常用的性能度量指标

13 分类问题常用的性能度量指标


准确率所有预测正确的样本(正样本预测为正负样本预测为负)与所有样本的比值。
\text {Accuracy}=\frac{T P+T N}{T P+F N+F P+T N}
精确率-精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
\text { Precision }=\frac{T P}{T P+F P}
召回率召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为
负类(FN)
\text {Recall}=\frac{T P}{T P+F N}
F1值-F1值是精确率和召回率的调和值
\begin{equation} F 1=2 \cdot \frac{\text {Precision } * \text { Recall}}{\text {Precision }+ \text { Recall}} \end{equation}
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,则
P(Y=1 \mid x)=p(x), P(Y=0 \mid x)=1-p(x)
写出似然函数来为
L(w)=\prod_{i=1}^{n} p\left(x_{i}\right)^{y_{i}}\left(1-p\left(x_{i}\right)\right)^{1-y_{i}}
其中n为样本数,y是 label取值为0或1。对上面的似然函数两边求对数可得
\log L(w)=\sum_{i=1}^{n}\left[y_{i} \log p\left(x_{i}\right)+\left(1-y_{i}\right) \log \left(1-p\left(x_{i}\right)\right)\right]
极大似然估计方法就是要求函数参数使得 log最大,所以我们也可以将目标定为求函数参数使得logl(w)最小。取平均之后,就得到最终的目标函数为:
J(w)=-\frac{1}{n} \log L(w)=-\frac{1}{n} \sum_{i=1}^{n}\left[y_{i} \log p\left(x_{i}\right)+\left(1-y_{i}\right) \log \left(1- p\left(x_{i}\right)\right)\right]

15 逻辑回归处理多标签分类问题时,一般怎么做?

如果y不是在[0,1]中取值,而是在K个类别中取值,这时问题就变为一个多分类问题。有两种方式可以处理该类问题:
当K个类别不是互斥的时候,即每次对样本进行分类时,不需要考虑它是不是还可能是别的类别;那么我们可以为每个类别建立一个逻辑回归模型。用它来判断样本是否属于当前类别。
当K个类别是互斥的时候,即y=i的时候意味着y不能取其他的值,这种情况下 Softmax回归更合适一些。 Softmax回归是直接对逻辑回归在多分类的推广,相应的模型也可以叫做多元逻辑回归(Multinomial Logistic Regression)模型通过softmax函数来对概率建模,具体形式如下
P=(y=i \mid x, \theta)=\frac{e^{\theta_{i} x}}{\sum_{j}^{K} e^{\theta_{j} x}}
决策函数为:
y^{*}=\operatorname{argmax}_{i} P(y=i \mid x, \theta)
对应的损失函数为:
\begin{equation} J(\theta)=-\frac{1}{N} \sum_{i}^{N} \sum_{j}^{K} 1\left(y_{i}=j\right) \log \frac{e^{\theta_{i} x}}{\sum_{k}^{K} e^{\theta_{k} x}} \end{equation}

16 写出全概率公式&贝叶斯公式

全概率公式:
P(A)=\sum_{n} P\left(A \mid B_{n}\right) P\left(B_{n}\right)
贝叶斯公式:
P(A \mid B)=\frac {P(B \mid A) * P(A)} {P(B)}

17 朴素贝叶斯为什么“朴素naive”?

朴素贝叶斯,(Navie Bayesian)中的朴素可以理解为是“简单、理想化”的意思,因为
“朴素”是假设了样本特征之间是相互独立、没有相关关系。这个假设在现实世界中是很不真实的,属性之间并不是都是互相独立的,有些属性也会存在相关性,所以说朴素贝叶斯是一种很“朴素”的算法。

18 朴素贝叶斯有没有超参数可以调?

基础朴素贝叶斯模型的训练过程,本质上是通过数学统计方法从训练数据中统计先验概率P(c)和后验概率P(xi|c);而这个过程是不需要超参数调节的。所以朴素贝叶斯模型没有可调节的超参数。虽然在实际应用中朴素贝叶斯会与拉普拉斯平滑修正(Laplacian smoothing correction)一起使用,而拉普拉斯平滑修正方法中有平滑系数这一超参数,但是这并不属于朴素贝叶斯模型本身的范畴。

19 朴素贝叶斯的工作流程是怎样的?

朴素贝叶斯的工作流程可以分为三个阶段进行,分别是准备阶段、分类器训练阶段和应用阶段。
准备阶段:这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,去除高度相关性的属性(如果两个属性具有高度相关性的话,那么该属性将会在模型中发挥了2次作用,会使得朴素贝叶斯所预测的结果向该属性所希望的方向偏离,导致分类出现偏差),然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。(这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响。)
分类器训练阶段:这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。从公式上理解,朴素贝叶斯分类器模型的训练目的就是要计算一个后验概率P(c|x)使得在给定特征的情况下,模型可以估计出每个类别出现的概率情况。
P(c \mid x)=\frac{P(c) P(x \mid c)}{P(x)}=\frac{P(c)}{P(x)} \prod_{i=1}^{d} P\left(x_{i} \mid c\right)
因为P(x)是一个先验概率,它对所有类别来说是相同的;而我们在预测的时候会比较每个类别相对的概率情况,选取最大的那个作为输出值。所以我们可以不计算P(x)。所以贝叶斯学习的过程就是要根据训练数据统计计算先验概率P(c)和后验概率P(x|c)
应用阶段:这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系并选出概率值最高所对应的类别;用公式表示即为:
h(x)=\operatorname{argmax}_{c \in y} P(c) \prod_{i=1}^{d} P\left(x_{i} \mid c\right)

20 朴素贝叶斯对异常值敏不敏感?

基础的朴素贝叶斯模型的训练过程,本质上是通过数学统计方法从训练数据中统计先验概率P(c)和后验概率P(xic),少数的异常值,不会对统计结果造成比较大的影响。所以朴素贝叶斯模型对异常值不敏感。

21 什么是集成学习算法?

集成学习(Ensemble Learning)就是将多个机器学习模型组合起来,共同工作已达到优化算法的目的。

22 集成学习主要有哪几种框架, 并简述它们的工作过程?

集成学习主要的集成框架有, Bagging, Boosting和Stacking.其中 Bagging和Boosting为同质集成,而 Stacking和 Boosting为异质集成。

23 Boosting算法有哪两类,它们之间的区别是什么?

Boosting算法主要有 AdaBoost( Adaptive Boost)自适应提升算法和Gradient
Boosting梯度提升算法。最主要的区别在于两者如何识别和解决模型的问题。
AdaBoost用分错的数据样本来识别问题,通过调整分错的数据样本的权重来改进模型。
Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型。

24 什么是偏差和方差?

偏差指的是预测值的期望与真实值之间的差距,偏差越大,预测值越偏离真实数据的标签。
方差描述的是预测值的变化范围,离散程度,也就是离预测值期望的距离,方差越大,数据的分布越分散。
可通过打靶射击的例子来做类比理解,我们假设一次射击就是一个机器学习模型对一个样本进行预测,射中红色靶心位置代表预测准确,偏离靶心越远代表预测误差越大。偏差则是衡量射击的蓝点离红圈的远近射击位置即蓝点离红色靶心越近则偏差越小,蓝点离红色靶心越远则偏差越大;方差衡量的是射击时手是否稳即射击的位置蓝点是否聚集,蓝点越集中则方差越小,蓝点越分散则方差越大。


25 为什么说Bagging可以减少弱分类器的方差,而Boosting 可以减少弱分类器的偏差?

Bagging算法对数据重采样,然后在每个样本集训练出来的模型上取平均值。假设有n个随机变量,方差记为\sigma^{2},两两变量之间的相关性是0<p<1,则n个随机变量的均值的方差为:
\operatorname{var}\left(\frac{1}{n} \sum_{i=1}^{n} X_{i}\right)=\frac{\delta^{2}}{n}+\frac{n-1}{n} \rho \delta^{2}
上式中随着n增大,第一项趋于0,第二项趋于p\sigma^{2},所以 Bagging能够降低整体方差。在随机变量完全独立的情况下,n个随机变量的方差为\frac{\delta^{2}}{n},n个随机变量的方差是原来的1/n。
Bagging算法对n个独立不相关的模型的预测结果取平均,方差可以得到减少,如果模型之间相互独立,则集成后模型的方差可以降为原来的1/n,但是在现实情况下,模型不可能完全独立,为了追求模型的独立性, Bagging的方法做了不同的改进,比如随机森林算法中,每次选取节点分裂属性时,会随机抽取一个属性子集,而不是从所有的属性中选最有属性,这就为了避免弱分类器之间过强的关联性,通过训练集的重采样也能够带来弱分类器之间的一定独立性这样多个模型学习数据,不会因为一个模型学习到数据某个特殊特性而造成方差过高。
设单模型的期望为μ,则 Bagging的期望预测为:
E\left(\frac{1}{n} \sum_{i=1}^{n} X_{i}\right)= \frac{1}{n} E\left(\sum_{i=1}^{n} X_{i}\right)=E\left(X_{i}\right) \approx \mu
说明 Bagging整体模型的期望近似于单模型的期望,这意味整体模型的偏差也与单模型的偏差近似。所以Bagging不能减少偏差。
Boosting算法训练过程中,我们计算弱分类器的错误和残差,作为下一个分类器的输入,这个过程本身就在不断减小损失函数,其偏差自然逐步下降。但由于是采取这种串行和自适应的策略,各子模型之间是强相关的,于是子模型之和并不能显著降低方差。所以说Boosting主要还是靠降低偏差来提升预测精度。

26 简述一下随机森林算法的原理

随机森林算法是 Bagging集成框架下的一种算法,它同时对训练数据和特征采用随机
抽样的方法来构建更加多样化的基模型随机森林具体的算法步骤如下:

27 随机森林的随机性体现在哪里?

随机森林的随机性体现在每颗树的训练样本是随机的,树中每个节点的分裂属性集合
也是随机选择确定的。

28 随机森林算法的优缺点?

29 随机森林为什么不能用全样本去训练m棵决策树?

随机森林的基学习器是同构的,都是决策树,如果用全样本去训练m棵决策树的话;基模型之间的多样性减少,互相相关的程度增加,不能够有效起到减少方差的作用对于模型的泛化能力是有害的。

30 随机森林和GBDT的区别?

31 简述GBDT原理

32 GBDT如何用于分类?

GBDT在做分类任务时与回归任务类似,所不同的是损失函数的形式不同。我们以二分类的指数损失函数为例来说明:
我们定义损失函数为:
L(y, f(x))=\exp (-y f(x))
其中y_{i}∈y={-1,+1},则此时负梯度为
r _ { i m } = - [ \frac { \partial L ( y _ { i } , F ( x _ { i } ) ) } { \partial F ( x _ { i } ) } ] _ { F ( x ) = F _ { m - 1 ( x ) } } = y _ { i } \exp ( - y _ { i } f ( x _ { i } ) ) , i = 1,2 , \ldots , n
对于各个叶子节点最佳拟合的值为:
\gamma _ { j m } = \arg \min _ { \gamma } ( \sum _ { x _ { i } \in R _ { j m } } \exp ( - y _ { i } ( F _ { m - 1 } ( x _ { i } ) + \gamma ) ) )
通过与GBDT伪代码中步骤b和步骤C类比来理解。

33 GBDT常用损失函数有哪些?

回归问题:
MAE,MSE,RMSE(见回归问题常用的性能度量指标?)
补充
Huber Loss(Mae和MSE结合)
1)在0附近可导
2)Huber大部分情况下为MAE,只在误差很小的时候变成了MSE。
L _ { \delta } ( y , f ( x ) ) = \frac { 1 } { N } \sum _ { i = 1 } ^ { N } \left\{ \begin{array} { l } { \frac { 1 } { 2 } ( y _ { i } - f ( x _ { i } ) ) ^ { 2 } , \quad | y _ { i } - f ( x _ { i } ) | \leq \delta } \\ { \delta | y _ { i } - f ( x _ { i } ) | - \frac { 1 } { 2 } \delta , \text { otherwise } } \end{array} \right.
分类问题:
对数似然损失函数,应对二分类和多分类问题(见逻辑回归的损失函数?逻辑回归处
理多标签分类问题时,一般怎么做
?)
补充
指数损失函数:yi∈y={-1,+1}
L(y, f(x))=\frac{1}{N} \sum_{i=1}^{N} \exp \left(-y_{i} f\left(x_{i}\right)\right)

34 为什么GBDT不适合使用高维稀疏特征?

高维稀疏的ID类特征会使树模型的训练变得极为低效,且容易过拟合。

35 GBDT算法的优缺点?

优点:

缺点:

36 简述 XGBoost

XGBoost是陈天奇大牛新开发的 Boosting库。它是一个大规模、分布式的通用Gradient Boosting(dt)库,它在 Gradient Boosting框架下实现了GBDT和一些广义的线性机器学习算法。
在面试时,可以通过与GBDT的对比来介绍 XGBoost(见XGBoost和GBDT有什么不同?),
加餐内容一在直播课程中,我还将带大家一起详细了解

37 XGBoost和GBDT有什么不同?

38 XGBoost为什么可以并行训练?

注意 xgboost的并行不是tree粒度的并行, xgboost也是一次迭代完才能进行下一次
迭代的(第t次迭代的代价函数里包含了前面t1次迭代的预测值)

xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点, xgboost在训练之前,预先对数据

进行了排序,然后保存为 block结构,后面的迭代中重复地使用这个结构,大大减小
计算量。这个 block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每
个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行

树节点在进行分裂时,我们需要计算每个特征的每个分割点对应的增益,即用贪心法
枚举所有可能的分割点。当数据无法一次载入内存或者在分布式情况下,贪心算法效
率就会变得很低,所以xgboost还提出了一种可并行的直方图算法,用于高效地生成候选的分割点

39 XGBoost防止过拟合的方法?

1.数据

40 XGBoost为什么这么快?

1)同时采用了损失函数的一阶导数和二阶导数,使得目标函数收敛更快。
2)在进行节点分类时采用的贪心算法和直方图算法,大大加速了节点分裂的计
算过程。
3)工程优化,使得模型训练时可进行并行计算。

41 简述 kmeans流程

Kmeans算法的基本流程如下:
1.随机初始化k个中心点;
2.计算所有样本到中心点的距离;
3.比较每个样本到k个中心点的距离,并将样本分类到距离最近的中心点所在的
类别中;
4.k个类别组成的样本点重新计算中心点;
5.重复2-4,直到中心点不再变化。
其中,k表示预设的类别个数;两点的距离由欧式距离的平方表示;中心点的计算方
式为,在表示中心点向量的每一个方向上计算当前类所有样本均值。
由于 kmeans的初始化中心点位置是随机的,而在kmeans的优化过程中,每个中心点只在较小的距离范围内更新,所以算法的效果依赖于中心点初始化的效果。对于此问题的一个改进策略在 kmeans++算法中提出。
Kmeans++

42 kmeans对异常值是否敏感?为何?

Kmeans对异常值较为敏感,因为一个集合的内元素的均值易收到一个极大值的影响。
如图中展示的结果,因为有了一个异常值,这个元素集合的中心点严重偏离了大多数点所在的位置区域;因此在有异常值影响的情况下,均值所计算出来的中心位置不能够反映真实的类别中心。


43 如何评估聚类效果

聚类往往不像分类一样有一个最优化目标和学习过程,而是一个统计方法,将相似的数据和不相似的数据分开。所以,评估聚类效果可以从以下维度入手。

44 超参数k如何选择?

45 Kmeans算法的优缺点

优点

缺点

46 请简述SVM 原理

SVM是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。

47 SVM 为什么采用间隔最大化

当训练数据线性可分时,存在无穷多个分离超平面可以将两类数据正确分开。
感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。
线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是鲁棒的,对未知实例的泛化能力最强。可以借此机会阐述一下几何间隔以及函数间隔的关系。

48 SVM 为什么要引入 核函数

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解问题中,无需求解真正的映射函数,而只需要知道其核函数。
核函数的定义:
\mathrm{K}(\mathrm{x}, \mathrm{y})=\langle\phi(\mathrm{x}), \phi(\mathrm{y})\rangle,即在特征空间的内积等于它们在原始样本空间中通过核函数K计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。

49 SVM 核函数之间的区别

SVM核函数有线性核函数,多项式核函数,高斯核(RBF),拉普拉斯核和 Sigmoid
核函数。其中多项式核函数,高斯核(RBF),拉普拉斯核和 Sigmoid核函数通常用来处理线性不可分的情形。而一般选择核函数时通常考虑线性核和高斯核,也就是线性核与RBF核。线性核:主要用于线性可分的情形,参数少,速度快,对于一般数据,分类效果已经很理想了。RBF核:主要用于线性不可分的情形,参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。

50 为什么SVM对缺失数据敏感

这里说的缺失数据是指缺失某些特征数据,向量数据不完整。
SVM没有处理缺失值的策略。而SVM希望样本在特征空间中线性可分,所以特征
空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。
另外,SVM的决策只基于少量的支持向量,若噪音样本出现在支持向量中,容易对决
策造成影响,所以SVM对噪音敏感。

51 SVM算法的优缺点

优点:

缺点:

52 SVM的超参数C如何调节

在使用SVM库时候,通常有两个需要手工调节的关键参数

53 SVM的核函数如何选择

54 简述SVM硬间隔推导过程

空间超平面的方程为Wx+b=0,W为平面法向量。
点到平面的距离为
r=\frac{\left|w^{T} x+b\right|}{\|w\|}
我们令
\left\{\begin{array}{ll} w^{T} x_{i}+b \geq+1, & y_{i}=+1 \\ w^{T} x_{i}+b \leq-1, & y_{i}=-1 \end{array}\right.
最大化间隔即为
\begin{array}{c} \max _{\boldsymbol{w}, \boldsymbol{b}} \frac{2}{\|\boldsymbol{w}\|} \\ \text {s.t.y}_{i}\left(w^{T} x_{i}+b\right) \geq 1, \quad i=1,2, \ldots, N \end{array}
1/\boldsymbol{w}最大等价于\boldsymbol{w}最小,所以问题等价于
\begin{aligned} &\min _{w, b} \frac{1}{2}\|w\|^{2}\\ &\text { s.t. } y_{i}\left(w^{T} x_{i}+b\right)-1 \geq 0, \quad i=1,2, \ldots, N \end{aligned}
定义拉格朗日函数
L(w, b, \alpha)=\frac{1}{2}\|w\|^{2}+\sum_{i=1}^{N} \alpha_{i}\left(1-y_{i}\left(w^{T} x_{i}+b\right)\right)
所以原问题的对偶问题为
\max _{\alpha} \min _{w, b} L(w, b, \alpha)
先求min令其对w和b的偏导为0得出
\begin{aligned} w &=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ 0 &=\sum_{i=1}^{N} a_{i} y_{i} \end{aligned}
那么对偶问题变成了
\begin{array}{c} \max _{\alpha}-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} x_{j}\right)+\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ \alpha_{i} \geq 0, i=1,2, \ldots, N \end{array}
因为我们的原问题中有不等式约束,因此上述的过程满足KKT条件,非拉格朗日参数的偏导为0;拉格朗日项为0;拉格朗日乘子小于0,拉格朗日参数大于0,即要求
\left\{\begin{array}{c} \alpha_{i} \geq 0 \\ y_{i} f\left(x_{i}\right)-1 \geq 0 \\ \alpha_{i}\left(y_{i} f\left(x_{i}\right)-1\right)=0 \end{array}\right.
那么对于任意的训练样本总满足\alpha_{i}=0y_{i} f\left(x_{i}\right)=1,若\alpha_{i}=0,则样本不会被记入
f(x)的表达式中(根据a1对w的表达式得出),若\alpha_{i}>0,则必有y_{i} f\left(x_{i}\right)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。
对偶问题是一个二次规划问题,可以通过SMO方法求出,这里不多做讨论。求出最佳的\alpha_{i}^{*}之后,根据
b^{*}=y_{i}-\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i}^{T} x
所以超平面可表示为
\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} x_{i}^{T} x+b^{*}=0
其中\alpha_{i}^{*}为支持向量的拉格朗日参数。
我们复盘一下这个过程,有以下重点内容:

55 简述SVM软间隔推导过程

如果样本近似线性可分,允许少数分类错误,那么可以使用软间隔的SM
为每个样本引入一个松弛向量,使得样本可以在两个间隔平面中间,即
y_{i}\left(w^{T} x_{i}+b\right) \geq 1-\varepsilon_{i}
那么目标函数变为了
\begin{array}{c} \min _{w, b, \varepsilon} \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \varepsilon_{i} \\ \text { s.t. } y_{i}\left(w^{T} x_{i}+b\right) \geq 1-\varepsilon_{i}, \quad i=1,2, \ldots, N \\ \varepsilon_{i} \geq 0, i=1,2, \ldots, N \end{array}
其中C为惩罚系数,平衡间隔最大和误差分类个数最少,
其拉格朗日函数为
L(w, b, \varepsilon, \alpha, \mu)=\frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \varepsilon_{i}-\sum_{i=1}^{N} \alpha_{i}\left(y_{i}\left(w^{T} x_{i}+b\right)-1+\varepsilon_{i}\right)-\sum_{i=1}^{N} \mu_{i} \varepsilon_{i}
同硬间隔类似,对w,b,ε求偏导为0可得
\begin{aligned} w &=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ 0 &=\sum_{i=1}^{N} a_{i} y_{i} \\ C &=\alpha_{i}+\mu_{i} \end{aligned}
将结果带入回L则得到对偶问题为
\begin{equation} \begin{array}{c} \max _{\alpha}-\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} x_{j}\right)+\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t. } \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ C-\alpha_{i}-\mu_{i}=0 \\ \alpha_{i} \geq 0 \\ \mu_{i} \geq 0, i=1,2, \ldots, N \end{array} \end{equation}
软间隔的KKT条件要求
\left\{\begin{array}{c} \alpha_{i} \geq 0, \mu_{i} \geq 0 \\ y_{i} f\left(x_{i}\right)-1+\varepsilon_{i} \geq 0 \\ \alpha_{i}\left(y_{i} f\left(x_{i}\right)-1+\varepsilon_{i}\right)=0 \\ \varepsilon_{i} \geq 0 \\ \mu_{i} \varepsilon_{i}=0 \end{array}\right.
对于任意样本,总有\alpha_{i}=0y_{i} f\left(x_{i}\right)=1-\varepsilon_{i},若\alpha_{i}=0,则样本不会被记入f(x)的表达式中,若\alpha_{i}>0,则必有y_{i} f\left(x_{i}\right)=1-\varepsilon_{i},所对应的是一个支持向量;若\alpha_{i}<C,则\mu_{i}>0,进而有\varepsilon_{i}=0,即该样本潜在最大间隔边界上;若\alpha_{i}=C,则有\mu_{i}=0,此时若\varepsilon_{i}≤1,则样本落在最大间隔内部,若\varepsilon_{i}≥1则样本被错误分类。

56 简述决策树的构建过程

57 ID3决策树与C4.5决策树的区别

按照(简述决策树的构建过程)中所描述的,构建决策树过程中一个关键步骤就是选择一个最优特征;而ID3决策树与C4.5决策树一个最大的区别就是在选择最优特征时所依赖的标准不同。
在ID3决策树中,选择最佳特征通过信息增益指标来选择,所谓信息增益可以定义
为:
数据集对于某特征的信息增益=数据集的经验熵这个特征对数据集的条件经验熵
g(D, A)=H(D)-H(D \mid A)
其中D为数据集,A表示数据集样本上的某个特征,H(D)为数据集的经验熵;H(D|A)表示特征A对数据集D的经验条件熵。
H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|}
其中K表示D中类别的数量,C_{k}表示第k个类别所包含样本的个数。
H(D \mid A)=-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \sum_{k=1}^{K} \frac{\left|D_{i k}\right|}{|D|} \log _{2} \frac{\left|D i_{k}\right|}{|D|}
其中n表示在特征A上不同取值的个数,D_{ik}表示在特征上取第i个值且类别为k时的样本个数。
在C4.5决策树中,为了解决信息增益偏向于选择取值较多的特征的问题,选择最佳特征通过信息增益熵来选择,所谓信息增益熵可以定义为:
g_{R}(D, A)=\frac{g(D, A)}{H_{A}(D)}
其中{H_{A}(D)}表示,训练数据集D关于特征A的值的熵。
H_{A}(D)=-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \log _{2} \frac{\left|D_{i}\right|}{|D|}
其中n表示特征A上取得不同值的个数,D_{i}表示在特征A上取值为第1个时,样本的个数。
此外1)ID3只能处理离散型变量,而C4.5通过将连续值离散化来处理连续型变量。
2)ID3没有对缺失值的处理策略,而C4.5通过引入有缺失值样本对所有样本的比例来处理缺失值带来的“信息增益失真”的问题。

58 CART回归树算法推导

在CART树的构建过程中,假设决策树是一颗二叉树;决策树的生成过程就是递归地构建二叉决策树的过程。对回归树来说用,我们这里讨论一个基本形式即为平方误差最小化准则,进行特征选择,生成二叉树。
输入:训练数据集D
输出:回归树f(x)
在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉树:
1)选择最优切分变量(特征)j与切分点(特征值域上的值)s,求解
\min _{j, s}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{2} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right]
2)用选定的(j,s)划分区域并决定相应的输出值,其中R1(j,s)是划分后的左子区
域,而R2(j,s)是划分后的右子区域;C1是左子区域上的预测值(此区域上所有样本真实值的均值),而c2是右子区域上的预测值(此区域上所有样本真实值的均值)。
\begin{aligned} R_{1}(j, s) &=\left\{x \mid x^{(j)} \leq s\right\}, R_{2}(j, s)=\left\{x \mid x^{(j)}>s\right\} \\ c_{m} &=\frac{1}{N_{m}} \sum_{x_{i} \in R_{m}(j, s)} y_{i}, x \in R_{m}, m=1,2 \end{aligned}
3)递归地对两个子区域调用步骤1),2),直到满足停机条件。常用的停机条件有a.树的深度b.叶子区域的个数c.叶子区域上样本的个数等。
4)将输入空间划分为M个区R1,R2,…,RM,生成决策树,划分的空间即为叶子节点上的空间:
f(x)=\sum_{m=1}^{M} \hat{c}_{m} I\left(x \in R_{m}\right)
大家可以对照 XGBoost节点分裂的过程来学习CART回归树的生成过程。

59 决策树的优缺点

优点:

缺点:

60 决策树如何防止过拟合?说说具体方法。

我们在讨论防止机器学习过拟合的时候,通过分类的方法,大致确立了这么几个改进方向,1)数据2)模型3)正则化4)训练。在这个题目中,我们重点讨论如何通过
改进决策树模型来防止过拟合,当然其他几个方向对防止决策树过拟合同样适用。

通过改进模型来防止过拟合的主要思路是简化模型,使得模型能够学习样本中的共同特征(即主要特征),而摈弃个性化的特征即次要特征)。而对树模型进行简化的方法又可以分为预剪枝(在训练过程中进行剪枝),和后剪枝(在决策树构建完成之后进行剪枝)
预剪枝的主要方法有:

后剪枝的核心思想是让算法生成一颗完全生长的决策树,然后最底层向上计算是否剪枝。剪枝过程将子树删除,用一个叶子节点替代,该节点的类别同样按照多数投票的原则进行判断。同样地,后剪枝也可以通过在测试集上的准确率进行判断,如果剪枝过后准确率有所提升,则进行剪枝。相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。

61 为什么必须在神经网络中引入非线性?

如果神经网络中没有引入非线性层,那么神经网络就变成了线性层的堆叠。而多层线性网络的堆叠本质上还是一个线性层,我们以两层线性网络的堆叠为例
我们用f(x)表示第一层线性网络,g(x)表示第二层线性网络,则两层网络的堆叠表示
为:
h(x)=g(f(x))=w_{2}{ }^{T}\left(w_{1}{ }^{T} x+b_{1}\right)+b_{2}=w_{2}{ }^{T} w_{1}{ }^{T} x+w_{2}{ }^{T} b_{1}+b_{2}
我们令:
\begin{array}{c} w_{2}^{T} w_{1}^{T}=w^{* T} \\ w_{2}^{T} b_{1}+b_{2}=b^{*} \end{array}
那么原来的表达式就变为:
h(x)=w^{* T} x+b^{*}
所以h(x)还是一个线性函数。而我们知道线性函数的表现力是有限的,它只能表示特征与目标值之间比较简单的关系,相反带有非线性层的神经网络被证明可以表示任何函数。所以为了使得网络设计发挥作用,并且提高网络的表现力,必须要在神经网络中引入非线性。

62 Relu在零点不可导,那么在反向传播中怎么处理?

RL虽然在零点不可导,但是我们在做反向传播的计算时,对Relu这个函数的导数分情况讨论,即ReLU在零点时人为地给它赋予一个导数,比如0或者1。例如在下面ReLU的反向传播函数实现中,将ReLU在零点位置的导数设置为0.


63 relu的优缺点

优点:

缺点:

64 BN解决了什么问题

Bn(Batch Normalization)的提出是为了解决 Internal Covariate Shift的问题,即当深度神经网络经过多层的计算,输入到每一层的数据分布发生了严重的改变,这种输入数据上的抖动和变化,使得网络参数难以学习,随着网络的加深模型更加难以收敛。
Batch Normalization层的引入,使得每一层的输入数据都归一化到近似于均值为0方差为1的分布上,从而大大缓解了 Internal Covariate Shift的问题此外,BN还给深度神经网络带来了以下好处:

65 BN的实现流程

BN的过程可以总结为:

用 python程序实现的前向计算为:



反向传播计算为:



注:这里的程序实现只给出了一个朴素的版本,并不包含对全连接层以及Conv层结果的区分对待以及工程优化。正反向传播实现里面的Step有一一对应关系,大家可以把两个函数放在一起对照学习。

66 .激活函数有什么作用,常用的的激活函数

如果不用激励函数(其实相当于激励函数是f(x)=x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机了,那么网络的表达能力就相当有限。正因为上面的原因,引入非线性函数作为激励函数之后,深层神经网络表达能力就很强大了(不再是输入的线性组合,而是几乎可以表示任意函数)。
常用的激活函数有: Sigmoid,Tanh,ReLU, Leaky ReLU,
Sigmoid激活函数的公式是:
\delta(x)= \frac{1} {1+e^{-x}}
其图像为:


Sigmoid将回归问题的结果转换到(0,1的范围,图像成中间窄两边宽的结构;即大部分的时候 sigmoid的值集中的在两边。 Sigmoid函数提供了一个很好的适用于二分类的问题的输出结果,以及非线性表达。但是它的缺点也是非常明显的:

Tanh激活函数的提 sigmoid出虽然解决了函数的输出不是0中心的问题,但是它仍然存在两个主要问题:1.函数梯度饱和的问题:2.计算复杂的问题。
ReLU函数的数学公式是:
f(x)=\max (0, x)
其图像为:


ReLU激活相较于 sigmoid和tanh函数来说对于随机梯度下降收敛有巨大的作用,很好地解决了梯度消失的问题;同时函数的前向和反向传播计算计算效率也高。
但是RLU存在以下缺点:

67 怎么解决梯度消失问题

梯度消失的原因主要有两个,1.在深度网络中,网络参数的学习是通过反向传播的链式求导法则来求Loss对某个参数的偏导数,然后进行参数更新的。当网络层数很深,而当前的参数所在层又靠近网络的输入时,求导链就会非常长:如果其中的某些中间结果的值很小,并经过链式的累成作用,最终求得的梯度值就会接近于零,而导致参数得不到更新。
可通过以下方法解决梯度消失的问题:

68 什么是端到端学习

在传统的机器学习系统中,我们通常需要对数据进行多阶段的处理,在每个阶段使用人工特征提取,数据标注或者独立的机器学习模型来完成特定的任务而在端到端学习系统中,可以通过训练一个大的神经网络来完成从原始数据的输入到最终结果输出的整个任务。端到端的学习可以大大较少人工参与,简化解决方案部署流程。
现实中的任务通常非常复杂,将复杂任务拆分成简单的任务解决通常能够达到很好的效果:比如我们在做人脸识别任务时,通常会把这个任务分成三个子任务1.人脸检测:2.人脸关键点对齐和矫正;3.基于切分后的人脸图像的人脸识别。如果要将这个任务变成端到端的任务,需要大量的从输入数据到输出结果的数据集;而现实中我们并没有这样大量的数据。所以在这个任务中端到端学习并不适用,而在有些我们已经有大量数据的任务中,比如语音识别并转换成文本的任务中,端到端学习就表现得很好。

69 Softmax的原理是什么?有什么作用?

Softmax的函数公式是:
\delta(z)_{j}=\frac{e^{z_{j}}}{\sum_{k=1}^{K} e^{z_{k}}}
Sof'tmax层的结构示意图如下:

它具有以下特性:

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的计算流程如下:

75 inception module的优点是什么

Inception module有四个不断代的版本,它的基本并行结构是由 Inception V1确
立下来的。

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 列举几个梯度下降的方法

梯度下降方法的演化通常可以从以下三个方面进行总结:
梯度更新计算设计的样本数

81 RNN 发生梯度消失的原因是什么?

RNN发生梯度消失的主要原因来自于长程依赖问题。


我们假设最左端的输入S_0为给定值,且神经元中没有激活函数,则前向过程如下:
\begin{array}{l} S_{1}=\tanh \left(W_{x} X_{1}+W_{s} S_{0}+b_{1}\right), \quad O_{1}=W_{0} S_{1}+b_{2} \\ S_{2}=\tanh \left(W_{x} X_{2}+W_{s} S_{1}+b_{1}\right), \quad O_{2}=W_{0} S_{2}+b_{2} \\ S_{3}=\tanh \left(W_{x} X_{3}+W_{s} S_{2}+b_{1}\right), \quad O_{3}=W_{0} S_{3}+b_{2} \end{array}
在t=3时刻,损失函数为L3=1/2(Y3-03)^{2},那么如果我们要训练RNN时,实际上就是对W_x,W_s,W_0,b_1,b_2求偏导,并不断调整它们以使得L3尽可能达到最小。那么我们得到反向传播的公式为:
\begin{array}{c} \frac{\partial L_{3}}{\partial W_{0}}=\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial W_{0}} \\ \frac{\partial L_{3}}{\partial W_{x}}=\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial S_{3}} \frac{\partial S_{3}}{\partial W_{x}}+\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial S_{3}} \frac{\partial S_{3}}{\partial S_{2}} \frac{\partial S_{2}}{\partial W_{x}}+\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial S_{3}} \frac{\partial S_{3}}{\partial S_{2}} \frac{\partial S_{3}}{\partial S_{1}} \frac{\partial S_{1}}{\partial W_{x}} \\ \frac{\partial L_{3}}{\partial W_{s}}=\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial S_{3}} \frac{\partial S_{3}}{\partial W_{s}}+\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial S_{3}} \frac{\partial S_{3}}{\partial S_{2}} \frac{\partial S_{2}}{\partial W_{s}}+\frac{\partial L_{3}}{\partial O_{3}} \frac{\partial O_{3}}{\partial S_{3}} \frac{\partial S_{3}}{\partial S_{2}} \frac{\partial S_{3}}{\partial S_{1}} \frac{\partial S_{1}}{\partial W_{s}} \end{array}
将上述偏导公式与第三节中的公式比较我们发现,随着神经网络层数的加深对W_0而言并没有什么影响,而对W_x,W_s会随着时间序列的拉长而产生梯度消失和梯度爆炸问题。
根据上诉分析整理一下公式可得,在任意时刻t对W_x,W_s求偏导的公式为:
\begin{aligned} \frac{\partial L_{t}}{\partial W_{x}} &=\sum_{k=0}^{t} \frac{\partial L_{t}}{\partial O_{t}} \frac{\partial O_{t}}{\partial S_{t}}\left(\prod_{j=k+1}^{t} \frac{\partial S_{j}}{\partial S_{j-1}}\right) \frac{\partial S_{t}}{\partial W_{x}} \\ \frac{\partial L_{t}}{\partial W_{s}} &=\sum_{k=0}^{t} \frac{\partial L_{t}}{\partial O_{t}} \frac{\partial O_{t}}{\partial S_{t}}\left(\prod_{j=k+1}^{t} \frac{\partial S_{j}}{\partial S_{j-1}}\right) \frac{\partial S_{t}}{\partial W_{s}} \end{aligned}
我们发现,导致梯度消失和爆炸的就在于\prod_{j=k+1}^{t} \frac{\partial s_{j}}{\partial s_{j-1}}将激活函数展开得到:
\prod_{j=k+1}^{t} \frac{\partial S_{j}}{\partial S_{j-1}}=\prod_{j=k+1}^{t} \tanh ^{\prime} W_{s}
而在这个公式中,tanh的导数总是小于1的,如果W_s也是一个大于0小于1的值,那么随着t的增大,上述公式的值越来越趋近于0,这就导致了梯度消失问题。(梯度爆炸问题的原理类似)

82 RNN 中使用 ReLU 可以解决梯度消失问题吗?

虽然ReLU在值大于0处,导数值恒为1可以使得激活函数的导数不至于很小,产生梯度饱和的问题,但是在RNN中,ReLU并不能很好的解决梯度消失的问题,理由如下。
参照题目(RNN发生梯度消失的原因是什么?)的推导过程,我们现将
S_{t}=\tanh \left(W_{x} X_{1}+W_{s} S_{t-1}+b_{1}\right)
替换为:
S_{t}=\operatorname{ReLU}\left(W_{x} X_{1}+W_{s} S_{t-1}+b_{1}\right)
那么
\prod_{j=k+1}^{t} \frac{\partial S_{j}}{\partial S_{j-1}}= \begin{cases} \prod_{j=k+1}^{t} W_{s}, W_{x} X_{1}+W_{s} S_{t-1}+b_{1} \text {恒大于0} \\ 0 \end{cases}

所以,即使采用了ReLU作为激活函数,如果W_s是个大于0小于1的值,也会导致梯度消失的问题。

83 LSTM为什么能解决梯度消失/爆炸的问题 ?

LSTM可以通过门控机制来解决梯度消失和爆炸的问题。
从题目(RNN发生梯度消失的原因是什么?)的分析中,我们知道,RNN产生梯度消失和梯度爆炸的原因在长程依赖。而在LSTM使用门控函数,有选择的让一部分信息通过。门控是由一个sigmoid单元和一个逐点乘积操作组成, sigmoid单元输出1或0,用来判断通过还是阻止,然后训练这些门的组合。所以,当门是打开的(梯度接近于1),梯度就不会消失。并且 sigmoid不超过1,那么梯度也不会爆炸。

84 GRU 和 LSTM 的区别

LSTM的结构和公式如下


遗忘门:f_{t}=\delta\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)
输入门:i_{t}=\delta\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right)
输出们:o_{t}=\delta\left(W_{o} \cdot\left[h_{t-1}, x_{t}\right]+b_{o}\right)
当前单元状态:c_{t}=f_{t} * c_{t-1}+i_{t} * \tanh \left(W_{c} \cdot\left[h_{t-1}, x_{t}\right]+b_{c}\right)
当前时刻的隐层输出:h_{t}=o_{t} * \tanh \left(c_{t}\right)
而GRU的结构和公式如下


\begin{aligned} z_{t} &=\sigma\left(W_{z} \cdot\left[h_{t-1}, x_{t}\right]\right) \\ r_{t} &=\sigma\left(W_{r} \cdot\left[h_{t-1}, x_{t}\right]\right) \\ \tilde{h}_{t} &=\tanh \left(W \cdot\left[r_{t} * h_{t-1}, x_{t}\right]\right) \\ h_{t} &=\left(1-z_{t}\right) * h_{t-1}+z_{t} * \tilde{h}_{t} \end{aligned}
两者的区别有:
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分别代表什么
\text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}} {\sqrt{d_{k}}}\right) V
Attention机制中,Q,K,V分别指的是Query,Key和 Value;每个输入向量的Q,K,V向量是由该输入向量分别与权重矩阵W_q,W_k,W_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-的公式为:
\text {Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V
包括三个步骤:相似度的计算, Softmax和加权平均

89 Transformer 中的 encoder 和 decoder 的异同点

相同点

不同点

90 Bert 和 GPT 的异同点

注:在不做特别说明的时候GPT通常指的是GPT-2

共同点:

不同点:

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 卷积有什么作用

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 中的计算为什么要使用根号d_k缩放

假设两个d_k维向量每个分量都是一个相互独立的服从标准正态分布的随机变量,那么他们的点乘结果会变得很大,并且服从均值为0,方差为d_k的分布,而很大的点乘会让 Softmax函数处在梯度很小的区域(我们在讲 Softmax和 Sigmoid关系的时候讲过,面对二分类情况的时候 Softmax就退化成了 Sigmoid函数;我们知道函数在输入数值较大的区域存在梯度饱和的现象),对每一个分量除以sqrt(d_k)可以让点乘的方差变成1。

96 为什么self-attention model在长距离序列中如此强大

97 Bert 类模型中的绝对位置 embedding 和 相对位置 embedding 怎么理解,各自的优缺点和使用场景

绝对位置 Embedding-Learned Positional Embedding
直接对不一样的位置随机初始化一个 postion embedding,加到 word embedding上输入模型,做为参数进行训练。
相对位置 Embedding-Sinusoidal Positional Encoding
使用正余弦函数表示绝对位置,经过二者乘积获得相对位置。
\begin{aligned} P E_{(i, 2 j)} &=\sin \left(i / 10000^{2 j / d_{\text {model}}}\right) \\ P E_{(i, 2 j+1)} &=\cos \left(i / 10000^{2 j / d_{\text {model}}}\right) \end{aligned}

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 做了哪些改进

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矩阵的方式来改变序列中单词的顺序。

上一篇下一篇

猜你喜欢

热点阅读