摘要:此外,與訓(xùn)練機(jī)器學(xué)習(xí)模型的作業(yè)相比,作業(yè)具有不同的執(zhí)行配置文件。此外,還制作了一個(gè)界面,以便控制機(jī)器學(xué)習(xí)的參數(shù)指定用于訓(xùn)練的數(shù)據(jù)量等。
摘要: 一份機(jī)器學(xué)習(xí)過來人的經(jīng)驗(yàn)清單分享,主要是包含一些關(guān)于構(gòu)建機(jī)器學(xué)習(xí)工作流以及Apache Spark應(yīng)該注意的一些事項(xiàng),希望這個(gè)清單能夠幫助那些正在學(xué)習(xí)機(jī)器學(xué)習(xí)的相關(guān)人員少走一些彎路,節(jié)約一些時(shí)間。
當(dāng)我們學(xué)習(xí)任何一個(gè)新的內(nèi)容或遇到新的事情時(shí),隨著時(shí)間的推移,可能回過頭來會(huì)發(fā)現(xiàn),當(dāng)時(shí)要是怎樣結(jié)果又會(huì)怎樣。身邊很多人包括我自己在讀完大學(xué)后,發(fā)現(xiàn)如果高中再努力一些或重新把大學(xué)時(shí)間利用好,人生的路途是不是能更順利些……曾經(jīng)聽一位老師說過“青春就像這樣,不管你怎樣過都會(huì)過得一團(tuán)糟”。事實(shí)上,大多數(shù)學(xué)生沒有利用好時(shí)間是由于沒有明確的方向。同理,對(duì)于新入職的員工而言,有一個(gè)師父在平時(shí)的工作中以他過來人的經(jīng)驗(yàn)引導(dǎo)一下,新員工的發(fā)展也會(huì)更順利些。那么對(duì)于學(xué)習(xí)機(jī)器學(xué)習(xí)而言,這里有一份過來人的經(jīng)驗(yàn)分享清單,希望這個(gè)清單能夠幫助那些正在學(xué)習(xí)機(jī)器學(xué)習(xí)的相關(guān)人員少走一些彎路,節(jié)約一些時(shí)間。
這份清單主要是包含一些關(guān)于構(gòu)建機(jī)器學(xué)習(xí)工作流以及Apache Spark相關(guān)的具體內(nèi)容。
預(yù)測(cè)是困難的
對(duì)于任何未知的事情,很難對(duì)其做出一個(gè)準(zhǔn)確的時(shí)間預(yù)測(cè),但我們會(huì)朝著目標(biāo)前進(jìn)。然而隨著時(shí)間的推移,在努力的過程中逐漸會(huì)出現(xiàn)錯(cuò)誤,這是由于我們無法預(yù)測(cè)采用哪種方法就能夠得出好的結(jié)果,能夠做的只有確保項(xiàng)目組可以快速地迭代更新。
項(xiàng)目有很大的未知數(shù),請(qǐng)確保團(tuán)隊(duì)能夠進(jìn)行快速迭代更新
在開始之前驗(yàn)證數(shù)據(jù)是否完整
當(dāng)開始使用機(jī)器學(xué)習(xí)管道時(shí),我們已經(jīng)收集了大約3年時(shí)間的原始數(shù)據(jù)。但沒有對(duì)原始數(shù)據(jù)做任何處理,只是將其存儲(chǔ)以防萬一。原始數(shù)據(jù)采用CSV文件形式,此時(shí)沒有注意到這些數(shù)據(jù)存在問題,另外編寫這些文件的代碼會(huì)隨著時(shí)間的推移而導(dǎo)致一些錯(cuò)誤。因此在構(gòu)建機(jī)器學(xué)習(xí)管道的同時(shí),還需要修復(fù)造成錯(cuò)誤的數(shù)據(jù)問題,最終在Apache Spark中編寫相關(guān)的代碼來清理歷史數(shù)據(jù)。在進(jìn)行到中間時(shí)刻才發(fā)現(xiàn)問題,而不是在最初,這無疑增加了項(xiàng)目的難度。
**在開展工作之前,請(qǐng)確保數(shù)據(jù)正確
對(duì)數(shù)據(jù)進(jìn)行一次預(yù)處理,對(duì)構(gòu)建模型進(jìn)行一百萬次訓(xùn)練
在最初訓(xùn)練機(jī)器學(xué)習(xí)模型時(shí),我們嘗試加載所有的數(shù)據(jù)。而采用的數(shù)據(jù)大小是TB級(jí)別,如果每次訓(xùn)練都加載所有數(shù)據(jù)會(huì)導(dǎo)致訓(xùn)練速度很慢。因此,每次訓(xùn)練時(shí)不需要加載所有的數(shù)據(jù),可以對(duì)其做一些預(yù)處理,創(chuàng)建一個(gè)新的小數(shù)據(jù)集。此外,并沒有刪掉原始數(shù)據(jù)集,將其作為備份以防后續(xù)過程中出現(xiàn)新的錯(cuò)誤。
不要將ETL和模型訓(xùn)練混淆。如果你正在訓(xùn)練1000個(gè)模型且不想執(zhí)行1000次預(yù)處理,可以只做一次預(yù)處理并保存,然后將其用于所有的模型訓(xùn)練需求。
為不同的團(tuán)隊(duì)成員提供輕易的訪問途徑
在上文說過,我們將原始數(shù)據(jù)存儲(chǔ)在AWS S3中備份。當(dāng)開始使用機(jī)器學(xué)習(xí)開展工作時(shí),發(fā)現(xiàn)為每個(gè)人提供輕松地訪問途徑顯得至關(guān)重要。只給予讀取權(quán)限是不夠的,科研人員不會(huì)通過筆記本下載TB級(jí)的數(shù)據(jù),且不會(huì)隨身攜帶筆記本電腦來處理TB級(jí)的數(shù)據(jù),這只會(huì)浪費(fèi)每個(gè)人的時(shí)間。我們發(fā)現(xiàn)使用支持像Apache Spark這樣環(huán)境的Notebook可以達(dá)到這個(gè)目的,比如Jupyter、zeepelin等,讀者可以根據(jù)自己的平臺(tái)選擇合適的Notebook。
為小組人員提供訪問TB級(jí)數(shù)據(jù)的途徑,此外必須提供合適的工具使其能夠從中很好的理解這些數(shù)據(jù),比如Jupyter、zeppelin等這些基于spark集群的Notebook。
對(duì)于大數(shù)據(jù)而言,監(jiān)控是必須的
當(dāng)處理大數(shù)據(jù)時(shí),傳統(tǒng)的軟件工程方法是不起作用的。一般的程序可能花費(fèi)幾分鐘就可以運(yùn)行完畢,但大數(shù)據(jù)可能需要幾小時(shí)到幾天的時(shí)間。與傳統(tǒng)軟件編程相比,如何在大數(shù)據(jù)情況下減少批量處理作業(yè)的完成時(shí)間這一問題更為復(fù)雜。使用云計(jì)算可以水平降低機(jī)器要求以及縮短運(yùn)行時(shí)間。但是,我們應(yīng)該增加機(jī)器的數(shù)量還是完全改變機(jī)器的類型?分布式環(huán)境中的瓶頸在哪里?等等這些問題都是減少執(zhí)行時(shí)間時(shí)需要解決的問題。
對(duì)于Apache Spark而言,很難弄清楚需要的機(jī)器類型。Amazon EMR帶有Ganglia,這讓我們一眼就可以監(jiān)視集群內(nèi)存/CPU。但有時(shí)候也不得不去檢查底層的EC2實(shí)例監(jiān)測(cè),因?yàn)镚anglia并不完美,將二者結(jié)合起來使用是很不錯(cuò)的方法。此外,與訓(xùn)練機(jī)器學(xué)習(xí)模型的作業(yè)相比,ETL作業(yè)具有不同的執(zhí)行配置文件。ETL占用了大量的網(wǎng)絡(luò)和內(nèi)存,機(jī)器學(xué)習(xí)需要更多的計(jì)算,可以為這兩種類型的作業(yè)選擇不同的實(shí)例類型。
需要從CPU/內(nèi)存/網(wǎng)絡(luò)/IO監(jiān)控方面優(yōu)化成本,此外發(fā)現(xiàn)不同的工作(ETL、機(jī)器學(xué)習(xí))有不同的機(jī)器要求。
在一開始就需要對(duì)機(jī)器學(xué)習(xí)預(yù)測(cè)進(jìn)行基準(zhǔn)測(cè)試
對(duì)機(jī)器學(xué)習(xí)模型的預(yù)測(cè)有沒有延遲要求?如果有的話,在選擇任何具體框架之前,請(qǐng)確定該框架的訓(xùn)練模型是否可以滿足你的延遲要求。對(duì)于基礎(chǔ)模型而言,很容易就能掌握其中包含的數(shù)學(xué)基本理論,并理所當(dāng)然的認(rèn)為它會(huì)運(yùn)行得很快。但事實(shí)證明,還有一些其它因素可能會(huì)導(dǎo)致預(yù)測(cè)的速度不如理論上預(yù)期的那樣快。建立一個(gè)簡(jiǎn)單的模型并進(jìn)行基準(zhǔn)測(cè)試。如果在建立管道后才發(fā)現(xiàn)問題,這可能會(huì)浪費(fèi)大量的時(shí)間。當(dāng)發(fā)現(xiàn)Spark不能滿足延遲要求時(shí),可以使用mleap庫提升預(yù)測(cè)延遲。
如果有延遲需求,請(qǐng)從要使用的框架中制作出一個(gè)簡(jiǎn)單模型,精度、準(zhǔn)確率或其它指標(biāo)都無關(guān)緊要,只需要以預(yù)測(cè)延遲為基準(zhǔn)點(diǎn)。
無論AWS如何顯示,S3都不是一個(gè)文件系統(tǒng)
使用AWS的GUI或CLI很容易忘記S3不是一個(gè)文件系統(tǒng),S3是一個(gè)對(duì)象存儲(chǔ)庫,存儲(chǔ)的對(duì)象是json、圖片等內(nèi)容。這個(gè)區(qū)別很重要,因?yàn)樵赟3中重命名內(nèi)容并不像在真正的文件系統(tǒng)中那樣快。如果在一個(gè)文件系統(tǒng)中移動(dòng)一個(gè)對(duì)象,它可能會(huì)很快地移動(dòng),但這在S3中是無法實(shí)現(xiàn)的。為什么這個(gè)顯得很重要呢?因?yàn)楫?dāng)通過Apache將數(shù)據(jù)寫入S3時(shí),Apache Spark會(huì)產(chǎn)生臨時(shí)文件,然后將其移動(dòng)到新的秘鑰中?;谝陨显颍珹pache Spark有一個(gè)設(shè)置,可以告訴它不寫入臨時(shí)文件,而是寫入最終輸出。我們使用了這種設(shè)置,在寫入AWS s3上節(jié)約了大量的時(shí)間。
Apache Spark主要是基于Scala
如果使用的是Apache Spark,你應(yīng)該知道它主要是基于Scala的。Java和Python等應(yīng)用接口也可以工作,但是網(wǎng)上的例子大多是基于Scala的。而我們使用的是Java,這是由于之前的技術(shù)棧使用的是Java。在剛開始時(shí),對(duì)于機(jī)器學(xué)習(xí)和Scala等方面都沒有任何專業(yè)知識(shí),我們簡(jiǎn)單地認(rèn)為機(jī)器學(xué)習(xí)對(duì)于項(xiàng)目而言至關(guān)重要,而Scala不是。因此,無法讓團(tuán)隊(duì)像處理機(jī)器學(xué)習(xí)問題那樣處理Scala曲線。將Scala翻譯成Java并不難,但將Spark Scala翻譯為Spark Java很困難,因?yàn)檫@些應(yīng)用接口在Java中難以使用。
如果你不了解Scala并且還想使用 Spark Mllib,那么可能需要在選擇語言方面考慮妥協(xié)。這種解決方案不是理想的工程解決方案,而是一個(gè)實(shí)用的解決方案。
知識(shí)分享對(duì)于團(tuán)隊(duì)合作而言很重要
如果將機(jī)器學(xué)習(xí)與現(xiàn)有系統(tǒng)集成在一起,那么將不得不與其他開發(fā)人員打交道。此外,還需要與業(yè)務(wù)、操作、營銷等人員進(jìn)行交流。但是這些人員中的大多數(shù)人不會(huì)對(duì)機(jī)器學(xué)習(xí)有很好的理解,因此他們需要這方面的知識(shí),但是他們又不能坐下來學(xué)習(xí)機(jī)器學(xué)習(xí)相關(guān)課程。這個(gè)時(shí)候就應(yīng)該做一些機(jī)器學(xué)習(xí)方面的知識(shí)分享,只需要解釋一些涉及外行常見的術(shù)語即可,比如訓(xùn)練集/測(cè)試集/驗(yàn)證集、模型等,而不必教他們相關(guān)算法等深?yuàn)W的內(nèi)容。
對(duì)于專業(yè)人員來說,很容易忘記機(jī)器學(xué)習(xí)中充滿了術(shù)語,雖然你可能完全熟悉這些術(shù)語,但對(duì)于團(tuán)隊(duì)中的其他人而言,這些可能會(huì)是完全陌生的詞語,因?yàn)椴皇撬腥硕紖⒓舆^機(jī)器學(xué)習(xí)課程。
對(duì)數(shù)據(jù)庫構(gòu)建版本控制可能是一個(gè)好的想法
可能需要對(duì)數(shù)據(jù)庫構(gòu)建版本控制方案,并且可以在不重新部署整個(gè)軟件的情況下切換不同的模型訓(xùn)練代碼以使用不同的數(shù)據(jù)集。我們創(chuàng)建了一些模型,并用一些數(shù)據(jù)對(duì)其進(jìn)行了嘗試,結(jié)果發(fā)現(xiàn)數(shù)據(jù)量不夠,模型工作得不夠好。因此,為數(shù)據(jù)庫建立版本控制方案,以便可以在V1版本上訓(xùn)練模型并繼續(xù)生成下一個(gè)版本。新版本中足夠的數(shù)據(jù)后,就可以切換模型訓(xùn)練代碼以使用新數(shù)據(jù)集。此外,還制作了一個(gè)UI界面,以便控制機(jī)器學(xué)習(xí)的參數(shù)、指定用于訓(xùn)練的數(shù)據(jù)量等?;旧峡梢酝ㄟ^UI可以輕松地配置一些參數(shù),以確保對(duì)用于訓(xùn)練的數(shù)據(jù)進(jìn)行更改時(shí)不需要重新部署相關(guān)參數(shù)。
文章標(biāo)題《Things I wish we had known before we started our first Machine Learning project》,作者:Aseem Bansal
詳細(xì)內(nèi)容請(qǐng)查看原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/68913.html
摘要:當(dāng)掌握機(jī)器學(xué)習(xí)基本知識(shí)以及清楚自己所要處理的任務(wù)后,應(yīng)用機(jī)器學(xué)習(xí)就不會(huì)那么難了。因此,在學(xué)習(xí)和應(yīng)用機(jī)器學(xué)習(xí)之前,我們首先應(yīng)該明確自己的任務(wù)是什么,以及適合使用哪種機(jī)器學(xué)習(xí)方法來完成。 摘要: 本文簡(jiǎn)單總結(jié)了機(jī)器學(xué)習(xí)的幾大任務(wù)及其對(duì)應(yīng)的方法,方便初學(xué)者根據(jù)自己的任務(wù)選擇合適的方法。當(dāng)掌握機(jī)器學(xué)習(xí)基本知識(shí)以及清楚自己所要處理的任務(wù)后,應(yīng)用機(jī)器學(xué)習(xí)就不會(huì)那么難了。 機(jī)器學(xué)習(xí)一直是一個(gè)火熱的研...
摘要:摘要本文主要是講解了機(jī)器學(xué)習(xí)中的增強(qiáng)學(xué)習(xí)方法的基本原理,常用算法及應(yīng)用場(chǎng)景,最后給出了學(xué)習(xí)資源,對(duì)于初學(xué)者而言可以將其作為入門指南。下圖表示了強(qiáng)化學(xué)習(xí)模型中涉及的基本思想和要素。 摘要: 本文主要是講解了機(jī)器學(xué)習(xí)中的增強(qiáng)學(xué)習(xí)方法的基本原理,常用算法及應(yīng)用場(chǎng)景,最后給出了學(xué)習(xí)資源,對(duì)于初學(xué)者而言可以將其作為入門指南。 強(qiáng)化學(xué)習(xí)(Reinforcement Learning)是當(dāng)前最熱門的...
閱讀 3509·2021-10-20 13:49
閱讀 2875·2021-09-29 09:34
閱讀 3787·2021-09-01 11:29
閱讀 3146·2019-08-30 11:01
閱讀 918·2019-08-29 17:10
閱讀 953·2019-08-29 12:48
閱讀 2848·2019-08-29 12:40
閱讀 1411·2019-08-29 12:30