技術(shù)成長歷程-算法工程師技術(shù)成長路線指引_第1頁
技術(shù)成長歷程-算法工程師技術(shù)成長路線指引_第2頁
技術(shù)成長歷程-算法工程師技術(shù)成長路線指引_第3頁
技術(shù)成長歷程-算法工程師技術(shù)成長路線指引_第4頁
技術(shù)成長歷程-算法工程師技術(shù)成長路線指引_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

算法工程師技術(shù)成長路線指引

導(dǎo)讀

這是一份寫給公司算法組同事們的技術(shù)路線圖,其目的主

要是為大家在技術(shù)路線的成長方面提供一些方向指引,配套一

些自我考核項(xiàng),可以帶著實(shí)踐進(jìn)行學(xué)習(xí),加深理解和掌握。

工程師能力層級(jí)概覽

對(duì)于不同級(jí)別的算法工程師技能要求,我們大致可以分成以下幾個(gè)層級(jí):

?初級(jí):可以在一些指導(dǎo)和協(xié)助下獨(dú)立完成開發(fā)任務(wù)。具體到算法方面,需要你對(duì)于工

具框架,建模技術(shù),業(yè)務(wù)特性等方面有一定的了解,可以獨(dú)立實(shí)現(xiàn)一些算法項(xiàng)目上的

需求。

?中級(jí):可以基本獨(dú)立完成一個(gè)項(xiàng)目的開發(fā)與交付。在初級(jí)工程師的基礎(chǔ)上,對(duì)于深入

了解技術(shù)原理的要求會(huì)更高,并且能夠應(yīng)對(duì)項(xiàng)目中各種復(fù)雜多變的挑戰(zhàn),對(duì)于已有技

術(shù)和工具進(jìn)行改造適配。在整體工程化交付方面,對(duì)于代碼質(zhì)量,架構(gòu)設(shè)計(jì),甚至項(xiàng)

目管理方面的要求會(huì)開始顯現(xiàn)。另外從業(yè)務(wù)出發(fā)來評(píng)估技術(shù)選型和方案也變得尤為重

要。

?高級(jí):可以獨(dú)立負(fù)責(zé)一條產(chǎn)品線的運(yùn)作。在中級(jí)工程師的基礎(chǔ)上,需要更廣闊的技術(shù)

視野與開拓創(chuàng)新能力,定義整個(gè)產(chǎn)品線的前進(jìn)方向。解決問題已經(jīng)不是關(guān)鍵,更重要

的是提出和定義問題,能夠打造出在業(yè)界具有領(lǐng)先性和差異性的產(chǎn)品,為公司創(chuàng)造更

大的價(jià)值。

事實(shí)上對(duì)于不同層級(jí)的工程師,非技術(shù)部分的要求都有一定占比。本文主

要聚焦在技術(shù)路線圖上,對(duì)于其他方面的學(xué)習(xí)進(jìn)階路線不會(huì)做覆蓋。

編程能力

Python:

Python是算法工程師日常工作中最常用的語言,應(yīng)該作為必須掌握的一門技

術(shù)。大致的學(xué)習(xí)路線如下:

?學(xué)習(xí)掌握Python的基本語法,可以通過各類入門教程來看,個(gè)人推薦《Learn

PythontheHardWay》o

■自我考核:能夠讀懂大多數(shù)的內(nèi)部項(xiàng)目及一些開源項(xiàng)目代碼的基本模塊例如pandas,

sklearn等。

?學(xué)習(xí)Python的編程風(fēng)格,建議學(xué)習(xí)觀遠(yuǎn)內(nèi)部的Python代碼規(guī)范。

-自我考核:編寫的代碼符合編碼規(guī)范,能夠通過各類lint檢查。

?Python進(jìn)階,這方面有一本非常著名的書《FluentPython》,深入介紹了

Python內(nèi)部的很多工作原理,讀完之后對(duì)于各類疑難問題的理解排查,以及

語言高級(jí)特性的應(yīng)用方面會(huì)很有幫助。另外動(dòng)態(tài)語言元編程這塊,《Ruby元

編程》也是一本非常值得推薦的書。

?自我考核:能夠讀懂一些復(fù)雜的Python項(xiàng)目,例如sqlalchemy中就大量使

用了元編程技巧。在實(shí)際工程項(xiàng)目中,能夠找到一些應(yīng)用高級(jí)技巧的點(diǎn)進(jìn)行實(shí)

踐,例如基于Cython的性能優(yōu)化等。

?領(lǐng)域應(yīng)用,Python的應(yīng)用相當(dāng)廣泛,在各個(gè)領(lǐng)域深入下去都有很多可以學(xué)習(xí)

的內(nèi)容,比如Web開發(fā),爬蟲,運(yùn)維工具,數(shù)據(jù)處理,機(jī)器學(xué)習(xí)等。這塊主

要就看大家各自的興趣來做自由選擇了,個(gè)人推薦熟悉了解一下Pythonweb

開發(fā),測(cè)試開發(fā)相關(guān)的內(nèi)容,開拓視野。

.自我考核:以Web開發(fā)和測(cè)試開發(fā)為例,嘗試寫一個(gè)簡(jiǎn)單的modelserving

http服務(wù),并編寫相應(yīng)的自動(dòng)化測(cè)試。

Scala/Java:

Java目前是企業(yè)級(jí)開發(fā)中最常用的軟件,包括在大數(shù)據(jù)領(lǐng)域,也是應(yīng)用最廣

泛的語言,例如當(dāng)年的Hadoop生態(tài)基本都是基于Java開發(fā)的。

Scala由于其函數(shù)式編程的特性,在做數(shù)據(jù)處理方面提供了非常方便的API,

也因?yàn)镾park等項(xiàng)目的火熱,形成了一定的流行度。在進(jìn)行企業(yè)級(jí)的軟件開發(fā),

高性能,大規(guī)模數(shù)據(jù)處理等方面3VM上的這兩門語言有很大的實(shí)用價(jià)值,值

得學(xué)習(xí)。

順帶一提,Scala本身是一門非常有意思的語言,其中函數(shù)式編程的思想與設(shè)

計(jì)模式又是非常大的一塊內(nèi)容,對(duì)于拓寬視野,陶冶情操都是挺不錯(cuò)的選擇。

考慮到算法工程師的工作內(nèi)容屬性,這邊給出一個(gè)Scala的學(xué)習(xí)路線:

?學(xué)習(xí)掌握Scala的基本語法,開發(fā)環(huán)境配置,項(xiàng)目編譯運(yùn)行等基礎(chǔ)知識(shí)。這里推薦

Coursera上MartinOdersky的課程,《快學(xué)Scala》或《ProgramminginScala》

兩本書也可以搭配著瀏覽參考。

■自我考核:能使用Scala來實(shí)現(xiàn)一些簡(jiǎn)單算法問題,例如DFS/BFS。或者使用Scala

來處理一些日常數(shù)據(jù)工作,例如讀取日志文件,提取一些關(guān)鍵信息等。

