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