面經 | 深度學習算法工程師面經,拿下微軟、華為、商湯等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.刪除字符
改:大數組刪掉指定個數,怎麼最方便。
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.量化怎麼做,效果變化多少