2020-实习生面试题-1

2020-实习生面试题-1

算法(深度学习)

1、CNN的基本原理?

CNN(Convolutional Neural Network,卷积神经网络)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的单元,对于大型图像处理有出色表现。CNN模型通常建立在前馈神经网络模型基础上,只是隐藏层换成了卷积层、池化层、全连接层。

  • 卷积层: 前一层的特征图与一个可学习的卷积核(过滤器)进行卷积运算,卷积的结果经过激活函数后的输出形成这一层的神经元,从而构成该层特征图,也称特征提取层。每个神经元的输入与前一层的局部感受野相连接,并提取该局部的特征,一旦该局部特征被提取,它与其它特征之间的位置关系就被确定。卷积核的通道必须和输入图像的通道数量一致,网络的层级越深,使用的卷积核越多,越多的卷积核意味着会有更多的边缘和特征检测。
  • 池化层: 把输入信号分割成不重叠的区域,对于每个区域通过池化(下采样/欠采样)运算来降低网络的空间分辨率,但不会降低网络的深度。最大池化层时,取用输入区域(n×m 矩阵)中的最大(图像中最敏感的区域)特征值;平均池化层时,取用输入区域的平均特征值。该运算可用来消除信号的偏移和扭曲。
  • 全连接层: 输入信号经过多次卷积和池化运算后,输出为多组信号,将最后一个卷积层的输出压平,并把当前层的每个节点和下一层的每个节点相连。全连接层就是一种常规的人工神经网络,经过全连接运算,将多组信号依次组合为一组信号。
    在这里插入图片描述

2、CNN的基础应用?

CNN包括一维卷积神经网络常应用于序列类的数据处理;二维卷积神经网络常应用于图像类文本的识别;三维卷积神经网络主要应用于医学图像以及视频类数据识别。可见,CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。
经典CNN模型:AlexNet、NIN、VGG、ResNet等。。。
CNN网络学习(1):Lenet,Alexnet,NIN,GooLeNet,VGGNet,ResNet
CNN网络学习(2):ZFNet,OverFeat,FCN,FPN

3、CNN中每次卷积操作为什么可以只用一个权重不变的卷积核?

卷积层使用卷积核进行局部感知(局部感知是指在识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息)。局部感知特性,可以大大减少模型的计算参数。但是仅仅这样依然会有很多参数,于是就有了权值共享机制
权值共享是指同一层的神经元的连接参数只与提取的特征有关,而与具体的位置无关,因此可以保证同一层中所有位置的连接是权值共享的。例如:第一层隐层是一般的边缘检测,第二层是对第一层学到的边缘曲线组合得到一些特征(角度、线形等);第三层会学到更加复杂的特征(眼睛、眉毛等)。对于同一层来说,提取特征的方式是一样的,第三层的神经元都是用来提取“眼睛”的特征,因此,需要计算的参数是一样的。

4、与全连接网络相比,CNN有什么区别、优势?

  • 全连接网络: 不适合图像识别
    参数数量太多,难扩展:将输入压缩成序列,输入的每个节点都要与下一层的所有节点连接,并且权重不同(输入一个1000×1000像素的图片,输入层有1000×1000个节点。假设第一个隐藏层有100个节点,那么仅这一层就有(1000×1000+1)×100个参数,1000×1000为权重,1为偏置)。
    没有利用像素之间的位置信息:对于图像识别任务来说,每个像素和其周围像素的联系比较紧密,和离得很远的像素的联系较小。全连接把图像的所有像素都等同看待,完成每个连接权重的学习之后,会发现大量的权重值很小,学习大量并不重要的权重是非常低效的。
    网络层数限制:网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,梯度很难传递超过3层。无法得到一个很深的全连接神经网络,也就限制了它的能力。
  • CNN网络: 适合图像识别
    局部连接:每个神经元只和一小部分神经元相连,减少了很多参数。
    权值共享:一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,减少了很多参数。
    下采样:使用池化来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。
    对于图像识别任务来说,CNN网络通过尽可能保留重要的参数,去掉大量不重要的参数,来达到更好的学习效果。

5、RNN、LSTM的原理、区别?

神经网络学习(1):cells +layers
神经网络学习(2):FFNN,P,RNN,LSTM,GRU……

