百度視覺技術部實習生面試2018-09-29-16:00
一、總記
今天20180929下午16:00,人生第一次演算法崗面試。昨天下午看到百度之星開發者大賽群裡的通知,跟往常一樣丟了個簡歷過去。記得騰訊演算法大賽後被call了兩次,發郵件告知我有綠色通道,我發了簡歷過去就石沉大海了。這次很意外,29號中午接到了面試通知,此時只有兩個小時的準備時間,有點方。
二、準備工作
1、趕緊把課題錄音和ppt找出來開始記筆記。
包括:CPCD、資料集標記方法、densenet原理。
2、吳恩達《深度學習》筆記。
三、面試流程
1、學校專業、個人基本資訊:
這就很尷尬了,我這個醫學生不知道怎麼樣才能讓面試官相信我不是來玩的。我就解釋,我是中山醫學院負責建模方向的研一學生,做的事情跟計算機系的學生一樣。本科是學醫的。面試官好像聽出來了我在極力說明我真的是認真的,讓我不要緊張。
2、根據簡歷問一些做過的專案和比賽:
(1)首先是演算法比賽了。我重點介紹了一下騰訊廣告演算法大賽,這是我真正入演算法坑第一次比賽。然後介紹了下清華的課題。我就以QA形式寫一下這部分的面試問題吧。
①騰訊演算法大賽
1)這個比賽的任務是:預測使用者廣告點選率。
2)資料量:幾千萬條,一共16個g的資料。
3)特徵工程:單值離散型變數用了onehot,多值離散型變數用了countvector,單值連續型變數未作處理。自己又做了一些組合特徵和計數特徵。Onehot後會維度爆炸,因為每一列的離散型變數有很多,onehot後有幾個離散型變數就擴增了多少列,特徵維度就爆炸了。
進行了labelcoder。
4)模型:初賽使用lgb和xgb,複賽使用了ffm和nn。
5)Lgb和xgb的區別:沒答上來,我說的是lgb的分裂節點多。大佬說lgb最強的地方是通過直方圖找分裂點,lgb靠葉子,xgb靠深度。
6)Ffm是什麼:因子分解機,具體原理不知道。
②課題
1)這個課題的任務:影像組學預測肝癌mvi風險。
2)資料預處理:使用張量演算法把一個圖片分成三維,取前x階特徵放入網路
3)資料集:訓練集中抽取平衡的正例和負例,可放回的抽。
4)模型:densenet。
5)框架:tensorflow。還知道什麼深度學習框架:tf、paddlepaddle、caffe。
6)對tf瞭解多少:原理。卷積核、池化、全連線。
7)介紹下CPCD具體引數:我說我借用的已有的演算法,具體分解過程不太明白。
8)CPCD處理後輸入網路的是什麼:這一組的前x階特徵,就是前x階特徵畫素點,包含腫瘤區域,感覺我是亂說的。
9)輸入的解析度:不會。
10)我是負責哪一塊的:densenet調網路,準確率達到70%。
11)還有其他特徵處理麼:加入臨床特徵,把圖片輸出當做特徵和臨床特徵一起輸入lgb。
(2)其他跟影象識別相關的專案。我說本科做過微控制器stm32影象識別。
①電賽做的板球系統
1)任務:使用stm32攝像頭識別小球位置來控制板子運動,讓小球達到指定位置。
2)演算法:直接用原始碼改。因為有相應介面,呼叫就行。Opencv?不知道。C語言寫的。(要涼)
3、程式語言的考察
1)習慣用什麼語言:python。
2)常見的啟用函式:relu、tanh、leaky、sigmoid
3)Python的資料型別:array、list、tuple、dataframe、series(感覺我是亂說的)。
4)List和tuple的區別:我只記得tuple是小括號。後來查是tuple不能改,list能改。一直不懂tuple,終於撞槍口了。
5)梯度消失、梯度爆炸怎麼理解和解決:因為啟用函式權重的引數更新,如果權重比1大一點點,指數迭代後,權重過大就梯度爆炸;如果權重比1小一點點,指數迭代後,權重過小就梯度消失。解決方法:不會。
6)Batch_normalization怎麼理解和解決方法:開始以為是正則化,回答成了L2正則化是歐幾里得函式,然後面試官說這是批歸一化。我就不知道了。
7)會C語言麼:會,stm32就是c語言寫。
8)瞭解kmeans麼:只知道是聚類,不記得咋用了。。
9)實習時間:都行。
4、現場寫程式碼
1)Xcoder互動介面
2)趕緊聯絡澤喵外援,一下就懵逼了。給了十分鐘,後來差不多到時間了,老師說他手機沒電了,我也就基本上寫了一半多。
3)題目:(其實後來發現是LeetCode簡單題541題)
Given a string and an integer k, you need
to reverse the first k characters for every 2k characters counting from the
start of the string. If there are less than k characters left, reverse all of
them. If there are less than 2k but greater than or equal to k characters, then
reverse the first k characters and left the other as original.
Example:
Input: s = “abcdefg”, k = 2
Output: “bacdfeg”
Restrictions:
The string consists of lower English
letters only.
Length of the given string and k will in
the range [1, 10000]
4)互動介面的解答:
def string_reverse(s, k):
leng_string = len(s)
num_every2k = math.ceil(leng_string / (2*k))
result = ""
for i in range(num_every2k):
idx_start = 2 * k * i
if idx_start <= leng_string:
result += s[idx_start:(idx_start+k)][::-1]
result += s[(idx_start+k):(idx_start+2*k)]
elif idx_start - k > leng_string:
result += s[(idx_start-2*k):][::-1]
else:
result += s[idx_start-2*k:(idx_start-k)][::-1]
result += s[idx_start-k:]
return result
四、後記
1、面試持續了一個半小時,16:00-17:30,電話和微信語音。我全程想看看筆記卻找不到,真的是每個步驟都必須親力親為才能波瀾不驚。
2、感受和建議就是:
(1)自己做的東西,參與的比賽要搞懂每一個細節,不要怕慢,一定要搞懂。什麼叫懂?就是原理理論不會忘,隨時能給別人講出來,程式碼會實現。
(2)廣泛涉獵,你看的每一個細節都可能成為你回答問題的點。
(3)刷題:現場寫程式碼說好的一般都是LeetCode抽題呢!弄懂原理隨時會寫,達到import ABCD的水平就好。
3、不在意結果,有這次機會已經彌足珍貴。也謝謝澤喵助攻。未來會更努力。