從啥也不會的小白,如何才能成為合格的演算法工程師?

2021-10-10 20:37:46 字數 3302 閱讀 8173

這其實是乙個老生常談的話題,也是乙個很大的概念。我很難用三言兩語告訴你究竟應該如何做,但我可以告訴你乙個合格的演算法工程師應該至少需要具備什麼樣的能力,也許可以幫助你們找到前進的方向。

基礎演算法、資料結構

這倆是基礎中的基礎,作為乙個合格的演算法工程師,你可以寫不出來紅黑樹,也可以不懂網路流,但是最基礎的排序、遞迴、動態規劃、樹、堆疊、佇列等演算法和資料結構是一定要會的,並且還需要有一定的造詣。

很多不明就裡的人,會秉持著它們不重要的觀點,並且以此宣揚不休。但是就我個人的經驗以及觀察而言,我發現無論大小網際網路公司,乙個演算法工程師的表現,和他的演算法、資料結構的水平是呈正相關的。而且這兩塊也是面試考察的重點,想要去比較好的公司鍛鍊學習,演算法和資料結構作為基本功是一定要會的。另外,這兩塊的能力對於我們持續學習以及研究網際網路行業的其他技術非常有幫助,像是分布式系統、機器學習當中的很多內容都和資料結構以及演算法相關。你會發現演算法大牛學習其他技術的速度和質量都非常可怕,這並不是沒有道理的。

既然是演算法工程師,機器學習的相關知識也自然是不可或缺的。

對於機器學習的常用模型來說,使用python實現的難度都不是很大,在理解了模型的相關原理之後,最好能親自使用python實現一下模型,體會一下其中的細節。另外,各種模型並不是機器學習的全部,其他的很多內容一樣非常重要。比如過擬合的原因,比如正則項,比如損失函式的推導過程,以及auc等指標的計算方法等等。

說起來機器學習領域中的模型並不少,但是常用的,面試當中經常問到的並不多。說來說去,也就lr,邏輯回歸,貝葉斯,決策樹,隨機森林,gbdt,xgboost、knn、kmeans等十餘個。我們學習的時候可以只聚焦其中一些模型,把它們完全吃透,而不是貪多嚼不爛,每個都知道一點,但每個都不精通。

深度學習

深度學習需要區分領域,如果是推薦、廣告、搜尋等ctr預估等領域來說,要求相對要低一些,在面試的時候也不會太過深入。這也是因為這些領域的模型和做法比較固定,相比於模型對於特徵、資料以及系統的要求更高。

另外乙個原因是深度學習相關的內容在面試的時候也不太好考察,舉個例子來說,如果候選人之前沒有做過相關業內的工作。他可能根本不知道推薦領域內使用哪些模型和哪些做法,我們去問他din或者是fm,也就無從問起了。而且深度學習目前的框架也分成兩派,如果他剛好沒有深入用過同樣的框架,所謂框架的細節也沒辦法多問。並且這塊也不是重點,框架不會學起來也很快,基礎紮實幾天就可以有模有樣。

所以作為初學者,如果決心做推薦、廣告等領域的演算法工程師的話,甚至可以連卷積神經網路都不用了解(我甚至沒在工作中見過卷積)。把時間省下來去讀一些業內的*****,以及做一些比賽練練手,得到的效果會更好。

資料處理

很多人在介紹演算法工程師入門的時候不會提到這塊,但其實這塊非常重要,也一樣是演算法工程師的基礎技能。

資料處理主要包含兩塊,一塊是模型訓練之前的資料處理流程。比如特徵加工、取樣、異常值過濾、特徵分布的分析等等,這些可以通過學習numpy、pandas來搞定。可以看一看kaggle大牛的一些kernel或者是文章了解學習一下,這塊比較簡單,一般來說做過kaggle的多少都會一些。

第二塊是基於hadoop集群的大資料處理平台,比如mapreduce、spark、flink、hive等平台和工具的使用。這些內容除了業內人士一般也很少了解,就更不用說有這個意識去學習了,但是又是實際工作當中實實在在會用到的東西。現在純mapreduce的做法有些過時了,一般業內常用得比較多的是spark、hive和flink。這些技能我們也沒有必要什麼都學,能夠對其中乙個有所了解和掌握就可以了。因為不同公司的做法一般都不太一樣,入職的時候都是要重新學過的,面試的時候一般也不會要求剛好完全對口。

開發能力

這一點提的不多,但是也很重要。畢竟演算法工程師也是工程師,也是需要寫**的。在日常工作當中,演算法工程師的開發領域主要有三塊,分別是模型、指令碼以及系統。

模型這個好理解,比如復現*****當中的做法,或者是復現某乙個經典模型之類的。但是我們實現模型,也並不是就僅僅實現模型本身,往往也需要實現很多額外的內容。比如拆分訓練以及驗證資料,比如記錄模型訓練的日誌,再比如讀取資料,轉化格式等等。

指令碼主要指的是特徵以及資料處理的指令碼,這個依賴於公司使用的資料處理平台。比如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架構師

俗話說 沒有見過好程式,怎麼可能寫出好程式 同樣,也可以說 不了解架構師的能力 工作,怎麼可能成為架構師 如果沒有接觸過頂級架構師,那你怎麼知道自己要往哪個方向努力?所以,最好的方法是找個頂級架構師,去教你 高效的學習方法 完整的知識體系 和 對程式設計正確的認知 讓他去督促你學習,為你營造出 良好...

五行俱全才能成為合格的遊戲系統策劃!

遊戲行業中的每個崗位都有自己的特點,也有自己的任職要求,那麼具體到 系統策劃 又有些什麼要求呢?我們首先要回顧一下系統策劃的特點。負責遊戲系統玩法設計,以及針對不同型別使用者的需求進行衍生玩法設計 創意 設計各種系統和玩法的互動介面,讓玩家能通過遊戲內的圖形互動使用系統和玩法 互動 推動設計方案的落...

五行俱全才能成為合格的遊戲系統策劃!

遊戲行業中的每個崗位都有自己的特點,也有自己的任職要求,那麼具體到 系統策劃 又有些什麼要求呢?我們首先要回顧一下系統策劃的特點。負責遊戲系統玩法設計,以及針對不同型別使用者的需求進行衍生玩法設計 創意 設計各種系統和玩法的互動介面,讓玩家能通過遊戲內的圖形互動使用系統和玩法 互動 推動設計方案的落...