摘要: 每天再說機器學習,你知道機器學習從業者到底在幹啥嗎?
這篇文章是系列文章的第1部分,第2部分將闡述AutoML和神經架構搜索、第3部分將特別地介紹Google的AutoML。網絡
關於機器學習人才的稀缺和公司聲稱他們的產品可以自動化機器學習並且能徹底消除對ML專業知識需求的承諾常常登上媒體的新聞頭條。在TensorFlow DevSummit的主題演講中,Google的AI總指揮Jeff Dean估計,有數千萬擁有可用於機器學習的數據而缺少必要的專業知識和技能的組織。由於我在fast.ai主要專一於讓更多的人去使用機器學習而且讓它更容易使用,因此我密切關注剛纔所提的機器學習人才稀缺等問題。架構
在考慮如何使機器學習的一些工做自動化以及讓具備更普遍背景的人更容易使用這項技術,首先有必要問的是:機器學習行業從業者到底在作什麼?任何用來解決機器學習專業知識稀缺的方案都須要回答這個問題:咱們是否知道去教什麼技能、去創建什麼工具或者去自動化什麼工序。機器學習
從事機器學習行業的人作什麼?函數
構建數據產品是一項複雜的工做工具
雖然許多關於機器學習的學術來源幾乎都是預測建模,但這只是從事機器學習在正常狀況下作的其中一件事。適當地分析商業問題,收集和清理數據,構建模型,實施結果,而後監控變化的過程在不少方式中是相互關聯的,這每每很難僅僅經過單個部分進行孤立(至少不知道其餘部分須要什麼)。正如Jeremy Howard等人在《設計出色的數據產品》上寫道:偉大的預測建模是解決方案的重要組成部分,但它再也不獨立;隨着產品變得愈來愈複雜,它就會消失在管道中。學習
來自Google,D. Sculley等的一個團隊撰寫了經典的機器學習案例:《技術債務的高利率信用卡》,這是關於在實踐中使用機器學習時時常產生的代碼複雜性和技術債務。做者發現了許多系統級別的交互、風險和反模式,包括:測試
1.膠水代碼:爲了將數據輸入和輸出通用軟件包而編寫的大量支持代碼;優化
2.管道叢林(pipeline jungles):以ML友好格式準備數據的系統可能成爲刮擦,鏈接和採樣步驟的叢林,一般帶有中間文件輸出;人工智能
3.從新使用輸入信號的方式會致使其餘不相交系統的意外緊耦合;spa
4.外部環境的變化可能使模型或輸入信號的行爲意外發生改變的風險,這些可能難以監控。
做者寫道:現實世界的「機器學習」工做中一個重要部分是致力於解決這種形式的問題...值得注意的是,膠水代碼和管道叢林是整合問題的症狀,多是過分分離的「研究」和「工程」角色的根本緣由 ...學術界可能會驚訝地發現,許多機器學習系統中只有很小一部分代碼實際上在進行「機器學習」。
當機器學習項目失敗時
在其中一次機器學習項目中,我發現了在工做空間失效的故障模式:
1.數據科學團隊構建了一個很是酷的東西卻永遠不會被使用。關於他們正在進行的工做,組織的其他部門沒有任何支持,並且一些數據科學家對將什麼投入生產並不十分清楚。
2.數據科學家積壓生產模型的速度比工程支持生產模型要快得多。
3.數據架構工程師由數據科學家分離出來。管道中如今沒有數據科學家所要求的數據,數據科學家也在利用數據架構工程師所收集的數據源。
4.該公司已經明確決定生產功能/產品X.他們須要數據科學家來收集支持此決策的一些數據。數據科學家感受PM正在忽略與決策相矛盾的數據; PM認爲數據科學家正在忽視其餘商業邏輯。
在以前,我將這些視爲組織失敗,但它們也能夠被描述爲各類從業者過度關注構成完整數據產品的複雜系統的一部分。這些是數據產品管道的不一樣部分之間的溝通和目標對齊的失敗。
那麼,從事機器學習行業的人作什麼?
如上所述,構建機器學習產品是一項多方面且複雜的任務。如下是機器學習從業者在此過程當中可能須要作的一些事情:
理解上下文:
1.肯定能夠從機器學習中受益的商業領域;
2.與其餘利益相關者溝通有關機器學習是什麼和本身不具有的能力(一般存在許多誤解);
3.瞭解商業戰略,風險和目標,確保每一個人都在同一平臺上;
4.肯定組織擁有哪一種數據;
5.適當地構建和審視任務;
6.理解操做約束(例如,在推理的時候選出實際可用的數據);
7.主動識別道德風險,包括騷擾者或進行宣傳/虛假宣傳活動(並計劃如何下降這些風險);
8.識別潛在的偏見和潛在的負反饋循環。
數據:
1.制定計劃收集更多不一樣的數據;
2.未來自許多不一樣來源的數據整理在一塊兒:這些數據一般以不一樣的格式或不一致的慣例收集;
3.處理丟失或損壞的數據;
4.可視化數據;
5.建立適當的訓練集,驗證集和測試集;
模型:
1.選擇使用哪一種模型;
2.將模型資源需求歸入約束(例如,完成的模型是否須要在邊緣設備上運行,在低內存或高延遲環境中運行等);
3.選擇超參數(例如,在深度學習的狀況下,這包括選擇架構、損失函數和優化器);
4.訓練模型(並調試爲何訓練不成功),這可能涉及:
4.1調整超參數(例如學習率);
4.2輸出中間結果,以查看損失,訓練偏差和驗證偏差如何隨時間變化;
4.3檢查模型錯誤的數據以查找模式;
4.4識別數據潛在的錯誤或問題;
4.5思考你須要改變清理和預處理數據的方式;
4.6意識到你須要更多或不一樣的數據加強;
4.7意識到你須要更多或不一樣的數據;
4.8嘗試不一樣的模型;
4.9肯定你的數據是否欠擬合或過擬合;
產品化:
1.使用你的模型做爲端點建立API或Web應用程序以實現產品化;
2.將模型導出爲所需的格式;
3.計劃你的模型須要使用更新的數據進行從新訓練的頻率;
監控:
1.跟蹤模型隨時間的變化;
2.監控輸入數據,以肯定它是否隨着時間的推移而變化,從而使模型無效;
3.將你的結果傳達給組織的其餘成員;
4.制定監督和應對錯誤或意外後果的計劃。
固然,不是每一個機器學習從業者都須要完成上述全部步驟,但此過程的組件將成爲許多機器學習應用程序的一部分。即便你只是處理這些步驟的一部分,熟悉其他過程也有助於確保你不會忽視會妨礙項目成功的注意事項!
機器學習中最難的兩個部分
對於我和我認識的許多其餘人,我要強調機器學習(特別是深度學習)中最耗時和最使人沮喪的兩個方面:
1.處理數據格式化,不一致和錯誤一般是一個混亂和繁瑣的過程。
2.訓練深度學習模型是一個衆所周知的脆弱過程。
清理數據真的是ML的一部分嗎?是。
處理數據格式化,不一致和錯誤一般是一個混亂和繁瑣的過程。人們有時會將機器學習描述爲從數據科學分離的過程,就像機器學習同樣,你能夠從完美地清理數據,格式化數據集開始。可是,根據個人經驗,清理數據集和訓練模型的過程一般是交織在一塊兒的:我常常在模型訓練中發現致使我返回並改變輸入數據的預處理的問題。
有必要去處理雜亂和不一致的數據
訓練深度學習模型是脆弱且困難的
訓練模型的困難嚇退了許多經常感到沮喪的初學者。甚至專家常常抱怨模型訓練過程有多麼使人沮喪和變幻無常。斯坦福大學的一位人工智能研究員告訴我,他教過深度學習課程,並讓全部學生都作本身的項目,真是太難了!學生們沒法讓他們的模型進行訓練,咱們一般都會說:「好,這是深度學習」。擁有十多年經驗並得到NIPS 2017年度時間獎的人工智能研究員Ali Rahimi在他的NIPS獎頒獎演講中抱怨模型訓練的脆弱性。有人向AI研究人員詢問:大家當中有多少人已經從零開始設計了一個深層網絡,從設計開始,架構以及其餘流程來構建它,當它無效時,你感到糟糕透了?許多人舉了手。對於我來講,大概每3個月發生一次。甚至AI專家有時也難以訓練新模型,這一事實意味着該過程至今不能將其歸入通用產品的方式實現自動化。一些深度學習的最大進步將經過發現更強大的訓練方法來實現。咱們已經看到了一些像dropout(dropout是指在深度學習網絡的訓練過程當中,對於神經網絡單元,按照必定的機率將其暫時從網絡中丟棄)、超融合和遷移學習這樣的進步,全部這些都使訓練變得更容易。經過遷移學習的力量,當爲足夠狹窄的問題域定義時,模型訓練能夠是一個健壯的過程。可是,咱們仍然有辦法讓訓練更加健壯。
對於學術研究人員
即便你正在從事機器學習的理論研究,理解機器學習從業者在實際問題中所經歷的過程也是有用的,由於這可能會爲你提供關於最相關或最具影響力的研究領域的看法。
正如Googler工程師D. Sculley等人寫道,技術債務是工程師和研究人員都須要注意的問題。爲了提供微小精度優點而以大幅提升系統複雜性爲代價的研究解決方案不多是明智的作法......下降技術債務並不老是像證實新定理那樣使人興奮,但它是持續強勁創新的關鍵部分。爲複雜的機器學習系統開發全面,優雅的解決方案是很是有益的工做。
AutoML
如今咱們已經概述了機器學習從業者在其工做中所作的一些任務,咱們已經準備好評估自動完成這項工做的嘗試。顧名思義,AutoML是一個專一於自動化機器學習的領域,做爲AutoML的子領域的神經架構搜索,目前正受到大量關注。
本文做者:【方向】
本文爲雲棲社區原創內容,未經容許不得轉載。