機器學習的數據源和輸入把機器學習看成是一個魔術黑箱是比較貼切的。進去的是數據;而出來的是預測。但是在這裡沒有什麼魔法——隻是數據和算法,以及通過算法處理數據所創建的模型。
如果您通過機器學習從數據中得出可操作的深度分析,那麼就能搞清楚黑箱裡面到底有什麼。您越清楚箱子裡到底有什麼,就會越了解數據怎樣轉化為預測這一過程的每一步,您的預測就會越強大。
開發人員所說的“構建管道”是描述軟件是怎樣從源代碼到部署實現的。當數據流過機器學習解決方案時,也會有一條管道。掌握管道怎樣彙集到一起是從内向外了解機器學習本身一種有效的方法。
機器學習管道
正如維基百科研究分析師GeorgeGilbert所描述的,機器學習管道由四個階段組成:
1.輸入數據
2.準備數據(包括數據探查和治理)
3.訓練模型
4.服務預測
機器學習管道從兩件事開始:要訓練的數據和執行訓練的算法。數據将以下列兩種形式之一出現:
1.您已經收集和彙總的實時數據,您打算利用這些數據定期更新預測。
2.還有“凍結”的數據集,您下載并原樣使用的數據,或者通過ETL操作從現有數據源派生出來的數據。
使用凍結數據,您通常隻執行一類處理:您可以使用它來訓練模型,部署模型,并根據需要定期更新模型(如果有的話)。
但是如果使用流數據,對于怎樣從數據中生成模型和結果,您可以有兩個選擇。第一個選擇是将數據保存在某個地方——數據庫或數據湖,并在以後進行分析。第二個選擇是在流數據輸入時對模型進行訓練。
流數據的訓練也有兩種形式,機器學習解決方案提供商BigML的CharlesParker對此進行了描述。一種情形是您在模型上應用最新的數據流進行預測,但是您并未調整底層模型。另一種情形是您獲取的數據需要經常用來訓練全新的模型,因為老的數據并不相關。
這就是為什麼盡早選擇算法是很重要的原因所在。一些算法支持增量再訓練,而其他算法必須從頭開始采用新數據重新訓練。如果您一直在為自己的模型提供新數據,需要經常再訓練,那麼您會希望使用支持增量再訓練的算法。例如,SparkStreaming支持這類增量再訓練。
機器學習的數據準備
一旦您擁有了用于訓練的一個數據源,下一步是确定它可以用于訓練。描述所使用數據的一緻性最合适的術語是規範化。
現實世界的數據會有很多噪聲。如果它來自數據庫,那麼在那裡會自動進行一定程度的規範化。但是很多機器學習應用程序也可能從數據湖或者其他異構源直接提取數據,如果是用于生産目的,它們的數據不一定要進行規範化。
《Python機器學習》的作者SebastianRaschka在書中詳細介紹了規範化,以及怎樣針對某些常見類型的數據集進行操作。他使用的例子是以Python為主的,但基本概念是通用的。
是不是總是要進行規範化呢?麻省理工學院人工智能博士生FranckDernoncourt在詳細讨論堆棧溢出時指出,不總是。但正如他所說的,“不會有太大問題”。他認為,重要的是應用情形。對于人工神經網絡,不一定需要規範化,但也是有用的;對于像K-means聚類等算法,歸一化是非常重要的。
《從數據中學習》一書的作者之一MalikMagdon-Ismail認為,當“數據規模太大”的時候,規範化就不是一個好主意了。一個例子:“在信貸審批中,如果要求收入是債務的兩倍,那麼收入兩倍于債務是恰當的。”
在數據錄入和準備階段還要注意的是,怎樣通過數據以及規範化後的數據,将偏差引入模型。機器學習中的偏差會産生實際的後果;這有助于知道怎樣找到并消除可能存在的這種偏差。不要認為幹淨(可讀、一緻)的數據是沒有偏差的數據。
訓練機器學習模型
一旦建立了數據集,接下來就是訓練過程,數據被用于生成可以進行預測的模型。
我之前提到的預測工作類型和使用的算法種類在這裡很重要,具體取決于您是需要在批量數據上一次完成全部訓練的模型,還是需要逐漸進行再訓練的模型。而訓練模型的另一個關鍵因素是怎樣調整訓練以提高最終模型的精度——所謂的超參數化。
用于機器學習模型的超參數是控制怎樣從算法生成最終模型的一些設置。例如,K-means聚類算法以某種方式,根據彼此相似程度把數據組織成組。因此,K-means算法的一個超參數會是要搜索的聚類的數量。
通常,超參數的最佳選擇來自于該算法的經驗。有時,您需要嘗試一些變化,看看哪些可以為您的問題集産生可行的結果。也就是說,對于某些算法實現,可以自動調整超參數。例如,用于機器學習的Ray體系架構具有超參數優化功能。
用于模型訓練的很多庫可以利用并行特性,通過把訓練過程分布在多個CPU、GPU或者節點上來加速訓練過程。如果您能夠訪問硬件,并行進行訓練,那麼請使用它。每增加一台計算設備,通常都能夠以接近線性的方式進行加速。
用于進行訓練的機器學習體系架構支持并行訓練。例如,MXNet庫可以讓您并行訓練模型。MXNet也支持并行訓練的兩種關鍵方法——數據并行和模型并行。
谷歌大腦團隊成員AlexKrizhevsky在一篇關于并行化網絡訓練的論文中解釋了數據并行與模型并行之間的差異。采用數據并行,“不同的員工在不同的數據實例上訓練[模型]...但是必須同步模型參數(或者參數梯度),以确保他們訓練一緻的模型。”換句話說,您把數據拆分到多個設備上進行訓練,但必須确保生成的模型彼此保持同步。
采用模型并行,“不同的員工訓練模型的不同部分”,但是當“由一個員工訓練的模型部分需要由另一個員工訓練的模型部分輸出”時,員工必須保持同步。當訓練模型具有彼此互相輸入的多個層(例如遞歸神經網絡)時,通常使用該方法。
應學習怎樣使用這兩種方法來組裝管道,因為很多體系架構現在都支持這些方法,例如Torch體系架構。
部署機器學習模型
正如Gilbert在“機器學習管道:構建模塊的中國菜單”文章中所述,管道的最後一個階段是部署經過訓練的模型,即“預測和服務”階段。在這裡,針對輸入數據運行經過訓練的模型,以産生預測。例如,對于面部識别系統,輸入數據可以是頭像或自拍照片,從别的臉部照片衍生的模型進行預測。
在哪裡以及怎樣進行這種預測構成了管道的另一部分。最常見的情形是通過RESTfulAPI從雲實例中提供預測。雲服務的所有明顯優勢都體現在這裡。例如,您可以調出更多的實例來滿足需求。
采用雲托管模型,您還可以将更多的管道保留在同一個地方——訓練數據、訓練過的模型和預測基礎設施等。您不必四處移動數據,所以一切都更快。能夠更快的完成模型的增量再訓練,因為模型可以在相同的環境中進行再訓練和部署。
但是,有時可以在客戶端部署模型并從那裡提供預測。這種方法比較好的應用是在移動領域,這一應用領域的帶寬是非常重要的,适用于網絡連接不能保證或者不可靠的應用。
值得注意的是,在本地機器上進行預測的質量可能不高。由于本地存儲限制,所部署的模型規模可能較小,這會影響預測質量。在智能手機等适合的設備上部署高精度模型變得越來越可行,這主要是通過稍微犧牲一些精度,以提高速度來實現的。有必要看一看存在問題的應用程序,看看能否更好地在客戶端上部署經過訓練的模型,并定期刷新它,而不是通過遠程API訪問它。
還有另一種障礙:由于您可以在很多地方部署模型,因此,部署過程可能會很複雜。除非是逐個的部署應用程序,否則,從任何一個受過訓練的模型到任何一個目标硬件、操作系統或者應用程序,都不會有一緻的路徑。盡管有越來越多的使用某種機器學習模型開發應用程序的實踐活動,但是要找到一緻的部署渠道還是有很大的壓力,這種複雜性并不會很快消失。
機器學習管道并不是真正的管道
管道這一術語意味着從一端單向流動到另一端。在實際中,這種流動是有周期性的:數據進入,用于訓練模型,然後随着新數據的輸入,數據條件随之發生變化,對模型的準确性進行評估和再訓練。
除了機器學習管道,除了需要專門關注的各個部分之外,現在我們沒有太多的選擇。不是因為每個階段有不同的功能,而是因為所有組成部分的端到端集成方式還很少。換句話說,并沒有管道,隻是我們自己認為是管道的一系列活動。
但是項目正在彙集在一起,以滿足實際管道這一需求。例如,Hadoop供應商MapR有自己的“分布式深度學習快速入門解決方案”——把六節點一年許可的MapRHadoop發行版,提供CPU/GPU支持的集成神經網絡庫,以及專業咨詢服務結合在了一起。
理想的解決方案将是一個完整的開源設計模式,涵蓋管道的每個階段,并提供與現有軟件連續交付系統的無縫體驗。換句話說,像Wikibon的Gilbert所說的那樣,它構成了“數據科學家的工具”。百度已經宣布正在為數據科學家尋找一種開發工具,其中,Kubernetes是主要因素(MapR還用于協調其系統中節點間的工作),但是還沒有具體的實現。
在那一天到來之前,我們必須安排好由内而外的學習管道的方方面面。
SerdarYegulalp是InfoWorld的資深作家,主要工作是InfoWorld技術觀察新聞分析博客和定期評論。
原文網址:http://www.infoworld/article/3198252/artificial-intelligence/data-in-intelligence-outmachine-learning-pipelinesdemystified.html