<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Full Stack Deep Learning:解構(gòu)深度學(xué)習(xí)項(xiàng)目落地過程的各個(gè)方面

          共 12814字,需瀏覽 26分鐘

           ·

          2020-09-11 22:43

          ↑ 點(diǎn)擊藍(lán)字?關(guān)注極市平臺(tái)

          作者丨字節(jié)@知乎
          來源丨h(huán)ttps://zhuanlan.zhihu.com/p/218468169
          編輯丨極市平臺(tái)

          極市導(dǎo)讀

          ?

          倘若你想了解深度學(xué)習(xí)項(xiàng)目的落地過程,這門來自Berkeley的課程 Full Stack Deep Learning 將非常適合你。它介紹了團(tuán)隊(duì)組織、框架工具、數(shù)據(jù)管理、測(cè)試上線等多個(gè)方面的內(nèi)容,并提供了大量進(jìn)階學(xué)習(xí)資源。


          最近看了這個(gè)非常不錯(cuò)的來自Berkeley的課程Full Stack Deep Learning,介紹了實(shí)際深度學(xué)習(xí)項(xiàng)目落地過程中的各個(gè)方面,包括項(xiàng)目設(shè)定、團(tuán)隊(duì)組織、框架工具、數(shù)據(jù)管理、開發(fā)調(diào)優(yōu)實(shí)踐、測(cè)試與生產(chǎn)上線等。

          這方面其它的經(jīng)典包括Google的兩篇paper:Hidden Technical Debt in Machine Learning Systems和The ML Test Score,Rules of Machine Learning,Andrew Ng的Machine Learning Yearning,Martin Fowler的CD4ML,以及Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow,Building Machine Learning Powered Applications,Building Machine Learning Pipelines 等優(yōu)秀書籍。

          下面是這個(gè)課程的一些簡(jiǎn)單筆記。

          Setting up Machine Learning Projects

          Overview

          Pieter Abbeel說,深度學(xué)習(xí)更像是一門藝術(shù),而不是科學(xué)。雖然目前深度學(xué)習(xí)很多方面缺乏堅(jiān)實(shí)的理論支撐,但并不妨礙在各個(gè)業(yè)務(wù)領(lǐng)域深度學(xué)習(xí)的應(yīng)用蓬勃發(fā)展。所以在探究深度學(xué)習(xí)理論原理的同時(shí),我們同樣可以在工程化的方向探索算法應(yīng)用如何借鑒軟件工程的思想,使得其應(yīng)用落地有跡可循,逐漸形成一系列的規(guī)范和最佳實(shí)踐。

          算法項(xiàng)目很多還是沒有脫離研究性質(zhì),有數(shù)據(jù)表明,85%的AI項(xiàng)目會(huì)失敗。有各種可能原因:

          • 技術(shù)可行性:基于數(shù)據(jù)統(tǒng)計(jì)學(xué)習(xí)構(gòu)建的模型,在實(shí)際使用中有很多限制。
          • 項(xiàng)目范圍:對(duì)于AI技術(shù)有過高的期望,容易導(dǎo)致項(xiàng)目需求設(shè)定方面失去控制,最終難以達(dá)成。
          • 目標(biāo)定義:對(duì)于是否成功交付的定義不明確,或者定義的目標(biāo)與實(shí)際業(yè)務(wù)沒有很好的掛鉤。
          • 從實(shí)驗(yàn)室到生產(chǎn)環(huán)境:機(jī)器學(xué)習(xí)建模過程偏研究性質(zhì),沒有為實(shí)際業(yè)務(wù)落地做足夠的準(zhǔn)備。
          • 組織變革:在技術(shù)和產(chǎn)品層面外,對(duì)于流程,組織都有一定要求,執(zhí)行推進(jìn)難度較大。

          Lifecycle

          整個(gè)機(jī)器學(xué)習(xí)的項(xiàng)目基本流程大家應(yīng)該都很熟悉,值得注意的是這個(gè)流程并不是線性關(guān)系,會(huì)反復(fù)迭代跳轉(zhuǎn)。所以遇到問題時(shí)不要把自己的思維局限在當(dāng)前這個(gè)點(diǎn)上,要把目光放到整個(gè)項(xiàng)目流程上來尋找機(jī)會(huì)點(diǎn)。

          • 計(jì)劃立項(xiàng):明確需求和目標(biāo),項(xiàng)目資源的準(zhǔn)備,項(xiàng)目排期等

          • 數(shù)據(jù)收集:數(shù)據(jù)系統(tǒng)和流程的梳理,訓(xùn)練數(shù)據(jù)的收集,數(shù)據(jù)質(zhì)量監(jiān)控

          • 發(fā)現(xiàn)數(shù)據(jù)太難獲取,或者有更容易收集的其它數(shù)據(jù),需要回到立項(xiàng)階段重新評(píng)估
          • 建模與調(diào)優(yōu):構(gòu)建baseline模型,嘗試使用SoTA模型,debug模型并迭代優(yōu)化

          • 優(yōu)化過程中發(fā)現(xiàn)數(shù)據(jù)質(zhì)量不足,數(shù)據(jù)量不夠,都需要回到數(shù)據(jù)收集階段優(yōu)化
            任務(wù)難度過大,或者項(xiàng)目目標(biāo)之間相互制約,需要回到計(jì)劃立項(xiàng)步驟重新權(quán)衡
          • 測(cè)試與部署:內(nèi)部/小范圍試點(diǎn),添加各類測(cè)試,監(jiān)控,部署上線,應(yīng)用推廣

          • 實(shí)驗(yàn)室pilot時(shí)發(fā)現(xiàn)模型效果不達(dá)標(biāo),需要回到訓(xùn)練調(diào)優(yōu)階段
            訓(xùn)練數(shù)據(jù)與實(shí)際上線數(shù)據(jù)的不一致,或情況更復(fù)雜,需要回到數(shù)據(jù)收集階段進(jìn)一步優(yōu)化
            優(yōu)化目標(biāo)與最終業(yè)務(wù)價(jià)值有出入,或者現(xiàn)實(shí)情況下的結(jié)果沒有達(dá)到既定目標(biāo),需要重新評(píng)估項(xiàng)目

          另外還有跨項(xiàng)目的基礎(chǔ)架構(gòu),包括團(tuán)隊(duì)和組織,支持框架和工具(后續(xù)會(huì)介紹)。

          Prioritizing

          考慮項(xiàng)目影響力和可行性兩個(gè)維度。

          項(xiàng)目影響力方面,參考《AI極簡(jiǎn)經(jīng)濟(jì)學(xué)》及Karpathy的一些觀點(diǎn):

          尋找能通過低成本的預(yù)測(cè)/自動(dòng)化能力,對(duì)整個(gè)復(fù)雜業(yè)務(wù)流程帶來較大的價(jià)值的環(huán)節(jié)。
          Software 2.0,從先前指定規(guī)則和具體流程,到指定目標(biāo),讓算法從數(shù)據(jù)中自動(dòng)學(xué)習(xí)。尋找那些復(fù)雜的規(guī)則系統(tǒng),看是否有機(jī)會(huì)通過自動(dòng)學(xué)習(xí)來替代他們。

          可行性:

          • 問題的難度,是否有成熟的技術(shù)和方案,對(duì)算力需求等??梢詮妮敵鰪?fù)雜度,可靠性需求和泛化需求等方面來評(píng)估。
          • 準(zhǔn)確率的需求,模型給出錯(cuò)誤預(yù)測(cè)的代價(jià)有多高,預(yù)測(cè)準(zhǔn)確率對(duì)系統(tǒng)可用性影響有多大。準(zhǔn)確率越高,需要投入的調(diào)優(yōu)精力會(huì)越大,例如對(duì)rare case數(shù)據(jù)的需求。
          • 數(shù)據(jù)的可用性,獲取數(shù)據(jù)的難度,數(shù)據(jù)量的需求,數(shù)據(jù)標(biāo)簽是否容易獲得。一般也是可行性方面最大的障礙。

          Archetypes

          在公司的各種業(yè)務(wù)場(chǎng)景中,如何找到適合使用機(jī)器學(xué)習(xí)來提效的機(jī)會(huì)點(diǎn)并構(gòu)建原型嘗試呢?有如下幾種模式可以參考:

          • 現(xiàn)有流程的效果提升,例如從規(guī)則推薦,到模型推薦系統(tǒng)

            • 模型是否能提升目前的效果
            • 效果提升是否產(chǎn)生業(yè)務(wù)價(jià)值
            • 是否能形成“數(shù)據(jù)飛輪”
          • 人工流程的增強(qiáng)智能輔助,例如Email的自動(dòng)補(bǔ)全功能

            • 智能系統(tǒng)需要達(dá)到什么程度才對(duì)人有幫助?
            • 需要多少數(shù)據(jù)量達(dá)到這個(gè)智能程度?
          • 人工流程的自動(dòng)化,例如自動(dòng)駕駛,智能客服

            • 系統(tǒng)可接受的失敗率如何?
            • 如何保證系統(tǒng)的失敗率不會(huì)超過界限?
            • 訓(xùn)練數(shù)據(jù)是否能容易獲得?

          已有流程的提升項(xiàng)目,需要提升impact,比如思考整個(gè)流程的優(yōu)化能否提升數(shù)據(jù)流的效率,不斷在這個(gè)任務(wù)上提升效果。而帶來的更多數(shù)據(jù),有機(jī)會(huì)給下游業(yè)務(wù)的優(yōu)化提升構(gòu)建更好的基礎(chǔ)。

          人工流程的增強(qiáng)輔助,可以通過更好的產(chǎn)品設(shè)計(jì)以提升整體的可行性,盡早發(fā)布good enough的版本,獲取用戶反饋。比如友好的交互方式,讓用戶自己決定是否采納,對(duì)于模型的精度需求會(huì)有所降低。

          人工流程的自動(dòng)化需要提升可行性,一方面是引入human-in-the-loop的思想,另一方面,控制項(xiàng)目scope適用范圍等。自動(dòng)駕駛方面有很多這類例子,例如需要人工關(guān)注的自動(dòng)駕駛,或者在特定環(huán)境中達(dá)到無需人類干預(yù)的狀態(tài)。

          Metrics

          對(duì)于算法來說,有一個(gè)唯一的可量化的優(yōu)化指標(biāo)是非常重要的。但現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景中的需求往往有多個(gè)優(yōu)化目標(biāo),需要一些方法來綜合這些指標(biāo)由模型來進(jìn)行優(yōu)化。

          • 簡(jiǎn)單的指標(biāo)加權(quán)平均。
          • 把對(duì)模型輸出敏感度不高,或者較容易達(dá)到預(yù)期的指標(biāo),設(shè)置為threshold形式。
          • 根據(jù)實(shí)際業(yè)務(wù)來設(shè)計(jì)更復(fù)雜的優(yōu)化指標(biāo),例如M5 competition里的復(fù)雜多層級(jí)指標(biāo)的加權(quán)。

          需要不時(shí)的評(píng)估你的metrics,達(dá)成情況,與實(shí)際業(yè)務(wù)的聯(lián)系程度等,并根據(jù)實(shí)際情況來做出調(diào)整。

          Baselines

          模型基線的選擇很重要,可以幫助評(píng)估項(xiàng)目可行性和目標(biāo)設(shè)置。一般有兩種構(gòu)建baseline的方式:

          • 外部基線:業(yè)務(wù)需求,公開研究的成果等
          • 內(nèi)部基線:使用規(guī)則或簡(jiǎn)單模型,目前業(yè)務(wù)中的人工水平

          Infrastructure and Tooling

          Overview

          算法應(yīng)用的理想狀態(tài)是,提供更多數(shù)據(jù),然后系統(tǒng)自動(dòng)訓(xùn)練提升模型效果。但實(shí)際上需要引入的系統(tǒng)組件和工具非常多,需要把各個(gè)環(huán)節(jié)的infra基礎(chǔ)打好,后續(xù)才有可能實(shí)現(xiàn)更高效率的一體化自動(dòng)化系統(tǒng)。

          Software Engineering

          語(yǔ)言選擇,基本沒有異議,Python。

          IDE支持,VS Code和PyCharm都不錯(cuò),個(gè)人更喜歡后者。兩者都支持遠(yuǎn)程執(zhí)行和debug,很實(shí)用的功能。

          Linters and Type Hints,Python還是挺需要各類代碼檢查和類型提示的支持的,可以預(yù)防很多問題,提升開發(fā)效率。

          Jupyter Notebook,比較適合探索開發(fā)。Netflix把整個(gè)數(shù)據(jù)科學(xué)流程構(gòu)建在notebook之上,做了很復(fù)雜的二次開發(fā),作者覺得不值得。我個(gè)人一般也是notebook的draft后續(xù)會(huì)在IDE中重新組織編寫。Notebook原生的一些缺點(diǎn)有,難以版本管理,缺乏IDE支持,難以測(cè)試,執(zhí)行順序混亂,長(zhǎng)時(shí)間運(yùn)行任務(wù)支持差等。

          Streamlit,一個(gè)快速構(gòu)建data app的工具,個(gè)人沒有用過。

          Computing and GPUs

          深度學(xué)習(xí)領(lǐng)域有很多進(jìn)展都得益于強(qiáng)大的計(jì)算能力,當(dāng)然除了“暴力美學(xué)”,如何利用少量資源來達(dá)到同樣的效果也是非常值得投入研究的。

          GPU方面基本上也是沒有懸念,選NVIDIA。具體購(gòu)買建議方面,V100是目前server端最強(qiáng)大的選擇。Consumer card其實(shí)性價(jià)比很高,如1080Ti, 2080Ti等。Kepler,Maxwell架構(gòu)太老了,不建議選購(gòu)。

          云服務(wù)方面建議選購(gòu)AWS或GCP,作者還黑了下Azure……另外Paperspace和Lambda Labs等也可以考慮。如果架構(gòu)設(shè)計(jì)上允許,spot instance會(huì)便宜很多。

          目前最劃算的還是自己買GPU機(jī)器。從成本分析來看,5-10周的使用量以上,就是自建的成本更低了。云服務(wù)的優(yōu)勢(shì)主要在可擴(kuò)展性,運(yùn)維成本更低等。

          Resource Management

          需求:多個(gè)用戶,使用多臺(tái)機(jī)器,來運(yùn)行各自的workload。

          最簡(jiǎn)單的解決方案,使用各類電子表格來登記管理。

          用軟件管理的方式,如SLURM Workload Mananger。

          現(xiàn)在比較流行的方案,用Docker + Kubernetes來管理環(huán)境和集群資源。以及在此基礎(chǔ)上提供更完善功能的Kubeflow,Polyaxon等。

          Frameworks and Distributed Training

          除非有特殊的理由,否則建議使用TensorFlow或PyTorch。這兩者的很多功能特性也在逐漸趨于一致,例如TF 2.0里把eager execution設(shè)置為默認(rèn)模式,使其更易于交互式開發(fā)。而PyTorch中也利用TorchScript增加對(duì)生產(chǎn)環(huán)境部署的支持度。另外fast.ai庫(kù)也非常值得一試。目前研究領(lǐng)域PyTorch更火,工業(yè)界TensorFlow/Keras應(yīng)用更多一些。

          數(shù)據(jù)并行化是目前實(shí)踐中更常用的做法。模型并行更加復(fù)雜,只有單模型無法在單卡上保存時(shí)才會(huì)考慮。盡可能利用更多RAM的GPU來避免這種情況。

          分布式訓(xùn)練可以考慮的一些庫(kù):Ray,Horovod等。

          Experiment Management

          知乎上Deep Learning效率神器問題下,很多回答都提到實(shí)驗(yàn)管理方面的工具。

          這里提到的一些工具:Spreadsheet,TensorBoard,Losswise,Comet.ml,Weights and Biases,MLflow。

          Hyperparameter Tuning

          前面AutoML的文章里有提到很多具體的原理和技術(shù)。

          這里提到的一些工具:Hyperopt(Hyperas),SigOpt,Ray Tune,Weights and Biases。

          All-in-one Solutions

          組合了上面提到的一系列的功能點(diǎn)的全功能軟件平臺(tái),提供包括模型開發(fā),分布式訓(xùn)練,實(shí)驗(yàn)記錄,模型版本,模型發(fā)布,模型監(jiān)控等功能的一站式服務(wù)。

          舉例:FBLearner Flow,Michelangelo,TFX,Amazon SageMaker,Neptune,F(xiàn)loydHub,Paperspace,Determined AI,Domino Data Lab(進(jìn)入了Gartner DSML魔力四象限)。

          Data Management

          Overview

          數(shù)據(jù)太重要了,為什么叫Data Scientist而不是Model Scientist是有原因的 :)

          業(yè)界對(duì)這方面的重視也在快速提升,因?yàn)閷?shí)際工作中對(duì)于數(shù)據(jù)方面能做的空間和回報(bào)都非常大。研究領(lǐng)域受到benchmark等因素影響,往往只能使用相對(duì)固定的數(shù)據(jù)集來做模型方面的工作。

          Sources

          大多數(shù)的深度學(xué)習(xí)應(yīng)用都需要大量的訓(xùn)練數(shù)據(jù)。

          可以使用公開數(shù)據(jù)集作為開始,然后通過產(chǎn)品構(gòu)建起data flywheel。

          半監(jiān)督學(xué)習(xí)也是近期熱門方向,可以減輕給數(shù)據(jù)打標(biāo)的人工開銷。

          數(shù)據(jù)增強(qiáng)在CV領(lǐng)域是一個(gè)非常普遍應(yīng)用的技術(shù),其它領(lǐng)域的應(yīng)用會(huì)困難些。對(duì)于表格數(shù)據(jù),可以隨機(jī)刪除一些cell來形成更多的數(shù)據(jù)。自然語(yǔ)言處理方面也有一些類似嘗試,例如替換近義詞,改變?cè)~語(yǔ)順序等。總體思路還是把一些領(lǐng)域知識(shí)通過變換,或者噪音的方式進(jìn)行添加,使得模型更加穩(wěn)定和通用。

          生成數(shù)據(jù),CV領(lǐng)域的應(yīng)用比較多一些,比如可以在仿真場(chǎng)景中訓(xùn)練自動(dòng)駕駛系統(tǒng)。

          Labeling

          數(shù)據(jù)打標(biāo)方面,需要使用打標(biāo)工具,制定相應(yīng)規(guī)則來讓打標(biāo)人員來正確高效的進(jìn)行數(shù)據(jù)標(biāo)記。相比使用公司內(nèi)部人力,crowdsourcing和外包是更常見的方式。其中比較關(guān)鍵的是需要先自己做一些打標(biāo)工作,了解其中的復(fù)雜度,設(shè)計(jì)好規(guī)范和質(zhì)量檢查點(diǎn)。

          打標(biāo)服務(wù)公司:FigureEight,Scale.ai

          打標(biāo)軟件舉例:Hive,Prodigy等。除了用戶交互的便利性,還可以使用active learning等技術(shù)來提高效率。

          Storage

          數(shù)據(jù)存儲(chǔ)的各種形式:文件系統(tǒng),對(duì)象存儲(chǔ),數(shù)據(jù)庫(kù),data lake等。

          Binary data一般會(huì)以object store形式存儲(chǔ)。

          系統(tǒng)元數(shù)據(jù)以數(shù)據(jù)庫(kù)形式存儲(chǔ)較為常見。

          非結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)在data lake中,到使用時(shí)再進(jìn)行后續(xù)處理。

          訓(xùn)練時(shí)的數(shù)據(jù)讀寫一般會(huì)在文件系統(tǒng)中進(jìn)行,提供了較為完整的POSIX API。

          對(duì)于結(jié)構(gòu)化數(shù)據(jù)的處理,SQL是最合適的方式。

          Feature store在數(shù)據(jù)存儲(chǔ)上一層進(jìn)行了一些封裝,在原始數(shù)據(jù)基礎(chǔ)上做了transformation,后續(xù)在使用時(shí)可以直接進(jìn)行調(diào)用。Uber,airbnb等實(shí)踐了這個(gè)方案,而netflix反對(duì)這個(gè)想法,業(yè)界看起來還沒有較為統(tǒng)一的認(rèn)知。

          Versioning

          Level 0: 無版本管理。

          Level 1: 用snapshot方式在訓(xùn)練時(shí)產(chǎn)生相應(yīng)的版本。

          Level 2: 使用assets和代碼混合的方式進(jìn)行版本管理。大致的做法就是把數(shù)據(jù)相關(guān)的元信息也在代碼里進(jìn)行管理。

          Level 3: 使用專門的管理工具來做數(shù)據(jù)版本管理,例如DVC,Pachyderm,Quill,Dolt等。

          另外Delta Lake也是一個(gè)值得關(guān)注的框架。

          Processing

          工作流的編排和運(yùn)行。最簡(jiǎn)單的做法,使用makefile,但是有很多使用限制。在這方面使用最廣泛的框架是Apache Airflow。其它有很多專注在數(shù)據(jù)科學(xué)領(lǐng)域的框架,例如MLflow,metaflow等,為算法實(shí)驗(yàn),問題排查等提供了很多功能支持。

          不要過度工程,使用簡(jiǎn)單的技術(shù)手段滿足目前的需求,當(dāng)碰到無法解決的復(fù)雜情況時(shí)再考慮引入其它工具框架。一旦引入框架,出現(xiàn)問題時(shí)不止要排查項(xiàng)目代碼,還需要排查工具框架層面的問題 :)

          Machine Learning Teams

          Overview

          管理技術(shù)團(tuán)隊(duì)有很多挑戰(zhàn),對(duì)于機(jī)器學(xué)習(xí)組織,在技術(shù)團(tuán)隊(duì)困難的基礎(chǔ)上還引入了更多的挑戰(zhàn):

          • 機(jī)器學(xué)習(xí)的人才昂貴且稀缺
          • 機(jī)器學(xué)習(xí)團(tuán)隊(duì)的角色更加多樣化
          • 機(jī)器學(xué)習(xí)項(xiàng)目往往難以制定明確的時(shí)間線,產(chǎn)出也有高度不確定性
          • 機(jī)器學(xué)習(xí)領(lǐng)域變化迅速,且更容易積累技術(shù)債
          • 作為新興方向,領(lǐng)導(dǎo)層往往不理解機(jī)器學(xué)習(xí)的運(yùn)作方式和特點(diǎn)

          Roles

          • ML產(chǎn)品經(jīng)理:制定任務(wù)優(yōu)先級(jí),推進(jìn)項(xiàng)目進(jìn)展
          • DevOps工程師:部署和運(yùn)維線上系統(tǒng)
          • 數(shù)據(jù)工程師:構(gòu)建data pipeline,數(shù)據(jù)存儲(chǔ)基礎(chǔ),相關(guān)監(jiān)控等
          • 機(jī)器學(xué)習(xí)工程師:訓(xùn)練和部署模型
          • 機(jī)器學(xué)習(xí)研究員:更面向未來的算法技術(shù)調(diào)研和前沿探索
          • 數(shù)據(jù)科學(xué)家:一個(gè)非常廣義的職位,總體來說會(huì)更偏向算法,數(shù)據(jù)分析與業(yè)務(wù)連接部分

          X軸是機(jī)器學(xué)習(xí)技術(shù)的需求,Y軸是計(jì)算機(jī)工程技術(shù)的需求,圓圈的大小表示溝通/技術(shù)協(xié)作能力的需求。

          這個(gè)session的QA部分也有很多信息量。比如構(gòu)建機(jī)器學(xué)習(xí)組織的時(shí)候,優(yōu)先從哪種類型的角色開始。各個(gè)角色的職業(yè)發(fā)展等。

          Team Structure

          • Ad-Hoc ML:沒有專職的ML工程師,以ad-hoc的方式來做一些基礎(chǔ)的機(jī)器學(xué)習(xí)應(yīng)用,很多中小型公司的做法。主要的問題是ML項(xiàng)目缺乏支持,也比較難招聘和留住相關(guān)人才。
          • ML R&D:在研發(fā)部門中融入機(jī)器學(xué)習(xí)相關(guān)職能崗位,是更大一些的能源,制造,電信行業(yè)公司的做法。主要問題,數(shù)據(jù)難以獲取,機(jī)器學(xué)習(xí)項(xiàng)目也很少實(shí)際上線產(chǎn)生價(jià)值,因此后續(xù)投入也比較少。
          • Embeded ML:在業(yè)務(wù)/產(chǎn)品部門中融入機(jī)器學(xué)習(xí)職能,大多數(shù)的軟件科技類公司,金融服務(wù)公司的做法。主要問題是比較難吸引和培養(yǎng)出top級(jí)別的人才。另外軟件工程的管理和發(fā)布節(jié)奏與機(jī)器學(xué)習(xí)項(xiàng)目的管理發(fā)布節(jié)奏容易有沖突。而且長(zhǎng)周期的項(xiàng)目難以發(fā)展。
          • Independent ML:有獨(dú)立的ML部門,直接匯報(bào)給CEO/CTO層級(jí),有一些大型的金融服務(wù)公司會(huì)使用這種做法。這種做法的問題是與業(yè)務(wù)部門的交流合作會(huì)有一些gap,需要業(yè)務(wù)方認(rèn)可和積極的合作,學(xué)習(xí)模型的使用方式,給出快速的反饋等。
          • ML-First:ML部門會(huì)專注于有挑戰(zhàn)的,長(zhǎng)周期投入的項(xiàng)目,而且在各個(gè)業(yè)務(wù)線也會(huì)有ML專家尋求算法快速落地,產(chǎn)生業(yè)務(wù)價(jià)值的機(jī)會(huì),一般超大型的科技公司或者專注于機(jī)器學(xué)習(xí)領(lǐng)域的創(chuàng)業(yè)公司會(huì)采用這種方式。主要挑戰(zhàn)是這個(gè)形式非常難達(dá)到,比如招聘足夠的人才,公司文化的轉(zhuǎn)變等。

          Design choices:

          QA里有個(gè)彩蛋,想做ML方面的話,讀數(shù)學(xué)博士還是計(jì)算機(jī)科學(xué)博士更好?講師毫不猶豫的回答:計(jì)算機(jī)科學(xué)。

          Managing Projects

          機(jī)器學(xué)習(xí)項(xiàng)目的管理太難了。

          • 事先無法評(píng)估問題的難度
          • 項(xiàng)目進(jìn)度往往是非線性的
          • Research和engineering之間的文化差異
          • 管理層對(duì)機(jī)器學(xué)習(xí)的理解有限

          上圖是一個(gè)kaggle比賽的例子,整個(gè)比賽中的效果提升大部分是在第一周達(dá)到的。

          一些解決方案。使用概率性的方式來管理項(xiàng)目,令人震驚!

          • 需要在項(xiàng)目過程中嘗試多組方案,每組方案預(yù)估成功概率,根據(jù)進(jìn)展及時(shí)調(diào)整。
          • 評(píng)估組員產(chǎn)出時(shí),根據(jù)他們的輸入,例如做了哪些嘗試,得出什么結(jié)論。而不是直接用最終結(jié)果來評(píng)估。
          • 先快速構(gòu)建起end-to-end的pipeline,再不斷迭代。Rules of ML中也強(qiáng)調(diào)了這點(diǎn)。
          • 對(duì)于管理層,需要對(duì)他們進(jìn)行機(jī)器學(xué)習(xí)項(xiàng)目不確定性的教育。

          Hiring

          作為manager,需要明確招聘目標(biāo)的畫像,必需的技能點(diǎn)等。建議招聘對(duì)機(jī)器學(xué)習(xí)有興趣的軟件工程師。

          里面還提到了不少招聘,建聯(lián)渠道,如何吸引ML人才等,例如:

          • 明確公司的愿景和產(chǎn)品的潛在影響力
          • 在工具鏈和基礎(chǔ)設(shè)施方面加大投入提升工作便捷度
          • 構(gòu)建學(xué)習(xí)型組織氛圍
          • 利用高人才密度來吸引更多的人才

          另外對(duì)于招聘面試流程,以及求職方面的指導(dǎo),session中也給出了一些建議,可供參考。

          Training and Debugging

          Overview

          模型開發(fā)優(yōu)化的過程中,80-90%的時(shí)間會(huì)花在debugging和tuning上,只有10-20%的時(shí)間在做implementation。

          模型結(jié)果的復(fù)現(xiàn)很有難度,包括確保實(shí)現(xiàn)沒有bug,超參的選擇,數(shù)據(jù)的構(gòu)建,模型是否適合對(duì)應(yīng)的數(shù)據(jù)集等挑戰(zhàn)。

          總體策略:

          Start Simple

          • 選擇從簡(jiǎn)單的網(wǎng)絡(luò)結(jié)構(gòu)開始

            • 圖像問題:LeNet/ResNet
            • 序列問題:LSTM/temporal convs
            • 其它問題:fully-connected with one hidden layer
          • 選擇常見的默認(rèn)超參

            • 優(yōu)化器:adam with lr 3e-4
            • 激活函數(shù):ReLU for MLP and conv nets,tanh for LSTM
            • 參數(shù)初始化:He init for ReLU,Glorot for tanh
            • 先不添加regularization和normalization
          • 添加input normalization

          • 簡(jiǎn)化問題

            • 用少量數(shù)據(jù)/仿真數(shù)據(jù)來實(shí)驗(yàn)
            • 使用固定數(shù)量的類別,input size等設(shè)置

          Debug

          5個(gè)最常見的bug:

          • tensor shape錯(cuò)誤
          • 輸入的預(yù)處理不正確
          • Loss function的輸入錯(cuò)誤
          • 沒有設(shè)置正確的train mode
          • 數(shù)值處理問題導(dǎo)致出現(xiàn)inf/NaN,例如不正確的exp使用, divide by zero等

          實(shí)現(xiàn)模型的3個(gè)建議:

          • 從一個(gè)輕量級(jí)的實(shí)現(xiàn)開始,一般少于200行代碼
          • 使用成熟庫(kù)中的默認(rèn)實(shí)現(xiàn),例如Keras中的自帶方法
          • 后續(xù)再實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)pipeline

          開發(fā)中的第一步,讓模型跑起來:

          • Shape mismatch或casting之類的問題,可以用ipdb, tfdb等方法來做斷點(diǎn)調(diào)試
          • Out-of-memory問題,可以逐個(gè)排除消耗內(nèi)存較大的操作來定位
          • 其它問題,Google/StackOverflow驅(qū)動(dòng)開發(fā)……

          第二步,在一個(gè)batch上過擬合:

          • Error不降反升,可能有地方符號(hào)用反了
          • Error爆炸,一般是數(shù)值處理問題,也可能是learning rate太大
          • Error震蕩,先降低learning rate,再看看是不是label跟數(shù)據(jù)沒對(duì)上,或者錯(cuò)誤的augmentation
          • Error保持在一個(gè)中間狀態(tài)不下降,可以嘗試提高learning rate,移除regularization。后續(xù)還可以檢查一下loss function的實(shí)現(xiàn),以及數(shù)據(jù)pipeline的正確性

          第三步,與已知結(jié)果比較:

          • 例如與一個(gè)官方模型實(shí)現(xiàn)進(jìn)行比較,把相同的數(shù)據(jù)集用到你實(shí)現(xiàn)的模型上
          • 也可以嘗試與非官方實(shí)現(xiàn)比較,不過很多github上的實(shí)現(xiàn)都有bug,要注意
          • 或者直接與論文中提到的準(zhǔn)確率比較
          • 最后,可以與簡(jiǎn)單的baseline比較,包括規(guī)則,簡(jiǎn)單模型等

          Slides中有更多細(xì)節(jié),感覺總結(jié)的挺好。

          Evaluate

          使用經(jīng)典的bias variance decomposition來對(duì)模型進(jìn)行評(píng)估。

          Improve

          解決under-fitting問題

          • 增加模型復(fù)雜度
          • 降低regularization
          • Error analysis
          • 使用更復(fù)雜的架構(gòu)
          • 超參調(diào)優(yōu)
          • 添加特征

          解決over-fitting問題

          • 增加訓(xùn)練數(shù)據(jù)
          • 添加normalization(當(dāng)前比regularization更流行)
          • 數(shù)據(jù)增強(qiáng)
          • 增強(qiáng)regularization
          • Error analysis
          • 使用更復(fù)雜的架構(gòu)
          • 超參調(diào)優(yōu)
          • Early-stopping
          • 特征選擇
          • 減少模型參數(shù)

          解決distribution shift問題

          • 分析test-validation error,進(jìn)而收集/生成更多訓(xùn)練數(shù)據(jù)
          • 使用domain adaptation技術(shù)

          Error analysis的時(shí)候,需要對(duì)各類錯(cuò)誤的優(yōu)先級(jí)進(jìn)行評(píng)估排序,這部分跟《Machine Learning Yearning》里內(nèi)容類似。

          最后,可以考慮rebalance數(shù)據(jù)集。例如validation集上的表現(xiàn)明顯比test集好,可能需要考慮重新選擇一下validation/test集。

          QA中提到,調(diào)優(yōu)RL算法的時(shí)候,random seed也應(yīng)該視為超參中的一部分 :)

          Tune

          不同的參數(shù)對(duì)模型效果的敏感度不同:

          • 低敏感度:optimizer,batch size,non-linearity
          • 中敏感度:參數(shù)初始化,模型深度,layer parameters,regularization
          • 高敏感度:learning rate,learning rate schedule,loss function,layer size

          參數(shù)優(yōu)化的方法:手動(dòng)調(diào)參,grid search,random search,coarse-to-fine search,貝葉斯優(yōu)化等。

          Testing and Deployment

          Project Structure

          給出了項(xiàng)目結(jié)構(gòu)中不同類型的測(cè)試,與傳統(tǒng)的測(cè)試金字塔里的分類很不一樣。

          ML Test Score

          我的專欄文章中之前也寫過這兩篇經(jīng)典的論文,最近幾年好像也沒有見到新的相關(guān)文章出來。

          CI/Testing

          單元測(cè)試,集成測(cè)試,持續(xù)集成的一些基本概念,與軟件工程中基本一致。CD4ML中有更詳細(xì)的闡述。

          一些工具介紹:CircleCI,Travis CI,Jenkins,Buildkite等。

          Docker

          簡(jiǎn)單介紹了Docker的使用場(chǎng)景,原理,使用方式等。后面簡(jiǎn)單提了下容器編排相關(guān)的工具,如kubernetes等。

          有經(jīng)驗(yàn)的同學(xué)可以直接跳過。

          Web Deployment

          一般模型預(yù)測(cè)會(huì)以RESTful API的方式對(duì)外進(jìn)行服務(wù)。幾種部署方式:

          • 在虛擬機(jī)上部署,通過添加intance來scale
          • 在container上部署,通過k8s之類的編排軟件來scale
          • 通過serverless的方式部署(AWS Lambda,Google Cloud Functions,Azure Functions),自動(dòng)擴(kuò)展,自帶負(fù)載均衡,監(jiān)控等服務(wù)
          • 通過模型服務(wù)來部署(TF Serving,Model Server for MXNet,Clipper,Seldon或其它SaaS服務(wù))

          如果使用CPU inference,一般會(huì)使用Docker部署或者serverless形式。

          如果使用GPU inference,TF Serving,Ray Serve之類的模型服務(wù)中提供adaptive batching等功能會(huì)很有用。

          Monitoring

          這一節(jié)同樣參考《The ML Test Score》。

          • Serving systems, training pipelines, and input data,這幾塊都需要監(jiān)控。出問題時(shí)發(fā)出alarm,并記錄下來方便后續(xù)調(diào)查調(diào)優(yōu)。
          • 所有可以被日志記錄的內(nèi)容,都可以被監(jiān)控,所以當(dāng)你設(shè)計(jì)info/warning/error log時(shí),同時(shí)考慮下是否要觸發(fā)監(jiān)控告警機(jī)制。
          • 數(shù)據(jù)分布監(jiān)控方面的現(xiàn)成服務(wù)或方案比較少。
          • 除了技術(shù)層面的監(jiān)控,對(duì)于業(yè)務(wù),終端用戶的監(jiān)控同樣非常重要。
          • Closing the Flywheel,一個(gè)需要思考的點(diǎn)。

          Hardware/Mobile

          在mobile上部署模型會(huì)遇到計(jì)算資源受限的問題,一般解決方法:減小模型大?。愃芃obileNet),quantizing weights,知識(shí)蒸餾(例如DistillBERT)等。

          一些工具框架介紹:TensorFlow Lite,PyTorch Mobile,CoreML,MLKit,F(xiàn)ritzAI等。ONNX可以作為中間層,再部署到各種硬件平臺(tái)上。對(duì)于嵌入式系統(tǒng),最好的解決方案是NVIDIA for Embeded。

          Research Areas

          Pieter Abbeel介紹了few-shot learning,RL,imitation learning,domain randomization,NAS,unsupervised learning等幾個(gè)方面的話題,主要還是集中在他比較擅長(zhǎng)的強(qiáng)化學(xué)習(xí)和機(jī)器人應(yīng)用領(lǐng)域。不過沒看出跟課程主題之間的特別關(guān)系,可能主要是擴(kuò)展一下大家的視野,尤其是有些問題通過了解學(xué)術(shù)領(lǐng)域的解決思路,SoTA水平等,對(duì)于解決工業(yè)界的問題也有一定借鑒意義。另一方面是建立起兩者之間的連接,讓工業(yè)界的同學(xué)也大致了解如何follow學(xué)術(shù)界的一些研究思路和最新進(jìn)展,給出了一些參考建議。

          Labs

          一共有8個(gè)lab,感興趣的同學(xué)可以跟著一起深入了解實(shí)踐一下。

          Guest Lectures

          邀請(qǐng)了十位業(yè)界大咖,例如阿里的賈揚(yáng)清大神,fast.ai的Jeremy Howard,Tesla的Andrej Karpathy等來給大家做演講。每個(gè)session在40-60分鐘,大致感受如下:
          Xavier Amatriain (Curai) 之前在Netflix,Quora工作過,分享的內(nèi)容還是相當(dāng)有趣且實(shí)用的,大多數(shù)還給了相關(guān)論文做進(jìn)一步參考,推薦一看。印象比較深的一點(diǎn)是舉了一個(gè)學(xué)術(shù)界的數(shù)據(jù)集從提出到應(yīng)用到工業(yè)界,平均要3年,而算法模型從提出到應(yīng)用到工業(yè)界,平均要18年。
          Chip Huyen (Snorkel) 主要介紹了算法面試相關(guān)的內(nèi)容,挺實(shí)在,值得一看。講座中舉了個(gè)比較有意思的數(shù)據(jù),統(tǒng)計(jì)公司on-site和offer的比例,以及candidate最后接offer的概率。
          Lukas Biewald (Weights & Biases) 作者的背景是之前FigureEight的創(chuàng)始人,講座中有不少內(nèi)容強(qiáng)調(diào)了數(shù)據(jù)的重要性,以及算法與人工結(jié)合的實(shí)踐。很多內(nèi)容在Xavier的session里也有提到。
          Jeremy Howard (fast.ai · Making neural nets uncool again) 前面重點(diǎn)介紹了augmented ML的概念,結(jié)合人類和模型的長(zhǎng)處來更好的構(gòu)建模型。后面的部分主要介紹了fast.ai庫(kù)中提供的各種高效的訓(xùn)練神經(jīng)網(wǎng)絡(luò)的手段,包括test-time augmentation,progressive resizing,1cycle,AdamW,gradient clipping等。
          Richard Socher (Salesforce) 主要介紹了decaNLP,用QA形式來統(tǒng)一多種NLP任務(wù)的benchmark框架,另外也介紹了他們的MQAN網(wǎng)絡(luò)結(jié)構(gòu)。比較適合對(duì)NLP感興趣的同學(xué)觀看學(xué)習(xí)。
          Yangqing Jia (Alibaba) 介紹了深度學(xué)習(xí)框架的發(fā)展歷史,框架特性,選擇的一些思考框架。后續(xù)擴(kuò)展到應(yīng)用層,library層,runtime, compilers, optimizers層等進(jìn)行了整體的介紹。最后總結(jié)了一些行業(yè)趨勢(shì)和思考,例如實(shí)驗(yàn)管理方面的投入,將更多的計(jì)算機(jī)科學(xué)方面的思想應(yīng)用到機(jī)器學(xué)習(xí)領(lǐng)域等。
          Andrej Karpathy (Tesla) 介紹了他的software 2.0的概念,利用數(shù)據(jù),指定目標(biāo)后,通過訓(xùn)練來生成可以執(zhí)行的程序。前半部分講了他在Tesla碰到的各種數(shù)據(jù)部分的挑戰(zhàn),后面一部分對(duì)software 2.0的IDE,github等做了一些暢想。
          Jai Ranganathan (KeepTruckin) 介紹了他在Uber時(shí)負(fù)責(zé)的COTA平臺(tái)中使用機(jī)器學(xué)習(xí)技術(shù)的end-to-end案例,包括探索,問題定義,到后面的模型開發(fā),上線,監(jiān)控等環(huán)節(jié)。跟課程內(nèi)容還挺貼近的。

          Where to go next

          提供了非常多的學(xué)習(xí)資源。學(xué)完一個(gè),todo list上 又加了10個(gè)有沒有。

          資源鏈接:https://course.fullstackdeeplearning.com/course-content/where-to-go-next


          推薦閱讀



          添加極市小助手微信(ID : cvmart2),備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測(cè)-深圳),即可申請(qǐng)加入極市目標(biāo)檢測(cè)/圖像分割/工業(yè)檢測(cè)/人臉/醫(yī)學(xué)影像/3D/SLAM/自動(dòng)駕駛/超分辨率/姿態(tài)估計(jì)/ReID/GAN/圖像增強(qiáng)/OCR/視頻理解等技術(shù)交流群:月大咖直播分享、真實(shí)項(xiàng)目需求對(duì)接、求職內(nèi)推、算法競(jìng)賽、干貨資訊匯總、與?10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動(dòng)交流~

          △長(zhǎng)按添加極市小助手

          △長(zhǎng)按關(guān)注極市平臺(tái),獲取最新CV干貨

          覺得有用麻煩給個(gè)在看啦~??


          瀏覽 69
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99高清国产 | 午夜久久精品嫖妓av一区二区三区 | 豆花视频成人版视频在线观看 | 精品色欲| 黄性视频 |