?學(xué)習(xí)使用Scala來開發(fā)Spark應(yīng)用推薦edX上的《BigDataAnalyticsUsingSpark》

或者Coursera上的《BigDataAnalyticswithScalaandSpark》,另外有些相關(guān)

書籍也可以參考,比如《Spark快速大數(shù)據(jù)分析》等。

'自我考核:能夠使用Spark的ScalaAPI來進(jìn)行大規(guī)模的數(shù)據(jù)分析及處理,完成lag

feature之類的特征工程處理。

?JVM的原理學(xué)習(xí),Scala/Java都是JVM上運(yùn)行的優(yōu)秀語言,其背后是一個(gè)非常大的

生態(tài),包括在Web,Android,數(shù)據(jù)基礎(chǔ)架構(gòu)等方面有廣泛的應(yīng)用。JVM相比Python

虛擬機(jī),發(fā)展更加成熟,有一套非常完善的JDK工具鏈及衍生的各類項(xiàng)目,便于開

發(fā)者debug,調(diào)優(yōu)應(yīng)用。這方面推薦學(xué)習(xí)周志明的《深入理解Java虛擬機(jī)》。

■自我考核:理解JVMGC原理,能通過JDK中相關(guān)工具或者優(yōu)秀的第三方工具如

arthas等,排查分析Spark數(shù)據(jù)應(yīng)用的資源使用情況,GCprofiling,hotmethod

profiling等,進(jìn)而進(jìn)行參數(shù)優(yōu)化。

?計(jì)算機(jī)語言理論。ProgrammingLanguage作為計(jì)算機(jī)科學(xué)的一個(gè)重要分支,包含

了很多值得深入研究的主題,例如類型論,程序分析,泛型,元編程,DSL,編譯原

理等。這方面的很多話題,在機(jī)器學(xué)習(xí)方面也有很多實(shí)際應(yīng)用,比如TVM這類工作,

涉及到大量編譯原理的應(yīng)用,知乎大佬“藍(lán)色”也作為這個(gè)領(lǐng)域的專家在從事深度學(xué)

習(xí)框架相關(guān)的工作。llvm,clang作者ChrisLattner也加入Google主導(dǎo)了Swiftfor

Tensorflow等工作。Scala作為一門學(xué)術(shù)范非常強(qiáng)的語言,擁有極佳的FP,元編程

等能力支持,強(qiáng)大的類型系統(tǒng)包括自動(dòng)推理,泛型等等高級(jí)語言特性,相對(duì)來說是一

門非常"值得"學(xué)習(xí)的新語言,也是一個(gè)進(jìn)入PL領(lǐng)域深入學(xué)習(xí)的"gatewaydrug”:)

對(duì)這個(gè)方面有興趣的同學(xué),可以考慮閱讀《Scala函數(shù)式編程》,《冒號(hào)課堂》,以

及Coursera上《ProgrammingLanguages》也是一門非常好的課程。另外只想做

科普級(jí)了解的同學(xué),也可以讀一讀著名的《黑客與畫家》感受一下。

C/C++/Rust

當(dāng)前流行的算法框架,例如TensorFlow,PyTorch,LightGBM等,底層都是

基于C++為主要語言進(jìn)行實(shí)現(xiàn)的。但是C++本身過于復(fù)雜,使用場(chǎng)景也比較

有限制,建議只需要達(dá)到能夠讀懂一些基礎(chǔ)的C++代碼邏輯即可。

在系統(tǒng)級(jí)開發(fā)領(lǐng)域,目前有一門新語言逐漸崛起,連續(xù)幾年被Stackoverflow

投票評(píng)選為程序員最喜愛的語言:Rust。從設(shè)計(jì)理念和一些業(yè)界應(yīng)用(例如

TiKV)來看還是非常不錯(cuò)的,但是我也沒有深入學(xué)習(xí)了解過,就不做具體推薦

To

這方面建議的學(xué)習(xí)內(nèi)容包括經(jīng)典的《TheCProgrammingLanguage》

以及Rust官方的:/rust-lang/ru

?自我考核:能夠讀懂LightGBM里對(duì)于tweedieloss的相關(guān)定義代碼。

操作系統(tǒng)

基本概念:

我們所編寫的算法應(yīng)用,都是通過操作系統(tǒng)的環(huán)境運(yùn)行在物理硬件之上的。

在實(shí)際運(yùn)作過程中,會(huì)碰到不少相關(guān)的問題,例如為什么程序報(bào)了資源不足的

錯(cuò)誤,為什么notebook在瀏覽器里打不開,為什么進(jìn)程hang住了沒有響應(yīng)

等等,都需要一些操作系統(tǒng)的知識(shí)來幫助理解和分析問題,最終排查解決。

操作系統(tǒng)涵蓋的內(nèi)容比較多,建議一開始只需要了解一些主要概念(例如硬件

結(jié)構(gòu),CPU調(diào)度,進(jìn)程,線程,內(nèi)存管理,文件系統(tǒng),10,網(wǎng)絡(luò)等),對(duì)于

整體圖景有一些感覺即可。后續(xù)碰到了實(shí)際問題,可以再在各個(gè)部分深入學(xué)習(xí)

展開。

優(yōu)秀的學(xué)習(xí)資料也有很多,基本都是大部頭,重點(diǎn)推薦《深入理解計(jì)算

機(jī)系統(tǒng)》,《OperatingSystems:ThreeEasyPieces》,以及《現(xiàn)代操作系

統(tǒng)》。

?自我考核:能夠基本明確運(yùn)行一個(gè)模型訓(xùn)練任務(wù)過程中,底層使用到的硬件,

操作系統(tǒng)組件,及其交互運(yùn)作的方式是如何的。

Linux基礎(chǔ):

平時(shí)工作中最常用的兩個(gè)操作系統(tǒng)CentOS和macOS都是Unix/Linux系的,

因此學(xué)習(xí)掌握相關(guān)的基礎(chǔ)知識(shí)非常重要。一些必須掌握的知識(shí)點(diǎn)包括:Shell

與命令行工具,軟件包管理,用戶及權(quán)限,系統(tǒng)進(jìn)程管理,文件系統(tǒng)基礎(chǔ)等。

這方面的入門學(xué)習(xí)資料推薦《鳥哥的Linux私房菜》,基本涵蓋了Linux系統(tǒng)

管理員需要掌握知識(shí)的方方面面。進(jìn)階可以閱讀《Unix環(huán)境高級(jí)編程》,對(duì)

于各種系統(tǒng)調(diào)用的講解非常深入,可以為后續(xù)性能調(diào)優(yōu)等高級(jí)應(yīng)用打下基礎(chǔ)。

?自我考核:開發(fā)一個(gè)shell小工具,實(shí)現(xiàn)一些日常工作需求,例如定時(shí)自動(dòng)清

理數(shù)據(jù)文件夾中超過一定年齡的數(shù)據(jù)文件,自動(dòng)清理內(nèi)存占用較大且運(yùn)行時(shí)間

較久的jupyternotebook進(jìn)程等。

深入應(yīng)用:

工作中碰到的疑難問題排查,性能分析與優(yōu)化,系統(tǒng)運(yùn)維及穩(wěn)定性工程等方面,

