從啥也不會的小白,如何才能成為合格的演算法工程師?
大家好,今天這篇文章同樣來自於大家的提問。之前有一個小夥伴在留言當中問我,說自己想要從事演算法工程師的工作,但是不知道應該從哪裡入手,請問我應該怎麼辦。
這其實是一個老生常談的話題,也是一個很大的概念。我很難用三言兩語告訴你究竟應該如何做,但我可以告訴你一個合格的演算法工程師應該至少需要具備什麼樣的能力,也許可以幫助你們找到前進的方向。
基礎
演算法、資料結構
這倆是基礎中的基礎,作為一個合格的演算法工程師,你可以寫不出來紅黑樹,也可以不懂網路流,但是最基礎的排序、遞迴、動態規劃、樹、堆疊、佇列等演算法和資料結構是一定要會的,並且還需要有一定的造詣。
很多不明就裡的人,會秉持著它們不重要的觀點,並且以此宣揚不休。但是就我個人的經驗以及觀察而言,我發現無論大小網際網路公司,一個演算法工程師的表現,和他的演算法、資料結構的水平是呈正相關的。而且這兩塊也是面試考察的重點,想要去比較好的公司鍛鍊學習,演算法和資料結構作為基本功是一定要會的。另外,這兩塊的能力對於我們持續學習以及研究網際網路行業的其他技術非常有幫助,像是分散式系統、機器學習當中的很多內容都和資料結構以及演算法相關。你會發現演算法大牛學習其他技術的速度和質量都非常可怕,這並不是沒有道理的。
對於普通的從業者而言,這兩塊的要求不是非常高,可以刷一下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工程師
- noip模擬45[真是啥也不會]
- 瞭解這3點,你也能成為出色的Java工程師!Java工程師
- 學會這幾點,你也能成為面試殺手!面試
- 作為一名合格的前端開發工程師需要會哪些前端工程師
- 如何能進階成為一個合格的測試工程師工程師
- 成為一名合格的java工程師Java工程師
- 怎樣才算合格的運維工程師?linux運維技術運維工程師Linux
- 如何成為一名合格的機器學習演算法工程師?我們做了一次技能拆分…機器學習演算法工程師
- 為什麼程式設計師也能成為偉大的CEO程式設計師
- 關於《如何塑造自己成為一名合格的軟體工程師》的討論軟體工程工程師
- 如何成為一位合格的ScrumMasterScrumAST
- 職場人如何主持一場合格的會議?
- 合格運維工程師的技能運維工程師
- 這樣做,你的APP也能成為下一個爆款APP
- 怎樣才算得上合格的程式設計師程式設計師
- 如何快速的成為一個合格的Oracle DBA?Oracle
- 怎樣才能成為優秀的前端開發工程師前端工程師
- 怎樣學python ,才不會從入門到放棄Python
- 角色原畫教程,小白也能學會的配色方法
- 如何才能成為一名Python web全棧工程師?PythonWeb全棧工程師
- 別耍流氓,什麼樣的教程才算是合格的教程
- 如何成為合格的web前端程式設計師?只要學會這幾點!Web前端程式設計師
- 不會選工作沒關係,風變人生設計小白也能學!
- 為什麼說會不會SQL,決定著你的工資?方向不對,努力也白費!SQL
- 小白也能看懂的機器學習之整合演算法機器學習演算法
- 史上最全的Word技巧大全 掌握這些你也能成為Word高手
- Photon 也許能成為你最喜愛的容器作業系統作業系統
- 【DBA】如何快速的成為一個合格的Oracle DBA?Oracle
- 破解也不會,演算法也忘了,翻了點東西,算為OCG作點貢獻... (17千字)演算法
- 為啥程式會有bug?
- 全棧工程師為啥值40W的年薪?全棧工程師
- 如何才能成為軟體界的能工巧匠
- 我們需要智慧穿戴的什麼? 怎麼樣的智慧才合格
- 如何成為一個合格的資料架構師?架構
- 如何成為一名合格的 C/C++ 開發者?C++
- 小白也能看懂的MySQLMySql
- 為啥遊戲大作總會跳票?遊戲