人工智能、机器学习面试题总结,侧重于理解,回答供参考,欢迎讨论。
深度学习(DeepLearning, DL)和机器学习(Machine Learning, ML)的关系是什么?
深度学习是机器学习的子类,是利用深度神经网络提取特征进行学习。机器学习还有其他非深度学习的技术,例如SVM、Decision Tree、NaiveBayes等。
深度学习流行的框架有哪些?各有什么特点?
TensorFlow:最主流,生态支持完备,硬件友好,同时有Google Brain研究支撑。
PyTorch:后起之秀,融合了Torch和Caffe2,和python混合编程体验好,学术界宠儿。
以及国内的PaddlePaddle,MindSpore等。
精确率(Precision)和召回率(Recall)以及F1值/分数(F1 value/score)是什么?查准率和查全率呢?
先解释缩写:
TP: TruePositive,预测为真,结果也为真的数量;
FP: FalsePositive,预测为真,结果为假的数量;
FN:False Negative,预测为假,结果为真的数量。
精确率:P =TP/(TP+FP),西瓜书里也叫查准率;
召回率:R =TP/(TP+FN),西瓜书里也叫查全率。
F1值:F1 = 2*(P*R)/(P+R),精确率和召回率的调和均值。
可以看出,精确率和召回率的区别在于分母,精确率关心的是预测为真的数量中有多少真正对的(而不是其他类错误预测为这一类),而召回率关注的是这一类有多少判断正确了(而不是判断为其他类了)。直观理解:召回的意思是,如果这一类错误预测为其他类了,要找回来,即为召回。
AUC指标与precesion/recall/F1评估模型的手段有何区别,什么情况下应该用哪一种?
AUC是Area under Curve,曲线下面积。这个曲线横纵坐标分别为TPR和FPR.
TPR:True Positive Rate, 即recall; TPR = TP/(TP+FN), 表示正确分类的正样本所占所有正样本的比例;
FPR:False Positive Rate, FPR = FP/(FP+TN),表示错误分类的负样本占所有负样本的比例。
对于同一个模型,TPR和FPR是一对跷跷板,可以通过修改阈值的方式来调节,例如调低分类为正样本的门槛,则更多的样本被分类为正样本,TP会增加,导致FPR增加;但此时,FP也会增加,导致FPR增加。
F1 score相当于是综合了precision和recall,使用默认阈值;AUC是一个模型更为全面的指标,考虑了不同的阈值。但由于AUC比较复杂,一般情况下使用F1 score就可以了。
SGD 中 S代表什么,如何理解?
S即为stochastic,随机梯度是指用来计算梯度的输入数据是随机选取的一部分(batch),而不是所有的数据。使用所有数据一方面计算量巨大,不太现实,另一方面容易陷入局部极小值难以跳出,随机batch的梯度反而增加了跳出局部极限值的可能性,从而获得更好的结果。
激活函数(ActivationFunction)有什么用处,有哪几种?
提供了非线性单元,使得整个网络变为非线性,从而能够解决各种非线性问题。
有ReLU / PReLU/ Relu6 / Sigmond / Tanh / SELU / SWISH等,目前最常用的还是ReLU, 复杂度低,效果还可以。
监督学习和无监督学习的区别?请分别举例。
监督学习必须要标注,使用标记数据牵引训练,例如LR、SVM;
无监督机器学习不需要标注,模型通过自己发现数据的内部关系,例如Kmeans。
机器学习/深度学习项目中所需的步骤?
采集数据、预处理与特征选择、选择模型、训练模型、评估模型、诊断模型、调整参数,最后是预测、上线运行。
神经网络参数初始化方法有哪些,适用范围是什么?
weight最常用的是由KaimingHe提出的MSRA,在Xavier的基础上改进。Xavier假设激活函数关于原点中心对称,而常用的ReLU并不满足该条件。MSRA初始化是一个均值为0,方差为sqrt(2/Fin)的高斯分布。Xavier初始化是一个均匀分布U[-sqrt(6/(Fin+Fout))],Fin、Fout代表扇入、扇出,即为输入和输出的维度。
bias一般初始化为0,另外提醒一下如果conv后面接bn,可以省略bias,是等价的,有兴趣的可以自己推导一下。
因此,如果激活函数使用ReLU,则推荐使用MSRA;如果激活函数使用tanh等中心对称的函数,则使用Xavier初始化。
列举深度学习中常用的分类网络、检测网络、分割网络(语义分割、多实例分割)、超分网络。
分类网络:ResNet,SENet,EfficientNet等;
检测网络:FasterRCNN,YOLO,SSD等;
分割网络:MaskRCNN、UNet等;
超分网络:SRCNN、FSRCNN等。
具体网络介绍可以关注我的公众号和博客。
ResNet解决了什么问题?结构有何特点?
ResNet提出是为了解决或缓解深度神经网络训练中的梯度消失问题。通过增加shortcut,使得梯度多了一个传递的途径,让更深的网络成为可能。
在图像处理中为什么要使用卷积神经网络(CNN)而不是全连接网络(FC)?
首先,CNN相对于FC的参数量减少非常多,对于图像这种输入维度相对较大的任务,全部使用FC不现实,另外参数量过多而数据规模跟不上非常容易过拟合,网络本身也难以训练。图像本身附近像素的关联信息很多,CNN正好能够提取一个区域数据的特征,并且能够通过不断加深扩展感受野,使得其适用于图像任务。
分类网络和检测网络的区别?
任务不同,Loss函数不同,一般分类网络使用cross entropy loss,而检测网络的loss是分类的loss和检测框回归loss的加权和。
损失函数(loss函数)有什么作用?
牵引网络的更新,梯度是loss函数相对于权重的偏导。
网络训练时为何要加正则化,有哪些手段?
目的是防止网络过拟合。
手段有:
L1/L2正则化
Dropout
Earlystop
数据增强也可以视为是一种正则化,例如图像的平移、旋转、缩放等。
如何判断网络是过拟合还是欠拟合?有哪些手段改善?
通过train和test的准确率来判断,如果train和test准确率差距非常大,即train的准确率接近100%,而test较差,说明过拟合;如果train的准确率就较差,说明欠拟合。
过拟合可以通过增加数据,或者加正则化缓解;欠拟合可以增加网络容量,例如加深或者加宽网络来改善。
BatchNormalization有什么作用?使用时需要注意什么?
BN的主要作用有:
加速网络的训练(缓解梯度消失,支持更大的学习率)
防止过拟合
降低了参数初始化的要求
使用时需要注意train时更新bn的相关参数,而test时要固定,一般有is_training的flag.
梯度爆炸有哪些解决办法?
梯度截断(gradientclipping)
良好的参数初始化策略
调小lr