6、什么是过拟合、欠拟合?

  • 过拟合: 模型所包含的参数过多(即模型容量很大)导致对观测数据(训练数据)过度拟合,用该模型对已知数据预测得很好,但对未知数据预测得很差。在性能的角度上讲就是协方差过大,同样在测试集上的损失函数会表现得很大。
  • 欠拟合: 模型使用的参数过少,以至于得到的模型难以拟合观测数据(训练数据),模型在训练数据集上不能很好匹配。

7、怎么判断是否发生过拟合、欠拟合?

  • 过拟合: 使用交叉验证方法,随着训练数据和验证数据的增加以及训练和验证的进度,到训练和验证完成,如果训练误差和验证误差相差较大,则很可能发生过拟合(测试集误差远大于训练样本误差也可用来说明模型出现过拟合)。
  • 欠拟合: 训练过程中loss一直很大,accuracy一直很低,表示发生了欠拟合。

8、过拟合、欠拟合的原因?

过拟合时,通常是因为模型过于复杂,学习器把训练样本学得“太好了”,很可能把一些训练样本自身的特性当成了所有潜在样本的共性,这样一来模型的泛化性能就下降了。欠拟合时,模型又过于简单,学习器没有很好地学到训练样本的一般性质,所以不论在训练数据还是测试数据中表现都很差。
过拟合主要原因: ①训练数据过少,训练参数过多。训练数据有限,则无法体现数据整体的分布。用给定的不充分的数据集上学习到的模型,去预测未知数据集上的数据,很大可能产生过拟合现象。②数据有噪声。当噪声数量在训练集中占有相当大的比例时,就会与正常数据一起影响训练集的分布。两者同时拟合,会学习到一个共同决定的模型,用此模型去预测从正常数据分布上取的未知数据,就很有可能得到不理想的泛化效果。③训练过度。在有噪声的训练数据中,训练过度会让模型学习到噪声的特征,会造成在没有噪声的真实测试集上准确率下降。

9、怎么解决过拟合、欠拟合?

过拟合:

  • Early stopping(提前停止):在验证误差开始上升之前,停止网络的训练。找到最优迭代次数。
  • Data augmentation(数据增强):增加训练数据量是根据大数定理,当数据量足够大时,训练模型会无限逼近实际。如果训练集能够涵盖所有样本空间,那么就能学习到样本特征空间的普遍特性,而独特性将不复存在,因为测试集不会超出样本的特征空间,所以结果和训练集应该一致。
  • dropout(随机失活):选取一个隐层,在每一次梯度迭代中,随机让隐层的部分神经元失活,下一次迭代继续上述过程,相当于每次训练一个新的子网络。Dropout的底层思想是把多个模型的结果放到一起,只不过实现方式是在一个模型内部,而不是像Bagging一样,真正地去训练多个模型。定性理解,dropout相当于每次迭代都在一个随机挑选的特征子空间进行,训练时对单元按照一定概率p进行随机置零,训练结束后到了预测阶段需要对参数的值乘上一个1-p,才能保证结果的正确性。(人工根据模型的需要减小参数数量,剔除那些跟得到模型不太相关的参数来实现)
  • BatchNorm(批归一化):在卷积后激活函数前,将数据归一化,将数据分布拉回到标准分布,避免高层不断重新适应新的参数分布,削弱前后层参数之间的练习,加快收敛速度。BN使得网络在训练时不依靠于某一个样本进行更新或者输出,而是依赖于整个batch size的数据,一定程度上防止了过拟合。
  • Bagging/Ensemble(套袋法/集成法):通过结合几个模型降低泛化误差。主要想法是对训练数据有放回的采样来训练多个模型,采用投票多数表决法让所有模型表决测试样例的输出,即取所有模型分类结果最多的分类作为结果。这种方法能够提高准确率和稳定性,但是训练多个模型的计算成本也非常高。
  • regularization(正则化):在进行目标函数或损失/代价函数优化时,在函数后面加上一个正则项/惩罚项,通过正则因子λ来平衡目标方程与正则项。在最小化新的损失函数的过程中,正则项使得预测值与真实值之间的误差不会达到最小(不会为0),也就是说不会去完美拟合的,这样也就防止了过拟合,提高了模型的泛化能力。(λ过大会使后面权重比过大,最终损失函数过大导致欠拟合,λ过小甚至为0时可能导致过拟合。)

