在本文介紹算法工程師當(dāng)中,我分為以下三個(gè)部分來(lái)為大家做簡(jiǎn)單的講解和梳理:
1)什么是算法工程師
2)如何入門并成為一名出色的算法工程師
3)算法相關(guān)學(xué)習(xí)資料推薦
4)企業(yè)喜歡招聘怎么樣的算法工程師
Part I什么是算法工程師
在了解如何成為一個(gè)合格算法工程師之前,我們需要先定義什么是算法工程師。很多人會(huì)問(wèn)我算法工程師、數(shù)據(jù)挖掘工程師和數(shù)據(jù)分析之間到底有什么關(guān)系。
其實(shí)從我個(gè)人理解來(lái)看,算法工程師和數(shù)據(jù)挖掘工程師還是比較接近的,在大部分中小公司中是不做區(qū)分的,在大廠里的話算法工程師相對(duì)數(shù)據(jù)挖掘工程師而言更偏底層一些,需要自己動(dòng)手造一些高性能計(jì)算相關(guān)的輪子,提供給數(shù)據(jù)挖掘工程師使用。但這畢竟是我自己的看法,我們不妨通過(guò)各大企業(yè)的算法 JD開始了解這個(gè)崗位。
(100offer上某BAT發(fā)給算法工程師的面試邀請(qǐng)JD)
這是 100offer上,某BAT發(fā)給算法工程師的面試邀請(qǐng)JD,從這份 JD可以看出,資深算法工程師的普遍要求是 3年以上工作經(jīng)驗(yàn),提供 30k-60k的基礎(chǔ)月薪。在崗位描述中主要介紹了具體的業(yè)務(wù)場(chǎng)景,其實(shí)主要做的還是數(shù)據(jù)挖掘和搜索相關(guān)工作。在崗位要求中,羅列了一些常見的機(jī)器學(xué)習(xí)技術(shù),并對(duì)編程開發(fā)的能力有較高的需求。
總的來(lái)說(shuō),這整份 JD側(cè)重細(xì)節(jié)方面比較多,要求也比較細(xì),屬于比較典型的招碼農(nóng)的 JD,碰到這樣的 JD一般說(shuō)明這個(gè)部門的老大比較厲害,但是對(duì)自身而言晉升空間就相對(duì)較小了。
關(guān)于怎么定義一個(gè)算法工程師這塊,除了我拍腦袋給你們下的定義外,我還抓取了上近千份算法崗位的 JD,并粗糙地做了一個(gè)關(guān)鍵詞詞云圖,仍有不少噪音沒(méi)有去除掉。雖然粗糙,但我們也能從中抓住幾個(gè)明顯的重點(diǎn)。
主要是Python、算法、數(shù)據(jù)、業(yè)務(wù)、C++、Java、數(shù)據(jù)挖掘、廣告、數(shù)學(xué)、碩士等等。其中計(jì)算廣告方面的專業(yè)詞匯較多,如 CTR和 DSP,但并不是本文重點(diǎn)。所以如果單從 JD的這個(gè)詞云上來(lái)看,如果真心想往這個(gè)方向走,那么修煉好 Python和 C++,讀個(gè)碩士,努力學(xué)好數(shù)學(xué)還是很有必要的。
Part 2如何入門并成為一名出色的算法工程師
曾經(jīng)的我也只是一個(gè)只懂 ACM競(jìng)賽相關(guān)算法的普通程序員,誤打誤撞接觸到了數(shù)據(jù)挖掘之后才開始系統(tǒng)地了解機(jī)器學(xué)習(xí)相關(guān)知識(shí)。
最早接觸到的一個(gè) case是把從淘寶抓下來(lái)的商品按名稱進(jìn)行分類,進(jìn)行了一番研究之后知道了有一個(gè)叫做樸素貝葉斯的分類器可以完成這樣的工作。抱著試試看的心態(tài),我又通過(guò)垂直類目抓取了一部分商品作為我分類器的訓(xùn)練集,第一版分類器交叉驗(yàn)證的準(zhǔn)確率就達(dá)到了 97%,這對(duì)我來(lái)說(shuō)就是打開了一扇新世界的大門,原來(lái)分類問(wèn)題可以被如此優(yōu)雅地解決,同樣我也感受到了大數(shù)據(jù)帶來(lái)的魅力。
在經(jīng)過(guò)一些調(diào)整和對(duì)樸素貝葉斯的深入研究之后,準(zhǔn)確率成功提升到 99%以上,并沒(méi)有出現(xiàn)明顯的過(guò)擬合現(xiàn)象。
在這個(gè)入門的練手 case中,我最深的體會(huì)就是實(shí)踐是最快的學(xué)習(xí)方式。雖然只是完成了一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的分類器,但是我知道了如何去判斷模型的好壞、如何去針對(duì)模型來(lái)預(yù)處理數(shù)據(jù)、如何根據(jù)結(jié)果來(lái)修正模型、如何判斷模型過(guò)擬合等等機(jī)器學(xué)習(xí)中的常識(shí)。
再之后我買了相關(guān)書籍來(lái)學(xué)習(xí),發(fā)現(xiàn)第一章普遍都是在教會(huì)你如何去評(píng)估一個(gè)模型并羅列了許多統(tǒng)計(jì)學(xué)方法,如果我通過(guò)這本書籍入門的話,可能就會(huì)因?yàn)榉爆嵉慕y(tǒng)計(jì)證明而喪失興趣。但在我通過(guò)一些實(shí)踐之后再來(lái)閱讀這部分內(nèi)容,頓時(shí)讓我覺(jué)得獲益匪淺。
所以怎么樣才算是一名出色的算法工程師呢?按目前市面上普遍的用人需求來(lái)看,大致要從以下幾個(gè)方面來(lái)考察:
a)編程能力
這個(gè)就很好理解了,畢竟作為工程師還是需要編程來(lái)解決問(wèn)題。根據(jù)工作內(nèi)容來(lái)說(shuō),越是偏底層的開發(fā),對(duì)編程能力的要求就越高。如果只是用 Python或者 R來(lái)做數(shù)據(jù)挖掘,那對(duì)編程能力的要求就相對(duì)較低了。
但如果一旦涉及到高性能的計(jì)算中間件、高并發(fā)的業(yè)務(wù)場(chǎng)景時(shí),對(duì)編程能力的要求就會(huì)陡升,而目前大廠基本都會(huì)有這樣的業(yè)務(wù)場(chǎng)景,所以大廠對(duì)各崗位的工程師都有較高的編程能力要求,我們不妨從最早就踏實(shí)打好語(yǔ)言基礎(chǔ),無(wú)論是 C/C++/Java編譯型語(yǔ)言,還是像 Python這樣的解釋型語(yǔ)言,都應(yīng)該由淺入深了解語(yǔ)言底層的相關(guān)知識(shí)。
b)算法和數(shù)據(jù)結(jié)構(gòu)
這是一個(gè)老生常談的內(nèi)容了,從最早Google面試喜歡考算法題的作風(fēng)開始,算法和數(shù)據(jù)結(jié)構(gòu)的重要性漸漸為人所知。當(dāng)然這里的算法和算法工程師工作時(shí)所用的算法還是有一點(diǎn)差別的,傳統(tǒng)算法往往有一個(gè)標(biāo)準(zhǔn)的輸入和輸出,然后利用不同的數(shù)據(jù)結(jié)構(gòu)和策略來(lái)降低算法的時(shí)空復(fù)雜度,如果讀者有幸參與過(guò)信息學(xué)奧林匹克競(jìng)賽或者 ACM競(jìng)賽的話應(yīng)該會(huì)非常了解。
在算法工程師的工作中,我們同樣會(huì)遇到類似的情況,譬如我自己就在做計(jì)算廣告的時(shí)候,遇到過(guò)二分圖最大權(quán)值匹配的經(jīng)典場(chǎng)景:
我們手頭有 n個(gè)廣告主參與競(jìng)價(jià),同時(shí)有 m個(gè)廣告位可供展示,但我們不能拿相同廣告主的廣告進(jìn)行重復(fù)競(jìng)價(jià),這就構(gòu)成了經(jīng)典的二分圖匹配,在這個(gè)約束下,我們還得優(yōu)化我們的最終目標(biāo),即通過(guò)機(jī)器學(xué)習(xí)模型預(yù)測(cè)每一種匹配情況下的點(diǎn)擊率,這個(gè)點(diǎn)擊率轉(zhuǎn)化為這個(gè)二分圖上的權(quán)值,要求計(jì)算該二分圖的最大權(quán)值匹配。
c)數(shù)學(xué)
我們知道所謂算法工程師,目前其核心還是在機(jī)器學(xué)習(xí),而機(jī)器學(xué)習(xí)的學(xué)習(xí)中,數(shù)學(xué)知識(shí)是必不可少的。
在大數(shù)據(jù)人工智能概念越炒越熱的時(shí)代,有越來(lái)越多的人加入到了這個(gè)大軍中來(lái),然而卻有不少同學(xué)因?yàn)閿?shù)學(xué)能力不足望而卻步,或者止步于一些現(xiàn)有機(jī)器學(xué)習(xí)開源庫(kù)的調(diào)用。這樣的內(nèi)功情況會(huì)對(duì)未來(lái)的職業(yè)生涯造成比較大的負(fù)面影響,成為一個(gè)比較尷尬的瓶頸,也會(huì)更容易觸及到自己職業(yè)生涯的天花板。
那么這里的數(shù)學(xué)又具體是哪些呢?簡(jiǎn)單來(lái)說(shuō),就是微積分、概率與統(tǒng)計(jì)、線性代數(shù)這三板斧,這三門課程在大部分理工科專業(yè)的本科階段都可以接觸到,所以如果遇到了這些課,就請(qǐng)務(wù)必認(rèn)真聽講,如果已經(jīng)錯(cuò)過(guò)了認(rèn)真聽講的時(shí)光,也不用太懊悔,多花一點(diǎn)時(shí)間從網(wǎng)上各路的公開課中重新學(xué)習(xí)即可。
d)機(jī)器學(xué)習(xí)實(shí)踐經(jīng)驗(yàn)
這一點(diǎn)中,我主要強(qiáng)調(diào)的是實(shí)踐經(jīng)驗(yàn)。我見過(guò)不少面試者,簡(jiǎn)歷上寫了一堆自學(xué)的公開課課程,甚至是 Coursera機(jī)器學(xué)習(xí)相關(guān)的各種證書。但在實(shí)際對(duì)話中,往往摸不清特征工程的意義是什么,也無(wú)法對(duì)不同類型的數(shù)據(jù)做出甄別并采用合適的特征選擇方式和模型評(píng)估方式。
很多人在學(xué)習(xí)的時(shí)候往往會(huì)一門心思鉆研如何實(shí)現(xiàn)并證明邏輯回歸、SVM核展開、各種神經(jīng)網(wǎng)絡(luò)的原理等等,我這里并不是否認(rèn)這些知識(shí)的價(jià)值,而是對(duì)于大部分初學(xué)者來(lái)說(shuō),這些相對(duì)底層的知識(shí)其實(shí)僅做了解即可,等到工作若干年后再回頭來(lái)了解才會(huì)更有收獲,而特征工程、模型評(píng)估等實(shí)踐經(jīng)驗(yàn),往往才是用人公司最為看重的點(diǎn),畢竟我們的目標(biāo)是成為一名工程師,而不是一名科學(xué)家。
Part 3算法相關(guān)學(xué)習(xí)資料推薦
聊完這些,我想各位應(yīng)該已經(jīng)對(duì)算法工程師有一個(gè)比較清晰的了解了,那接下來(lái)就介紹一些比較方法論的干貨了,首先是編程,如果僅針對(duì)數(shù)據(jù)挖掘而言,學(xué)習(xí)好 Python并能加以靈活運(yùn)用就夠了,這里推薦的是《集體智慧編程》一書,在這本書中,語(yǔ)言文字都是非常淺顯易懂的,書中的例子源碼都是 Python事先,并能幫助我們快速熟悉Python相關(guān)的各種計(jì)算庫(kù)。
其次就是數(shù)學(xué)了,圍繞概率與統(tǒng)計(jì)來(lái)學(xué)習(xí)會(huì)是非常快的學(xué)習(xí)方式,推薦閱讀李航教授的《統(tǒng)計(jì)學(xué)習(xí)方法》,這本書非常地精煉,第一遍閱讀可能會(huì)有不少障礙,日后需要反復(fù)閱讀鞏固才能更深入地理解背后的知識(shí)點(diǎn)。如果有同學(xué)對(duì)線性代數(shù)感到陌生,可以去看 MIT的線性代數(shù)公開課,這門課中對(duì)基礎(chǔ)概念的講解和教學(xué)流程。
有了以上這些基礎(chǔ)后,基本就可以無(wú)壓力敲開機(jī)器學(xué)習(xí)的大門了。首推依然還是吳恩達(dá)教授的機(jī)器學(xué)習(xí)公開課。在這門課中你會(huì)把所學(xué)的數(shù)學(xué)知識(shí)應(yīng)用到機(jī)器學(xué)習(xí)領(lǐng)域中,并對(duì)底層的知識(shí)原理會(huì)有一定了解。
可以配合周志華教授的《機(jī)器學(xué)習(xí)》一并閱讀,這本書還是有一定難度的,初讀同樣可能會(huì)有一些障礙,但目前這本書基本可以封為機(jī)器學(xué)習(xí)的中文圣經(jīng)了,非常值得一讀。
到這里,已經(jīng)可以放手大膽地去實(shí)踐了,算法的基本功可以從 LeetCode上充分汲取,機(jī)器學(xué)習(xí)的基本訓(xùn)練可以在 Kaggle歷史賽事中完成。除此之外,我們還有必要去訓(xùn)練自己快速閱讀 paper的能力,推薦關(guān)注 ICML、NIPS、AAAI、CVPR等頂級(jí)學(xué)會(huì)發(fā)布的相關(guān)論文。
Part 4企業(yè)喜歡招聘怎么樣的算法工程師
招聘用人是一個(gè)非常繁瑣的過(guò)程,由于這是一個(gè)對(duì)個(gè)人素質(zhì)要求較高的崗位,所以從我的角度出發(fā),首先是需要可塑性高的人。
說(shuō)得再通俗一點(diǎn),就是學(xué)得快用得好,能比較容易對(duì)知識(shí)點(diǎn)舉一反三的人。對(duì)于以上我提到的所有內(nèi)容,其實(shí)每個(gè)人只要用心學(xué)下去,終是可以學(xué)會(huì)的,聰明與否只是決定了學(xué)習(xí)的時(shí)間長(zhǎng)度而已。
所以從這點(diǎn)出發(fā)來(lái)看的話,和大部分大企業(yè)的招聘方向還是比較一致的。有不少同學(xué)可能會(huì)認(rèn)為大廠出一些工作中幾乎用不到的算法面試題完全就是在刁難面試者,其實(shí)不然,面試官往往就是通過(guò)這一類問(wèn)題能了解到你在面對(duì)一個(gè)相對(duì)陌生的問(wèn)題時(shí),能否給出一個(gè)精練、合理、高效的解決方案,這和之后工作時(shí)的表現(xiàn)是息息相關(guān)的。對(duì)此,我有這么幾點(diǎn)建議:
訓(xùn)練自己思維
不要為了面試而去刷 LeetCode等題庫(kù),而是保持一個(gè)穩(wěn)定的節(jié)奏,可以是一周 2-3道 Hard難度的題目,保持自己的思維不會(huì)因?yàn)橐恍┲貜?fù)勞動(dòng)的工作而固化,同樣方式可以適用于 Kaggle來(lái)訓(xùn)練自己。
練習(xí)表達(dá)能力
清晰并富有邏輯的談吐會(huì)給面試官帶來(lái)極大的加分,這表明即使當(dāng)你遇到問(wèn)題了你也可以無(wú)障礙和你的同事、主管溝通,這在創(chuàng)業(yè)公司顯得尤為重要,好的溝通下才能讓產(chǎn)品快速迭代,完成所謂的精益創(chuàng)業(yè)目標(biāo)。
針對(duì)這點(diǎn)來(lái)說(shuō),平??赡鼙容^難練習(xí),可以多寫技術(shù)類博客,多用文字來(lái)總結(jié)自己所學(xué)的知識(shí),業(yè)余時(shí)間可以多參與像狼人殺、阿瓦隆一類言語(yǔ)類游戲。
練習(xí)白板編程
這點(diǎn)有不少同學(xué)存在爭(zhēng)議,但我認(rèn)為還是有一定必要的。白板編程考查的內(nèi)容點(diǎn)一般不會(huì)太難,例如像鏈表基本操作、反轉(zhuǎn)二叉樹等都應(yīng)該是手到擒來(lái)的。
不少人認(rèn)為編程既然有 IDE、有各種 API文檔和參考資料,沒(méi)有必要去這方面的訓(xùn)練。但我在面試中經(jīng)常會(huì)遇到面試者來(lái)來(lái)回回涂改花了十分鐘寫完了其實(shí)只要十來(lái)行代碼的反轉(zhuǎn)二叉樹,這就是自身缺乏對(duì)編程思維的理解,沒(méi)有經(jīng)過(guò)大量的編程訓(xùn)練。
所以這也是大廠為什么青睞 ACM競(jìng)賽經(jīng)歷同學(xué)的原因之一,因?yàn)槟軈⑴c競(jìng)賽并獲獎(jiǎng)的同學(xué),往往都已經(jīng)積累了大量的編程訓(xùn)練。
最后,關(guān)于學(xué)歷這一塊,我個(gè)人并沒(méi)有強(qiáng)求。但往往由于簡(jiǎn)歷過(guò)多且面試時(shí)間開銷過(guò)大,只能優(yōu)先考慮面一些名校畢業(yè)的碩士生或在著名學(xué)術(shù)期刊發(fā)表論文的學(xué)生來(lái)降低招聘的時(shí)間成本。
但如果沒(méi)有以上這些的同學(xué)也不要?dú)怵H,可以通過(guò)一些其它經(jīng)歷來(lái)彌補(bǔ),比如算法類的 ACM、數(shù)據(jù)挖掘類的 Kaggle等競(jìng)賽成績(jī)都可以說(shuō)明你在這方面有一定的努力和天賦,實(shí)在不行你還可以羅列自己豐富的實(shí)踐經(jīng)驗(yàn),總之好過(guò)一句對(duì)算法和機(jī)器學(xué)習(xí)充滿熱情」對(duì)吧。
如果你看到了這里,就抓緊時(shí)間去完成自己的小目標(biāo)吧!
-
工程師
+關(guān)注
關(guān)注
59文章
1603瀏覽量
71213
發(fā)布評(píng)論請(qǐng)先 登錄
研發(fā)工程師和測(cè)試工程師對(duì)于產(chǎn)品新功能的見解有何不同?#電子工程師 #電路知識(shí) #人工智能
電子工程師的雙標(biāo)瞬間 #電子 #電子愛(ài)好者 #電子工程師 #揚(yáng)興科技 #雙標(biāo)
算法工程師需要具備哪些技能?
電子工程師看書的四個(gè)階段 #電子 #硬件工程師 #電子愛(ài)好者 #反轉(zhuǎn) #揚(yáng)興科技
什么是BSP工程師
硬件工程師:這才是真正的大學(xué)生就業(yè)指導(dǎo) #電子 #硬件工程師 #電子愛(ài)好者 #晶振 #揚(yáng)興科技
想成為硬件工程師?我教你??!你得先學(xué)會(huì)這些...... #硬件工程師 #電子工程師 #電子愛(ài)好者 #電子行業(yè)
硬件工程師面試必會(huì):10個(gè)核心考點(diǎn)#硬件設(shè)計(jì) #硬件工程師 #電路設(shè)計(jì) #電路設(shè)計(jì)
硬件工程師看了只會(huì)找個(gè)角落默默哭泣#硬件工程師 #MDD #MDD辰達(dá)半導(dǎo)體 #產(chǎn)品經(jīng)理 #軟件工程師
電子工程師自學(xué)速成 —— 提高篇
電子工程師自學(xué)速成——入門篇
怎樣快速成為算法工程師
評(píng)論