面經 | 深度學習算法工程師面經,拿下微軟、華為、商湯等7家公司offer

  • 2020 年 8 月 13 日
  • AI
作者:一言難盡
鏈接://zhuanlan.zhihu.com/p/148246487
來源:知乎

2020屆應屆渣碩,基於實習和秋招的面試,拿到了微軟、阿里、商湯、滴滴、華為、海康、平安、陌陌等offer,下面總結一些經驗,希望對大家有所幫助,有問題之處也可以隨時指出。如果侵犯公司隱私,煩請告知,此文僅做分享之用。

最開始是以公司為單位進行總結,實習經驗可以參考這裡。

//github.com/espectre/Algorithms_Engineer_Interview

後面我發現,各公司面試問題存在較多重複,於是按照題目類型分門別類,而不是按照公司機械劃分。簡單分為深度學習、機器學習基礎、圖像處理基礎、數學基礎、算法基礎、程序設計語言、模型部署、HR面試以及與我本人簡歷相關的目標檢測、屬性識別、Kaggle及天池的比賽、創新想法等幾個部分介紹。可能開始會有重疊或者分類不恰當,後面會逐漸更新完善。其中第一篇先介紹到HR面試,第二篇介紹個人相關的項目和比賽部分。


一、深度學習

1.模型類

1.1 resnet和densenet及其不同

  • 相同層數,densenet和resnet哪個好,為什麼?

  • 那麼ResNet解決了什麼問題呢?

訓練深層的神經網絡,會遇到梯度消失和梯度爆炸(vanishing/exploding gradients)的問題,影響了網絡的收斂,但是這很大程度已經被標準初始化(normalized initialization)和BN(Batch Normalization)所處理。

當深層網絡能夠開始收斂,會引起網絡退化(degradation problem)問題,即隨着網絡深度增加,準確率會飽和,甚至下降。這種退化不是由過擬合引起的,因為在適當的深度模型中增加更多的層反而會導致更高的訓練誤差。

ResNet就通過引入深度殘差連接來解決網絡退化的問題,從而解決深度CNN模型難訓練的問題。


1.2 resnet兩種結構具體怎麼實現,bottleneck的作用,為什麼可以降低計算量,resnet參數量和模型大小


1.3 Inception系列的演化


1.4 知道哪些移動端/輕量化模型

mobilenet,shufflenet,pelee等

1.5 GAN


2.卷積類

2.1 卷積神經網絡結構特點

局部連接,權值共享


2.2 知道哪些卷積

以及卷積過程計算


2.3 深度可分離卷積

原理,為什麼降低計算量,口述計算,減少了多少


2.4 deformable conv怎麼做

具體怎麼學的,對偏移有沒有什麼限制


2.5 1×1卷積作用

(1)變換channel

(2)通道融合


3.深度學習基礎

3.1 BN的原理、作用和實現細節

其中均值和標準差的計算,以及訓練和測試時分別怎麼用

如果數據不是高斯分佈,bn後怎麼恢復


3.2 激活函數

有哪些,為什麼使用激活函數

sigmoid

tanh

relu

leaky relu


3.3 損失函數/分類的loss函數

0-1

mse

bce/交叉熵

l1/l2

smooth l1(為什麼用這個)

hinge(svm)


3.4 過擬合/欠擬合,預防方法

正則化具體怎麼做,為什麼有效


3.5 梯度消失/梯度爆炸

現象、原因和解決方法 梯度爆炸/消失