都需要較為深入的計(jì)算機(jī)體系和操作系統(tǒng)知識(shí),感興趣的同學(xué)可以針對(duì)性的進(jìn)

行深入學(xué)習(xí)。

以性能優(yōu)化為例,可以學(xué)習(xí)經(jīng)典的《性能之巔》,了解其中的原理及高級(jí)工具

鏈。像其中的系統(tǒng)調(diào)用追蹤(strace),動(dòng)態(tài)追蹤(systemtap,DTrace,perf,

eBPF)等技術(shù),對(duì)于操作系統(tǒng)相關(guān)的問題排查都會(huì)很有幫助。

?自我考核:能夠分析定位出LightGBM訓(xùn)練過程中的性能瓶頸,精確到函數(shù)調(diào)

用甚至代碼行號(hào)的級(jí)別。

軟件工程

算法與數(shù)據(jù)結(jié)構(gòu):

暫時(shí)先把這塊放到軟件工程模塊下。這里指的算法是計(jì)算機(jī)科學(xué)中的經(jīng)典算法,

例如遞歸,排序,搜索,動(dòng)態(tài)規(guī)劃等,有別于我們常說的機(jī)器學(xué)習(xí)算法。

這塊的學(xué)習(xí)資料網(wǎng)上有非常多,個(gè)人當(dāng)年是通過普林斯頓的算法課(需要有

Java基礎(chǔ))入門,后來又上了斯坦福的算法分析與設(shè)計(jì),開拓了一些視野。

書籍方面推薦新手從《算法圖解》入門,然后可以考慮閱讀JeffErickson的

《Algorithms》,或者選擇上面提到的網(wǎng)課。另外像《編程珠磯》,《編程之

美》等也可以參閱,里面有不少問題的巧妙解法。

除了從書本中學(xué)習(xí),還可以直接去LeetCode等網(wǎng)站進(jìn)行實(shí)戰(zhàn)操作進(jìn)行練習(xí)提

iWlo

?自我考核:能夠設(shè)計(jì)相關(guān)的數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)一個(gè)類似airflow中點(diǎn)擊任意節(jié)點(diǎn)

向后運(yùn)行的功能。

代碼規(guī)范:

從初級(jí)程序員到中高級(jí)程序員,其中比較大的一個(gè)差異就是代碼編寫習(xí)慣

上,從一開始寫計(jì)算機(jī)能理解,能夠運(yùn)行成功的代碼,逐漸演化到寫人能夠理

解,易于修改與維護(hù)的代碼。

在這條學(xué)習(xí)路徑上,首先需要建立起這方面的意識(shí),然后需要在實(shí)戰(zhàn)中反

復(fù)思考和打磨自己的代碼,評(píng)判和學(xué)習(xí)其它優(yōu)秀的項(xiàng)目代碼,才能逐漸精進(jìn)。

推薦的學(xué)習(xí)書籍有《編寫可讀代碼的藝術(shù)》,一本非常短小精悍的入門書籍,

后續(xù)可以再慢慢閱讀那些經(jīng)典大部頭,例如《CleanCode》《CodeComplete》,

《ThePragmaticProgrammer》等。這方面Python也有一本比較針對(duì)性的

書籍《EffectivePython》,值得一讀。

?自我考核:審視自己寫的項(xiàng)目代碼,能發(fā)現(xiàn)并修正至少三處不符合最佳編碼實(shí)

踐的問題。

設(shè)計(jì)模式:

在代碼架構(gòu)方面,設(shè)計(jì)模式是一個(gè)重要的話題,對(duì)于日常工作中出現(xiàn)的許

多典型場(chǎng)景,給出了一些解決方案的“套路"。這方面最著名的書當(dāng)屬GoF

的《設(shè)計(jì)模式》,不過個(gè)人并不十分推薦,尤其是以Python作為主要工作語

言的話,其中很大部分的設(shè)計(jì)模式可能并不需要。入門可以瀏覽一下這個(gè)網(wǎng)站

掌握一些基本概念:

efactoringguru.cn/desi,后續(xù)可以考慮閱讀《CleanArchitecture》,

《重構(gòu)》等相關(guān)數(shù)據(jù),理解掌握在優(yōu)化代碼架構(gòu)過程中思考的核心點(diǎn),并加以

運(yùn)用。Python相關(guān)的設(shè)計(jì)模式應(yīng)用,還可以參考《PythoninPractice》。

?自我考核:在項(xiàng)目中,找到一處可以應(yīng)用設(shè)計(jì)模式的地方,進(jìn)行重構(gòu)改進(jìn)。

質(zhì)量保障:

對(duì)于需要實(shí)際上線運(yùn)行的軟件工程,質(zhì)量保障是非常重要的一個(gè)環(huán)節(jié),能

夠確保整個(gè)產(chǎn)品按照期望的方式進(jìn)行運(yùn)作。在機(jī)器學(xué)習(xí)項(xiàng)目中,由于引入了數(shù)

據(jù)這個(gè)因素,相比傳統(tǒng)的軟件測(cè)試會(huì)有更高的難度,也是業(yè)界還在摸索前進(jìn)的

方向。

建議可以先閱讀《單元測(cè)試的藝術(shù)》或《Google軟件測(cè)試之道》,大致

理解軟件測(cè)試的一些基本概念和運(yùn)作方式,在此基礎(chǔ)上可以進(jìn)一步閱讀

MartinFowler對(duì)于機(jī)器學(xué)習(xí)領(lǐng)域提出的CD4ML中相關(guān)的測(cè)試環(huán)節(jié),學(xué)習(xí)

sklearn,LightGBM等開源庫的測(cè)試開發(fā)方式,掌握機(jī)器學(xué)習(xí)相關(guān)的質(zhì)量保

障技術(shù)能力。

?自我考核:在項(xiàng)目中,實(shí)現(xiàn)基礎(chǔ)的數(shù)據(jù)輸入測(cè)試,預(yù)測(cè)輸出測(cè)試。

項(xiàng)目管理:

軟件工程推進(jìn)過程中,項(xiàng)目管理相關(guān)的技能方法與工具運(yùn)用也非常的關(guān)鍵。

其中各種研發(fā)流程與規(guī)范,例如敏捷開發(fā),設(shè)計(jì)評(píng)審,代碼評(píng)審,版本管控,

任務(wù)看板管理等,都是實(shí)際項(xiàng)目推進(jìn)中非常重要的知識(shí)技能點(diǎn)。

這方面推薦學(xué)習(xí)一本經(jīng)典的軟件工程教材《構(gòu)建之法》,了解軟件項(xiàng)目管理的

方方面面。進(jìn)一步來說廣義的項(xiàng)目管理上的很多知識(shí)點(diǎn)也是后續(xù)深入學(xué)習(xí)的方

向,可以參考極客時(shí)間上的課程《項(xiàng)目管理實(shí)戰(zhàn)20講》。

?自我考核:在某個(gè)負(fù)責(zé)項(xiàng)目中運(yùn)用項(xiàng)目管理方法,完成一個(gè)實(shí)際的需求評(píng)估,

