拖拽式機器學習的愛與恨
拖拽式機器學習是我想了很久的問題。
1. 前世今生
拖拽式機器學習是,人們在界面上通過拖拽就是建立機器學習過程。拖拽式機器學習系統一般擁有豐富的組件,包括數據清洗、特征選擇、訓練、預測和效果評估。通過類似于 “搭積木” 的方式,人們將學習組件合成一個完成的機器學習過程。
拖拽式機器學習的雛形很早之前就出現了。Weka 是有新西蘭 Waikato 大學開發的數據挖掘軟件。Weka 除了提供 Java API 之外,還提供 Weka Explorer 圖形界面。人們在 Weka Explorer 界面上通過鼠標操作就能很方便地加載數據、觀察數據特點、訓練、預測和效果評估。除了 Weka 免費軟件之外,商業軟件 Matlab 和 SASS 也提供了圖形界面。我個人覺得,這些軟件將自己定位為軟件,而不是工具包或者系統。但這些軟件確實是最開始有圖形界面的機器學習系統。
隨著最近幾年機器學習成為顯學,“人人都能使用機器學習” 成為不少人的愿景。在他們的想象中,數據準備、不同算法訓練、不同算法的預測和效果評估都封裝在組件中,人們只需要點點鼠標拖拽拖拽組件,就能順利地使用機器學習。秉承這樣的理念,人們開發了不少拖拽式機器學習系統。其中比較有名的就包括微軟的 Azure Machine Learning Studio 和阿里的大數據計算服務 MaxComput。
除了大公司,也有創業公司開發拖拽機器學習系統。下圖是 aetros 基于 theano 建立的深度學習平臺。用戶只要進行拖拽就可以完成一個基本含有ConvNet,fcNet的架構。
2. 愛
拖拽式機器學習將機器學習的使用門檻,從編程降到組件拖拽和配置文件撰寫。機器學習使用難度實現了質的下降。但這個優勢我一直有懷疑。金融公司、外貿公司、銀行,甚至互聯網企業等組織機構中,非技術人員真的有使用機器學習的需求和知識儲備嘛?我表示懷疑。
拖拽式機器學習即使不能實現 “人人都能使用機器學習” 的初心,也能極大地方便工程師進行機器學習任務。工程師在界面上組織資金的機器學習任務,可能對自己的機器學習任務有一個直觀的認識:自己的機器學習任務進行到哪一步了;如果出錯,在哪一步出錯;出錯步驟影響了哪些任務。
比如我們很直觀地可以從上圖看出,如果歸一化出錯,將會影響拆分任務和后續任務。
3. 恨
說了拖拽式機器學習的好,我們再說說拖拽式機器學習的壞。
拖拽式機器學習中,組件加配置替換了編程,成為人們使用機器學習的方式。但是組件加配置,卻不能像編程那樣,完全地處理機器學習使用的復雜度。除了對機器學習算法的理解,機器學習使用最復雜的部分有兩個部分:調特征和調參數。調特征的內容包括:要用哪些特征,要摒棄哪些特征,采用哪些特征預處理方法 (比如 scaling)。調參數則和具體算法有關,比如邏輯斯蒂回歸主要有學習率和正則因子兩個參數。
組件加配置的方式能配置一組特征工程方案和一組參數,但很難快速驗證哪一組特征工程方案和參數效果***。在編程方式中,我們可以用循環的方式,遍歷不同的特征工程方案和參數,得到相應效果指標。但在拖拽式機器學習的組件加配置的方式中,我們只能在文檔中記著不同的特征工程方案和參數,選擇其中一個配置到拖拽式機器學習系統,運行幾個小時得到評估指標,將評估指標記錄到文檔中;再選擇下一組,重復上述步驟直到遍歷完所有特征工程方案和參數。我們程序員的目標是用代碼將不同的任務串起來,實現自動化。但現在拖拽式機器學習粗暴割裂了這個自動化鏈條。
那么直接用組件加配置實現自動化呢?如果要實現這點,拖拽式機器學習要提供條件判斷組件和循環組件,還需要定義一套特征工程方案和參數變化的標準。這好像是在制定一個新的編程語言。這又繞回來。
4. 總結
拖拽式機器學習 “人人都能使用機器學習” 的初心我是不看好的。對于工程師來說,拖拽式機器學習也是充滿了愛恨情仇。