1. 程式人生 > >一個例子讓你秒懂機器學習

一個例子讓你秒懂機器學習

近年來,機器學習和大資料領域的突破進展使人工智慧急速回溫,訓練計算機模擬甚至實現人類的學習行為則是目前人工智慧領域最受關注的研究課題之一。

很多人都難以想象,看似冷冰冰的機器如何能在短時間內學得一身本領的?


大資料、分析、物聯網、雲技術……最近的幾年裡,沒有這些術語你就無法參與到關於科技的討論和對話中。它們已經成了科技中主要的參與者,影響著商務的方方面面。

變化似乎正在以極快的速度發生著,並且沒有減速的跡象。 如今,科技中唯一不變的就是變化本身了。不斷的變化需要不斷的創新,因此就需要引入更多的新技術。進入科技話題的新技術之一是機器學習。

Gartner指出機器學習是2016年十大技術趨勢之一,毫無疑問這是一個熱點話題。但是,無論是專業從業者還是業餘愛好者都必須弄清楚一個問題:什麼是機器學習?

作為機器學習領域的先驅,Arthur Samuel在 IBM Journal of Research and Development期刊上發表了一篇名為《Some Studies in Machine Learning Using the Game of Checkers》的論文中,將機器學習非正式定義為:

“在不直接針對問題進行程式設計的情況下,賦予計算機學習能力的一個研究領域。”

而後,Tom Mitchell在他的《Machine Learning(中文版:電腦科學叢書:機器學習 )》一書的序言開場白中又給出了一個更為廣泛引用的定義:

“機器學習這門學科所關注的問題是:計算機程式如何隨著經驗積累自動提高效能。”

他在引言中多次重複提到一個簡短的形式體系:“對於某類任務T和效能度量P,如果一個計算機程式在T上以P衡量的效能隨著經驗E而自我完善,那麼我們稱這個計算機程式在從經驗E學習

。”     

是不是看得一頭霧水?不要讓術語的定義把你嚇跑,這是一個非常有用的形式體系。

我們把這一形式體系作為一個模版,把經驗E、任務T和效能度量P列在一張表的頂部,並且列出帶有更少歧義的複雜問題。它可以作為一個設計工具來幫助我們清楚的思考收集什麼樣的資料(E),需要做出什麼樣的決策(T),以及如何評價結果(P)。

舉個例子吧,想象一下有一個郵箱過濾程式接受到一封郵件,該程式如何判斷這封郵件是不是垃圾郵件呢?首先這封郵件先觀察你之前標記過是不是垃圾郵件的郵件,基於這個學習到的經驗,該過濾程式為你過濾掉垃圾郵件了。

在這個任務中:

  • 判斷郵件是不是垃圾郵件,這個是任務T;

  • 觀察到你之前標記過是不是垃圾郵件的郵件,這個是經驗E;

  • 正確分類垃圾郵件與非垃圾郵件的數量,這個是效能P。

如果還是不懂,那麼,看來是時候祭出這個古老經典的買芒果例子了:

假設有一天你去購買芒果,老闆擺了滿滿的芒果,你會挑選一些芒果後讓老闆稱重,然後根據重量付款購買。

顯然,你希望挑選相對更成熟更甜一些的芒果(因為你是根據重量付款而不是根據質量),所以你應該怎麼挑選芒果呢?你想起來你媽媽曾教過你,亮黃色的芒果比暗黃色的芒果更甜一些,所以你有了一個簡單的規則:只挑選亮黃色的芒果。

是不是So easy ?並不是。。。生活總會更加複雜。

你回家吃了這些芒果之後,也許會覺得有的芒果味道並不好......很顯然,你媽媽教給你的方法很片面,挑選芒果的因素有很多而不只是根據顏色。

在經過大量思考(並且試吃了很多不同型別的芒果)之後,你又得出一個結論:相對更大的亮黃色芒果肯定是甜的,同時,相對較小的亮黃色芒果只有一半是甜的。你會很開心自己得出的結論,然後下次去買芒果的時候就根據這個結論去買芒果。

但是下次又去買芒果的時候,你喜歡的那家店不賣了......

所以你只能買別家的芒果,不過別家的芒果和之前你常去的那家的芒果不是一個產地的。然後你發現你之前得出的結論不適用了。你不知道能不能遷移過去(transfer learning),於是你從頭再開始嘗試吧,發現這裡小的,淺黃色的是最甜的!

這時候呢假設你有朋友來家裡了,你擺了一些芒果給他們吃,但是你朋友說他並不是很在意芒果甜不甜,他更加喜歡多汁的芒果(這個朋友是不是很煩?)。

又一次,你根據你的經驗,又嚐了所有型別的芒果,然後發現: 軟一點的芒果比較多汁。

然後後來你又因為工作或其他原因要搬家了,在新的地方你發現這裡的芒果和家鄉的芒果又不一樣,這裡的芒果綠色的實際上會比黃色的更甜一點...... 

然後你家裡來了個妹妹,結果妹妹竟然不喜歡芒果,喜歡蘋果。所以你只得去買蘋果,你之前所有實踐得出的芒果的知識都沒用了。你需要根據之前挑芒果的經驗,用相同的辦法重新研究一遍哪些蘋果的口感最好。

現在呢想象一下,你在寫一個程式幫助你挑選芒果(或者蘋果),你會寫到類似如下的規則:

if ( color is bright yellow and size is big and sold is vendor1 ): mango is sweet ;

if ( soft ): mango is juicy ;

etc.

這就是你挑芒果時用到的規則了。把它發給你的弟弟,想必他也能幫你買到對你口味的芒果。

但問題在於,每回你在試驗之後得出了觀察結果,你都得把規則做一番修正。你還得明察秋毫地瞭解清楚都有那些因素在影響芒果的品質。如果問題複雜起來的話,你在上面耗費的心血甚至都有可能為你拿個 “芒果科學” 的 PhD 下來(如果有的話)......

寫個機器學習演算法吧

機器學習演算法是普通演算法的進化版,它們讓你的程式變得 “更聰明”,能從你提供的資料裡自動學到東西。

你在市場上隨機選擇了某個品種的芒果(training data),把每個芒果的物理特徵都寫進了一個表格——顏色、大小、形狀、產地、所屬果攤等(features),甜度、多汁程度、成熟度(output variables)也做了記錄。你把這些資料都放進了一個機器學習演算法(classification/regression),然後這個演算法就會自動從芒果的物理特徵和品質之間得出一個相關性模型。

等到下一回你到市場的時候,你把在售的芒果的特徵資訊都收集起來,再扔進你的機器學習演算法,它就會利用之前計算出來的模型來預測哪些芒果是甜的、熟的、以及/或多汁的了。該演算法可能會使用和你曾經手寫的差不多的規則,也有可能使用的規則會更有相關性,不管怎樣,在很大程度上你都不用操太多心了。

現在,演算法在手,你就可以挺直身板去買芒果去了。更重要的是,你的演算法還能繼續演進(reinforcement learning),讀取更多的訓練資料,準確率也更高,每預測錯誤後再進行自我修正。

更妙的是,你還能用同一個演算法來訓練不同的模型,預測預測蘋果、橙子、香蕉、葡萄、櫻桃、西瓜什麼的......