1. 程式人生 > >一些深度學習面試題

一些深度學習面試題

資料增強怎麼做?

需要增強的原因:在訓練神經網路的時候,需要大量的資料進行模型的訓練,以防止模型的過擬合。

還可以怎麼做:增加資料量通常會有兩種方式,直接增加原始資料,做資料增強。

一些資料增強的方法:

①.影象翻轉,是做映象翻轉

②.影象旋轉,例如以90,180,270度旋轉

③.影象縮放

④.隨機剪裁,剪裁之後保留主要部分,但不要把含有主要特徵的目標物體弄掉

⑤.物體平移

⑥.加入隨機噪聲,例如加入常見的椒鹽噪聲、高斯噪聲

⑦.顏色變換,例如增強RGB中的某一個通道,另外的通道不變

⑧.改變對比度,在HSV顏色空間中,改變飽和度S和亮度V,保持色調H不變。

備註:資料增強也要選擇最適合專案需求的方式,例如膠片分類專案中,影象翻轉和隨機剪裁和加入噪聲等是比較合適的。

怎麼篩選資料?

 

學習率怎麼調整,一般你設多少?

 

inception結構能不能緩解梯度消失?

可以緩解梯度消失,因為inception結構額外計算了兩個中間loss,防止了較深網路傳播過程中的梯度消失問題。

 

遷移學習加L2正則化的好處是什麼?

L2正則化可以限制引數權重的過大變化,這種限制可以使得網路的變化不至於變得太多

卷積後特徵圖的大小怎麼算?

N = 

其中:N為輸出長寬,W為輸入長寬,f為卷積核大小,p為padding大小,s為步長。

池化後的大小:N = (W -  F)/S + 1

介紹一下YOLOv3

yoloV1:將原輸入圖劃分為s*s個小格,每個小格有B個bounding box(文章中自己設定),需要檢測的類別C,位置資訊4個值,和置信度confidence,判斷每個小bounding box的置信度,採用最大值抑制法,得到每個object的最終位置框和置信度和類別。這種方法識別速度較快,45fps到155fps。向量(5*B+C)

yoloV2:是V1的batter、faster、stronger版本,是目前比較先進的物體檢測方法,速度夠快,並且可以權衡精度和速度,結合ImageNet和COCO

一起對分類和位置進行訓練,實際上可識別種類是超過9k的,提出Wordtree對資料進行混合訓練。

yoloV3:多尺度預測,就是採用不同大小的特徵圖來進行預測,最大的改動在於基礎的分類網路採用類似於resnet的網路結構,另外放棄了softmax的分類,採用多個logistic分類器的組合,因為目標可能有重疊的標籤,例如檢測到一隻狗,可以是犬類也可以是家畜。

https://blog.csdn.net/app_12062011/article/details/77554288

YOLO和SSD的區別

https://www.julyedu.com/question/big/kp_id/26/ques_id/2103

SSD在YOLO的基礎上,加入了faster-rcnn的anchor思想,而且加入了在不同層的特徵圖張進行特徵掃描,實現了不同尺度上的檢測,保證了又YOLO的速度,加上了框選位置的精度。

triplet loss不容易收斂怎麼訓練?

 

loss出現nan怎麼辦

https://www.jianshu.com/p/9018d08773e6

資料增強用類似於EPF這類濾波有沒有效?

有效,這類濾波有類似於把物體邊界突顯出來的意思,還是可以看到整個物體,人眼是很容易分清楚的,我覺得深度學習本質要做的就是儘量把人眼能看出來的都把他識別出來,而如果資料增強之後還是一個不同表現形式的物體,那也可以一定程度的增強網路的泛化能力。

模型壓縮你是怎麼做的?

1.模型剪裁,這是目前最為簡單有效的方法:計算卷積核引數絕對值的和,接近於0的就去掉。計算某個卷積核經過非線性之後,為零的就去掉,這種方法顯示vgg有90+%的可以去掉,但實驗只驗證了一個卷積層和一個FC。基於熵值的計算判斷。基於隨機剪裁的判斷。基於計算能量消耗的判斷,能量消耗大的層去除一些卷積。

2.核的稀疏化進行壓縮,在訓練的時候進行對引數的限制,例如同時加入兩項正則化,讓得到的引數趨向於稀疏,或者說讓不重要的連結截斷。

3.權重共享,就是說如果一個組塊裡,有多個部分的權重的貢獻是一致的,那就只使用一個部分,來替代整個組塊。

4.基於量化的模型壓縮,這個壓縮的原理是訓練之後大部分權重都是在0附近的,就用8位的型別來代表32位的浮點數,記憶體和頻寬都縮小了,精度也低了。

5.基於知識蒸餾進行模型壓縮:一個訓練好的泛化能力比較好的大網路,一個是較為精簡的沒訓練的壓縮網路。主要操作有兩種,一個是給小網路設定一個新的目標函式,包含hard target與soft target,一般選取的權重分別為0.1和0.9,hard target就是傳統的loss,而soft target是小網路和大網路之間的加了溫度引數T後的交叉熵,而的一個建議值是20 。第二個方式是把大網路截成三段,小網路也是,每一段的action輸出進行對應的損失函式求取。

6.基於low-rank分解,這個還不是很懂。

https://blog.csdn.net/App_12062011/article/details/81665140

