AI人工智慧、機器學習 面試題(2020最新版)

  • 2020 年 4 月 10 日
  • 筆記

人工智慧、機器學習面試題總結,側重於理解,回答供參考,歡迎討論。

General

深度學習(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初始化。

CV

列舉深度學習中常用的分類網路、檢測網路、分割網路(語義分割、多實例分割)、超分網路。

分類網路: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