欠拟合:

  • 提高神经网络拟合能力:增加深度,也就是神经网络的层数,也可以增加神经网络的宽度,将每一层的神经单元数量增加。但是要想达到相同的效果,增加宽度需要的神经元数远超过增加一层需要的神经元数。深度深比宽度宽的模型更优。(让神经网络在每次训练时,只迭代同样的数据,甚至每一个batch里面也是完全相同的数据,如果这时候Loss开始下降,accurancy开始上升,并且在训练了一段时间后能够正确地计算出所训练样本经过神经网络的输出值,那么这种情况就是神经网络拟合能力不足。)
  • 修改网络配置:寻找最优的权重初始化方案,主要分为三类方法,均匀分布、正太分布和相同固定值。使用适当的激活函数。选择合适的优化器和学习速率。(无论怎样训练,loss和accuracy都不会变好,这种情况就是网络配置的问题。)

10、有哪些激活函数,原理,优缺点?

激活函数:Sigmoid,Tanh,Softmax,Swish,Relu系列,GLU+GTU

11、有哪些池化方法,原理,优缺点?

池化方法(1):General / Mean / Max / Stochastic / Overlapping / Global Pooling
池化方法(2):GAP,SPP,RoIPooling,RoIAlign

12、有哪些损失函数,原理,优缺点?

回归损失函数:L1,L2,Huber,Log-Cosh,Quantile Loss
分类损失函数:Log loss,KL-divergence,cross entropy,logistic loss,Focal loss,Hinge loss,Exponential loss

13、正则化具体有哪些方法,对比分析?

常用的正则项/惩罚项一般有两种,一般称作 L1正则化L2正则化,或者L1范数和L2范数。使用L1正则化的模型叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

  • L1正则化: 是指权值向量w中各个元素的绝对值之和,即L1范数,乘上λ。L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,找到对模型贡献大的特征,减少参数。
    (L1正则化可通过假设权重w的先验分布为拉普拉斯分布,由最大后验概率估计导出。)
  • L2正则化: 是指权值向量w中各个元素的平方和然后再求平方根,即L2范数,乘上λ。L2正则化尽量使所有参数都比较小,使模型能够适应不同的数据集。(若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响。)L2正则化提高了模型的抗扰动能力,在一定程度上避免了过拟合现象。
    (L2正则化可通过假设权重w的先验分布为高斯分布,由最大后验概率估计导出。)
    机器学习中正则化项L1和L2的直观理解(基本原理、公式推导)

14、什么是梯度消失、梯度爆炸?

梯度消失和梯度爆炸属于梯度不稳定的范畴,前面层上的梯度来自后面层上梯度的乘积,当层数过多时,就会出现梯度不稳定的情况。(在神经网络中,当前面层的学习速率低于后面层的学习速率,即随着层数的增加,分类准确率反而下降。)

  • 梯度消失: 令偏置为0,输出结果等于各层权重参数的积乘上输入,若参数值较小,随着层数加深,梯度更新信息将会以指数形式衰减。
  • 梯度爆炸: 令偏置为0,输出结果等于各层权重参数的积乘上输入,若参数值较大,随着层数加深,梯度更新信息将会以指数形式增长。

15、梯度消失、梯度爆炸的原因?

梯度消失: 隐藏层层数过多,激活函数不合适(更可能产生梯度消失,也有可能梯度爆炸)
梯度爆炸: 隐藏层层数过多,权值初始化值太大
出现梯度消失与梯度爆炸的原因以及解决方案

16、怎么解决梯度消失、梯度爆炸?

  • 预训练加微调,
  • 梯度剪切、权重正则(针对梯度爆炸),
  • 使用不同的激活函数,
  • 使用BatchNorm,
  • 使用残差结构,
  • 使用LSTM网络

17、什么是Bagging、Boosting,两者之间的区别?

  • Bagging: 从原始样本集中使用Bootstraping(自助法,随机有放回采样)抽取n个训练样本,共进行k轮抽取,得到k个相互独立的训练集。用k个训练集共得到k个模型,所有模型的重要性相同。对分类问题,将k个模型采用投票的方式得到分类结果;对回归问题,计算k个模型的均值作为最后的结果。
  • Boosting: 每次使用全部的样本,每轮训练改变样本的权重。下一轮训练的目标是找到一个函数 f 来拟合上一轮的残差。当残差足够小或者达到最大迭代次数则停止。Boosting会减小在上一轮训练中正确样本的权重,增大错误样本的权重(对的残差小,错的残差大)。 梯度提升的Boosting方式是使用损失函数对上一轮训练出的模型函数 f 的偏导来拟合残差。

