2020-实习生面试题

2020-实习生面试题

阿里-算法(深度学习)

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正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择,找到对模型贡献大的特征,减少参数。
L2正则化: 是指权值向量w中各个元素的平方和然后再求平方根,即L2范数,乘上λ。L2正则化尽量使所有参数都比较小,使模型能够适应不同的数据集。(若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响。)L2正则化提高了模型的抗扰动能力,在一定程度上避免了过拟合现象。
机器学习中正则化项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、什么是面向对象、面向过程?

面向过程:(C语言)自顶向下、逐步求精、模块化封装函数,主张按功能把软件系统逐步细分,对每个涉及到的功能都进行一次数据处理然后输出。由主函数把函数中的所有接口串接起来,程序的实现非常强调达到某功能的算法。每个函数都有唯一的入口和出口。(注重过程。解决问题时,把事情按步骤拆分成 一个个函数和数据(用于函数/方法的参数),每个函数看作一个过程,然后按照一定的顺序执行完这些函数。)
面向对象:(Python,C++,JAVA)利用面向过程的结构化程序流来设计,基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。强调直接以对象来思考、认识问题,并根据对象的本质特点把它们抽象为构成系统的基本单元,使得软件系统组件能够直接映像到客观世界,并保持客观世界中事物原本的相互关系。(注重对象。解决问题时,把事物抽象成对象的概念(按功能划分,而不是按步骤),给问题里的每个对象赋予一些属性和方法,让每个对象去执行自己的方法解决问题。)

24、为什么要使用面向对象?

面向对象与人们习惯的思维方法一致,使程序代码更加容易让人理解和接受,开发效率高,代码重用性好,并且有利于程序的后期修改和维护;
面向过程的程序设计方法则不同,所有程序代码都包含在几个模块中,开发效率低,可读性差,不利于程序的后期修改和维护。

25、python有哪些用于机器学习、深度学习的高级包?

核心库与统计:Numpy、Scipy、Pandas、StatsModels。
可视化:Matplotlib、Seaborn、Plotly、Bokeh、Pydot、Scikit-learn、XGBoost/LightGBM/CatBoost、Eli5。
深度学习:Tensorflow、PyTorch、Keras。
分布式深度学习:Dist-keras/elephas/spark-deep-learning。
自然语言处理:NLTK、SpaCy、Gensim。
数据抓取:Scrapy。
机器学习常用Python扩展包

26、PyTorch、TensorFlow的区别和各自的优缺点?

TensorFlow是一个静态的框架,需要先构建一个TensorFlow的计算图,构建好了之后,计算图不能改变,然后再传入不同的数据进去,进行计算。
PyTorch是一个动态的框架,对变量做任何操作都是灵活的。
PyTorch 和 TensorFlow 的关键差异是它们执行代码的方式。这两个框架都基于基础数据类型张量(tensor)而工作。PyTorch 和 TensorFlow 的一个主要差异特点是数据并行化。PyTorch 优化性能的方式是利用 Python 对异步执行的本地支持。而用 TensorFlow 时,必须手动编写代码,并微调要在特定设备上运行的每个操作,以实现分布式训练。
TensorFlow与PyTorch

27、python中的迭代器、生成器?

python_魔法方法(六):迭代器和生成器

28、python中的魔法方法?

了解描述器
python的常用魔法方法详细总结

29、如何进行模型调参?

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

发布了209 篇原创文章 · 获赞 48 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/clover_my/article/details/104479130