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