18、Bagging、Boosting之间的区别?

  • 样本选择:
    Bagging:训练集是在原始集中有放回选取的,各训练集相互独立;
    Boosting:训练集不变,但每个样例的权重是根据上一轮的分类结果进行调整变化的。
  • 样例权重:
    Bagging:使用均匀取样,每个样例的权重相等;
    Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
  • 预测函数:
    Bagging:各个基分类器权重相同;
    Boosting:各个基分类器的权重不同,预测准确率高的权重大,预测准确率低的权重小。
  • 并行计算:
    Bagging:各个预测函数可以并行生成;
    Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

19、为什么说Bagging是减少variance,Boosting是减少bias?

  • Bagging:
    Bagging以随机采样样本的方式减少异常样本的选择比例,从而可以降低过拟合,随之也就减小了方差(模型过拟合,则方差大);
    Bagging抽取的样本集具有相似性,训练的子模型有近似相等的bias和variance,分布也近似相同。bias与单个子模型相关,一般来说不能显著降低bias。但各子模型之间的相关性使得variance可以在一定程度上降低(若各子模型独立,可以显著降低variance;若各子模型完全相同,则不会降低variance,Bagging处于中间态)。
  • Boosting:
    Boosting的损失函数就是以减少偏差为目的来训练下一个基分类器。
    Boosting是在连续地最小化损失函数,其bias自然逐步下降。但是Boosting各子模型之间是强相关的,于是子模型之和并不能显著降低variance,需要依靠降低bias来提升预测精度。
    Bagging和Boosting的区别

20、什么是随机森林?

随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类、回归等问题。随机森林由很多需要构造的决策树组成,当输入一个要预测分类的数据时,每个决策树都会接收数据并产生一个分类结果,然后采用投票机制,哪个结果出现次数最多就归为哪一类。
随机森林构造过程:

  • ①随机样本的选取:假设有N个训练数据,采用bootstrap法选取N个样本生成新的训练集。每次构造决策树时都要进行一次随机样本的选取。
  • ②随机选择特征:对于每颗要生成的决策树,从p维特征中选取m个特征进行构造,m的取值决定决策树之间的关联性。m大关联性就大,误差就大,所以一般m小于p,选在p的平方根。
  • ③构建决策树:可以采用信息熵、基尼指数等方法作为分裂特征的选择,一般构建100颗树。得到的决策树可以不进行剪枝,因为前面两个随机选择,使得树在一定程度上能减轻过拟合,但不能完全消除过拟合,过拟合和样本质量,样本数量,样本特征数量和特征相关性都有关系。
  • ④随机森林投票:当所有决策树构造完成时,随机森林就形成了。对要预测的数据进行分类,采用专家投票机制,选定出现次数最多的类别作为预测的类别。

21、随机森林的优、缺点?

优点:

  • 能处理很高维度的数据,并且不用做特征选择;
  • 两个随机性的引入,使得随机森林不容易过拟合,并且有很好的抗噪声能力;
  • 既能处理离散型数据,也能处理连续型数据,数据集无需规范化;
  • 训练速度快,可以得到特征重要性排序;
  • 容易实现并行化;
  • 准确率高。

缺点:

  • 已经被证明在某些噪音较大的分类或回归问题上会过拟合;
  • 对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的;
  • 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大。

22、什么是生成方法、判别方法,举例分析?

监督学习方法又分生成方法(Generative approach)和判别方法(Discriminative approach),所学到的模型分别称为生成模型(Generative Model)和判别模型(Discriminative Model)。

  • 判别方法: 由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。
    典型的判别模型有:K近邻算法,感知机,决策树,支持向量机,逻辑回归,最大熵等。
    机器学习_支持向量机 SVM
  • 生成方法: 由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,P(Y|X)= P(X,Y)/ P(X)。基本思想是先建立样本的联合概率密度模型P(X,Y),再得到后验概率P(Y|X),然后利用它进行分类,P(X)是训练数据的概率分布。(生成方法的模型表示了给定输入X产生输出Y的生成关系,用于随机生成的观察值建模,特别是在给定某些隐藏参数的情况下。)
    典型的生成模型有:朴素贝叶斯,隐马尔科夫模型(HMM)等。
    机器学习_隐马尔可夫模型 HMM