項(xiàng)目規(guī)劃,設(shè)計(jì)與評(píng)審,開發(fā)執(zhí)行,項(xiàng)目上線,監(jiān)控維護(hù)流程,并對(duì)整個(gè)過程

做復(fù)盤總結(jié)。

高級(jí)話題:

軟件工程師在技能方向成長的一條路線就是成為軟件架構(gòu)師,在這個(gè)方向

上對(duì)于技能點(diǎn)會(huì)有非常高的綜合性要求,其中也有不少高級(jí)話題需要深入學(xué)習(xí)

和了解,例如技術(shù)選型與系統(tǒng)架構(gòu)設(shè)計(jì),架構(gòu)設(shè)計(jì)原則與模式,寬廣的研發(fā)知

識(shí)視野,高性能,高可用,可擴(kuò)展性,安全性等等。

有興趣的同學(xué)可以了解一下極客時(shí)間的《從0開始學(xué)架構(gòu)》這門課,逐漸

培養(yǎng)這方面的視野與能力。

另外如《微服務(wù)架構(gòu)設(shè)計(jì)模式》還有領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)方面的一系列書籍也值

得參考學(xué)習(xí)。

?自我考核:設(shè)計(jì)一個(gè)算法項(xiàng)目Docker鏡像自動(dòng)打包系統(tǒng)。

算法基礎(chǔ)

數(shù)據(jù)分析:

數(shù)學(xué)基礎(chǔ):

在進(jìn)行算法建模時(shí),深入了解數(shù)據(jù)情況,做各類探索性分析,統(tǒng)計(jì)建模等

工作非常重要,這方面對(duì)一些數(shù)學(xué)基礎(chǔ)知識(shí)有一定的要求,例如概率論,統(tǒng)計(jì)

學(xué)等。這方面除了經(jīng)典的數(shù)學(xué)教材,也可以參考更程序員向的《統(tǒng)計(jì)思維》,

《貝葉斯方法》,《程序員的數(shù)學(xué)2》等書籍。

?自我考核:理解實(shí)際項(xiàng)目中的數(shù)據(jù)分布情況,并使用統(tǒng)計(jì)建模手段,推斷預(yù)測(cè)值的置

信區(qū)間。

可視化:

在進(jìn)行數(shù)據(jù)分析時(shí),可視化是一個(gè)非常重要的手段,有助于我們快速理解

數(shù)據(jù)情況,發(fā)掘數(shù)據(jù)規(guī)律,并排查異常點(diǎn)。對(duì)于各種不同類型的數(shù)據(jù),會(huì)對(duì)應(yīng)

不同的可視化最佳實(shí)踐,如選擇不同的圖表類型,板式設(shè)計(jì),分析思路編排,

人機(jī)交互方式等等。

另一方面,可視化與數(shù)據(jù)報(bào)告也是我們與不同角色人群溝通數(shù)據(jù)insights

的一個(gè)重要途徑,需要從業(yè)務(wù)角度出發(fā)去思考可視化與溝通方式。

這方面可以參考《StorytellingwithData》,《TheVisualDisplayof

QuantitativeInformation》等經(jīng)典數(shù)據(jù),同時(shí)也需要培養(yǎng)自己的商業(yè)背景

sense,提升溝通能力。

?自我考核:對(duì)內(nèi)溝通方面,能使用可視化技術(shù),分析模型的badcase情況,并確定

優(yōu)化改進(jìn)方向。對(duì)外溝通方面,能獨(dú)立完成項(xiàng)目的數(shù)據(jù)分析溝通報(bào)告。

誤差分析與調(diào)優(yōu):

在做算法模型調(diào)優(yōu)改進(jìn)中,需要從數(shù)據(jù)分析的基礎(chǔ)上出發(fā)來決定實(shí)驗(yàn)方向,

這么做有幾個(gè)好處:

?從分析出發(fā)指導(dǎo)調(diào)優(yōu)更有方向性,而不是憑經(jīng)驗(yàn)加個(gè)特征,改個(gè)參數(shù)碰運(yùn)氣。哪怕是

業(yè)務(wù)方提供的信息,也最好是有數(shù)據(jù)分析為前提再做嘗試,而不是當(dāng)成一個(gè)既定事實(shí)。

?由分析發(fā)現(xiàn)的根源問題,對(duì)于結(jié)果驗(yàn)證也更有幫助。尤其在預(yù)測(cè)的數(shù)據(jù)量極大情況下,

加一個(gè)單一特征很可能總體只有千分位準(zhǔn)確率的提升,無法確定是天然波動(dòng)還是真實(shí)

的提升。但如果有分析的前提,那么我們可以有針對(duì)性的看對(duì)于這個(gè)已知問題,我們

的調(diào)優(yōu)策略是否生效,而不是只看一個(gè)總體準(zhǔn)確率。

?對(duì)于問題的徹底排查解決也更有幫助,有時(shí)候結(jié)果沒有提升,不一定是特征沒用,也

可能是特征代碼有bug之類的問題。帶著數(shù)據(jù)分析的目標(biāo)去看為什么這個(gè)特征沒有

效果,是模型沒學(xué)到還是特征沒有區(qū)分度等,有沒有改進(jìn)方案,對(duì)于我們?cè)u(píng)判調(diào)優(yōu)嘗

試是否成功的原因也更能徹查到底。

?數(shù)據(jù)分析會(huì)幫助我們發(fā)現(xiàn)一些額外的問題點(diǎn),比如銷量數(shù)據(jù)清洗處理是不是有問題,

是不是業(yè)務(wù)本身有異常,需要剔除數(shù)據(jù)等。

這方面在業(yè)界有一些關(guān)于誤差分析的探索研究,不過大多數(shù)都是基于分類問題

的,例如《IdentifyingUnknownUnknownsintheOpenWorld》,《A

CharacterizationofPredictionErrors》等??梢栽诹私膺@些研究的基礎(chǔ)上,

結(jié)合具體的業(yè)務(wù)情況,深入思考總結(jié)誤差分析的思路與方法論。

?自我考核:在項(xiàng)目中形成一套可以重復(fù)使用的誤差分析方案,能夠快速從預(yù)測(cè)輸出中

定位到目前模型最重要的誤差類別,并一定程度上尋找到根本原因。

機(jī)器學(xué)習(xí)基礎(chǔ)

傳統(tǒng)機(jī)器學(xué)習(xí):

這塊大家應(yīng)該都非常熟悉了,初階的學(xué)習(xí)路線可以參考周志華老師的《機(jī)

器學(xué)習(xí)》,涵蓋了機(jī)器學(xué)習(xí)基礎(chǔ),常用機(jī)器學(xué)習(xí)方法,和一些進(jìn)階話題如學(xué)習(xí)

理論,強(qiáng)化學(xué)習(xí)等。

如果希望深化理論基礎(chǔ),可以參考經(jīng)典的《PRML》,《ESL》和《統(tǒng)計(jì)

