看完這篇文章,從事人工智能的我再也不敢裝逼了
機器學習是什么?給你十秒鐘,請給出答案。
……
不知道?就這你還想從事人工智能行業(yè)?得了吧!
聽著:機器學習使用數(shù)據中的模式來標記事物。
聽起來是不是很神奇?
......
好了,就此打住。
機器學習的核心概念其實非常簡單,簡單到讓人“尷尬”。
這里說的“尷尬”是指,如果有人在你面前“裝逼”,讓你覺得機器學習很神奇,他們應該感到尷尬。為什么呢?且看這篇“反裝逼”指南。
這篇指南的作者是Cassie Kozyrkov,谷歌的首席決策情報工程師,不僅人美,心也善。經常在Hacker Noon上發(fā)表一些與人工智能相關的干貨文章。
在這篇指南中,她使用的例子是葡萄酒。她還很貼心地提到,如果你不喜歡喝葡萄酒,也可以把葡萄酒腦補成任何你喜歡喝的飲品,比如茶。
好了,廢話不多說,讓我們搬起小板凳,進入正題吧~
機器學習到底是如何工作的?
機器學習并不是魔法,沒有數(shù)據是不可能學習的,所以想要完成這個類比,必須要喝一些葡萄酒。
數(shù)據
為了學習,需要有獻身精神。大家可以體會下,一口氣喝了50種葡萄酒是種什么感受。關鍵是喝完酒還不算完,我還要處理這些信息,并把它們可視化,以便在下面觀看。
每一種葡萄酒都有相應的年份,品嘗完了之后要打個分,然后給出一個判斷。這個判斷,也就是我們希望人工智能之后能夠自己做出的判斷:Y代表好喝,N代表不好喝。
相關的數(shù)據都記錄在了電子表格中(左),但是為了讓大家看得舒服,我把所有的數(shù)據都可視化了(右)。
算法
接下來,就要進行下一件事情了。把紅色區(qū)域和藍色區(qū)域分開,你能做到嗎?機器學習就是要選擇一種算法來完成這個過程,選了哪個算法,就決定了最后會得到哪種模型。
如果你想著劃一條線來完成這項工作的話,那恭喜你!你剛剛發(fā)明了一種機器學習算法,它的名字叫……感知器(perceptron)。是的,就是這么高大上,它的名字就是這么酷炫。請不要被機器學習中的“行話”嚇倒,通常情況下都是大忽悠。
但是,你劃的線應該指向哪里呢?我們的目標是把Y和N分開,劃一條直線并不是一個非常聰明的解決方案。
我們選擇一種機器學習算法的目的,是為了找到最合理的地方劃出分界線。這需要通過優(yōu)化目標函數(shù)來完成。
優(yōu)化
你可以這樣想:目標函數(shù)就像是棋盤游戲的規(guī)則一樣,優(yōu)化就是找到一個能夠獲得高分的玩法。
從傳統(tǒng)上來說,在機器學習中,我們更喜歡“棍棒”而不是“胡蘿卜”。也就是對錯誤進行計分。這就是為什么機器學習中的目標函數(shù)被稱為“損失函數(shù)”,目的就是要盡量減少損失。
想親自玩一把嗎?回到上面的那張圖,用你的手指在屏幕上劃線把Y和N分開,直到零失誤。感知器同志,感覺到未來觸手可及了嗎?
也許,你得到的解決方案是這樣的:
最左邊的這種結果,我沒有嘗試過。中間的那個也不太合適。我最喜歡的是最右邊那個。
算法是具有多樣性的,它們之間最不同的一個方面,就是它們怎么去確定分界線。
癡迷于優(yōu)化的那群人會告訴你,以微小的增量調整分界線是不明智的,還有更好、更快的方法來找到最佳位置。一些研究人員致力于花一輩子的時間找出一種方法,不管數(shù)據多復雜,都能最簡單地找到最好的分界線位置。
算法的另一個不同的方面是邊線的形狀。邊界線不一定是直的。不同的算法,使用的邊界線形狀也不同。如下圖:
為追趕潮流的人設計的算法
如今,沒有一個追趕數(shù)據科學浪潮的人會選擇用直線來區(qū)分。那些看上去很靈活、很彎曲的線在他們之中非常流行。他們會使用其實并沒有多少神經的神經網絡算法。我更傾向于稱它們?yōu)?ldquo;瑜伽網絡”或者是“多層數(shù)學運算”,但好像沒有人喜歡我的這種叫法。
不同的算法會告訴你,它們會在數(shù)據中放置什么形狀的邊界線。但如果你是一個應用型的機器學習愛好者,記不住它們那種天書般的名字也沒關系——在實踐中,你只需要盡可能多地將數(shù)據輸入到算法中,然后重復執(zhí)行那些看起來很有希望的事情就行了。
模型
一旦邊界線劃好了,算法也就完成了,你就能從中得到你想要的東西了:一個模型。在下一次我給它“看”一瓶新的葡萄酒的時候,它就能將數(shù)據轉換成決定。
標簽
一旦你把新鮮出爐的模型投入使用,在計算機中輸入葡萄酒的年份和評價分數(shù)后,你的模型會給它找出對應的區(qū)域并輸出標簽。
那問題來了,我們如何知道它是否有效呢?誰知道這是不是瞎搞?最直接的辦法就是對輸出進行檢查。
通過運行一堆新數(shù)據來測試你的模型,并確保它能夠一直能夠良好的運行。事實上,無論模型是算法想出來的還是程序員想出來,都要這樣做。
結語
在我此前的另一篇文章中,我對整個過程進行了一個類比:
詩人與機器學習
如果你看不懂這個類比,也許你會喜歡這個:詩人會選擇一種方法(算法),將文字寫在紙上。這種方法決定了詩歌的形式(邊界線形狀)是俳句還是十四行詩?一旦他們以最佳的方式完成了十四行詩,它現(xiàn)在就是一首詩(模型)。
機器學習模型與傳統(tǒng)的編程
但是,以這種方式得到的模型,與程序員通過觀察問題,并手動制定一些規(guī)則來編寫的代碼沒有太大的不同。二者在概念上是相同的。
不要到處說機器學習的“再訓練”(retraining)有多厲害了。程序員也可以坐在那里調整代碼以響應新的信息。
這就是全部了嗎?
是的,差不多了。機器學習工程中最困難的部分就是安裝軟件包,接著就是處理數(shù)據集,然后就能在上面運行一個有限的算法了。
接下來就是“超參數(shù)調優(yōu)”,別被忽悠住了,不過是在生成一個模型之前,沒完沒了地擺弄代碼設置而已。
當你使用新的數(shù)據評估這個模型的時候,如果結果不太理想,你還得一遍又一遍地重復,直到能夠拿出手。 這就是為什么雇傭一些對失敗有耐心的人來做這件事非常重要。如果是個玻璃心,估計撐不了幾回合就吐血了吧。
如果你期待有什么奇跡,我勸你越早失望越好。機器學習是非常枯燥的過程。但是,如果你能夠耐得住性子,你能做的事情將會是非常不可思議的。它可以幫你寫下你自己都想不到的代碼,還讓你能夠把那些不可言說的代碼自動化。
最后,提個醒。不要因為簡單而討厭它。要知道,杠桿也很簡單,但它可以撬動整個地球。