23、什么是欠采样、过采样?

以Cardio实验数据为例,1831条数据,每条数据有21个特征。其中正例176个(9.6122%),反例1655个(90.3878%),属于典型的类别不平衡问题。

  • 过采样: 从正例中反复抽取并生成1655个数据(势必会重复),并与反例合并。只是单纯的重复了正例,因此最大的风险就是对正例过拟合。
  • 改进过采样算法:
    ① SMOTE(Synthetic Minority Oversampling Technique,合成少数类过采样技术),对于少数类样本a, 随机选择一个最近邻的样本b, 然后从a与b的连线上随机选取一个点c作为新的少数类样本。K最近邻在局部合成数据可以被理解为一种集成学习,降低了方差,减小过拟合的风险,但是运算开销加大,同时可能会生成一些“可疑的点”。
    ② ADASYN(自适应综合过采样),在那些基于K最近邻分类器被错误分类的原始样本附近生成新的少数类样本。
  • 欠采样: 反例中随机选择176个数据,与正例合并。抛弃了大部分反例数据,可能会造成偏差很大的模型。
  • 改进欠采样算法:
    反复做欠采样,生成 1655/176=9 个新的子样本,其中每个样本的正例都使用这176个数据,而反例则从1655个数据中不重复采样。对这9个样本分别训练,集成结果。这样数据达到了有效利用,但也存在风险,训练多个模型开销大,合并模型结果需要额外步骤,正例被反复使用会和过采样一样容易造成模型的过拟合。
  • 二分类数据不均衡时:
    采样方法一般比调整阈值效果要好;
    使用采样方法(过采样和欠采样)有一定的过拟合的风险,应搭配使用正则化模型;
    过采样的结果较为稳定,SMOTE效果更好;
    过采样大部分时候比欠采样的效果好,但还是需要根据数据的特性(如分布)具体讨论;
    实验结果在(L2正则的逻辑回归、随机森林、xgboost)一致,因此和采样法搭配使用的模型最好可以很好的处理过拟合。
    欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响?

24、什么是GBDT?

GBDT全称Gradient Boosting Decision Tree(梯度提升决策树),重点首先是Gradient Boosting,其次才是 Decision Tree。GBDT 是 Gradient Boosting 的一种具体实例,弱分类器使用了决策树,通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。

  • 优点是:①效果好;②即可以用于分类也可以用于回归;③可以筛选特征。

25、GBDT算法的流程?

在这里插入图片描述
GBDT通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差、高偏差,因为训练的过程是通过降低偏差来不断提高最终分类器的精度。

弱分类器一般会选择CART TREE(即分类回归树)。由于要求高偏差、简单,每个分类回归树的深度不会很深。最终的总分类器是将每轮训练得到的弱分类器加权求和得到的(即加法模型)。

弱分类器的损失函数使用平方损失函数,这个差值就是残差。GBDT的核心Gradient Boosting就是让损失函数沿着梯度的方向下降。利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。GBDT每轮迭代时,都去拟合损失函数在当前模型下的负梯度,这样每轮训练时都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。

26、GBDT如何选择特征?

GBDT选择特征的细节其实就是CART Tree生成的过程,前提是GBDT的弱分类器默认选择的是CART TREE(其实也可以选择其他弱分类器,前提是低方差、高偏差,服从Boosting框架)。

CART TREE是一种二叉树,其生成过程就是一个选择特征的过程。假设总共有 M 个特征。第一步需要从中选择出一个特征 j,作为二叉树的第一个节点。然后在所有样本的特征 j 的值中选择一个切分点 m.,如果一个样本的特征 j 的值小于m,则分为一类,如果大于m,则分为另一类。如此便构建了CART 树的一个节点。其他节点的生成过程与此相同。在每轮迭代中,对于特征 j,遍历训练样本的所有特征,对于切分点 m,遍历所有样本的特征 j 的值。选择的特征 j 和切分点 m 要使损失函数的损失值最小。
实例分析:机器学习算法GBDT要点总结

27、GBDT如何构建特征?

