初級:可以在一些指導和協助下獨立完成開發任務。具體到演算法方面,需要你對於工具框架,建模技術,業務特性等方面有一定的瞭解,可以獨立實現一些演算法專案上的需求。
中級:可以基本獨立完成一個專案的開發與交付。在初級工程師的基礎上,對於深入瞭解技術原理的要求會更高,並且能夠應對專案中各種複雜多變的挑戰,對於已有技術和工具進行改造適配。在整體工程化交付方面,對於程式碼質量,架構設計,甚至專案管理方面的要求會開始顯現。另外從業務出發來評估技術選型和方案也變得尤為重要。
高階:可以獨立負責一條產品線的運作。在中級工程師的基礎上,需要更廣闊的技術視野與開拓創新能力,定義整個產品線的前進方向。解決問題已經不是關鍵,更重要的是提出和定義問題,能夠打造出在業界具有領先性和差異性的產品,為公司創造更大的價值。
學習掌握 Python 的基本語法,可以透過各類入門教程來看,個人推薦《Learn Python the Hard Way》。
自我考核:能夠讀懂大多數的內部專案及一些開源專案程式碼的基本模組,例如 pandas, sklearn 等。
學習 Python 的程式設計風格,建議學習觀遠內部的 Python 程式碼規範。
自我考核:編寫的程式碼符合編碼規範,能夠透過各類 lint 檢查。
Python 進階,這方面有一本非常著名的書《Fluent Python》,深入介紹了 Python 內部的很多工作原理,讀完之後對於各類疑難問題的理解排查,以及語言高階特性的應用方面會很有幫助。另外動態語言超程式設計這塊,《Ruby 超程式設計》也是一本非常值得推薦的書。
自我考核:能夠讀懂一些複雜的 Python 專案,例如 sqlalchemy 中就大量使用了超程式設計技巧。在實際工程專案中,能夠找到一些應用高階技巧的點進行實踐,例如基於 Cython 的效能最佳化等。
領域應用,Python 的應用相當廣泛,在各個領域深入下去都有很多可以學習的內容,比如 Web 開發,爬蟲,運維工具,資料處理,機器學習等。這塊主要就看大家各自的興趣來做自由選擇了,個人推薦熟悉瞭解一下 Python web 開發,測試開發相關的內容,開拓視野。
自我考核:以 Web 開發和測試開發為例,嘗試寫一個簡單的 model serving http 服務,並編寫相應的自動化測試。
學習掌握 Scala 的基本語法,開發環境配置,專案編譯執行等基礎知識。這裡推薦 Coursera 上 Martin Odersky 的課程,《快學 Scala》或《Programming in Scala》兩本書也可以搭配著瀏覽參考。
自我考核:能使用 Scala 來實現一些簡單演算法問題,例如 DFS/BFS。或者使用 Scala 來處理一些日常資料工作,例如讀取日誌檔案,提取一些關鍵資訊等。
學習使用 Scala 來開發 Spark 應用,推薦 edX 上的《Big Data Analytics Using Spark》或者 Coursera 上的《Big Data Analytics with Scala and Spark》,另外有些相關書籍也可以參考,比如《Spark 快速大資料分析》等。
自我考核:能夠使用 Spark 的 Scala API 來進行大規模的資料分析及處理,完成 lag feature 之類的特徵工程處理。
JVM 的原理學習,Scala/Java 都是 JVM 上執行的優秀語言,其背後是一個非常大的生態,包括在 Web,Android,資料基礎架構等方面有廣泛的應用。JVM 相比 Python 虛擬機器,發展更加成熟,有一套非常完善的 JDK 工具鏈及衍生的各類專案,便於開發者 debug,調優應用。這方面推薦學習周志明的《深入理解 Java 虛擬機器》。
自我考核:理解 JVM GC 原理,能透過 JDK 中相關工具或者優秀的第三方工具如 arthas 等,排查分析 Spark 資料應用的資源使用情況,GC profiling,hot method profiling 等,進而進行引數最佳化。
計算機語言理論。Programming Language 作為電腦科學的一個重要分支,包含了很多值得深入研究的主題,例如型別論,程式分析,泛型,超程式設計,DSL,編譯原理等。這方面的很多話題,在機器學習方面也有很多實際應用,比如 TVM 這類工作,涉及到大量編譯原理的應用,知乎大佬 “藍色” 也作為這個領域的專家在從事深度學習框架相關的工作。llvm, clang 作者 Chris Lattner 也加入 Google 主導了 Swift for Tensorflow 等工作。Scala 作為一門學術範非常強的語言,擁有極佳的 FP,超程式設計等能力支援,強大的型別系統包括自動推理,泛型等等高階語言特性,相對來說是一門非常 “值得” 學習的新語言,也是一個進入 PL 領域深入學習的 "gateway drug" :) 對這個方面有興趣的同學,可以考慮閱讀《Scala 函數語言程式設計》,《冒號課堂》,以及 Coursera 上《Programming Languages》也是一門非常好的課程。另外只想做科普級瞭解的同學,也可以讀一讀著名的《駭客與畫家》感受一下。
自我考核:能夠讀懂 LightGBM 裡對於 tweedie loss 的相關定義程式碼。
自我考核:能夠基本明確執行一個模型訓練任務過程中,底層使用到的硬體,作業系統元件,及其互動運作的方式是如何的。
自我考核:開發一個 shell 小工具,實現一些日常工作需求,例如定時自動清理資料資料夾中超過一定年齡的資料檔案,自動清理記憶體佔用較大且執行時間較久的 jupyter notebook 程式等。
自我考核:能夠分析定位出 LightGBM 訓練過程中的效能瓶頸,精確到函式呼叫甚至程式碼行號的級別。
自我考核:能夠設計相關的資料結構,實現一個類似 airflow 中點選任意節點向後執行的功能。
自我考核:審視自己寫的專案程式碼,能發現並修正至少三處不符合最佳編碼實踐的問題。
自我考核:在專案中,找到一處可以應用設計模式的地方,進行重構改進。
自我考核:在專案中,實現基礎的資料輸入測試,預測輸出測試。
自我考核:在某個負責專案中運用專案管理方法,完成一個實際的需求評估,專案規劃,設計與評審,開發執行,專案上線,監控維護流程,並對整個過程做覆盤總結。
自我考核:設計一個演算法專案 Docker 映象自動打包系統。
自我考核:理解實際專案中的資料分佈情況,並使用統計建模手段,推斷預測值的置信區間。
自我考核:對內溝通方面,能使用視覺化技術,分析模型的 bad case 情況,並確定最佳化改進方向。對外溝通方面,能獨立完成專案的資料分析溝通報告。
從分析出髮指導調優更有方向性,而不是憑經驗加個特徵,改個引數碰運氣。哪怕是業務方提供的資訊,也最好是有資料分析為前提再做嘗試,而不是當成一個既定事實。
由分析發現的根源問題,對於結果驗證也更有幫助。尤其在預測的資料量極大情況下,加一個單一特徵很可能總體只有千分位準確率的提升,無法確定是天然波動還是真實的提升。但如果有分析的前提,那麼我們可以有針對性的看對於這個已知問題,我們的調優策略是否生效,而不是隻看一個總體準確率。
對於問題的徹底排查解決也更有幫助,有時候結果沒有提升,不一定是特徵沒用,也可能是特徵程式碼有 bug 之類的問題。帶著資料分析的目標去看為什麼這個特徵沒有效果,是模型沒學到還是特徵沒有區分度等,有沒有改進方案,對於我們評判調優嘗試是否成功的原因也更能徹查到底。
資料分析會幫助我們發現一些額外的問題點,比如銷量資料清洗處理是不是有問題,是不是業務本身有異常,需要剔除資料等。
自我考核:在專案中形成一套可以重複使用的誤差分析方案,能夠快速從預測輸出中定位到目前模型最重要的誤差類別,並一定程度上尋找到根本原因。
自我考核:結合實際業務和機器學習理論知識,挖掘專案中演算法表現不夠好的問題,並透過演算法改造進行提升或解決。
自我考核:能夠在實際專案中,使用深度學習模型,達到接近甚至超過傳統 GBDT 模型的精確度效果,或者透過 ensemble,embedding 特徵方式,提升已有模型的精度。
自我考核:在專案中復現一個 Kaggle 獲勝方案,檢驗其效果,分析模型表現背後的原因,並嘗試進行改進。
自我考核:在已有專案中,能把至少三個使用 apply 方法的 pandas 處理修改成向量化執行,並測試效能提升。使用 window function 或其它方案來實現 lag 特徵,減少 join 次數。
通用機器學習:scikit-learn,Spark ML,LightGBM
通用深度學習:Keras/TensorFlow,PyTorch
特徵工程:tsfresh, Featuretools,Feast
AutoML:hyperopt,SMAC3,nni,autogluon
可解釋機器學習:shap,aix360,eli5,interpret
異常檢測:pyod,egads
視覺化:pyecharts,seaborn
資料質量:cerberus,pandas_profiling,Deequ
時間序列:fbprophet,sktime,pyts
大規模機器學習:Horovod,BigDL,mmlspark
Pipeline:MLflow, metaflow,KubeFlow,Hopsworks
自我考核:在 LightGBM 框架下,實現一個自定義的損失函式,並跑通訓練與預測流程。
自我考核:實現一個簡單的 model serving http 服務。
自我考核:能夠在多機上進行億級資料的 GBDT 模型訓練與預測。
自我考核:能夠透過 LLVM JIT 來最佳化實現 Spark window function 的執行效能。
自我考核:在典型的銷量預測場景中實現增量訓練與預測。
自我考核:使用 Airflow 完成一個標準的專案 pipeline 搭建與執行。
自我考核:在專案中實現輸入資料的分佈測試,特徵工程測試及特徵重要性准入測試。
自我考核:在實際專案中實行一套標準的實驗記錄手段,並能從中找出各類實驗嘗試帶來的精度提升的 top 5 分別是哪些操作。
自我考核:部署一個實時預測服務,能夠根據使用者輸入產生相應的預測結果。
自我考核:透過 Jenkins 實現 pipeline 自動測試,打包,上線流程。
自我考核:將三個專案中做過的問題排查改造成常規監控手段,支援自動的問題發現,告警通知,如有可能,提供自動化或半自動化的問題排查解決方案。
自我考核:總結各個 MLOps 產品的功能模組矩陣對比,能夠根據專案需求來進行產品選型與使用。
自我考核:能夠理解 SQL 執行計劃,並能夠根據執行計劃來做索引或查詢調優。
自我考核:在 MySQL 中設計相關表結構,儲存實際專案中的一系列中間資料集。
自我考核:考慮一個線上模型服務的場景,使用者輸入作為基礎特徵,使用類似 Redis 的 KV 系統,實現實時獲取其它特徵,並進行模型預測。
自我考核:對於已有的演算法專案,總結制定一套開發,測試,釋出,運維的標準流程,且儘可能自動化執行。
自我考核:在專案中實現不同機器能夠訪問同一個 s3 路徑的檔案,並進行正常的資料讀寫,模型檔案讀寫等功能。
自我考核:用 Spark 來實現專案中的特徵工程,並在一定資料量情況下取得比單機 Pandas 更好的效能效果。
自我考核:瞭解超參最佳化的基礎概念,能夠在專案中應用框架工具來實現模型超參的貝葉斯最佳化流程。
自我考核:設計一系列 meta feature 與 meta learning 手段,實現對新任務的引數選擇的初始化。
自我考核:使用一種 AutoML 系統來進行專案的模型自動最佳化,並與手工最佳化的結果進行比較,看是否有所提升,及尋找背後的原因。
自我考核:理解 LIME,Shapley 的運作原理,並分析其侷限性,嘗試提出改進方案。
自我考核:使用 shap,eli5 等工具來進行模型解釋,並在此基礎上形成面向開發者的模型 debug,誤差分析及改進方案,或形成面向業務的 what-if 分析看板。