學(xué)習(xí)方法》。在實(shí)戰(zhàn)中,需要綜合業(yè)務(wù)知識(shí),算法原理,及數(shù)據(jù)分析等手段,

逐漸積累形成建模調(diào)優(yōu)的方法論,提高整體實(shí)驗(yàn)迭代的效率和成功率。

自我考核:結(jié)合實(shí)際業(yè)務(wù)和機(jī)器學(xué)習(xí)理論知識(shí),挖掘項(xiàng)目中算法表現(xiàn)不夠好的問題,

并通過算法改造進(jìn)行提升或解決。

深度學(xué)習(xí):

近些年興起的深度學(xué)習(xí),已經(jīng)成為機(jī)器學(xué)習(xí)領(lǐng)域一個(gè)非常重要的分支,在

各個(gè)應(yīng)用方向發(fā)揮了很大的作用。相對(duì)于傳統(tǒng)機(jī)器學(xué)習(xí),對(duì)于特征工程要求的

降低成了其核心優(yōu)勢(shì)。

另一方面,深度學(xué)習(xí)對(duì)于大數(shù)據(jù)量,大規(guī)模算力的應(yīng)用能力很強(qiáng),也一定

程度上提升了整體的產(chǎn)出效果。由于理論方面的研究稍顯落后,深度學(xué)習(xí)在實(shí)

際應(yīng)用中對(duì)于使用者的經(jīng)驗(yàn)技能要求相對(duì)比較高,需要有大量的實(shí)戰(zhàn)經(jīng)驗(yàn)才能

達(dá)到比較理想的效果。

這方面的學(xué)習(xí)資料推薦Keras作者的《DeepLearningwithPython》,

以及《Hands-onMachineLearningwithScikit-LearnandTensorFlow》,

而在理論方面推薦著名的“花書"《DeepLearning》。

在學(xué)習(xí)理論原理的基礎(chǔ)上,尤其要注意在實(shí)際算法應(yīng)用中,能夠通過觀察

各種指標(biāo)與數(shù)據(jù)分析,找到提升模型的操作改進(jìn)方向。

?自我考核:能夠在實(shí)際項(xiàng)目中,使用深度學(xué)習(xí)模型,達(dá)到接近甚至超過傳統(tǒng)GBDT模

型的精確度效果,或者通過ensemble,embedding特征方式,提升已有模型的精

度。

領(lǐng)域建模:

目前我們的業(yè)務(wù)領(lǐng)域在時(shí)間序列預(yù)測(cè),自然語言處理,推薦等方面,其它類似圖

像,搜索,廣告等領(lǐng)域也都有各自的一些領(lǐng)域建模方法。

在時(shí)間序列領(lǐng)域,包括了傳統(tǒng)時(shí)序模型,如ARIMA,Prophet,機(jī)器學(xué)習(xí)模型,

如滑動(dòng)窗口特征構(gòu)建方法結(jié)合LightGBM,及深度學(xué)習(xí)模型,例如LSTM,seq2seq,

transformer等。

這方面可以參考Kaggle上相關(guān)比賽的方案分享,以及Amazon,Uber,天貓等

有類似業(yè)務(wù)場(chǎng)景公司的分享資料。其它領(lǐng)域也是類似,通過了解歷史技術(shù)演進(jìn),相關(guān)

比賽,業(yè)界的方案分享與開源項(xiàng)目,會(huì)議論文來逐漸掌握學(xué)習(xí)建模方法,結(jié)合實(shí)際業(yè)

務(wù)進(jìn)行實(shí)踐嘗試,積累起更加體系性的個(gè)人知識(shí)技能。

?自我考核:在項(xiàng)目中復(fù)現(xiàn)一個(gè)Kaggle獲勝方案,檢驗(yàn)其效果,分析模型表現(xiàn)背后的

原因,并嘗試進(jìn)行改進(jìn)。

算法框架

數(shù)據(jù)處理框架:

在項(xiàng)目實(shí)施過程中,會(huì)需要各類復(fù)雜的數(shù)據(jù)處理操作,因此熟練掌握此類框架就

顯得尤為重要。目前行業(yè)的標(biāo)準(zhǔn)基本上會(huì)參照PandasDataFrame的定義,在數(shù)據(jù)

量較大的情況下,也有許多類似的框架,如Spark,Dask,Modin,Mars等支持分

布式運(yùn)行的DataFrame,以及cuDF,Vaex等提升單機(jī)性能的改進(jìn)實(shí)現(xiàn)。

這方面經(jīng)典的書籍可以參考WesMcKinney的《PythonforDataAnalysis》,

在掌握基礎(chǔ)數(shù)據(jù)操作的基礎(chǔ)上,可以進(jìn)而了解窗口函數(shù),向量化性能優(yōu)化等高級(jí)話題。

另外SQL也可以做非常復(fù)雜的數(shù)據(jù)處理工作,有不少公司例如阿里會(huì)以SQL為主來

構(gòu)建數(shù)據(jù)處理流程,感興趣的同學(xué)也可以學(xué)習(xí)一下SQL中各種高級(jí)計(jì)算的使用及優(yōu)

化方法。

?自我考核:在已有項(xiàng)目中,能把至少三個(gè)使用apply方法的pandas處理修改成向量

化運(yùn)行,并測(cè)試性能提升。使用windowfunction或其它方案來實(shí)現(xiàn)lag特征,減

少join次數(shù)。

機(jī)器學(xué)習(xí)框架:

機(jī)器學(xué)習(xí)方面的新框架層出不窮,一方面我們需要掌握經(jīng)典框架的使用方

式,理解其模塊構(gòu)成,接口規(guī)范的設(shè)計(jì),一定程度上來說其它新框架也都需要

遵循這些業(yè)界標(biāo)準(zhǔn)框架的模塊與接口定義。

另一方面對(duì)于新框架或特定領(lǐng)域框架,我們需要掌握快速評(píng)估,上手使用,

并且做一定改造適配的能力。一些比較經(jīng)典的框架有:

?通用機(jī)器學(xué)習(xí):scikit-learn,SparkML,LightGBM

?通用深度學(xué)習(xí):Keras/TensorFlow,PyTorch

?特征工程:tsfresh,Featuretools,Feast

?AutoML:hyperopt,SMAC3,nni,autogluon

?可解釋機(jī)器學(xué)習(xí):shap,aix360,eli5,interpret

?異常檢測(cè):pyod,egads

?可視化:pyecharts,seaborn

數(shù)據(jù)質(zhì)量:

?cerberus,pandas_profilingzDeequ

?時(shí)間序歹U:fbprophet,sktime,pyts

?大規(guī)模機(jī)器學(xué)習(xí):Horovod,BigDL,mmlspark

?Pipeline:MLflow,metaflow,KubeFlow,Hopsworks

一般的學(xué)習(xí)路徑主要是閱讀這些框架的官方文檔和tutorial,在自己的項(xiàng)目中

進(jìn)行嘗試使用。對(duì)于一些核心接口,也可以閱讀一下相關(guān)的源代碼,深入理解

其背后的原理。