GBDT本身是不能产生特征的,但是可以利用GBDT去产生特征的组合。(逻辑回归本身适合处理线性可分的数据,如果想处理非线性的数据,一种方法就是组合不同特征,增强逻辑回归对非线性分布的拟合能力。)
长久以来有效的组合特征都是通过人工的先验知识或者实验来获得,但是这样过于耗费人力,并且在机器学习中造成:有多少人工就有多少智能,而且通过人工组合的特征不一定能够提升模型的效果。所以一直以来的趋势是通过算法自动、高效的寻找到有效的特征组合。GBDT可以产生有效的特征组合,用于逻辑回归的训练,提升模型最终的效果。
在这里插入图片描述
如图 所示,使用 GBDT 生成了两棵树,两颗树一共有五个叶子节点。将样本 X 输入到两颗树当中去,样本X 落在了第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,于是便可以依次构建一个五纬的特征向量,每一个纬度代表了一个叶子节点,样本落在这个叶子节点上则值为1,没有落在该叶子节点则值为 0.。
于是对于该样本,可以得到一个向量 [0,1,0,1,0] 作为该样本的组合特征,和原来的特征一起输入到逻辑回归当中进行训练。实验证明这样会得到比较显著的效果提升。

28、GBDT如何用于分类?

GBDT无论用于分类还是回归都是使用的 CART 回归树。核心是因为每轮训练是在上一轮训练的残差的基础之上进行的,残差就是当前模型的负梯度值 。这个训练模式要求每轮迭代的时候,弱分类器的输出结果相减有意义,而残差相减是有意义的。如果选用的弱分类器是分类树,类别相减是没有意义的。

在分类任务中,假设样本 X 总共有 K 类。第一步,在训练时针对样本 X 每个可能的类都训练一个分类回归树。第二步,每轮训练时是同时训练 K 颗分类回归树。第三步,每颗树的训练过程就是 CATR TREE 的生成过程,从而解出 K 颗树,以及 K 颗树对样本 a 的类别的预测值。

29、GBDT的优、缺点?

GBDT拿 Decision Tree 作为 GBM 里的弱分类器,其优势首先得益于 Decision Tree 本身的一些良好特性,具体列举如下:

  • ① Decision Tree 可以很好的处理 missing feature,因为决策树的每个节点只依赖一个 feature,如果某个 feature 不存在,这颗树依然可以拿来做决策,只是少一些路径。(逻辑回归、SVM 不行)
  • ② Decision Tree 可以很好的处理各种类型的 feature。(逻辑回归、SVM 不行)
  • ③ 对特征空间的异常值(outlier)有鲁棒性,因为每个节点都是 x < 𝑇 的形式,至于大多少,小多少没有区别,异常值不会有什么大的影响。(逻辑回归、SVM 不行)
  • ④ 如果出现不相关的 feature,顶多这个 feature 不出现在树的节点里,干扰不大。(逻辑回归、SVM 不行,但是有相应的补救措施,如逻辑回归里的 L1 正则化)
  • ⑤ 数据规模影响不大,因为对弱分类器的要求不高,作为弱分类器的决策树的深度一般设的比较小,即使是大数据量,也可以方便处理。(SVM 遇到大规模数据时训练困难)

通常在给定的不带噪音的问题上,GBDT 通过不断的叠加组合多个小的 Decision Tree 能够达到很好的分类效果,但是能达到的最佳分类效果还是不如 SVM、逻辑回归之类的。不过,实际面对的问题中,往往有很大的噪音,使得 Decision Tree 这个弱势不那么明显。换句话说,通过GBDT训练组合多个小的 Decision Tree 往往要比一次性训练一个很大的 Decision Tree 的效果好很多。因此不能把 GBDT 理解为一颗大的决策树,几颗小树经过叠加后就不再是颗大树了,它比一颗大树更强。

30、RF(随机森林)与GBDT之间的区别与联系?

相同点:

  • 都是由多棵树组成,最终的结果都是由多棵树一起决定。
  • RF和GBDT在使用CART树时,可以是分类树或者回归树。

不同点:

  • 组成随机森林的树可以并行生成,而GBDT是串行生成
  • 随机森林的结果是多数表决表决的,而GBDT则是多棵树累加之和
  • 随机森林对异常值不敏感,而GBDT对异常值比较敏感
  • 随机森林是减少模型的方差,而GBDT是减少模型的偏差
  • 随机森林不需要进行特征归一化。而GBDT则需要进行特征归一化