http://www.cnblogs.com/maybe2030/p/5678387.html

https://blog.csdn.net/Taiyang625/article/details/81672717

你認為模型提速最有效的方法是什麼

 

介紹一下你的專案

 

你用什麼顯示卡

 

介紹一下常見的一些模型

CNN用來分類和物體檢測之類的,延伸出來風格遷移,對抗網路,域對抗網路,包括物體檢測的RCNN、YOLO等,還有文字語音方面的RNN,RNN又延伸出LSTM,2017又提出了膠囊網路,輸出不再是一個個的值,而是一個個的向量,但是這個在工業屆還沒廣泛應用起來。

Lenet:1998,用於郵件的數字識別

AlexNet:2012,開始作用於彩色圖,使用relu

VGG16:2014,牛津,採用卷積層與池化層交替,三個FC,卷積核都採用3*3,池化都採用2*2

inception V1:2014,由若干個GoogleNet組成,每個模組有卷積核分別為1、3、5的小卷積層和2*2池化層組成,額外插入兩個中間loss的計算,防止訓練時出現梯度消失之類的問題。

inception V2:在V1的基礎上,把5*5的卷積拆分為兩個3*3的卷積,首次加入了BN操作,整體來說感受野不變,訓練加快約為V1 的1/14,準確度上限也提高了。

inception V3:增加了卷積的類別,7*7之類的,然後又把3*3的卷積拆分成1*3和3*1,一些卷積的特徵圖縮小採用了步幅為2的方式,而不是傳統的池化層。(inception模組裡面的pool並不縮小圖片)

inception V4:嘗試了resnet的連結結構,也取得了成功。

ResNet:2015,微軟亞洲研究院,首次採用了跳接的方式進行網路連結,網路深度加深了很多。

以上都是一般用於圖片分類,例如lenet用在數字分類,其他的用在其他物體分類,貓狗分類等。另外還有一些網路結構用於物體識別,例如R-CNN、YOLO、SSD等等。

介紹一下R-CNN

2014.R-CNN的思想是選出若干個預測框,對預測框先統一進行一下NN,然後進行兩大操作,一個是用SVM進行物體分類(當時SVM的工程應用效果還相對更好),如果有C類就分出包括背景的C+1類。另一個是對位置區域框迴歸得到更貼近準確位置的位置框。這個原始的模型單張檢測用時達47s。

2015.Fast R -CNN在原來基礎上做了改進,不再是劃分出預測框再進行操作,而是統一先做卷積層操作,再劃分出相應的預測框對應位置,物體分類用softmax來做,然後把位置和分類的loss合在一起形成端對端系統,對於不同大小的預測框要進入固定的FC,是通過RIP池化來操作的。最終這個版本提速到了0.32s(另外一個說法是2S)。

而2015.Faster R-CNN是對原始的預測框的選取也放進了卷積層操作,卷積層之後再分出一條路來做預測框的選取,另外就是把FC層換成了1*1卷積層,最終速度進一步提高了,0.2s。 

介紹一下語義分割

語義分割是對每個畫素點都要輸出結果,判斷每個畫素點屬於哪一類。語義分割的核心思想是進行全卷積網路操作,輸出的層長寬是等於輸入的圖,通道數的等於類別數加一,每個畫素點對應一個1*X的向量,來表示該點屬於什麼類。實際網路中不可以保持網路寬度一直不變,因為這樣的話計算消耗會非常的大,因此需要做成沙漏形,往中間縮小,然後後面通過反捲積進行長寬的擴大。最終得到原圖大小的輸出層。

Mini-batch的優勢

一個數據集一輪可以若干次的梯度下降;

單次迭代因為還是進行矩陣運算,因此速度不會降低太多;

cost function會變成隨機下降,還是會下降,而且有利於跳過一些區域性最小值。

神經網路調參,要往哪些方向想?

損失函式的選擇是否是合適的

學習率的選取是否合適

batch size選擇是否合適

訓練樣本是否正常,是否需要增強

是否有設定batch normlaztion

啟用函式的型別需要選取恰當

選取合適的優化演算法(例如梯度下降,Adam等)

是否存在過擬合

過擬合的話需要怎麼處理?

早停法,當網路訓練到了最平衡的時候,停止訓練

進行dropout操作,緩解過擬合

加入正則化

進行權重衰減,越訓練到後期變化的幅度越小

改善訓練集,尋找更多資料或者資料增強

尋找更合適的網路結構

如何修復梯度爆炸問題?

1. 重新設計網路模型

2. 使用 ReLU 啟用函式

3. 使用長短期記憶網路(或者說使用resnet)

4. 使用梯度截斷(Gradient Clipping)

5. 使用權重正則化(Weight Regularization)

6. 加入BN層

Alexnet有什麼創舉,介紹一下

1.使用了relu的啟用函式,一定程度解決了梯度彌散問題

2.使用了最大池化操作,以前一般是使用平均池化,這個最大池化更加突出了特徵

3.使用了dropout,這個一般是應用在卷積層後面的全連線層

4.使用了LRN,這個簡單來說就是把大的變得更大,把小的變得更小,不過後來證明這個實際作用並不大,後來就棄用了

5.使用了GPU訓練的操作方式,使得訓練更多更快

6.使用了資料增強的方式進行處理,例如影象翻轉旋轉之列,使得訓練集有更多的資料