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