?自我考核:在LightGBM框架下,實(shí)現(xiàn)一個(gè)自定義的損失函數(shù),并跑通訓(xùn)練與預(yù)測(cè)流

程。

其它框架:

其它比較常見且與算法工程師日常工作會(huì)有一些聯(lián)系的有Web框架,爬

蟲框架等,最具有代表性的當(dāng)屬Flask和scrapy。這兩者背后各自又是很大一

塊領(lǐng)域,尤其web開發(fā)更是保羅萬象。

感興趣的同學(xué)還可以了解一下一些新興的基于Python3的框架,例如FastAPI,

其背后借鑒的許多現(xiàn)代框架的思想設(shè)計(jì),包括數(shù)據(jù)驗(yàn)證,序列化,自動(dòng)文檔,

異步高性能等,開拓一下知識(shí)面。

?自我考核:實(shí)現(xiàn)一^T'簡(jiǎn)單的modelservinghttp服務(wù)。

算法工程交叉

大規(guī)模算法運(yùn)行:

分布式訓(xùn)練:

在很多項(xiàng)目中,數(shù)據(jù)量達(dá)到十億級(jí)以上的情況下,單機(jī)訓(xùn)練會(huì)難以支撐。

因此分布式訓(xùn)練也是實(shí)際工程落地中非常重要的一個(gè)主題。

分布式訓(xùn)練涉及到多機(jī)的通訊協(xié)同方式,優(yōu)化算法的改造,數(shù)據(jù)及模型的并行

與聚合,以及框架的選擇和運(yùn)維等話題,具體可以參考《分布式機(jī)器學(xué)習(xí)》。

另外對(duì)于分布式系統(tǒng),也可以參閱《數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì)》這本神作,了

解其背后原理。

?自我考核:能夠在多機(jī)上進(jìn)行億級(jí)數(shù)據(jù)的GBDT模型訓(xùn)練與預(yù)測(cè)。

高性能計(jì)算:

在做大規(guī)模的數(shù)據(jù)訓(xùn)練與推理時(shí),近些年涌現(xiàn)出許多高性能計(jì)算優(yōu)化的方

法,例如從硬件方面,有各種超線程技術(shù),向量化指令集,GPGPU,TPU的

應(yīng)用等,從軟件方面,有針對(duì)數(shù)值計(jì)算場(chǎng)景的OpenBLAS,有自動(dòng)并行化的

OpenMP,有各種codegen,JIT技術(shù)下的運(yùn)行時(shí)優(yōu)化等。

這方面可以學(xué)習(xí)的方向也很多,從基礎(chǔ)的并行編程,編譯原理及優(yōu)化的知

識(shí)開始倒CUDA,OpenMP的應(yīng)用(例如Nvidia的cuDNN,還有LightGBM

中也用到了OpenMP),Codegen,JIT等技術(shù)在Spark,TVM等項(xiàng)目中的

使用等,建議有深度性能優(yōu)化需求時(shí)可以往這些方向做調(diào)研和學(xué)習(xí)。

?自我考核:能夠通過LLVMJIT來優(yōu)化實(shí)現(xiàn)Sparkwindowfunction的執(zhí)行性能。

模型加速領(lǐng)域:

這個(gè)方向分兩個(gè)部分,一塊是模型訓(xùn)練方面,能夠做到加速,例如使用大

batchsize,遷移學(xué)習(xí)持續(xù)的在線/增量學(xué)習(xí)等手段另一塊在模型預(yù)測(cè)方面,

也有很多加速需求,比如模型參數(shù)量?jī)?yōu)化,模型壓縮,混合精度,知識(shí)蒸儲(chǔ)等

技術(shù)手段,都是為了做到更高性能,更低資源消耗的模型預(yù)測(cè)推理。

這方面業(yè)界有各個(gè)方向的文章和技術(shù)實(shí)現(xiàn)可以參考,比如經(jīng)典的《Training

ImageNetin1Hour》,MobileNet,TensorRT,二值網(wǎng)絡(luò)等。

自我考核:在典型的銷量預(yù)測(cè)場(chǎng)景中實(shí)現(xiàn)增量訓(xùn)練與預(yù)測(cè)。

MLops

編排調(diào)度:

包含各類pipeline的編排與調(diào)度能力的支持,包括數(shù)據(jù)pipeline,訓(xùn)練

pipeline和servingpipeline等。這方面比較常用的框架工具有Airflow,

DolphinScheduler,Cadence等,需要掌握其基本的工作原理和使用方式,

并能夠應(yīng)用于離線實(shí)驗(yàn)與線上運(yùn)行。

?自我考核:使用Airflow完成一個(gè)標(biāo)準(zhǔn)的項(xiàng)目pipeline搭建與運(yùn)行。

數(shù)據(jù)集成:

相對(duì)于傳統(tǒng)的DevOps,機(jī)器學(xué)習(xí)項(xiàng)目最大的區(qū)別在于數(shù)據(jù)方面的依賴會(huì)

更加顯著與重要。

這方面的話題包括數(shù)據(jù)血緣,數(shù)據(jù)質(zhì)量保障,數(shù)據(jù)版本控制等,有各類工

具可以借鑒使用,例如數(shù)據(jù)版本管理方面的DVC,數(shù)據(jù)質(zhì)量方面的TFXData

Validation,Cerberus,Deequ等。

在方法論層面,《TheMLTestScore》中給出了不少數(shù)據(jù)相關(guān)的具體測(cè)

試方法,值得參考學(xué)習(xí)。

?自我考核:在項(xiàng)目中實(shí)現(xiàn)輸入數(shù)據(jù)的分布測(cè)試,特征工程測(cè)試及特征重要性準(zhǔn)

入測(cè)試。

實(shí)驗(yàn)管理:

這部分也是ML項(xiàng)目的獨(dú)特之處,在開發(fā)過程中有大量的實(shí)驗(yàn)及相應(yīng)的結(jié)

果輸出需要記錄,以指導(dǎo)后續(xù)調(diào)整優(yōu)化的方向,并選擇最優(yōu)結(jié)果來進(jìn)行上線部

署。

這方面可以參考的項(xiàng)目有MLflow,fitlog,wandb等。當(dāng)然對(duì)于單獨(dú)的

項(xiàng)目來說,可能onlineExcel就能滿足需求了:

?自我考核:在實(shí)際項(xiàng)目中實(shí)行一套標(biāo)準(zhǔn)的實(shí)驗(yàn)記錄手段,并能從中找出各類實(shí)

驗(yàn)嘗試帶來的精度提升的top5分別是哪些操作。

Serving:

目前我們的serving大多數(shù)是離線batch預(yù)計(jì)算的形式,所以主要依賴的

技術(shù)手段是各類離線inference的方法,例如直接使用modelpredict接口,

使用mmlspark等做大規(guī)模并行inference等。

如果涉及到在線serving,情況會(huì)更加復(fù)雜,例如在線pipeline的運(yùn)行,

實(shí)時(shí)特征獲取,lowlatency/highthroughput的serving服務(wù)等,可以參考

TFServing,MLeap,H20,PredictionlO,PMML/PFA/ONNX等開發(fā)標(biāo)準(zhǔn)

