成為一名合格的開發(fā)工程師不是一件簡單的事情酣胀,需要掌握從開發(fā)到調(diào)試到優(yōu)化等一系列能 力顿涣,這些能力中的每一項掌握起來都需要足夠的努力和經(jīng)驗揉阎。而要成為一名合格的機器學(xué)習(xí)算法工程師(以下簡稱算法工程師)更是難上加難毅否,因為在掌握工程師的通用技能以外,還需要掌握一張不算小的機器學(xué)習(xí)算法知識網(wǎng)絡(luò)。下面我們就將成為一名合格的算法工程師所需的技能進行拆分吨枉,一起來看一下究竟需要掌握哪些技能才能算是一名合格的算法工程師。
基礎(chǔ)開發(fā)能力
所謂算法工程師,首先需要是一名工程師,那么就要掌握所有開發(fā)工程師都需要掌握的一些能力前计。有些同學(xué)對于這一點存在一些誤解宛渐,認為所謂算法工程師就只需要思考和設(shè)計算法,不用在乎這些算法如何實現(xiàn),而且會有人幫你來實現(xiàn)你想出來的算法方案君编。這種思想是錯誤的,在大多數(shù)企業(yè)的大多數(shù)職位中,算法工程師需要負責(zé)從算法設(shè)計到算法實現(xiàn)再到算法上線這一個全流程的工作茧吊。
筆者曾經(jīng)見過一些企業(yè)實行過算法設(shè)計與算法實現(xiàn)相分離的組織架構(gòu)讶踪,但是在這種架構(gòu)下淋硝,說不清楚誰該為算法效果負責(zé),算法設(shè)計者和算法開發(fā)者都有一肚子的苦水举反,具體原因不在本文的討論范疇中火鼻,但希望大家記住的是雕崩,基礎(chǔ)的開發(fā)技能是所有算法工程師都需要掌握的盼铁。
基礎(chǔ)開發(fā)所涉及到的技能非常的多,在這里只挑選了兩個比較重要的點來做闡述鹏控。
單元測試
在企業(yè)應(yīng)用中,一個問題的完整解決方案通常包括很多的流程抖僵,這其中每個環(huán)節(jié)都需要反復(fù)迭代 優(yōu)化調(diào)試瀑构,如何能夠?qū)?fù)雜任務(wù)進行模塊劃分寺晌,并且保證整體流程的正確性呢?最實用的方法就是單元測試。
單元測試并不只是簡單的一種測試技能耘婚,它首先是一種設(shè)計能力陆赋。并不是每份代碼都可以做單元測試攒岛,能做單元測試的前提是代碼首先是可以劃分為多個單元——也就是模塊的。在把項目拆解成可獨立開發(fā)和測試的模塊之后兢榨,再加上對每個模塊的獨立的顺饮、可重復(fù)的單元測試兼雄,就可以保證每個模塊的正確性,如果每個模塊的正確性都可以保證块攒,那么整體流程的正確性就可以得到保證佃乘。
對于算法開發(fā)這種流程變動頻繁的開發(fā)活動來講恕稠,做好模塊設(shè)計和單元測試是不給自己和他人挖坑的重要保證。也是能讓自己放心地對代碼做各種改動優(yōu)化的重要前提千扶。
邏輯抽象復(fù)用
邏輯的抽象復(fù)用可以說是所有軟件開發(fā)活動中最為重要的一條原則,衡量一個程序員代碼水平的重要原則之一就是看他代碼中重復(fù)代碼和相似代碼的比例髓绽。大量重復(fù)代碼或相似代碼背后反映的是工程師思維的懶惰妆绞,因為他覺得復(fù)制粘貼或者直接照著抄是最省事的做法括饶。這樣做不僅看上去非常的丑陋,而且也非常容易出錯启盛,更不用提維護起來的難度技羔。
算法開發(fā)的項目中經(jīng)常會有很多類似邏輯的出現(xiàn)藤滥,例如對多個特征使用類似的處理方法,還有原始數(shù)據(jù) ETL 中的很多類似處理方法向图。如果不對重復(fù)邏輯做好抽象,代碼看上去全是一行行的重復(fù)代碼晶默,無論是閱讀起來還是維護起來都會非常麻煩磺陡。
概率和統(tǒng)計基礎(chǔ)
概率和統(tǒng)計可以說是機器學(xué)習(xí)領(lǐng)域的基石之一,從某個角度來看坞靶,機器學(xué)習(xí)可以看做是建立在概率思維之上的一種對不確定世界的系統(tǒng)性思考和認知方式彰阴。學(xué)會用概率的視角看待問題拍冠,用概率的語言描述問題簇抵,是深入理解和熟練運用機器學(xué)習(xí)技術(shù)的最重要基礎(chǔ)之一碟摆。
概率論內(nèi)容很多叨橱,但都是以具體的一個個分布為具體表現(xiàn)載體體現(xiàn)出來的罗洗,所以學(xué)好常用的概率分布及其各種性質(zhì)對于學(xué)好概率非常重要。對于離散數(shù)據(jù)屑宠,伯努利分布典奉、二項分布丧叽、多項分布、Beta 分布假瞬、狄里克萊分布以及泊松分布都是需要 理解掌握的內(nèi)容;對于離線數(shù)據(jù)脱茉,高斯分布和指數(shù)分布族是比較重要的分布垄开。這些分布貫穿著機器學(xué)習(xí)的各種模型之中溉躲,也存在于互聯(lián)網(wǎng)和真實世界的各種數(shù)據(jù)之中,理解了數(shù)據(jù)的分布箭券,才能知道該對它們做什么樣的處理疑枯。
此外,假設(shè)檢驗的相關(guān)理論也需要掌握古今。在這個所謂的大數(shù)據(jù)時代滔以,最能騙人的大概就是數(shù)據(jù)了你画,掌握了假設(shè)檢驗和置信區(qū)間等相關(guān)理論,才能具備分辨數(shù)據(jù)結(jié)論真?zhèn)蔚哪芰δ獯@鐑山M數(shù)據(jù)是否真的存在差異适滓,上線一個策略之后指標是否真的有提升等等凭迹。這種問題在實際工作中非常常見嗅绸,不掌握相關(guān)能力的話相當(dāng)于就是大數(shù)據(jù)時代的睜眼瞎。
在統(tǒng)計方面猛拴,一些常用的參數(shù)估計方法也需要掌握蚀狰,典型的如最大似然估計麻蹋、最大后驗估計、EM 算法等倒谷。這些理論和最優(yōu)化理論一樣,都是可以應(yīng)用于所有模型的理論牵祟,是基礎(chǔ)中的基礎(chǔ)。
機器學(xué)習(xí)理論
雖然現(xiàn)在開箱即用的開源工具包越來越多雹拄,但并不意味著算法工程師就可以忽略機器學(xué)習(xí)基礎(chǔ)理論的學(xué)習(xí)和掌握掌呜。這樣做主要有兩方面的意義:
掌握理論才能對各種工具质蕉、技巧靈活應(yīng)用,而不是只會照搬套用禁悠。只有在這個基礎(chǔ)上才能夠真正具備搭建一套機器學(xué)習(xí)系統(tǒng)的能力碍侦,并對其進行持續(xù)優(yōu)化瓷产。否則只能算是機器學(xué)習(xí)搬磚工人若厚,算不得合格的工程師。出了問題也不會解決疤估,更談不上對系統(tǒng)做優(yōu)化铃拇。
學(xué)習(xí)機器學(xué)習(xí)的基礎(chǔ)理論的目的不僅僅是學(xué)會如何構(gòu)建機器學(xué)習(xí)系統(tǒng)沈撞,更重要的是缠俺,這些基礎(chǔ)理論里面體現(xiàn)的是一套思想和思維模式壹士,其內(nèi)涵包括概率性思維、矩陣化思維唯笙、最優(yōu)化思維等多個子領(lǐng)域崩掘,這一套思維模式對于在當(dāng)今這個大數(shù)據(jù)時代做數(shù)據(jù)的處理、分析和建模是非常有幫助的诵原。如果你腦子里沒有這套思維皮假,面對大數(shù)據(jù)環(huán)境還在用老一套非概率的骂维、標量式的思維去思考問題航闺,那么思考的效率和深度都會非常受限。
機器學(xué)習(xí)的理論內(nèi)涵和外延非常之廣侮措,絕非一篇文章可以窮盡分扎,所以在這里我列舉了一些比較核心畏吓,同時對于實際工作比較有幫助的內(nèi)容進行介紹卫漫,大家可在掌握了這些基礎(chǔ)內(nèi)容之后列赎,再不斷探索學(xué)習(xí)。
基礎(chǔ)理論
所謂基礎(chǔ)理論饼煞,指的是不涉及任何具體模型砖瞧,而只關(guān)注“學(xué)習(xí)”這件事本身的一些理論芭届。以下是一些比較有用的基礎(chǔ)概念:
VC 維感耙。VC 維是一個很有趣的概念即硼,它的主體是一類函數(shù),描述的是這類函數(shù)能夠把多少個樣本 的所有組合都劃分開來褥实。VC 維的意義在哪里呢? 它在于當(dāng)你選定了一個模型以及它對應(yīng)的特征之后损离,你是大概可以知道這組模型和特征的選擇能 夠?qū)Χ啻蟮臄?shù)據(jù)集進行分類的僻澎。此外十饥,一類函數(shù)的 VC 維的大小逗堵,還可以反應(yīng)出這類函數(shù)過擬合的可能性蜒秤。
信息論。從某種角度來講梆暖,機器學(xué)習(xí)和信息論是同一個問題的兩個側(cè)面轰驳,機器學(xué)習(xí)模型的優(yōu)化過程同時也可以看作是最小化數(shù)據(jù)集中信息量的過程弟灼。對信息論中基本概念的了解田绑,對于機器學(xué)習(xí)理論的學(xué)習(xí)是大有裨益的掩驱。例如決策樹中用來做分裂決策依據(jù)的信息增益,衡量數(shù)據(jù)信息量的信息熵等等民逼,這些概念的理解對于機器學(xué)習(xí)問 題神本的理解都很有幫助拼苍。這部分內(nèi)容可參考《 Elements of Information Theory 》這本書疮鲫。
正則化和 bias-variance tradeoff。如果說現(xiàn)階段我國的主要矛盾是“人民日益增長的美好生活需要和不平衡不充分的發(fā)展之間的矛盾”妇多,那么機器學(xué)習(xí)中的主要矛盾就是模型要盡量擬合數(shù)據(jù)和模型不能過度擬合數(shù)據(jù)之間的矛盾砌梆。而化解這一矛盾的核心技術(shù)之一就是正則化咸包。正則化的具體方法不在此討論杖虾,但需要理解的奇适,是各種正則化方法背后透露出的思想:bias-variance tradoff嚷往。在不同利益點之間的平衡與取舍是各種算法之間的 重要差異,理解這一點對于理解不同算法之間的核心差異有著非常重要的作用籍琳。
最優(yōu)化理論趋急。絕大多數(shù)機器學(xué)習(xí)問題的解決呜达,都可以劃分為兩個階段:建模和優(yōu)化查近。所謂建模就是后面我們會提到的各種用模型來描述問題的方法,而優(yōu)化就是建模完成之后求得模型的最優(yōu)參數(shù)的過程谈喳。機器學(xué)習(xí)中常用的模型有很多, 但背后用到的優(yōu)化方法卻并沒有那么多矮冬。換句話說胎署,很多模型都是用的同一套優(yōu)化方法琼牧,而同一個優(yōu)化方法也可以用來優(yōu)化很多不同模型哀卫。對各種常用優(yōu)化方法的和思想有所有了解非常有必要此改,對于理解模型訓(xùn)練的過程共啃,以及解釋各種 情況下模型訓(xùn)練的效果都很有幫助移剪。這里面包括最大似然纵苛、最大后驗、梯度下降幔虏、擬牛頓法想括、L-BFGS 等瑟蜈。
機器學(xué)習(xí)的基礎(chǔ)理論還有很多铺根,可以先從上面的概念學(xué)起,把它們當(dāng)做學(xué)習(xí)的起點访雪,在學(xué)習(xí)過程中 還會遇到其他需要學(xué)習(xí)的內(nèi)容臣缀,就像一張網(wǎng)絡(luò)慢慢鋪開一樣精置,不斷積累自己的知識锣杂。這方面基礎(chǔ)理論的學(xué)習(xí)元莫,除了 Andrew Ng 的著名課程以外踱蠢,《 Learning from Data 》這門公開課也非常值得大家學(xué)習(xí)朽基,這門課沒有任何背景要求稼虎,講授的內(nèi) 容是在所有模型之下的基礎(chǔ)中的基礎(chǔ)霎俩,非常地靠近機器學(xué)習(xí)的內(nèi)核本質(zhì)。這門課的中文版本叫做 《機器學(xué)習(xí)基石》打却,也可以在網(wǎng)上找到杉适,其講授者是上面英文版本講授者的學(xué)生。
有監(jiān)督學(xué)習(xí)
在了解了機器學(xué)習(xí)的基本概念之后柳击,就可以進入到一些具體模型的學(xué)習(xí)中了猿推。在目前的工業(yè)實踐中,有監(jiān)督學(xué)習(xí)的應(yīng)用面仍然是最廣泛的,這是因為我們現(xiàn)實中遇到的很多問題都是希望對某個事物的某個屬性做出預(yù)測蹬叭,而這些問題通過合理的抽象和變換藕咏,都可以轉(zhuǎn)化為有監(jiān)督學(xué)習(xí)的問題。
在學(xué)習(xí)復(fù)雜模型之前孽查,我建議大家都先學(xué)習(xí)幾個最簡單的模型,典型的如樸素貝葉斯坦喘。樸素貝葉斯有很強的假設(shè)盲再,這個假設(shè)很多問題都不滿足,模型結(jié)構(gòu)也很簡單瓣铣,所以其優(yōu)化效果并不是最好的答朋。但也正是由于其簡單的形式,非常利于學(xué)習(xí)者深入理解整個模型在建模和優(yōu)化過程中的每一步坯沪,這對于搞清楚機器學(xué)習(xí)是怎么一回事情是非常有用的绿映。
同時擒滑,樸素貝葉斯的模型形式通過一番巧妙的變換之后腐晾,可以得到和邏輯回歸形式上非常統(tǒng)一的結(jié)果,這無疑提供了對邏輯回歸另外一個角度的解釋丐一,對于更加深刻理解邏輯回歸這一最常用模型有著非常重要的作用藻糖。
在掌握了機器學(xué)習(xí)模型的基礎(chǔ)流程之后,需要學(xué)習(xí)兩種最基礎(chǔ)的模型形式:線性模型和樹形模型库车,分別對應(yīng)著線性回歸/邏輯回歸和決策回歸/分類樹【奁猓現(xiàn)在常用的模型,無論是淺層模型還是深度學(xué)習(xí)的深層模型柠衍,都是基于這兩種基礎(chǔ)模型形式變幻而來洋满。而學(xué)習(xí)這兩種模型的時候需要仔細思考的問題是:這兩種模型的本質(zhì)差異是什么?為什么需要有這兩種模型?他們在訓(xùn)練和預(yù)測的精度、效率珍坊、復(fù)雜度等方面有什么差異?了解清楚這些本質(zhì)的差異之后牺勾,才可以做到根據(jù)問題和數(shù)據(jù)的具體情況對模型自如運用。
在掌握了線性模型和樹形模型這兩種基礎(chǔ)形式之后阵漏,下一步需要掌握的是這兩種基礎(chǔ)模型的復(fù)雜形式驻民。其中線性模型的復(fù)雜形式就是多層線性模型,也就是神經(jīng)網(wǎng)絡(luò)履怯。樹模型的復(fù)雜形式包括以 GDBT 為代表的 boosting 組合回还,以及以隨機森林為代表的 bagging 組合。
這兩種組合模型的意義不僅在于模型本身叹洲,boosting 和 bagging 這兩種組合思 想本身也非常值得學(xué)習(xí)和理解柠硕,這代表了兩種一般性的強化方法:boosting 的思想是精益求精,不斷在之前的基礎(chǔ)上繼續(xù)優(yōu)化;而 bagging 的思想是 “三個臭裨將頂一個諸葛亮”运提,是通過多個弱分類器的組合來得到一個強分類器仅叫。這兩種組合方法各有優(yōu)劣帜篇,但都是在日常工作中可以借鑒的思想。例如在推薦系統(tǒng)中所我們經(jīng)常會使用多個維度的數(shù)據(jù)做召回源诫咱,從某個角度來看就是一種bagging的思想:每個單獨召回源并不能給出最好表現(xiàn)笙隙,但是多個召回源組合之后,就可以得到比每個單獨召回源都要好的結(jié)果坎缭。所以說思想比模型本身更重要竟痰。
無監(jiān)督學(xué)習(xí)
有監(jiān)督學(xué)習(xí)雖然目前占了機器學(xué)習(xí)應(yīng)用的大多數(shù)場景,但是無監(jiān)督學(xué)習(xí)無論從數(shù)據(jù)規(guī)模還是作用上來講也都非常的重要掏呼。無監(jiān)督學(xué)習(xí)的一大類內(nèi)容是在做聚類坏快,做聚類的意義通常可以分為兩類:一類是將聚類結(jié)果本身當(dāng)做最終的目標憎夷,另一類是將聚類的結(jié)果再作為特征用到有監(jiān)督學(xué)習(xí)中莽鸿。但這兩種意義并不是和某種聚類方法具體綁定,而只是聚類之后結(jié)果的不同使用方式拾给,這需要在工作中不斷學(xué)習(xí)祥得、積累和思考。而在入門學(xué)習(xí)階段需要掌握的蒋得,是不同聚類算法的核心差異在哪里级及。
例如最常用的聚類方法中,kmeans 和 DBSCAN 分別適合處理什么樣的問題?高斯混合模型有著什么樣的假設(shè)?LDA 中文檔额衙、主題和詞之間是什么關(guān)系?這些模型最好能夠放到一起來學(xué)習(xí)饮焦,從而掌握它們之間的聯(lián)系和差異,而不是把他們當(dāng)做一個個孤立的東西來看待窍侧。
除 了 聚 類 以 外 县踢,近 年 來 興 起 的 嵌 入 表 示( embedding representation )也是無監(jiān)督學(xué)習(xí)的一種重要方法。這種方法和聚類的差異在于伟件,聚 類的方法是使用已有特征對數(shù)據(jù)進行劃分硼啤,而嵌入表示則是創(chuàng)造新的特征,這種新的特征是對樣 本的一種全新的表示方式锋爪。這種新的表示方法提供了對數(shù)據(jù)全新的觀察視角丙曙,這種視角提供了數(shù)據(jù)處理的全新的可能性。此外其骄,這種做法雖然是從 NLP 領(lǐng)域中興起亏镰,但卻具有很強的普適性,可用來處理多種多樣的數(shù)據(jù)拯爽,都可以得到不錯的結(jié)果索抓,所以現(xiàn)在已經(jīng)成為一種必備的技能。
機器學(xué)習(xí)理論方面的學(xué)習(xí)可以從《 An Introduction to Statistical Learning with Application in R 》開始,這本書對一些常用模型和理論基礎(chǔ)提供了很好的講解逼肯,同時也有適量的習(xí)題用來鞏固所學(xué)知識耸黑。進階學(xué)習(xí)可使用上面這本書的升級版《 Elements of Statistical Learning 》和著名的《 Pattern Recognition and Machine Learning 》。
開發(fā)語言和開發(fā)工具
掌握了足夠的理論知識篮幢,還需要足夠的工具來將這些理論落地大刊,這部分我們介紹一些常用的語言和工具。
開發(fā)語言
近年來 Python 可以說是數(shù)據(jù)科學(xué)和算法領(lǐng)域最火的語言三椿,主要原因是它使用門檻低缺菌,上手容易,同時具有著完備的工具生態(tài)圈搜锰,同時各種平臺對其支持也比較好伴郁。所以 Python 方面我就不再贅述。但是在學(xué)習(xí) Python 以外蛋叼,我建議大家可以再學(xué)習(xí)一下 R 語言焊傅,主要原因有以下幾點:
R 語言具有最完備的統(tǒng)計學(xué)工具鏈。我們在上面介紹了概率和統(tǒng)計的重要性狈涮,R 語言在這方面提供的支持是最全面的狐胎,日常的一些統(tǒng)計方面的需求,用 R 來做可能要比用Python 來做還要更快薯嗤。 Python 的統(tǒng)計科學(xué)工具雖然也在不斷完善顽爹,但是 R 仍然是統(tǒng)計科學(xué)最大最活躍的社區(qū)纤泵。
向量化骆姐、矩陣化和表格化思維的培養(yǎng)。R 中的所有數(shù)據(jù)類型都是向量化的捏题,一個整形的變量本質(zhì)上是一個長度為一的一維向量玻褪。在此基礎(chǔ)上 R 語言構(gòu)建了高效的矩陣和( DataFrame )數(shù)據(jù)類型,并且在上面支持了非常復(fù)雜而又直觀的操作方法公荧。這套數(shù)據(jù)類型和思考方式也在被很多更現(xiàn)代化的語言和工具所采納带射,例如 Numpy 中的 ndarray,以 及 Spark 最新版本中引入的 DataFrame循狰,可以說都是直接或間接從 R 語言得到的靈感窟社,定義在上面的數(shù)據(jù)操作也和 R中對 DataFrame 和向量的操作如出一轍。就像學(xué)編程都要從 C 語言學(xué)起一樣绪钥,學(xué)數(shù)據(jù)科學(xué)和算法開發(fā)我建議大家都學(xué)一下 R灿里,學(xué)的既是它的語言本身,更是它的內(nèi)涵思想程腹,對大家掌握和理解現(xiàn)代化工具都大有裨益匣吊。
除了 R 以外,Scala 也是一門值得學(xué)習(xí)的語言。原因在于它是目前將面向?qū)ο蠛秃瘮?shù)式兩種編程范式結(jié)合得比較好的一種語言色鸳,因為它不強求你一定要用函數(shù)式去寫代碼社痛,同時還能夠在能夠利用函數(shù)式的地方給予了足夠的支持。這使得它的使用門檻并不高命雀,但是隨著經(jīng)驗和知識的不斷積累蒜哀,你可以用它寫出越來越高級、優(yōu)雅的代碼吏砂。
開發(fā)工具
開發(fā)工具方面凡怎,Python 系的工具無疑是實用性最高的,具體來說赊抖,Numpy统倒、Scipy、sklearn氛雪、pandas房匆、Matplotlib 組成的套件可以滿足單機上絕大多數(shù)的分析和訓(xùn)練工作。但是在模型訓(xùn)練方面报亩,有一些更加專注的工具可以給出更好的訓(xùn)練精度和性能浴鸿,典型的如 LibSVM、Liblinear弦追、XGBoost 等岳链。
大數(shù)據(jù)工具方面,目前離線計算的主流工具仍然是Hadoop和Spark劲件,實時計算方面 Spark Streaming 和 Storm 也是比較主流的選擇掸哑。近年來興起的新平臺也比較多,例如 Flink 和 Tensorflow 都是值得關(guān)注的零远。值得一提的是苗分,對于 Hadoop 和 Spark 的掌握,不僅要掌握其編碼技術(shù)牵辣,同時還要對其運行原理有一定理解摔癣,例如,Map-Reduce 的流程在 Hadoop 上是如何實現(xiàn)的纬向,Spark 上什么操作比較耗時择浊,aggregateByKey 和 groupByKey 在運 行原理上有什么差異,等等逾条。只有掌握了這些琢岩,才能對這些大數(shù)據(jù)平臺運用自如,否則很容易出現(xiàn)程序耗時過長膳帕、跑不動粘捎、內(nèi)存爆掉等等問題薇缅。
架構(gòu)設(shè)計
最后我們花一些篇幅來談一下機器學(xué)習(xí)系統(tǒng)的架構(gòu)設(shè)計。所謂機器學(xué)習(xí)系統(tǒng)的架構(gòu)攒磨,指的是一套能夠支持機器學(xué)習(xí)訓(xùn)練泳桦、預(yù)測、服務(wù)穩(wěn)定高效運行的整體系統(tǒng)以及他們之間的關(guān)系娩缰。在業(yè)務(wù)規(guī)模和復(fù)雜度發(fā)展到一定程度的時候灸撰,機器學(xué)習(xí)一定會走向系統(tǒng)化、平臺化這個方向拼坎。這個時候就 需要根據(jù)業(yè)務(wù)特點以及機器學(xué)習(xí)本身的特點來設(shè)計一套整體架構(gòu)浮毯,這里面包括上游數(shù)據(jù)倉庫和數(shù)據(jù)流的架構(gòu)設(shè)計,以及模型訓(xùn)練的架構(gòu)泰鸡,還有線上服務(wù)的架構(gòu)等等债蓝。
這一套架構(gòu)的學(xué)習(xí)就不像前面的內(nèi)容那么簡單了,沒有太多現(xiàn)成教材可以學(xué)習(xí)盛龄,更多的是在大量實踐的基礎(chǔ)上進行抽象總結(jié)饰迹,對當(dāng)前系統(tǒng)不斷進行演化和改進。但這無疑是算法工程師職業(yè)道路上最值得為之奮斗的工作余舶。在這里能給的建議就是多實踐啊鸭,多總結(jié),多抽象匿值,多迭代赠制。
機器學(xué)習(xí)算法工程師領(lǐng)域現(xiàn)狀
現(xiàn)在可以說是機器學(xué)習(xí)算法工程師最好的時代,各行各業(yè)對這類人才的需求都非常旺盛挟憔。典型的包括以下一些細分行業(yè):
推薦系統(tǒng)钟些。推薦系統(tǒng)解決的是海量數(shù)據(jù)場景下信息高效匹配分發(fā)的問題,在這個過程中曲楚,無論是候選集召回厘唾,還是結(jié)果排序褥符,以及用戶畫像等等方面龙誊,機器學(xué)習(xí)都起著重要的作用。
廣告系統(tǒng)喷楣。廣告系統(tǒng)和推薦系統(tǒng)有很多類似的地方趟大,但也有著很顯著的差異,需要在考慮平臺和用戶之外同時考慮廣告主的利益铣焊,兩方變成了三方逊朽,使得一些問題變復(fù)雜了很多。它在對機器學(xué)習(xí)的利用方面也和推薦類似曲伊。
搜索系統(tǒng)叽讳。搜索系統(tǒng)的很多基礎(chǔ)建設(shè)和上層排序方面都大量使用了機器學(xué)習(xí)技術(shù)追他,而且在很多網(wǎng)站和 App 中,搜索都是非常重要的流量入口岛蚤,機器學(xué)習(xí)對搜索系統(tǒng)的優(yōu)化會直接影響到整個網(wǎng)站的效率邑狸。
風(fēng)控系統(tǒng)。風(fēng)控涤妒,尤其是互聯(lián)網(wǎng)金融風(fēng)控是近年來興起的機器學(xué)習(xí)的又一重要戰(zhàn)場单雾。不夸張地說,運用機器學(xué)習(xí)的能力可以很大程度上決定一家互聯(lián)網(wǎng)金融企業(yè)的風(fēng)控能力她紫,而風(fēng)控能力本身又是這些企業(yè)業(yè)務(wù)保障的核心競爭力硅堆,這其中的關(guān)系大家可以感受一下。
但是所謂“工資越高贿讹,責(zé)任越大”渐逃,企業(yè)對于算法工程師的要求也在逐漸提高。整體來說民褂,一名高級別的算法工程師應(yīng)該能夠處理“數(shù)據(jù)獲取→數(shù)據(jù)分析→模型訓(xùn)練調(diào)優(yōu)→模型上線”這一完整流程朴乖,并對流程中的各種環(huán)節(jié)做不斷優(yōu)化。一名工程師入門時可能會從上面流程中的某一個環(huán)節(jié)做起助赞,不斷擴大自己的能力范圍买羞。 除了上面列出的領(lǐng)域以外,還有很多傳統(tǒng)行業(yè)也在不斷挖掘機器學(xué)習(xí)解決傳統(tǒng)問題的能力雹食,行業(yè)的未來可謂潛力巨大畜普。
原文:http://imgtec.eetrend.com/d6-imgtec/blog/2017-11/10656.html