揭穿機(jī)器學(xué)習(xí)“皇帝的新裝”
我們常把機(jī)器學(xué)習(xí)描述為一種使用數(shù)據(jù)模式標(biāo)記事物的神奇技術(shù)。聽起來艱澀,但事實(shí)上,撥開層層概念,機(jī)器學(xué)習(xí)的核心簡單到令人尷尬。
本文將用一個葡萄酒是不是好喝的例子,讓你迅速了解整個機(jī)器學(xué)習(xí)的技術(shù)過程。
數(shù)據(jù)
想象我們品嘗了50種葡萄酒,并且為了方便展示,我在下面進(jìn)行了數(shù)據(jù)可視化。每款酒的數(shù)據(jù)包括年份、分?jǐn)?shù),再加上我們想學(xué)的特征:Y代表好喝,N代表不好喝。
上圖的左側(cè)是表格模式,有圖展示信息的方式更加友好。如果你想要使用數(shù)據(jù)集術(shù)語,比如特性和實(shí)例,來描述這些數(shù)據(jù),以下是一個指南。
算法
通過選擇要使用的機(jī)器學(xué)習(xí)算法,我們可以得到我們想要的輸出。在這個問題中,算法的全部工作就是把上圖中紅色的東西和藍(lán)色的東西分開。
機(jī)器學(xué)習(xí)算法的目的是在數(shù)據(jù)中選擇最合理的位置設(shè)置邊界。
如果你想劃一條線,恭喜你!你剛剛發(fā)明了一個叫作感知器機(jī)器學(xué)習(xí)算法。是的,這么科幻的名字描述的其實(shí)是一種非常簡單的概念!隨著學(xué)習(xí)的深入,你會發(fā)現(xiàn)被機(jī)器學(xué)習(xí)中的術(shù)語所嚇到稀松平常,但它們的內(nèi)涵通常都配不上這個名字的復(fù)雜度。
如果是你,你將如何分開藍(lán)色和紅色?
可能你會說一條平直的線就夠了。但我們的目標(biāo)是把Y和N分開,而不是裝飾性的地平線。
機(jī)器學(xué)習(xí)算法的目的是選擇最合理的位置設(shè)置邊界,這是由據(jù)點(diǎn)到達(dá)的位置來決定的。但它是怎么做到的呢?一般來說,是通過優(yōu)化一個目標(biāo)函數(shù)。
優(yōu)化
如果計劃給自己的博客文章做優(yōu)化,我們可以這樣想:目標(biāo)函數(shù)就像棋盤游戲得分的規(guī)則,優(yōu)化它就是想出如何玩才能讓玩得更好并贏到最好的分?jǐn)?shù)。
目標(biāo)函數(shù)(損失函數(shù))就像棋盤游戲的積分系統(tǒng)。
在機(jī)器學(xué)習(xí)的傳統(tǒng)中,我們更喜歡棍棒而不是胡蘿卜--分?jǐn)?shù)是對錯誤的懲罰(在分界線的錯誤一側(cè)貼上標(biāo)簽),而游戲就是去盡可能的得到盡量少的錯誤分?jǐn)?shù)。這就是為什么ML中的目標(biāo)函數(shù)往往被稱為“損失函數(shù)”,即目標(biāo)是最小化損失。
現(xiàn)在我們可以回到最開始的問題了,把你的手指水平地對著屏幕并不斷畫出直線,直到你得到一個零分的結(jié)果(即沒有一點(diǎn)能夠逃避你充滿力量的、憤怒的手指所畫出來的線)。
希望您找到的解決方案是這樣的:
希望你能聰明地意識到,在上面的三個解決方案中,最右邊的是最好的。
如果你喜歡多樣性,你會喜歡算法的。因?yàn)樗鼈兲嗔?,并且它們之間的不同之處往往在于它們?nèi)绾卧诓煌奈恢蒙蠂L試分離邊界。
在優(yōu)化問題中,以微小的增量旋轉(zhuǎn)邊界顯然是不靠譜的。還有更好的方法可以更快地到達(dá)最優(yōu)位置。 一些研究人員畢生致力于想出在最少的轉(zhuǎn)變中獲得最好的邊界位置的方法,不管數(shù)據(jù)域看起來有多不正常(由你的輸入決定)。
另一個變化的來源是邊界的形狀。原來地邊界不一定是直的。不同的算法使用不同的邊界。
當(dāng)我們選擇這些各種各樣的名稱時,我們只是選擇在標(biāo)簽之間繪制的邊界的形狀,即在選擇我們要用一條對角線,多條水平和豎直線還是靈活的波形短線去分隔它們?
潮人算法
如今,沒有一位數(shù)據(jù)科學(xué)家再使用簡陋的直線了。靈活多變的形狀在當(dāng)今大多數(shù)的人群中都很受歡迎的(你可能知道,例如神經(jīng)網(wǎng)絡(luò)——雖然他們沒有太多的神經(jīng),他們的名字在半個多世紀(jì)前就被命名了,而且似乎沒有人喜歡我的建議——就是我們把他們重新命名為“瑜伽網(wǎng)絡(luò)”或“多層數(shù)學(xué)運(yùn)算”)。
如果你一直期望的是有魔力的算法,那么早一點(diǎn)失望,就早一點(diǎn)清醒,當(dāng)這些科幻迷信般的興奮褪去,你才會新生出做真正酷的事情的篤定。機(jī)器學(xué)習(xí)本身可能平淡無奇,但是你可以用它做的事情卻可以驚天動地,它能讓你寫出你完全想不到的程序代碼,讓你可以自動化那些無法言喻的過程,不要嫌棄機(jī)器學(xué)習(xí)的簡單,杠桿也很簡單,但是它可以撬動整個世界
除了這種市場營銷式的用其他線性算法和智能神經(jīng)網(wǎng)絡(luò)做對比,更值得我們關(guān)注的是這些算法的柔韌擴(kuò)展性。雖然其他算法在處理數(shù)據(jù)拉伸變換時不那么智能,但是天底下沒有免費(fèi)的午餐,運(yùn)用神經(jīng)網(wǎng)絡(luò)也是要付出昂貴代價的(下文有更多說明),所以不要相信那些宣稱神經(jīng)網(wǎng)絡(luò)永遠(yuǎn)是最完美方案的人。
神經(jīng)網(wǎng)絡(luò)也可以叫做瑜伽網(wǎng)絡(luò)
這些奇奇怪怪的算法名稱不過是告訴你什么形狀的分界線會被放入你的數(shù)據(jù)集中。如果你是一位致力于將機(jī)器學(xué)習(xí)投入實(shí)際應(yīng)用的學(xué)習(xí)者,那么記不住這些名詞也沒關(guān)系。實(shí)際操作時,你只需要把你的數(shù)據(jù)扔到盡可能多的算法里去嘗試,然后重復(fù)訓(xùn)練那些看起來最有希望的算法。證明巧克力布丁最好的方法就是吃掉它,所以我們開始享用吧。
就算你認(rèn)認(rèn)真真的學(xué)習(xí)了資料,你也不可能第一次就碰巧拿到正確的算法。別焦慮,這不是只有標(biāo)準(zhǔn)答案的競賽。盡管抱著玩的心態(tài),敲敲打打,多多琢磨。對機(jī)器學(xué)習(xí)這個布丁的證明就隱藏在吃透它的過程里-這套算法適用于新的數(shù)據(jù)嗎?你不用擔(dān)心算法是如何工作的,將這個問題留給專門設(shè)計新算法的研究者們吧 (而且你最終會越來越熟悉這些術(shù)語,就像你會記住那些播爛了的肥皂劇里的角色一樣,久而久之,你會記住所有這些拗口的術(shù)語)
模型
一旦確立好分界線,算法就結(jié)束了。而你從算法中得到的就是你一直想要的:模型。所謂模型不過是“計算機(jī)菜譜”的酷炫叫法,它實(shí)際上就是計算機(jī)用來將數(shù)據(jù)轉(zhuǎn)換成決策的指令。當(dāng)我再次展示一瓶新的葡萄酒時,如果數(shù)據(jù)落在藍(lán)色區(qū)域,就被命名為藍(lán)。落在紅色區(qū)域?那就命名為紅。
標(biāo)簽
一旦你將剛出爐的模型投入使用,在向計算機(jī)輸入酒齡,評級分?jǐn)?shù)后,你的系統(tǒng)就會查找這瓶紅酒數(shù)據(jù)對應(yīng)的區(qū)域,并輸出一個標(biāo)簽。
當(dāng)我有四瓶新的葡萄酒時,我只需要將輸入的數(shù)據(jù)和菜單上的紅藍(lán)區(qū)域匹配,并插上標(biāo)簽,看,就是這么簡單!
那我們怎么知道這個算法到底可行不可行呢?就像檢驗(yàn)一群敲擊鍵盤的猴子是不是在寫莎士比亞詩集一樣,我們可以通過檢查輸出來判斷。
吃掉布丁才可以證明布丁
用大量的新數(shù)據(jù)來檢測你的系統(tǒng),確保你的系統(tǒng)在這些數(shù)據(jù)上都運(yùn)行良好。事實(shí)上,不管是面對一個算法還是一個拿著計算機(jī)菜譜找到你的程序員,你都應(yīng)該用大量的數(shù)據(jù)去檢測。
這是我另一篇文章里一份非常形象的總結(jié):
詩人一般的機(jī)器學(xué)習(xí)
如果這句話讓你很困惑,也許下面這個類比你會更容易接受:一位詩人挑選了一種方法(算法)來組織紙面上的詞語,這種方法決定了最后詩歌的形式(邊界形狀)
例如決定這首詩是日式俳句還是十四行詩。一旦在十四行詩這個骨架上最優(yōu)化地添加詞語,使其充實(shí)豐滿,那它就會變成一首詩(模型)。至于詩歌為什么會變成計算機(jī)菜譜,饒了我吧-我也不知道,但是我非常歡迎其他的建議。不管怎樣,這個類比的其他部分還是說得通的。
機(jī)器學(xué)習(xí)模型VS傳統(tǒng)編程代碼
不得不指出的是機(jī)器學(xué)習(xí)的這份菜譜和程序猿著眼于問題而手工敲出的代碼沒有很大區(qū)別。忘掉對機(jī)器學(xué)習(xí)人格化的幻想吧,機(jī)器學(xué)習(xí)模型和常規(guī)代碼在概念上沒有區(qū)別。是的,就是那些腦袋里充滿主觀意見和咖啡因的程序猿手寫出的菜譜代碼
不要到處嚷嚷著“再訓(xùn)練”-這個術(shù)語不過是指在加入新數(shù)據(jù)樣本后需要再跑一次算法來調(diào)整模型邊界而已。但是這個名詞讓機(jī)器學(xué)習(xí)聽起來像一個活的生物,好像它天生就和那些標(biāo)準(zhǔn)程序猿產(chǎn)品不一樣,事實(shí)上,程序猿也可以好好坐下來根據(jù)新的信息來手工調(diào)整代碼,如果你覺得你的機(jī)器學(xué)習(xí)系統(tǒng)可以加快更新迭代速度,那么就把時間好好投資在測試系統(tǒng)上,要不然還不如跑一個睡眠程序讓你自己好好休息一下。
這就是關(guān)于機(jī)器學(xué)習(xí)的一切?
差不多啦,機(jī)器學(xué)習(xí)的核心部分就是安裝各種程序包,然后捋順你雜亂無章、毛發(fā)叢生的數(shù)據(jù)怪獸,便于挑剔的算法在你的數(shù)據(jù)集上運(yùn)行。
接著就是永無止境的調(diào)整代碼設(shè)置(不要讓“超參數(shù)調(diào)優(yōu)”這個聽起來高大上的名字嚇到了你)直到你歡呼:好啦!一個模型完成啦! 但是一旦你的模型在新的數(shù)據(jù)集上表現(xiàn)不好,你就不得不重新回到畫板前,一遍又一遍的調(diào)試,直到撥云見日,你的方案終于可以拿得出手了。這就是為什么要雇用失敗承受力強(qiáng)的人來做這件事
如果你一直期望的是有魔力的算法,那么早一點(diǎn)失望,就早一點(diǎn)清醒,當(dāng)這些科幻迷信般的興奮死去時,我們才會新生出做真正酷的事情的信念。機(jī)器學(xué)習(xí)本身可能平淡無奇,但是你可以用它做的事情卻是驚天動地,它可以讓你寫出你完全想不到的程序代碼,讓你可以自動化那些無法言喻的過程,不要嫌棄機(jī)器學(xué)習(xí)的簡單,杠桿也很簡單,但是它可以撬動整個世界。
相關(guān)報道:
https://hackernoon.com/machine-learning-is-the-emperor-wearing-clothes-59933d12a3cc
【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)文章,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】