31、什么是Adaboost?

AdaBoost,是 Adaptive Boosting(自适应增强)算法的简称,在人脸检测问题上尤其出名,它的构造过程也是通过多个弱分类器来构造一个强分类器。
AdaBoost自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

具体说来,整个Adaboost 迭代算法分为3步:

  • 1.初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
  • 2.训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  • 3.将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

32、Adaboost和GBDT的区别?

GBDT和Adaboost,虽然从形式上都是若干弱模型相加,但是求解弱分类器的思路和方法有很大的差别。AdaBoost 不属于 Gradient Boosting,即它在构造弱分类器时并没有利用到梯度下降法的思想,而是用的Forward Stagewise Additive Modeling (FSAM,前项逐步叠加模型)。FSAM 把问题简化为分阶段优化,在当前弱分类器优化结果不变的前提下拟合下一个弱分类器。

按照 FSAM 的思路,如果使用平方差损失函数,就在残差上做平方差拟合构造弱分类器(此时等同GBM);如果是指数形式的损失函数,就在带权重的样本上构造弱分类器。但损失函数如果不是这两种,比如绝对差值函数,虽然构造弱分类器也可以表示成在残差上做绝对差值拟合,但这个子问题本身不容易求解,因为需要构造多个弱分类器,所以希望构造弱分类器这个子问题比较好解。因此 FSAM 思路无法推广到其他一些实用的损失函数上。

相比而言,GBM 每次迭代时,只需要计算当前的梯度,并在平方差损失函数的基础上拟合梯度。虽然梯度的计算依赖原始问题的损失函数形式,但只要损失函数是连续可微的,梯度就可以计算。至于拟合梯度这个子问题,可以选择平方差函数作为这个子问题的损失函数,因为这个子问题是一个独立的回归问题。

33、什么是XGBoost?

XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted,还是boosting方法。XGBoost的目标函数分为:损失函数、正则化项、常数项。损失函数表示训练误差(即预测分数和真实分数的差距),鼓励模型尽量去拟合训练数据,使得最后的模型会有比较少的bias。正则化项定义复杂度,鼓励更加简单的模型,模型简单之后,有限数据拟合出来结果的随机性比较小,不容易过拟合,使得最后模型的预测更加稳定。

XGBoost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准。使用泰勒展开取得函数做自变量的二阶导数形式,可以在不选定损失函数具体形式的情况下,仅仅依靠输入数据的值进行叶子分裂优化计算,本质上也就把损失函数的选取和模型算法优化/参数选择分开了。 这种去耦合增加了XGBoost的适用性,使得它按需选取损失函数,可以用于分类,也可以用于回归。

如何停止树的循环生成:

  • 当引入的分裂带来的增益小于设定阀值的时候,可以忽略掉这个分裂,所以并不是每一次分裂损失函数整体都会增加,类似预剪枝,阈值参数为正则项里叶子节点数T的系数;
  • 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
  • 样本权重和小于设定阈值时则停止建树。涉及到超参数:最小的样本权重和(min_child_weight),类似GBM的 min_child_leaf 参数,但不完全一样。大意就是一个叶子节点样本太少时终止,同样是防止过拟合。

XGBoost的核心算法思想基本如下:

  • 不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。分裂节点的方法有两种:一种是枚举所有不同树结构的贪心法,另一种是针对数据太大,不能直接进行计算的近似算法。
  • 训练完成得到 k 棵树,要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。
  • 最后只需要将每棵树对应的分数加起来就是该样本的预测值。
    通俗理解kaggle比赛大杀器xgboost

34、XGBoost和GBDT的区别?

除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面:(如果不考虑工程实现、解决问题上的一些差异,Xgboost与GBDT比较大的不同就是目标函数的定义。)

  • GBDT是机器学习算法,XGBoost是该算法的工程实现。
  • 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
  • GBDT在模型训练时只使用了损失函数的一阶导数信息,XGBoost对损失函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
  • 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
  • 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样。
  • 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

35、如何进行模型调参?

激活函数选择,学习率设定,防止过拟合,优化器选择,残差块与BN层,自动调参方法(Grid Search:网格搜索,Random Search:随机搜索,Bayesian Optimization:贝叶斯优化),参数随机初始化与数据预处理
深度学习调参有哪些技巧?

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值