模型格式等。

?自我考核:部署一個(gè)實(shí)時(shí)預(yù)測(cè)服務(wù),能夠根據(jù)用戶輸入產(chǎn)生相應(yīng)的預(yù)測(cè)結(jié)果。

CI/CD:

軟件工程中的持續(xù)集成,持續(xù)部署已經(jīng)成為一種標(biāo)準(zhǔn)實(shí)踐,在算法項(xiàng)目中,

額外引入了數(shù)據(jù)這個(gè)維度的復(fù)雜性,帶來了一些新的挑戰(zhàn)。

在這個(gè)方向上,幾個(gè)主要話題包括自動(dòng)化測(cè)試,pipeline打包部署,持續(xù)

監(jiān)控運(yùn)維等,可以參考MartinFowler關(guān)于CD4ML的文章。工具系統(tǒng)層面,

可以學(xué)習(xí)傳統(tǒng)的Jenkins,也有一些新選擇例如Circled,GoCD,VerCD(Uber)

等。

?自我考核:通過Jenkins實(shí)現(xiàn)pipeline自動(dòng)測(cè)試,打包,上線流程。

系統(tǒng)監(jiān)控:

在整個(gè)項(xiàng)目上線后,需要對(duì)系統(tǒng)的各個(gè)環(huán)節(jié)進(jìn)行監(jiān)控,并對(duì)各種異常情況

作出響應(yīng)。

例如輸入數(shù)據(jù)的監(jiān)控,判別測(cè)試數(shù)據(jù)與訓(xùn)練數(shù)據(jù)的分布是否有偏移,整個(gè)

運(yùn)行pipeline的監(jiān)控,判別是否有運(yùn)行失敗拋出異常的情況,對(duì)于預(yù)測(cè)輸出

的監(jiān)控,確保沒有異常的預(yù)測(cè)輸出值,也包括對(duì)于系統(tǒng)計(jì)算資源等方面的監(jiān)控,

確保不會(huì)因?yàn)橘Y源不足導(dǎo)致業(yè)務(wù)受到影響等。

在監(jiān)控信息收集,基礎(chǔ)上,還需要配套一系列的自動(dòng)告警通知,日志追蹤

排查等。這方面的工具框架包括TFdatavalidation這類專門針對(duì)算法項(xiàng)目的

新產(chǎn)品,也有elasicsearch+kibana這類傳統(tǒng)產(chǎn)品。

自我考核斗各三個(gè)項(xiàng)目中做過的問題排查改造成常規(guī)監(jiān)控手段,支持自動(dòng)的問題發(fā)現(xiàn),

告警通知,如有可能,提供自動(dòng)化或半自動(dòng)化的問題排查解決方案。

MLOps系統(tǒng):

MLOps整體是一個(gè)比較大的話題,在這方面有很多產(chǎn)品和系統(tǒng)設(shè)計(jì)方面

的實(shí)踐可以參考學(xué)習(xí)。

例如Uber的Michelangelo系歹U文章,F(xiàn)acebook的FBLearner,neptune.ai,

dataiku,domino等,雖然沒有開源,但是其背后的很多設(shè)計(jì)理念,演進(jìn)思

考,白皮書等都非常值得我們學(xué)習(xí)。

在開源界也有很多可以參考的項(xiàng)目,例如MLflow,Kubeflow,Metaflow,

TFX等,可以學(xué)習(xí)他們的設(shè)計(jì)理念,Roadmap,以及實(shí)現(xiàn)細(xì)節(jié)等。

自我考核:總結(jié)各個(gè)MLOps產(chǎn)品的功能模塊矩陣對(duì)比,能夠根據(jù)項(xiàng)目需求來進(jìn)行產(chǎn)

品選型與使用。

工程深入方向

數(shù)據(jù)庫:

數(shù)據(jù)庫原理:

在平時(shí)工作中,我們有大量的場(chǎng)景需要用到數(shù)據(jù)庫。從客戶數(shù)據(jù)的對(duì)接,

數(shù)據(jù)集的管理和使用,到各種業(yè)務(wù)系統(tǒng)的數(shù)據(jù)表設(shè)計(jì)及優(yōu)化等,都需要對(duì)數(shù)據(jù)

庫的運(yùn)作原理,適用場(chǎng)景,運(yùn)維使用,性能優(yōu)化等方面有一定的了解。

常見的需要掌握的概念有OLTPvsOLAP,事務(wù),索引,隔離級(jí)別,ACID與

CAP理論,數(shù)據(jù)同步,數(shù)據(jù)分片,SQL語法,ORM等。

從底層原理看,會(huì)涉及到數(shù)據(jù),索引,及日志等存儲(chǔ)引擎方面,以及各種計(jì)算

查詢引擎,包括分布式系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。這方面推薦的學(xué)習(xí)資料有《數(shù)據(jù)庫

系統(tǒng)內(nèi)幕》及《數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì)》。

自我考核:能夠理解SQL執(zhí)行計(jì)劃,并能夠根據(jù)執(zhí)行計(jì)劃來做索引或查詢調(diào)優(yōu)。

關(guān)系型數(shù)據(jù)庫:

目前常用的關(guān)系型數(shù)據(jù)庫主要是MySQL和PostgreSQL,主要需要掌握

的是日常的一些SQL操作,例如DML(增刪改查),DDL(創(chuàng)建表,修改索

引等),DCL(權(quán)限相關(guān))。

在此基礎(chǔ)上還可以進(jìn)一步了解一些如數(shù)據(jù)類型,高級(jí)計(jì)算,存儲(chǔ)引擎,部

署運(yùn)維,范式概念與表結(jié)構(gòu)設(shè)計(jì)等方面的話題。對(duì)于高級(jí)話題這塊,推薦《高

性能MySQL》與《高可用MySQL》.

自我考核:在MySQL中設(shè)計(jì)相關(guān)表結(jié)構(gòu),存儲(chǔ)實(shí)際項(xiàng)目中的一系列中間數(shù)據(jù)集。

NoSQL數(shù)據(jù)庫:

常用的NoSQL數(shù)據(jù)庫有幾類,KV存儲(chǔ)(Redis),文檔數(shù)據(jù)南MongoDB),

存儲(chǔ)(以及圖數(shù)據(jù)庫(

Wide-columnCassandra,HBase)Neo4j)0

在目前我們的算法項(xiàng)目中比較有可能會(huì)用到的主要是Redis這類KV存儲(chǔ)(也

可能把Cassandra之類當(dāng)泛KV來用),或者更新一點(diǎn)的類似DeltaLake的

存儲(chǔ)系統(tǒng)。

建議學(xué)習(xí)了解一下這類KV存儲(chǔ),以及分布式數(shù)據(jù)庫的常見操作方式,以

及基礎(chǔ)的運(yùn)維排查,性能優(yōu)化方法。

自我考核:考慮一個(gè)線上模型服務(wù)的場(chǎng)景,用戶輸入作為基礎(chǔ)特征,使用類似Redis

