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

硬件工程師看了只會找個角落默默哭泣#硬件工程師 #MDD #MDD辰達(dá)半導(dǎo)體 #產(chǎn)品經(jīng)理 #軟件工程師
電子工程師自學(xué)速成 —— 提高篇
電子工程師自學(xué)速成——入門篇

如何成為一名合格的KaihongOS北向應(yīng)用開發(fā)工程師
如何成為一名嵌入式軟件工程師?



硬件工程師的終極幻想:焊板子焊上人生巔峰!#半導(dǎo)體器件 #硬件工程師 #MDD辰達(dá)半導(dǎo)體
如何成為嵌入式開發(fā)工程師?
如何成為一名合格的北向應(yīng)用開發(fā)工程師

不同時期的硬件工程師,最怕發(fā)生的事 #電子工程師 #硬件工程師 #內(nèi)容過于真實 #YXC晶振 #揚(yáng)興科技
圖像算法工程師的利器——SpeedDP深度學(xué)習(xí)算法開發(fā)平臺


評論