面經 | 深度學習演算法工程師面經,拿下微軟、華為、商湯等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 1x1卷積作用
(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.刪除字元

改:大數組刪掉指定個數,怎麼最方便。
5.螺旋三角形

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。

31.Leetcode670 Maximum Swap
(詳解://leetcode.com/problems/maximum-swap/)
32.判斷兩線段是否相交
33.迴文子串Leetcode 647. Palindromic Substrings
(詳解://leetcode.com/problems/palindromic-substrings/)
給定一個字元串,你的任務是計算這個字元串中有多少個迴文子串。
具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。

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.給你項目讓你主導怎麼規劃


