揭穿機器學習“皇帝的新裝”

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