(詳解://blog.csdn.net/qq_25737169/article/details/78847691)


3.6 網絡退化

現象、原因和解決方法


3.7 各種優化器

介紹各種優化器

adam的特點和公式


3.8 調參技巧

關於神經網絡的調參順序? – Miracle的回答 – 知乎//www.zhihu.com/question/29641737/answer/243982984


3.9 神經網絡組件

卷積/池化/全連接層/BN/IN/GN等組件


3.10 深度神經網絡和深度學習區別

機器學習是很多種方法和模型的總稱。

神經網絡是一種機器學習模型,可以說是目前最火的一種。

深度神經網絡就是層數比較多的神經網絡。

深度學習就是使用了深度神經網絡的機器學習。


3.11 深度學習為什麼比機器學習好

3.12 train,val,test相關


3.13 如果訓練集不平衡,測試集平衡,直接訓練和過採樣欠採樣處理,哪個更好


3.14 softmax原理

softmax得出的結果是排序的么,為什麼分類用交叉熵


3.15 F1score是α=1,那麼α什麼時候取其他值

3.16 梯度物理意義,小球下滾,如果坡很陡,會怎麼樣,梯度的大小和方向


3.17  pooling層的作用

(詳解://blog.csdn.net/sunflower_sara/article/details/81322048)


3.18 監督學習和非監督學習舉例


3.19 假設空間與歸納偏好

周志華機器學習緒論1.3

(詳解://blog.csdn.net/u013698770/article/details/53208589)


3.20 感受野相關

3x3conv,2x2pool,3x3conv後感受野計算


3.21 如果模型不收斂,怎麼調節


3.22 l1/l2正則,怎麼選擇

weight_decay作用,和l1/l2比較


3.23 解釋梯度下降


3.24 鏈式法則

二、機器學習基礎

可能因為簡歷上可問的東西比較多,面試時間有限,機器學習相關問的不是很多,推薦看一下李航那本統計學習方法。


1.logistic回歸

2.svm

3.選擇傳統機器學習還是深度學習的標準是什麼

4.隨機森林

bagging和隨機森林的區別


5.決策樹


三、圖像處理基礎

1.數字圖像處理,各種濾波

2.進行過哪些數據預處理

空圖,壞圖,單通道圖,多通道圖等一些情況會怎麼處理


3. 圖形學知道哪些


四、數學基礎

其實主要就是概率與統計相關

1.概率:圓上任意三個點組成的三角形,包含圓心的概率

2.概率:x,y,z都是(0,1)均勻分佈,x+y+z<1的概率

(詳解://www.matrix67.com/blog/archives/3507)


3.拋硬幣直到連續若干次正面的概率

(詳解://www.cnblogs.com/avril/p/3161669.html)


4.先驗概率,後驗概率,怎麼轉換

5.坐標0開始,依次走1,2,3,。。。,n步,可以左或者右,問有沒有到不了的位置

加問,到指定位置m,至少需要多少步 (1)沒有到不了的,因為左x右x+1,每次走一步,可以到達所有位置 (2)先求最接近m的連續和,然後從裏面選兩個數作差。


6.n個門,1個後門是車,其餘n-1個後門是羊,你先選一個,如果面試官告訴你其餘n-1個中某個是羊,你會重新選擇么?

你先選一個,概率1/n 面試官告訴你某個不是,你在剩餘中選的概率為兩部分 (1)你選的那個是,則概率0 (2)你選的不是,(n-1)/n * 1/(n-2),即你第一次選的不是的情況下剩餘n-2中選的是的概率 所以,n=3為2/3,重新選更優


7.三個盒子,一個盒子兩個紅球,一個盒子一紅一藍,第三個盒子兩個藍球。一人隨機選了一個盒子,並摸出一個紅球,請問這個盒子里另外一個也是紅球的概率是多少

2/3

2/3概率選了第一個盒子


五、算法基礎

該部分主要是手撕代碼,也是面試的重要組成部分

可能因為我本科非計算機,題目大都相對簡單,不過一次0 bug完成還是需要練習。

1.x的n次方(x任意,n自然數)

2.鏈表排序(然後不能動指針)

3.螺旋打印二維數組

4.刪除字符

{C48`6{I3WYYB$R%_2CT4`C.png

改:大數組刪掉指定個數,怎麼最方便。


5.螺旋三角形

EVNTFK{L}_I6[802BA1874H.png

6.二叉樹深度及最長路徑

7.排序

知道哪些排序算法,快排時間複雜度,時間複雜度推導,O(n)的排序方法

時間複雜度O(n)的排序算法

快排,歸併,堆排序


8.二叉樹路徑和為給定值

9.一個數組,其他數出現兩次,另一個出現一次,找出

改進:另外兩個數出現一次


10.鏈表中倒數第k個結點

11.判斷鏈表對稱/鏈表迴文

12.鏈表反轉

13.逆序對

14.算法:爬樓梯

劍指offer(八)


15.算法:連續子數組的最大和

劍指offer(三十)


16.算法:最長不重複子串

leetcode(3)/劍指offer第二版(48)

典型題.求一個數組中只包含0,1使得其中0,1個數相等的最大子數組


17.算法:給定一個數組A,求max(Ai – Aj)。其中 i < j 。

18.算法:扎氣球

leetcode 452 

(詳解://blog.csdn.net/yysave/article/details/84403875)


19 n個文件(海量文件),查找和排序,二分查找時間複雜度

歸併排序,二分查找


20 一個數組裏面是股票值,求什麼時候購買和賣出,收益最大。

一個數記錄最大差,一個記錄最小元素,遍歷一次即可


21. 最長連續公共子串

dp 注意不是非連續


22.實現卷積計算

23.實現IoU和NMS

IoU

NMS

23.link

(詳解://blog.csdn.net/u013074465/article/details/47663769)

A是一個排序好的數組,升序排列;B是一個排序好的數組,升序排序;給定c,找到a,b,滿足 a屬於A b屬於B a+b=c


24.一維數組最大和

25.二維數組求最大和矩陣

26.二維數組有多少個子數組

包含一行的,第一行為例,一個的n個,兩個的n-1個,。。。,n個的一個,一共n+(n-1)+。。。+1,n行就是n*。而包含兩行,三行就依次是(n-1)*, (n-2) *, 所以就是n+(n-1)+。。。+1的平方


27.二維矩陣左上角到右下角最大和

leetcode 64

(詳解://leetcode.com/problems/minimum-path-sum/)


28.1-n數字里少一個,找出來

少兩個呢


29.寫VGG、resnet

30.輸入D和I組成的字符串,輸出數字數組,D表示Decrease,I代表Incre。

G0N6BPB[RKKCNR9(S2V8_J1.png

31.Leetcode670 Maximum Swap

(詳解://leetcode.com/problems/maximum-swap/)


32.判斷兩線段是否相交

33.迴文子串Leetcode 647. Palindromic Substrings

(詳解://leetcode.com/problems/palindromic-substrings/)


給定一個字符串,你的任務是計算這個字符串中有多少個迴文子串。

具有不同開始位置或結束位置的子串,即使是由相同的字符組成,也會被計為是不同的子串。

AT)C)7UX@I)@6JPP3UBI69P.png


34.對於一個元素各不相同且按升序排列的有序序列,請編寫一個算法,創建一棵高度最小的二叉查找樹。

給定一個有序序列int[] vals,請返回創建的二叉查找樹的高度。

power(2,n-1)-1<len<=power(2,n)-1


35. 尋找兩個元素異或的最大值。

36.工作方案

(詳解://www.nowcoder.com/questionTerminal/fa4cbee074714c9d813c8c73f75eb5bc?orderByHotValue=1&questionTypes=111110&page=1&onlyReference=false)


37.Valid Permutations for DI Sequence

Leetcode 903

(詳解://leetcode.com/problemset/all/?search=903)


38.atoi

Leetcode 8

(詳解://leetcode.com/problems/string-to-integer-atoi/)


39.根據頂點坐標,判斷兩個四邊形/三角形是否相交

40.球隊至少需要多少分可以出線,最多有多少分未出線

(詳解://blog.csdn.net/xueyingxue001/article/details/52885415)

m支兩隊伍兩比賽,贏了得3分,平局各得一分,輸了不得分,求n個晉級名額中的最少得分。


41.leetcode股票

42.給定一個不等概率生成器,隨機生成 0 和1 的概率分別為 p 和1-p, p 不等於0.5,要求設計如下等概率生成器:

(1) 隨機生成0 和1 的概率為0.5

可以構建一個二維表 00,01 10,11 對應的概率 p*p,(1-p)*p (1-p)*p,(1-p)*(1-p) 我們可以發現,01和10出現的概率相等,都是(1-p)*p 所以如果連續兩次出現01,認為出現0;如果出現10,認為出現1,出現其他重新擲即可實現等概率0.5

(2)隨機生成0,1 和2 的概率為1/3

連續擲三次出現001,010,100三種等概率,都是1/3

(3) 隨機生成0,1,2,…n-1 的概率為1/n

連續擲n次 出現0000…001對應0, 出現0000…010對應1, … … … 出現1000…000對應n


43. 給定n個數的數組,找到所有長度大於等於k的連續子數組中平均值最大的那個。返回那個最大的平均值。

44.在一個 m*n 整數矩陣中找到指定值 target, 這個整數矩陣有如下性質:

(1) 每行從左到右數值遞增

(2)每列從上到下數值遞增


45.給定一個無向圖,這個圖是在一棵樹的基礎上加上一條邊構成的。問哪條邊可以刪掉使圖重新變成一棵樹?如果有多個答案那麼輸出輸入的邊中最後出現的那條

46.輸入四個點的坐標,求證四個點是不是一個矩形

先計算中點坐標,然後計算其到四個頂點的距離是否相等


1. Python

1.1 深拷貝和淺拷貝

1.2 list和tuple區別

1.3 is和==異同

(詳解://juejin.im/entry/6844903538737299464)


1.4 list參數傳遞

如果list在函數里改變,原來的list是否改變


2. C++

2.1 指針與引用的區別

(詳解://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html)

(1)指針是一個變量,存儲的是一個地址,指向 內存的一個存儲單元,它的內容是內存中的地址

(2)引用跟原來的變量實質上是同一個東西,只 不過是原變量的一個別名而已。


2.2 繼承與多態

2.3 數組和鏈表

2.4 內存泄漏和溢出


七、模型部署

1. tensorrt內部機制

tensorrt怎麼量化,float32怎麼變int8,怎麼變回來


2. 分佈式,多卡使用

(1)數據並行

每個機器都有一個相同的完整的模型,然後分別處理不同的數據,最後server匯總結果;

(2)模型並行

把一個模型進行拆分,每個機器上是模型的一部分,然後每一部分模型在不同的機器處理,處理結果移交給下一個機器的部分繼續處理。

(3)現在以數據並行為常用方式,模型並行主要難點在模型拆分上,二者通信量都很大。

(4)分佈式的模型更新方式主要是兩種 中心化(parameter server)和去中心化(ring all-reduce etc.)

中心化參見TF和MXNet 去中心化參見NCCL的處理方式


3.剪枝怎麼做,剪多少,效果變化多少

4.量化怎麼做,效果變化多少


八、HR面試

1.個人規劃

2.希望做研究還是工程

3.有沒有和人發生爭執的經歷

4.實習遇到的困難

5.給你項目讓你主導怎麼規劃

AI研習社開放秋招徵文了,分享面經有機會獲得Kiddle等大禮哦!
以下是已參加作者,名單持續更新中:
譯者:Arthur  
作品:《2020 數據分析崗位報告:數據分析師需要哪些能力?》
//www.yanxishe.com/blogDetail/20533
作者:渣渣的渣渣之路
作品:《萌新指南:堅持學習三步走,邁向職業巔峰?》
//www.yanxishe.com/blogDetail/20573(點擊閱讀原文查看)
面經無數,但我們依然期待獨一無二的你!