的KV系統(tǒng),實(shí)現(xiàn)實(shí)時(shí)獲取其它特征,并進(jìn)行模型預(yù)測(cè)。

云計(jì)算

基礎(chǔ)架構(gòu):

IT系統(tǒng)總體的發(fā)展趨勢(shì)在往云計(jì)算方向演進(jìn),即使是自建的基礎(chǔ)設(shè)施,也

會(huì)采用云計(jì)算的一套構(gòu)建方式,讓開發(fā)者不用過多的關(guān)注底層計(jì)算存儲(chǔ)資源的

部署運(yùn)維。

對(duì)于應(yīng)用開發(fā)者來說,需要了解一些基礎(chǔ)架構(gòu)方面的知識(shí),例如各類虛擬

化及容器技術(shù),配置管理,容器編排等,便于在日常工作中使用相關(guān)技術(shù)來管

理和發(fā)布應(yīng)用。

從工具層面看,Docker與k8s等技術(shù)發(fā)展速度較快,主要還是根據(jù)官方

文檔來學(xué)習(xí)為主。浙大之前出版的《Docker-容器與容器云》一書中有一些

更深入的話題的探討,另外《KubemetesinAction》中也值得一讀。

從方法論層面看,《InfrastructureasCode》和《SiteReiliability

Engineering》是兩本非常不錯(cuò)的學(xué)習(xí)資料。與算法應(yīng)用結(jié)合的虛擬化,運(yùn)維,

持續(xù)集成等都是比較新的領(lǐng)域,需要我們探索出一條可行路線。

自我考核:對(duì)于已有的算法項(xiàng)目,總結(jié)制定一套開發(fā),測(cè)試,發(fā)布,運(yùn)維的標(biāo)準(zhǔn)流程,

且盡可能自動(dòng)化執(zhí)行。

分布式存儲(chǔ):

前些年最流行的分布式存儲(chǔ)是脫胎于Google經(jīng)典的GFS論文實(shí)現(xiàn)的

HDFS,不過隨著硬件技術(shù)的發(fā)展,計(jì)算存儲(chǔ)分離思想的逐漸興起,不但靈活

性更高,成本更低,且各自架構(gòu)的復(fù)雜度也大大降低了。

因此目前更建議學(xué)習(xí)簡(jiǎn)單的objectstore形式的分布式存儲(chǔ),例如s3,minio

等。在此基礎(chǔ)上的一些存儲(chǔ)系統(tǒng)例如DeltaLake提供了事務(wù)高效的upsert,

timetravel等功能,也值得關(guān)注與學(xué)習(xí)。原理方面,還是推薦《數(shù)據(jù)密集型

應(yīng)用設(shè)計(jì)》這本。

自我考核:在項(xiàng)目中實(shí)現(xiàn)不同機(jī)器能夠訪問同一個(gè)S3路徑的文件,并進(jìn)行正常的數(shù)

據(jù)讀寫,模型文件讀寫等功能。

分布式計(jì)算:

大數(shù)據(jù)時(shí)代的分布式計(jì)算的鼻祖來自于Google經(jīng)典的MapReduce論文,

后續(xù)在Hadoop系統(tǒng)中做了開源實(shí)現(xiàn),在前幾年是非?;馃岬囊豁?xiàng)技術(shù)。

目前業(yè)界的主流是Spark和Flink,前者在批處理計(jì)算中處于霸者地位,后者

是流處理領(lǐng)域的領(lǐng)先者。目前我們的業(yè)務(wù)應(yīng)用中,Spark是比較常用的分布式

計(jì)算引擎,其基本操作相關(guān)內(nèi)容比較簡(jiǎn)單,參考官方文檔或者《Spark快速大

數(shù)據(jù)分析》即可。

后續(xù)的主要難點(diǎn)會(huì)有大數(shù)據(jù)量下的問題排查與性能調(diào)優(yōu),執(zhí)行復(fù)雜計(jì)算或

與Python相關(guān)UDF的交互配合方式等。這方面需要對(duì)Spark的系統(tǒng)架構(gòu),

內(nèi)部原理有一定了解,例如master,worker,driver,executor等之間的關(guān)

系,lazyevaluation,DAG的lineage與stage概念,shuffle優(yōu)化,wholestage

codegen等技術(shù)細(xì)節(jié)。

這方面暫時(shí)沒有找到比較好的資料,主要還是依賴實(shí)際問題解決的經(jīng)驗(yàn)積累。

?自我考核:用Spark來實(shí)現(xiàn)項(xiàng)目中的特征工程,并在一定數(shù)據(jù)量情況下取得比單機(jī)

Pandas更好的性能效果。

其它話題:

其它云服務(wù)基礎(chǔ)設(shè)施還包括分布式數(shù)據(jù)庫,消息隊(duì)列,zk/raft分布式協(xié)

作系統(tǒng),虛擬網(wǎng)絡(luò),負(fù)載均衡等。這些話題離算法應(yīng)用方面會(huì)比較遠(yuǎn)一些,基

本上達(dá)到遇到需求時(shí)會(huì)使用的能力即可,在這里不做展開。

算法深入方向

AutoML:

超參優(yōu)化:

自動(dòng)化機(jī)器學(xué)習(xí)中比較傳統(tǒng)的一塊是超參數(shù)優(yōu)化,進(jìn)而可以推廣到整個(gè)

pipeline的超參優(yōu)化,包括數(shù)據(jù)預(yù)處理,特征工程,特征選擇,模型選擇,模

型調(diào)優(yōu),后處理等部分。

目前業(yè)界應(yīng)用比較廣泛的技術(shù)手段主要是隨機(jī)搜索,貝葉斯優(yōu)化,進(jìn)化算

法,Hyperband/BOHB等,在特征工程方面有Featuretools,tsfresh,

AutoCrossing等自動(dòng)化特征工程工具。

學(xué)術(shù)界有一些進(jìn)一步的探索研究包括multi-fidelity優(yōu)化多任務(wù)優(yōu)化,

HPO結(jié)合ensemblelearning,pipelineplanning,datadiff自動(dòng)數(shù)據(jù)分布

探測(cè)等方面??梢詤⒖糰utoml.org上的各類參考資料與書籍進(jìn)行學(xué)習(xí)了解。

主要難點(diǎn)包括automl算法的泛化能力,scalability,整體pipeline組合的搜

索與生成,針對(duì)不同學(xué)習(xí)算法的自動(dòng)優(yōu)化手段等。

自我考核:了解超參優(yōu)化的基礎(chǔ)概念,能夠在項(xiàng)目中應(yīng)用框架工具來實(shí)現(xiàn)模型超參的

貝葉斯優(yōu)化流程。

元學(xué)習(xí):

Metalearning是近年來非?;钴S的一個(gè)新興領(lǐng)域,其主要思路是希望能

通過元學(xué)習(xí)模型方法,去積累建模調(diào)優(yōu)的先驗(yàn)知識(shí),跨任務(wù)推斷模型效果并

warmstart新的訓(xùn)練任務(wù),或者指導(dǎo)學(xué)習(xí)算法來進(jìn)行更高效的具體任

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論