fast.ai創始人:身為機器學習從業者是一種怎樣的體驗
來自專欄論智4 人贊了文章
作者:Ganes Kesari
編譯:Bing
編者按:本文作者是fast.ai的創始人之一Rachel Thomas,它是一名深度學習研究員,主要工作內容是將機器學習技術更容易被其他領域的人員使用。本文介紹了機器學習從業人員的主要工作內容,論智將其編譯如下。
當下,媒體總會用「稀缺」、「高薪」等字眼來描繪機器學習,甚至還有一些誇張的標題宣稱某公司的自動機器學習產品能代替機器學習專家。在TensorFlow DevSummit上,谷歌AI的首席科學家Jeff Dean表示,目前數千萬家公司會產出電子數據,但是缺少會機器學習技術的人才。而我在fast.ai的工作正是讓更多的人學會機器學習技術、讓這種技能變得更易掌握,所以我對這一問題進行了而深入研究。
在思考我們如何讓機器學習自動化,以及如何讓它普及到更多領域的人時,首先要思考的是,機器學習專家們都要做什麼?任何能解決機器學習專家緊缺的方法都要回答這樣一個問題:我們是否知道該教授什麼知識、用什麼工具、或者在哪一部分實現自動化。
這篇文章屬於連載系列的第一篇,這裡我們會描述機器學習專家實際上都做些什麼。該系列的第二篇文章會解釋什麼是自動化機器學習以及什麼是神經架構搜索(一些重量級人物曾表明這兩種成果是減少對數據科學家需要的關鍵),最後第三部分將介紹谷歌的自動機器學習產品。
在複雜工作中建立數據產品
很多學術界的機器學習成果都只關注預測模型,但這只是機器學習專業人員平時工作的一部分。明確工作問題、收集並清洗數據、搭建模型、得出結果並監測變化,這些過程通常會以不同形式相互連接,很難單獨拿出來作為研究對象。正如Jeremy Howard等人在Designing great data products中所寫的那樣:「強大的預測模型是解決方案的一個重要部分,但是它並不獨立存在;隨著產品變得越來越複雜,它也知識系統中的一部分。」
谷歌的一個小組寫過一篇名為Machine Learning: The High-Interest Credit Card of Technical Debt的文章,講的是在實際案例中使用機器學習技術時,總會產生複雜的代碼和「技術債」。作者提出了幾種系統層面的交互、風險和反模式:
- 粘合代碼(glue code):即將數據加入通用包或從中取出的大量代碼
- 通道森林(pipeline jungles):用機器學習的形式準備數據的系統可能含有多種難題、連接點和採樣步驟,通常在中間文件的輸出處
- 重新使用輸入信號,如果系統分離可以創造緊耦合裝置
- 可能改變外部環境的風險也許會改變模型或輸入信號的行為,這種情況很難控制
作者寫道:「真實世界中,機器學習著重關注的就是這類問題的解決……值得注意的是,粘合代碼和通道森林是集成問題的典型癥狀,原因可能是因為將「研究」和「工程」的角色過度分離了……如果學術界知道了在機器學習系統中只有一小部分代碼在起作用,他們一定會驚訝的。」
當機器學習項目失敗時
機器學習項目失敗的情況有以下這麼幾種:
- 當數據科學團隊搭建了一個從未用過的工具。但是公司的其他部門並不知道他們做了什麼,有些數據科學家也並不清除這些成果能否用於實際生產中。
- 當數據科學家們創造模型的速度快於將其投入生產的速度,就會產生積壓。
- 數據基礎架構工程師和數據科學家是分開的。通道中沒有數據時,數據科學家會要求數據基礎架構工程師獲取。
- 當公司最終確定產品X的功能後,他們需要數據科學家收集支持這項決策的數據。數據科學家認為產品經理會忽略那些與決定相反的數據,而產品經理會認為數據科學家忽略商業邏輯。
- 數據科學團隊面試了一位數學建模、工程技術能力都很好的候選人。確定錄用後加入到垂直應用產品團隊,並需要簡單的商業分析。數據科學家感到很無聊,所學技能根本用不上。
這些問題是我之前在寫公司組織失敗時列出的,但是它們同樣可以看作是太過於關注複雜系統的單一方面。問題在於數據產品之間缺少溝通並且沒有目標。
所以,機器學習專家都怎麼做?
如上建議,打造一款機器學習產品是多方面的複雜任務。下面是機器學習專家在工作中需要做的事:
理解語境
- 找准能從機器學習中受益的區域
- 與其他相關人員討論機器學習能做什麼、不能做什麼
- 讓每個人都了解商業策略、風險和目標
- 明確目前公司有什麼類型的數據
- 對任務制定合適的框架
- 了解操作限制
- 提前確定可能的道德風險,例如你的成果有可能被濫用、或被用於宣傳
- 確定潛在的偏見和潛在的負面反饋
數據
- 製作能收集更多不同數據的計劃
- 將不同來源的數據匯總
- 處理缺失的或被污染的數據
- 數據可視化
- 建立合適的訓練集、驗證集和測試集
建模
- 選擇使用哪個模型
- 將資源模型納入約束條件(即最終模型需要在頂尖設備商運行,內存少、延長時間長等等)
- 選擇超參數(包括架構、損失函數、優化器)
- 訓練模型,並進行debug。其中包括調參、查看損失函數、訓練錯誤、驗證錯誤是否有改變、監測模型數據、確定錯誤來源、改變數據清洗和處理的方式、改變數據增強方式、添加更多數據、嘗試不同模型、是否過度擬合。
模型生成
- 創建一個API或網頁app
- 將模型輸出成想要的格式
- 計劃模型多久需要重新訓練一次並更新數據
監測
- 追蹤模型性能
- 監測輸入數據,確定數據是否會隨時間使得模型失效
- 與其他人員交流結果
- 制定計劃,如何監測和應對意外結果
確切地講,並不是每個機器學習人員都會做到上面所有工作,但是這一整個流程是很多機器學習應用所必備的。即使你從事的只是其中的一小部分,了解其他流程也有助於你的工作。
機器學習的兩大難點
對我自己和其他我認識的人來說,機器學習有兩種最耗時費力的步驟:
- 處理數據格式、不兼容和報錯
- 訓練特別脆弱的深度學習模型
數據清理真的是機器學習的一部分嗎?是的
處理數據的不一致和報錯經常是混亂費力的過程。人們有時會將機器學習和數據科學分開,因為對機器學習來說,有時會直接用清洗過的數據進行訓練。然而在我的經驗中,數據集清洗和訓練模型是相關的:我經常會在訓練模型的時候發現問題,只能改變輸入數據的預處理方法。
訓練深度學習模型很脆弱
很多新手在一開始訓練模型時會很容易受挫,即使是專家也經常感到沮喪。在NIPS 2017上,Ali Rahimi就曾抱怨深度學習的脆弱性。
這一現象也表明訓練過程並未自動化,如果有某些能穩定訓練深度學習的方法出現,對該領域來說一定是個巨大的進步。此前的dropout、遷移學習等方法都讓訓練變得容易了些,但總體來說穩定的訓練仍然是個需要解決的問題。
給學術研究者
即使你正在研究機器學習的理論,了解從業者的工作內容也是必須的,這可以和研究目標結合起來。正如谷歌工程師D. Sculley等人所說:「技術債是工程師和學者都必須意識到的問題。如果研究出的解決方法只對精確度有微小的提升,卻讓系統複雜性大大增加,那麼這一定不是一個明智方案……解決技術債也許不總是誕生新的理論,但卻是創新的重要一環。而發展針對複雜機器學習系統的全面、優雅的解決方案才是真正有意義的工作。」
推薦閱讀:
※模擬電子技術基礎 第四版童詩白、華成英 編高等教育出版社第1章 常用半導
※關於BCH的Memo應用的設想
※銀河護衛兵,幫我拎雙拖鞋謝謝
※網站設計技術與美工的配合 - 知識庫 - 綜合知識管理解決方案|紹林科技|軟體就是思想
※有沒有好用的電腦桌面便簽軟體?