AI算法工程师必备技术,快快积累!
技術(shù)
計算機基礎(chǔ)
重要程度:**
本部分大多出現(xiàn)在筆試中,面試中也略有出現(xiàn)。
計算機基礎(chǔ)雖然不是重點,但是很容易被忽略掉的內(nèi)容,一來是本科學(xué)的課程,研究生早忘光了;二來很多同學(xué)覺得我是搞算法的,這些不是開發(fā)問的問題么?殊不知計算機基礎(chǔ)是非常重要的部分,算法工程師首先要是一個工程師,對計算機不夠了解怎么做出更魯棒的網(wǎng)絡(luò)結(jié)構(gòu),怎么能提高計算效率?
這部分主要是4門最重要的基礎(chǔ)課和對linux操作部分:計算機網(wǎng)絡(luò)、操作系統(tǒng)、組成原理、數(shù)據(jù)結(jié)構(gòu)。網(wǎng)絡(luò)和操作系統(tǒng)是非常常問的學(xué)科。
其中最常問的是操作系統(tǒng),參考書目:《操作系統(tǒng)概念》就是恐龍書啦。內(nèi)核、進(jìn)程、線程、調(diào)度算法、死鎖等等都是常問問題。
計算機網(wǎng)絡(luò),參考書目《計算機網(wǎng)絡(luò)》,其中TCP協(xié)議、還有擁塞控制都被問過。
組成原理,參考書目《計算機組成與設(shè)計 硬件/軟件接口》,比較少見吧。
數(shù)據(jù)結(jié)構(gòu),參考書目《算法導(dǎo)論》,求復(fù)雜度,紅黑樹、B+樹的一些結(jié)構(gòu)和優(yōu)點,有些跟算法題一起考察了,也不太分得清,求算法復(fù)雜度是最重要的部分,主定理背一背就搞定。
Linux操作,參考書目《鳥哥的linux私房菜》,講真問的還挺多,不過都是基本操作,比如查找啊,幾千條數(shù)據(jù)的移動啊之類。
?
編程語言
重要程度:***
本部分筆試中非常常見,面試中也比較常見。
公司都會對語言有要求,再次強調(diào),不要以為自己是算法崗就可以忽略語言和計算機基礎(chǔ)部分。一般來說,根據(jù)公司和業(yè)務(wù)的不同對語言的要求也不一樣,很多是會一種即可,不過對口是最好的嘛,比如騰訊是c++,阿里是java,百度是c++,其他大部分是java,python一般都要求,阿里有些還要求sql,畢竟在阿里,算法工程師 = sql工程師(開個玩笑)。
C++,參考書《C++ Primer》當(dāng)字典書吧,常見問題:多態(tài)、虛函數(shù),指針、函數(shù)指針,指針函數(shù),宏和內(nèi)聯(lián),內(nèi)存分配類問題。
Java,參考書...算了我覺得java沒有參考書,筆者是個野路子出身,直接看了spring框架就杠杠造了,java方面面試沒有問過,并不是很懂。
Python,沒有參考書,人生苦短,請看文檔。修飾符、多線程等基礎(chǔ)問題,還有numpy、pandas的一些問題,這里其實還涉及到常用的深度學(xué)習(xí)框架,TF最多吧,筆者基本沒有被問到,有的同學(xué)被問過,網(wǎng)上可以看看他們的面經(jīng)。
?
數(shù)學(xué)
重要程度:***
本部分筆試中非常常見,面試中也比較常見。
機器學(xué)習(xí)的知識說白了無非就是數(shù)學(xué),但這里的數(shù)學(xué)特指面試官會單獨問的一些數(shù)學(xué)知識。講真啊,無論是筆試還是面試,筆者感覺自己總會碰到幾道線代、概率、統(tǒng)計或者高數(shù)題。
尤其是概率題,幾乎必考,大多是古典概型,什么不外乎摸球、抽牌求概率之類,有些需要算一算,有些可以直接往統(tǒng)計分布上靠,比如百度的一道面試題:n個人進(jìn)餐館吃飯,把帽子放在衣架上,走的時候隨機拿一頂,問拿到屬于自己帽子的人數(shù)量的期望,你要用排列組合算也可以算,但是往二項分布上想可以直接得到答案:每個人拿對概率是p= 1/n,期望不就是E_x=np=1嘛。
統(tǒng)計考察的也很多,畢竟傳統(tǒng)機器學(xué)習(xí)就是統(tǒng)計,常用的分布,性質(zhì),變換清楚熟記就可以。還有一種題也很常見,就是給你某個概率1/n的隨機數(shù)生成器讓你求一個概率1/m的生成器,算法導(dǎo)論課后有類似的題,其實套路都一樣,就是扔掉重來,比如給你一個均勻的正4面體,給出一個方案,得到每個數(shù)概率為1/7的隨機數(shù)生成器,4<7<16,那就投兩次,隨便選7種排列,其他全部重新投就ok了。
線代部分主要還是跟著機器學(xué)習(xí)知識一起考的,比如PCA/SVD神馬的。
高數(shù)比較少,曠視的筆試題有很多這方面的考題,其他考的較少。
?
算法題
重要程度:*****
很多筆試只有算法題,面試幾乎必考
算法題最重要的兩部分之一,即使是研究崗,寫好代碼也很重要。很多公司面試只有這部分考察,比如ms,google,很多公司作為最大重點,比如頭條、滴滴,可以說,你可以沒有項目經(jīng)驗沒有paper沒有實習(xí),但你不能不會編程。
這部分很難講,因為不同公司的偏重不一樣,難度差別也很大,甚至說同一個公司不同部門,差別都很大。難度最大的是google,非OI和ACM選手連筆試都很難通過,頭條、滴滴、依圖、MS難度是leetcode mid +少量hard難度,其他公司一般是mid或者easy-mid。
不過好在算法題可以刷題突擊,而且有一個很明顯的現(xiàn)象:面試難度<<筆試難度,其實非常好理解,筆試是在線oj,機器判卷,直接比對case的結(jié)果就好。但是面試要肉眼debug,這就難得多,而且很多題有多種不同解法,面試官自己也不是很懂,自己只會一種解法。如果出一道難題,沒有很深功力的面試官你給出一個不同解法他短時間很難判斷對錯。于是乎,除了上面提到的幾家公司,絕大部份的面試官都只在現(xiàn)場出一些經(jīng)典問題,比如百度系的巨喜歡問樹的深度、公共父節(jié)點、最大路徑等二叉樹經(jīng)典題的各種變種。然而經(jīng)典代表著網(wǎng)上解法到處都是,代表著即使不刷題,刷刷面經(jīng)也可以搞定。
筆試一般是1.5-2個小時做3-5道題,難度一般是幾道m(xù)id一道hard,時間很緊迫,思路正確但是怎么寫都不對是常有的事。所以能提前批盡量提前批,能學(xué)長部門內(nèi)推,盡量部門內(nèi)推,筆試過了,算法題這部分你就成功了一半。
算法題準(zhǔn)備最主要的是刷題,這個跟數(shù)學(xué)考試一樣的,需要靈感也需要手感,很多題看似不一樣,解法也不同,但大多都是一個套路,比如DP啊、DFS啊、遞增棧啊,能夠抓住題的考察點,接下來就是實現(xiàn)問題了。這個時候手感就很重要,規(guī)定時間內(nèi)寫對并不是件容易的事,筆者前幾個公司的筆試題就因為2年沒刷題沒有手感,做的稀爛。刷題的網(wǎng)站很多,最推薦的是leetcode,好處是題多;牛客也不錯,而且還有企業(yè)真題,但是很奇怪,有些企業(yè)的真題跟筆試實際做的題不太一樣。另外看書的話,《劍指offer》還是非常推薦,你可能覺得這些題都考爛了,不過別筆試,今年考的還是這些題,面試官很忙的,很多永遠(yuǎn)都是老三樣。
算法題的另一個準(zhǔn)備方法,可以說是性價比最高的準(zhǔn)備方法就是:看面經(jīng),前面說過,面試官很忙的,大部分公司并沒有為了秋招單獨準(zhǔn)備題庫,所以面試官考來考去都是那些題,比如同一個崗位,昨天問的問題基本就是今天要問的問題,瘋狂搜面經(jīng)吧,撞原題概率非常大。
?
機器學(xué)習(xí)知識
重要程度:*****
算法工程師啊,最重要的當(dāng)然是你的算法能力,其實這個突擊不來,很靠積累。很多東西看得多了才能融會貫通,這點好實驗室,本方向出身的同學(xué)會有極大的優(yōu)勢,如果還有一兩篇不錯的工作,那你就是ssp收割機,甚至可以不需要算法題能力,筆者周圍就有算法題一個不答都進(jìn)大牛組的同學(xué),沒辦法,積累足夠深嘛。但半路出家也不是完全沒有機會,這里主要講機器學(xué)習(xí)常見問題:
1 邏輯回歸&交叉熵(重點)
LR真的是經(jīng)久不衰啊,其實能問的地方好多好多,關(guān)于sigmoid函數(shù)其實可以從指數(shù)函數(shù)族的角度推導(dǎo)推導(dǎo),然后就是交叉熵啦,最基本的就是從極大似然角度推導(dǎo)交叉熵。LR的基礎(chǔ)推導(dǎo)看這里:https://zhuanlan.zhihu.com/p/34325602。
2 GBDT系列(重點)
機器學(xué)習(xí)的話,gbdt肯定是重中之重了,跟LR一樣是最最最常見的問題,工業(yè)界應(yīng)用也很多,打比賽就不用說,xg,blgb是歷屆kaggle的兩把快刀。
其實gbdt沒有太多可說的,無非是boosting思想啊,為啥用負(fù)梯度啊之類。重點是在lgb和xgb對傳統(tǒng)gbdt的優(yōu)化上,這部分內(nèi)容很多,這個博客做了一些總結(jié):
http://djjowfy.com/2017/08/01/XGBoost%E7%9A%84%E5%8E%9F%E7%90%86/,但我覺得還是看原始paper和源碼比較好。具體就不展開說了。
3 SVM
這玩意貌似去年很火?說實話啊,我沒怎么見過哪里用SVM,好像就RCNN用過SVM當(dāng)分類器,后來就換成了softmax,我的面試也沒人問過,曾經(jīng)看了好久,后來忘了還很忐忑,結(jié)果卻是沒有被問到。推導(dǎo):
https://www.zhihu.com/question/21094489 @靠靠靠譜 的回答?
4 RF&bagging
隨機森林本身沒啥東西,不過bagging的思想倒是非常有用,比賽中常用的降低過擬合方案,簡單來說就是選xgb中偏差低方差高的模型,做bagging,效果非常顯著。再有一點就是RF可以用oob做特征選擇,效果也不錯。
5 決策樹
怎么說呢,問的也比較少了,就是三種樹,ID3,C4.5,CART,區(qū)別和剪枝記一記。
6 特征選擇方法(重點)
特征選擇是模型預(yù)處理的重要部分。方法很多:方差、相關(guān)系數(shù)、卡方檢驗、互信息、遞歸特征消除、基于懲罰的方法、樹模型方法、單特征AUC、IV。
7 采樣方法
主要有過采樣和欠采樣。
過采樣:Smote方法及各種變種
欠采樣:ensemble、nearMiss、Tomeklink、ENN
還有復(fù)雜分布的采樣會用到MCMC。
8 聚類方法
也沒多少,經(jīng)典的就是:k-means、k-means++、meanshift、DBSCAN、EM聚類、層次聚類。
9 評估指標(biāo)(重點)
精準(zhǔn)率、召回率、ACC、AUC、F1、KS、熵系列、信息增益、CTR、CVR、MSE系列。其中AUC是重點中的重點,被問了好多次,而且很細(xì)節(jié),包括本質(zhì)意義、計算方法等等,注意AUC是有兩種計算方法的,這里有介紹:
https://www.cnblogs.com/peizhe123/p/5081559.html
10 過擬合(重點)
起因基本不太會考,解決方法就多了,降低模型復(fù)雜程度啊,dropout啊、bagging、正則、earlystop,數(shù)據(jù)增強、交叉驗證。Dropout本質(zhì)也是個bagging。
11 batch normalization?
這個問題下的回答很有價值 ,BN問的還挺多的。
12 梯度彌散/爆炸,怎么解決
改激活函數(shù)啊,BN啊,想lstm一樣把*變+啊,加恒等映射的跳躍層啊,都可以。沒有太好的文章,看看這篇講resnet的吧?
13 激活函數(shù),比較?
sigmod/tanh/relu/maxout... 好多,這個隨便一搜就一堆,放一個不太切題的文章吧,我偶像何之源奆佬的回答,手動滑稽?
14 優(yōu)化方法(重點)
這就很多了,梯度下降系列、牛頓法系列,還有傳統(tǒng)的模擬退火、遺傳算法。牛頓法這回問的很多,不知道為啥。lan大神的花書講的就很好,梯度下降的可以看這個。這里要注意,有些面試官會讓你實操,就比如給你一個方程,讓你用梯度下降求解。
15 各種網(wǎng)絡(luò)結(jié)構(gòu)&模型(重點)
這個就太多了,CNN、RNN就一堆,推薦的也是一堆,基本的DNN、CNN、RNN的forward和back prob都要熟悉,然后lstm、gru、attention也要會,還有各種encoder-decoder結(jié)構(gòu),這個就看積累了。
推薦部分有自己的一些模型,比如FM系列,lookalike、協(xié)同過濾之類的非深度學(xué)習(xí)模型,后面的W&D為首的融合模型也是搭積木。
?
項目
這塊是很重點的部分,面試的大部分時間都是在聊你的項目,所以,寫在簡歷上的項目一定要保證自己能說的頭頭是道,怎么做的,為什么這么做,最后的效果如何。還要把這樣做的原因想清楚,面試官一定會找漏洞challenge你,一旦被問住了那就不好辦了。
?
心態(tài)
人是感性動物,會隨著自己的境遇和周圍人的改變而受到極大影響。好的心態(tài)會幫助你超常發(fā)揮;差的心態(tài)可能直接導(dǎo)致秋招的失敗。筆者在秋招的過程中就經(jīng)歷了大起大落,好在及時調(diào)整,否則肯定拿不到心儀的offer。
雖然這只能靠自己,但是有一個很重要的地方就是:不要主動打聽別人的offer,我所見過的心態(tài)崩潰,幾乎都是因為與別人比較:周圍同學(xué)/朋友有offer自己沒有,別人薪資高自己低。其實可能只是時候沒到,我有個同學(xué)十一前0 offer,心情很崩潰,十一后迅速接到多個offfercall,最終拿到周圍同學(xué)中薪資數(shù)一數(shù)二的工作。所以不是沒offer,只是時候沒到,不要瞎打聽,相信自己的能力。
?
定位&規(guī)劃
GM面或者HR面一般就不聊技術(shù)了,然而GM權(quán)利卻比前幾個面試官大的多,可以直接決定你的生死,所以技術(shù)之外,個人的定位規(guī)劃、對公司的理解、愿景就很重要了,自我剖析、個人定位,這些往往是終面這個級別的大佬們所看重的。
?
彼
秋招就是斗智斗勇,就像因為考題有套路,考試不一定100%反應(yīng)能力一樣,秋招也有套路。A會80%的知識,但很可惜面試官問的都是后20%,那結(jié)果一定悲劇;B只會40%的知識,但恰巧包含了面試官問的那20%,恭喜你,你就是sp。
準(zhǔn)備秋招就像打仗,對對手了解的深,就能不戰(zhàn)而屈人之兵。
?
1 收集信息
什么公司什么時候提前批,什么時候正式批,招什么崗位。公司業(yè)界風(fēng)評如何,技術(shù)如何,這些在你投遞之前必須搞清楚,很多同學(xué)都會因為錯過投遞或者干脆不知道公司而錯過機會。筆者在百度提前批的時候就沒有收集好信息,本來是內(nèi)部直招,掛了一個可以投另一個沒有限制,筆者以為掛了就涼了,錯失機會。
?
2 提前批&內(nèi)推
內(nèi)推其實沒有以前那么有用了,也許只能保證你的簡歷不石沉大海,可以說,以前的內(nèi)推是面筆試,直通車,沒有內(nèi)推就筆試;現(xiàn)在是有內(nèi)推就筆試,沒有內(nèi)推就沒戲。不過如果是部門直招就不同了。這種一般都免掉筆試,而且部門自己招人可以直接進(jìn)入改部門工作而不用大類分配,如果是學(xué)長內(nèi)推還有更大的sp幾率。
?
3 針對面試官
期末考試是有重點的,還可能有往年或者課后的原題,面試也一樣。前面說過,很多面試官年年都是老三樣,而且面誰都是這些題。所以面試前瘋狂找面經(jīng)對著準(zhǔn)備,很大幾率碰原題。更狠一點可以假裝有事往后拖一批(如果面試不止一批),然后問前一批同樣崗位的同學(xué)問過什么問題,如果更幸運遇到了同一個面試官,那你的技術(shù)面就沒什么問題了。
?
4 了解公司情況
很多業(yè)務(wù)大公司都做,但是做的水平就很不一樣,不僅公司跟公司不一樣,公司內(nèi)部的組實力差距也非常大,所以一定要考察清楚。內(nèi)部同學(xué)/學(xué)長啊,面試官水平啊,業(yè)界風(fēng)評啊,這個組有沒有公開的工作或者發(fā)表的paper啊,都是衡量標(biāo)準(zhǔn)。
一定要避免坑,應(yīng)屆生第一份工作很重要,如果不慎進(jìn)了一個外表光鮮內(nèi)在稀爛的組,工作這個頭就開不好了。
?
5 積極總結(jié)面試經(jīng)驗
面試后第一件事不是如釋重負(fù)的玩,而是記錄自己遇到的面試題,尤其是錯的或者沒答好的,查清楚。同一個崗位,不同公司很大程度上是重復(fù)的,因為重點就是那些個嘛,A公司認(rèn)為重點的,B公司認(rèn)為是重點也會考察。這也是學(xué)長的面試復(fù)習(xí)法效果的由來:不準(zhǔn)備,先面一些不想去的公司,以面試代復(fù)習(xí),面了幾家后,后面的公司就好說啦。另外,總結(jié)經(jīng)驗并分享出來,不僅是對自己的成長,也是幫助他人,畢竟你在搜面經(jīng)的時候也希望別人有分享的吧。
轉(zhuǎn)自:從零基礎(chǔ)到BAT算法崗SP——秋招準(zhǔn)備攻略http://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247485936&idx=1&sn=0e156832abdc9bfd4ee82b9b70063b3e&chksm=f9a27b7fced5f26912dd64b3c6f5a2d153068843cce378a8894ffb0ea786bcba698ef0d747f3&mpshare=1&scene=1&srcid=1113D5qsYlHmmQKxVNEZMyd3#rd
總結(jié)
以上是生活随笔為你收集整理的AI算法工程师必备技术,快快积累!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最推荐的深度学习课程
- 下一篇: 通俗易懂的图解堆排序