從啥也不會的小白,如何才能成為合格的演算法工程師?
大家好,今天這篇文章同樣來自於大家的提問。之前有一個小夥伴在留言當中問我,說自己想要從事演算法工程師的工作,但是不知道應該從哪裡入手,請問我應該怎麼辦。
這其實是一個老生常談的話題,也是一個很大的概念。我很難用三言兩語告訴你究竟應該如何做,但我可以告訴你一個合格的演算法工程師應該至少需要具備什麼樣的能力,也許可以幫助你們找到前進的方向。
基礎
演算法、資料結構
這倆是基礎中的基礎,作為一個合格的演算法工程師,你可以寫不出來紅黑樹,也可以不懂網路流,但是最基礎的排序、遞迴、動態規劃、樹、堆疊、佇列等演算法和資料結構是一定要會的,並且還需要有一定的造詣。
很多不明就裡的人,會秉持著它們不重要的觀點,並且以此宣揚不休。但是就我個人的經驗以及觀察而言,我發現無論大小網際網路公司,一個演算法工程師的表現,和他的演算法、資料結構的水平是呈正相關的。而且這兩塊也是面試考察的重點,想要去比較好的公司鍛鍊學習,演算法和資料結構作為基本功是一定要會的。另外,這兩塊的能力對於我們持續學習以及研究網際網路行業的其他技術非常有幫助,像是分散式系統、機器學習當中的很多內容都和資料結構以及演算法相關。你會發現演算法大牛學習其他技術的速度和質量都非常可怕,這並不是沒有道理的。
對於普通的從業者而言,這兩塊的要求不是非常高,可以刷一下LeetCode前300題,基本上包含了所有常用的演算法。也可以閱讀一下本公眾號的演算法、資料結構專題,基本上也覆蓋了所有基礎的內容。
機器學習
既然是演算法工程師,機器學習的相關知識也自然是不可或缺的。
建議可以從Andrew NG的機器學習課程開始,他講解得非常清楚,基本上該涵蓋的知識點都涵蓋了。如果是初學的話,會覺得吃力是非常正常的,這個時候可以找一本紙質書印證著一起看。聽完Andrew的講課內容之後,再去對比書上的描述,以及其他大牛的部落格或者是相關內容。這樣對比著學習的質量和效率都是最高的。
對於機器學習的常用模型來說,使用Python實現的難度都不是很大,在理解了模型的相關原理之後,最好能親自使用Python實現一下模型,體會一下其中的細節。另外,各種模型並不是機器學習的全部,其他的很多內容一樣非常重要。比如過擬合的原因,比如正則項,比如損失函式的推導過程,以及AUC等指標的計算方法等等。
說起來機器學習領域中的模型並不少,但是常用的,面試當中經常問到的並不多。說來說去,也就LR,邏輯迴歸,貝葉斯,決策樹,隨機森林,GBDT,XGboost、KNN、Kmeans等十餘個。我們學習的時候可以只聚焦其中一些模型,把它們完全吃透,而不是貪多嚼不爛,每個都知道一點,但每個都不精通。
深度學習
深度學習需要區分領域,如果是推薦、廣告、搜尋等CTR預估等領域來說,要求相對要低一些,在面試的時候也不會太過深入。這也是因為這些領域的模型和做法比較固定,相比於模型對於特徵、資料以及系統的要求更高。
另外一個原因是深度學習相關的內容在面試的時候也不太好考察,舉個例子來說,如果候選人之前沒有做過相關業內的工作。他可能根本不知道推薦領域內使用哪些模型和哪些做法,我們去問他DIN或者是FM,也就無從問起了。而且深度學習目前的框架也分成兩派,如果他剛好沒有深入用過同樣的框架,所謂框架的細節也沒辦法多問。並且這塊也不是重點,框架不會學起來也很快,基礎紮實幾天就可以有模有樣。
所以作為初學者,如果決心做推薦、廣告等領域的演算法工程師的話,甚至可以連卷積神經網路都不用瞭解(我甚至沒在工作中見過卷積)。把時間省下來去讀一些業內的paper,以及做一些比賽練練手,得到的效果會更好。
資料處理
很多人在介紹演算法工程師入門的時候不會提到這塊,但其實這塊非常重要,也一樣是演算法工程師的基礎技能。
資料處理主要包含兩塊,一塊是模型訓練之前的資料處理流程。比如特徵加工、取樣、異常值過濾、特徵分佈的分析等等,這些可以通過學習numpy、pandas來搞定。可以看一看kaggle大牛的一些kernel或者是文章瞭解學習一下,這塊比較簡單,一般來說做過kaggle的多少都會一些。
第二塊是基於hadoop叢集的大資料處理平臺,比如MapReduce、spark、flink、hive等平臺和工具的使用。這些內容除了業內人士一般也很少了解,就更不用說有這個意識去學習了,但是又是實際工作當中實實在在會用到的東西。現在純MapReduce的做法有些過時了,一般業內常用得比較多的是spark、hive和flink。這些技能我們也沒有必要什麼都學,能夠對其中一個有所瞭解和掌握就可以了。因為不同公司的做法一般都不太一樣,入職的時候都是要重新學過的,面試的時候一般也不會要求剛好完全對口。
開發能力
這一點提的不多,但是也很重要。畢竟演算法工程師也是工程師,也是需要寫程式碼的。在日常工作當中,演算法工程師的開發領域主要有三塊,分別是模型、指令碼以及系統。
模型這個好理解,比如復現paper當中的做法,或者是復現某一個經典模型之類的。但是我們實現模型,也並不是就僅僅實現模型本身,往往也需要實現很多額外的內容。比如拆分訓練以及驗證資料,比如記錄模型訓練的日誌,再比如讀取資料,轉化格式等等。
指令碼主要指的是特徵以及資料處理的指令碼,這個依賴於公司使用的資料處理平臺。比如spark需要寫scala,比如hive需要些SQL等等。這些指令碼往往都會涉及到非常複雜的特徵生成,以及資料關聯的邏輯,非常麻煩,稍不小心就會搞錯。
最後是系統,演算法工程師同樣也需要參與一些系統的開發。比如說,像是線上的排序系統,線上呼叫模型的打分系統等等。這些系統的細節往往和模型以及演算法掛鉤,普通的開發往往不瞭解這些細節,所以還是需要演算法工程師參與開發,那麼最基本的開發能力也就必不可少了。
框架
框架指的是深度學習模型的框架,市面上現在已有的框架其實不少,除了常用的TensorFlow、Pytorch之外,還有像是Keras、MXNet、Caffe等等。一般來說在TensorFlow和Pytorch當中任選一個進行深入學習即可,掌握了一個之後再去學另外一個會容易得多。
我前面也說過了,框架並不是技術的核心重點,使用什麼框架並不重要。就我個人而言的話,如果你從來沒有學過任何框架的話,我更加建議你去學Pytorch。因為Pytorch的學習曲線更加平緩,並且它對於物件導向的支援更加友好,語法也更加簡潔。你會發現學習Pytorch的體驗要比TensorFlow好非常多,學起來也會更快。
對於面試的問題也不用過多擔心,因為一般來說崗位對候選人的要求寫的都是TensorFlow、Pytorch、Keras等常用框架熟悉其中的一個即可。如果問到TensorFlow相關的問題,你大可以直接告訴面試官,我用Pytorch比較多,TensorFlow我不熟。
實戰
我們學習了一堆理論知識之後,肯定還是需要實際使用一下,才能檢驗我們學習的效果,並且也才可以理解更加到位。機器學習相關應用的實戰渠道有很多,比如著名的kaggle以及阿里舉辦的天池大資料等等。除了這兩家之外,其實很多公司也都在舉辦各自的演算法競賽,對於小白來說,這些都是非常珍貴的練手的機會。
kaggle當中的比賽非常多,並不是每一個都有意義,我們可以找到和我們應聘的方向比較緊密的。比如你要面搜尋、廣告,那你就去做做CTR預估,如果你做NLP,也可以去找找文字處理的問題。kaggle當中的比賽實在是太全了,只有你想不到,幾乎沒有找不到。相比之下天池大資料的題目要少一些,但是它可以使用阿里巴巴真實的平臺以及脫敏之後的資料,這些相比kaggle我個人感覺更加逼真。我們親自做一下,基本上就瞭解了阿里這樣的大公司做模型的整個流程,還能體驗一下阿里雲的強大計算能力。
最後說一點,當我們做某一個比賽或者是題目的時候,我們的目標並不僅僅是做出一個比較好的成績。而是要儘量去思考問題的場景,以及模型在這樣場景當中的作用和原理。也就是說我們不能幹做,我們做了還得要思考,思考過後還需要總結。只有這樣,我們才能獲得真正的成長。
怎麼樣,看到這些要求是不是覺得演算法崗位的門檻還是挺高的,要學的東西也不少?實際上也的確如此,演算法工程師是一個很特殊的崗位,模型、資料、演算法、系統,各個方面都需要有所涉獵。不過,我們也並不需要各個領域都面面俱到,抓大放小,從這幾個核心領域入手才可以做到事半功倍。
相關文章
- Java招聘門檻提高,怎樣才能成為合格的Java工程師?Java工程師
- 瞭解這3點,你也能成為出色的Java工程師!Java工程師
- 怎樣才算合格的運維工程師?linux運維技術運維工程師Linux
- 作為一名合格的前端開發工程師需要會哪些前端工程師
- 如何能進階成為一個合格的測試工程師工程師
- 如何才能成為一名Python web全棧工程師?PythonWeb全棧工程師
- noip模擬45[真是啥也不會]
- 全棧工程師為啥值40W的年薪?全棧工程師
- 集訓模擬賽3【啥也不會的一天】
- 如何成為合格的web前端程式設計師?只要學會這幾點!Web前端程式設計師
- 學了很久設計,什麼時候能成合格的設計師?
- 如何成為一個合格的資料架構師?架構
- 合格的中級前端工程師要掌握的 JavaScript 技巧前端工程師JavaScript
- 乾貨 | AI 工程師必讀,從實踐的角度解析一名合格的AI工程師是怎樣煉成的AI工程師
- 成為一名合格的Java工程師,需要掌握哪些基本知識Java工程師
- 前端工程師也會有危機嗎?前端工程師
- 全棧工程師為啥能夠逆襲?全棧工程師
- 為啥大公司只要全棧工程師?全棧工程師
- 前端修煉の道 | 如何成為一名合格前端開發工程師?前端工程師
- 一名合格的運維工程師的歷練之路運維工程師
- 學會這幾點,你也能成為面試殺手!面試
- 一名【合格】前端工程師的自檢清單前端工程師
- 總經理:起來很光鮮,其實啥也不會
- 軟體工程師是靠培養就能成才的嗎軟體工程工程師
- 6年的程式設計師還不會寫委託很嚴重?不會封裝才叫可怕!程式設計師封裝
- 為啥程式設計師下班後只關顯示器從不關電腦?程式設計師
- Java工程師修煉之路(從小白到BAT的兩年學習歷程)Java工程師BAT
- 如何成為一位合格的ScrumMasterScrumAST
- 一個合格的Web前端工程師要掌握的知識點彙總!Web前端工程師
- 經常造輪子的 AI 工程師水平通常不會太差AI工程師
- 專訪 | 我是如何從本科轉崗到年薪35萬演算法工程師的演算法工程師
- 前端小白該如何學習?以及掌握哪些能力才能從事前端開發工程師前端工程師
- 大牛告訴你,只有突破程式設計師思維,才不會淪為碼農!程式設計師
- 怎樣學python ,才不會從入門到放棄Python
- 這樣做,你的APP也能成為下一個爆款APP
- 如何才能成為一名軟體架構師?架構
- 大師級設計師才會的這個CAD技巧,你會嗎?
- 如何才能成為大佬