天天看點

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

人工智能、機器學習面試題總結,側重于了解,回答供參考,歡迎讨論。

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