阿里螞蟻的機(jī)器學(xué)習(xí)算法-一 、二、三面面經(jīng),干貨速收!
阿里一面
1.自我介紹下:
我是XXX的碩士,機(jī)器學(xué)習(xí)專業(yè),我研究方向偏向于深度學(xué)習(xí);然后我本科是XXX的物聯(lián)網(wǎng)工程專業(yè),本科做過(guò)兩個(gè)項(xiàng)目:
(1)基于大數(shù)據(jù)的股票市場(chǎng)分析(2)基于用戶操作的推薦系統(tǒng) ;研究生階段目前印象最深是做了兩個(gè)項(xiàng)目:
1)機(jī)器人課程作業(yè)中的challenge
2)現(xiàn)在正在做的基于model的智能機(jī)器學(xué)習(xí)框架,著重介紹在***一個(gè),然后問(wèn)了下實(shí)際工作,完成程度,貢獻(xiàn)度。***追問(wèn)了一個(gè)對(duì)于物聯(lián)網(wǎng)的看法。
2.hashmap介紹
先說(shuō)了下自己知道JAVA的hash map的用法,python中dictionary也是用hash表實(shí)現(xiàn)的:首先利用hash()將key和value映射到一個(gè)地址,它通過(guò)把key和value映射到表中一個(gè)位置來(lái)訪問(wèn)記錄,這種查詢速度非???,更新也快。而這個(gè)映射函數(shù)叫做哈希函數(shù),存放值的數(shù)組叫做哈希表。 哈希函數(shù)的實(shí)現(xiàn)方式?jīng)Q定了哈希表的搜索效率。具體操作過(guò)程是:
1)數(shù)據(jù)添加:把key通過(guò)哈希函數(shù)轉(zhuǎn)換成一個(gè)整型數(shù)字,然后就將該數(shù)字對(duì)數(shù)組長(zhǎng)度進(jìn)行取余,取余結(jié)果就當(dāng)作數(shù)組的下標(biāo),將value存儲(chǔ)在以該數(shù)字為下標(biāo)的數(shù)組空間里。
2)數(shù)據(jù)查詢:再次使用哈希函數(shù)將key轉(zhuǎn)換為對(duì)應(yīng)的數(shù)組下標(biāo),并定位到數(shù)組的位置獲取value。
但是,對(duì)key進(jìn)行hash的時(shí)候,不同的key可能hash出來(lái)的結(jié)果是一樣的,尤其是數(shù)據(jù)量增多的時(shí)候,這個(gè)問(wèn)題叫做哈希沖突。如果解決這種沖突情況呢?通常的做法有兩種,一種是鏈接法,另一種是開(kāi)放尋址法,Python選擇后者。
開(kāi)放尋址法(open addressing):
開(kāi)放尋址法中,所有的元素都存放在散列表里,當(dāng)產(chǎn)生哈希沖突時(shí),通過(guò)一個(gè)探測(cè)函數(shù)計(jì)算出下一個(gè)候選位置,如果下一個(gè)獲選位置還是有沖突,那么不斷通過(guò)探測(cè)函數(shù)往下找,直到找個(gè)一個(gè)空槽來(lái)存放待插入元素。
3.算法:快排的時(shí)間復(fù)雜度和空間復(fù)雜度?平均多少?最差多少?還有那些排序的時(shí)間復(fù)雜度是O(nlogn)?知道排序中的穩(wěn)定性嗎?我:快排的時(shí)間復(fù)雜度我記很清楚是O(nlogn),空間復(fù)雜度是O(1),平均就是O(nlogn),最差是O(n^2),退化成了冒泡排序;此外還有時(shí)間復(fù)雜度為O(nlogn)的還有堆排序和歸并排序;排序的穩(wěn)定性知道是在排序之前,有兩個(gè)元素A1,A2,A1在A2之前,在排序之后還是A1在A2之前。
4.SVM和Logistic Regression對(duì)比:首先我介紹了下logistics regression的過(guò)程,就是把y=wx+b的結(jié)果放到sigmoid函數(shù)里,把sigmoid作為一個(gè)分類器,這樣做的原因是sigmoid函數(shù)能把所有范圍的值域控制在(0,1)區(qū)間內(nèi),然后我們把0.5作為一個(gè)分類的閾值,大于0.5的作為正類,小于0.5的作為負(fù)類。然后SVM是一個(gè)利用超平面將數(shù)據(jù)隔開(kāi)分類的問(wèn)題,首先我們?cè)趍ax所有距離平面最近的點(diǎn)的margin,同時(shí)subject to y(wx+b)>0,意味著分類正確:
然后:我們可以的到最近點(diǎn)到平面的距離:
我們***再用拉格朗日乘子式將subjuct to 條件轉(zhuǎn)換成一個(gè)等式求解***的w,b 然后求得最有超平面。我說(shuō)SVM有很多kernel,這個(gè)有點(diǎn)像regulation,面試官說(shuō)錯(cuò)了,你講講kernel是什么干什么用的?我說(shuō)kernel是把數(shù)據(jù)把低維映射到高維,因?yàn)橛行?shù)據(jù)在低維不可分,映射高維可以找到超平面去劃分,更好準(zhǔn)確。
***說(shuō)了LR比較方便計(jì)算,SVM 高維kernel計(jì)算復(fù)雜,但是準(zhǔn)確。如果數(shù)據(jù)多,要求實(shí)時(shí)得到預(yù)測(cè)結(jié)果,用LR;如果數(shù)據(jù)不多,要求準(zhǔn)確率,我選擇SVM。另外SVM可以用于多分類,而LR只能用于二分類
5.解決Overfitting、regulation的方法:regulation,我才總結(jié)下了,大致主要聊了2點(diǎn):
(1)dropout,介紹dropout的概念啊,問(wèn)了下train和test階段的不一樣過(guò)程細(xì)節(jié)。
主要講了下test把a(bǔ)ctive function的輸出都乘以P,這樣就把train和test的輸出期望都scale到了一個(gè)range,這樣才是更加準(zhǔn)確的。
(2)Batch Normalisation:BN,BN的原理,問(wèn)什么好,好在哪里?
1)降低了樣本之間的差異,scale到(0,1)。
2)降低了層層之間的依賴,主要體現(xiàn)在前一層的輸出是下一層的輸入,那么我們把所有數(shù)據(jù)都scale到了(0,1)的distribution,那么降低了層層之間的依賴關(guān)系,從而使數(shù)據(jù)更加準(zhǔn)確。
全程聊了一個(gè)小時(shí),我人都傻了,一面不是面簡(jiǎn)歷嗎?(內(nèi)心OS。***問(wèn)了面試官兩個(gè)問(wèn)題:1)我本來(lái)跟老板匯報(bào)了工作在路上走著,電話就來(lái)了,我就說(shuō)沒(méi)準(zhǔn)備好問(wèn)了下面試官對(duì)我的評(píng)價(jià),然后面試官很nice說(shuō)基本面不錯(cuò),給我評(píng)價(jià)偏正面;2)問(wèn)了面試官的部門(mén)工作內(nèi)容,balala講了一堆。然后跟我說(shuō),后面可能有人聯(lián)系你,也可能沒(méi)人聯(lián)系你,有人聯(lián)系的話,可能是他同事。
二面
一,介紹自己及項(xiàng)目:主要介紹自己在TensorLayer框架的制作,貢獻(xiàn),太細(xì)節(jié)了,導(dǎo)致面試官說(shuō)本來(lái)要問(wèn)我的都說(shuō)了。
二.基礎(chǔ)考察:
1.你知道感知野嗎?什么作用?你知道卷積的作用嗎?你用過(guò)池化層嗎?有哪些?
當(dāng)時(shí)一臉懵逼,感知野是神馬?。?**再次確認(rèn)了感知野其實(shí)就是在多個(gè)kernel做卷積的時(shí)候的窗口區(qū)域,就是3個(gè)33等于1個(gè)77的感知大小。
卷積的作用是提取特征,前面的卷積提取類似于人眼能識(shí)別的初步特征,后面的卷積是能夠提取更加不容易發(fā)現(xiàn)但是真實(shí)存在的特征。
Pooling 用過(guò),max pooling, average pooling, global average pooling。再問(wèn)這兩個(gè)分別有什么用?
max pooling我蠢到說(shuō)提取最有特征的特征,其實(shí)就是***有代表性的特征;average pooling提取的是比較general 的特征;global average pooling用來(lái)分類的,因?yàn)楹竺婢W(wǎng)絡(luò)的加深,full connected layer參數(shù)太多了,不容易訓(xùn)練,為了快速準(zhǔn)確得到結(jié)果,采用global average pooling,沒(méi)有參數(shù),但是得到的分類效果跟FC差不多。
2. 講到這里有點(diǎn)尬,你說(shuō)你做過(guò)爬蟲(chóng),自己寫(xiě)的還是用的框架?
用的框架,現(xiàn)在基本不用java我覺(jué)得我還是要補(bǔ)一補(bǔ),差不多都忘光了,我所做的就是用Xpath找到爬取的元素,然后保存下來(lái),再用腳本轉(zhuǎn)成待用Jason。
3.你機(jī)器學(xué)習(xí)的,知道sequence to sequence嗎?
我***反應(yīng)是RNN,我說(shuō)RNN沒(méi)了解,主要我只做深度學(xué)習(xí)CNN相關(guān)工作,大佬呵呵一笑,說(shuō)你們要補(bǔ)補(bǔ)基礎(chǔ)啊。
4. 在線編程:
給個(gè)題目你寫(xiě)寫(xiě)吧,不用math中的取平法差,判斷一個(gè)自然數(shù)是不是可以開(kāi)方(時(shí)間復(fù)雜度盡量低)?
媽耶,***反應(yīng)二分查找。
一上去尬了寫(xiě)了一個(gè)boolean,然后刪除,搞了個(gè)def開(kāi)始寫(xiě)函數(shù)。
***問(wèn)了2個(gè)問(wèn)題,他又問(wèn)了我2個(gè)問(wèn)題:(1)(這次是個(gè)P8大佬)在杭州,你工作地點(diǎn)介不介意?(我多說(shuō)了幾句話,開(kāi)了地圖炮,真的內(nèi)心話)(2)你作為tensorlayer的contributor,對(duì)標(biāo)Kreas,優(yōu)勢(shì)在哪里?他說(shuō)Kears底層支持好多庫(kù)caffe2,Pytorch,等等,我說(shuō)TensorLayer出發(fā)點(diǎn)不一樣,怎么樣比比了一通,方正我覺(jué)得沒(méi)邏輯~感覺(jué)自己涼了~因?yàn)槊嬖嚬俳o我回饋就是你要拓展你的機(jī)器學(xué)習(xí)知識(shí)面啊啊啊,我一個(gè)搞機(jī)器學(xué)習(xí)被吐槽這樣。。。
三面
全程50分鐘,主要講的是項(xiàng)目:針對(duì)項(xiàng)目提出幾個(gè)優(yōu)化問(wèn)題;
1.對(duì)于提供可以自由裁剪pre-train model,怎么保證你輸出的前面部分的check point 參數(shù)與模型結(jié)構(gòu) freeze在一起能在新的任務(wù)里,表現(xiàn)好?有沒(méi)有實(shí)驗(yàn)數(shù)據(jù)支撐?
2.你知道depthwise-CNN嗎?講講具體原理?那1*1的kernel的作用是什么呢?對(duì)網(wǎng)絡(luò)model有什么影響?
3.你還知道或者學(xué)習(xí)過(guò)那些傳統(tǒng)機(jī)器學(xué)習(xí)算法?XGBoost?HMM?SVM等等都清楚嗎?
4. 你學(xué)過(guò)那些基本算法?數(shù)據(jù)結(jié)構(gòu)的運(yùn)用?
5. 你是哪里人?老家?籍貫?
6.問(wèn)我大學(xué)經(jīng)歷,未來(lái)打算,為什么工作?聽(tīng)出來(lái)我想先工作,問(wèn)我后面想不想讀博?
交換問(wèn)題,
1.面試官的工作內(nèi)容。
2.對(duì)自己的評(píng)價(jià)及建議:短時(shí)間內(nèi)展示自己最閃亮的部分(第二天進(jìn)四面,等待通知) 。