在合適的地方,機(jī)器學(xué)習(xí)帶來的將是一場革命
以機(jī)器學(xué)習(xí)為代表的人工智能領(lǐng)域目前是科技領(lǐng)域最熱門的方向之一,它被稱為新時代的水電煤,會為所有產(chǎn)業(yè)帶來基礎(chǔ)性的革命。但對于一家公司、一個部門、一款產(chǎn)品和一位產(chǎn)品經(jīng)理來說,他們需要一個簡單而重要的答案:我真的需要機(jī)器學(xué)習(xí)嗎?
你真的需要機(jī)器學(xué)習(xí)嗎?
很多公司和科技博客都在一直鼓吹“人工智能”代表未來,并提出他們會如何運(yùn)用“機(jī)器學(xué)習(xí)”來改進(jìn)科技,在競爭中脫穎而出。但是機(jī)器學(xué)習(xí)到底是什么,你應(yīng)該怎么使用它?又或者它只是2017年的一個時髦熱詞而已?
長話短說,以上問題的答案是肯定的,在大多數(shù)情況下 – 但是在它可以提供幫助的地方,機(jī)器學(xué)習(xí)可以是革命性的。
所以機(jī)器學(xué)習(xí)到底是什么?以它最原始的形式來說,機(jī)器學(xué)習(xí)是一項(xiàng)實(shí)踐函數(shù)逼近(function approximation)的藝術(shù),或者說是要做出有根據(jù)的推測。它和專業(yè)人員的經(jīng)驗(yàn)是相同的概念,比如管道工擁有根據(jù)房屋中漏水情況快速、準(zhǔn)確地判斷造成漏水原因的經(jīng)驗(yàn)。在機(jī)器學(xué)習(xí)中,我們稱這樣的經(jīng)驗(yàn)為“大數(shù)據(jù)”。在遇到和解決的每一個問題之后,管道工會得到一個新的數(shù)據(jù)點(diǎn),她可以使用這些知識來解決將來會遇到的、相似的問題。
上面提到的這些看起來都很棒,但是對于近期機(jī)器學(xué)習(xí)熱度的躍升,我敢于稱其為時髦術(shù)語也是有原因的。機(jī)器學(xué)習(xí)幾乎從來都不是問題的終極答案。機(jī)器學(xué)習(xí)會很容易讓簡單的問題變的異常復(fù)雜 – 比如想要重新發(fā)明for循環(huán)的想法是完全站不住腳的。大多數(shù)所謂使用“機(jī)器學(xué)習(xí)”的公司或者是沒有真的使用機(jī)器學(xué)習(xí)的技術(shù),或者是把普通的算法開發(fā)稱作機(jī)器學(xué)習(xí)來達(dá)到市場宣傳的效果,又或者是在產(chǎn)出過度復(fù)雜、計算量巨大、價格昂貴并且根本不必要的解決方案,想要解決一些本來可以使用常規(guī)手段解決的問題。
這并不意味著機(jī)器學(xué)習(xí)永遠(yuǎn)都沒有用處。事實(shí)上,當(dāng)把它正確地運(yùn)用在適合的問題上,機(jī)器學(xué)習(xí)可以是一件不可思議的工具。但什么是一個適合的問題哪?雖然不是一個機(jī)器學(xué)習(xí)問題蓋棺定論的定義,這里有一個簡便的清單,來確定一個問題是否值得使用機(jī)器學(xué)習(xí)的方式,還是說更適合用標(biāo)準(zhǔn)的解析辦法。
作為一個機(jī)器學(xué)習(xí)問題:
- 會有“大數(shù)據(jù)” – 許多許多數(shù)據(jù)點(diǎn)(一個大型的項(xiàng)目如果沒有上百萬個數(shù)據(jù)點(diǎn)的話,也許不會見到很好的效果)
- 是一個復(fù)雜的問題 – 一般是一個以標(biāo)準(zhǔn)模式非常難以解決的問題,經(jīng)常會需要一個領(lǐng)域中的專家
- 是具備不確定性的 – 一樣的輸入不一定產(chǎn)生一樣的輸出
- 是有多維度的 – 經(jīng)驗(yàn)法則是數(shù)據(jù)點(diǎn)的采集是從最少9各方面來做的時候,這樣的問題會更適合機(jī)器學(xué)習(xí)方式
一些符合這個清單的、流行的機(jī)器學(xué)習(xí)問題的例子包括:醫(yī)療圖片處理,產(chǎn)品推薦,語音理解,文字分析,面部識別,搜索引擎,自動駕駛車輛,擴(kuò)增現(xiàn)實(shí),預(yù)測人類行為。
機(jī)器學(xué)習(xí)面臨的其中一項(xiàng)最大的挑戰(zhàn)是如何處理系統(tǒng)中的不確定性,不確定性是指同樣的輸入不一定會產(chǎn)生一樣的輸出結(jié)果。針對這個問題,我們會在這篇文章中以例子的形式來解釋,這個例子是預(yù)測多倫多的天氣。在這個例子中,我們有大數(shù)據(jù) – 包括上百年的多倫多的天氣資料。 這個問題足夠復(fù)雜,準(zhǔn)確的天氣預(yù)測需要具備氣象科學(xué)訓(xùn)練和經(jīng)驗(yàn)的專家。這個問題是具備不確定性的,2016年2月23日天氣冷并不意味著2017年2月23日天氣也會是一樣的,盡管他們分享一樣的歷史數(shù)據(jù)。這個問題同時也是多維度的 – 風(fēng)向模式,雨量模式和任何一個會影響天氣的因素都可以成為解決問題的一個新的維度。因?yàn)檫@個問題是具備不確定性的,我們必須使用我們有的信息,盡量好的去預(yù)測系統(tǒng)的輸出結(jié)果(預(yù)測天氣)- 我們要做出最合理的猜測。
對于機(jī)器學(xué)習(xí)來講,我們的最合理猜測或者函數(shù)逼近幾乎總是關(guān)于對于數(shù)學(xué)的創(chuàng)造性運(yùn)用 – 這可能包括統(tǒng)計學(xué)/概率論,向量學(xué),優(yōu)化或者其他數(shù)學(xué)的方法。存在著幾種核心的機(jī)器學(xué)習(xí)問題,他們可以幫助我們確定什么樣的解決方法可以最好的解決一個問題:分類學(xué),回歸分析和聚類。在例子中,我們見到的是一個回歸分析的問題 – 從數(shù)據(jù)中預(yù)測持續(xù)性的趨勢。存在著幾種核心的方法去訓(xùn)練系統(tǒng),或者說給系統(tǒng)提供經(jīng)驗(yàn)去學(xué)習(xí),這些方法包括:有監(jiān)督學(xué)習(xí),無監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)。在我們的例子中展示的是有監(jiān)督學(xué)習(xí),在這個例子中,所有用來訓(xùn)練的數(shù)據(jù)的輸入和輸入都是已知的。我們給出一個歷史日期(輸入)就可以知道當(dāng)天多倫多的天氣(輸出)。定義問題和訓(xùn)練模型讓決定使用什么樣的方法去訓(xùn)練機(jī)器學(xué)習(xí)算法變的更加簡單。
到了這里,你已經(jīng)決定要預(yù)測天氣(或者解決一個不同的機(jī)器學(xué)習(xí)問題)而且你已經(jīng)使用上面的清單確定了這是一個真實(shí)有意義的問題。但是應(yīng)該是從哪里入手哪?下面是一個關(guān)于解決機(jī)器學(xué)習(xí)問題步驟的簡便指南:
- 定義有意義的數(shù)據(jù)
- 定義問題
- 定義解決問題的方法
- 產(chǎn)出訓(xùn)練和測試數(shù)據(jù) – 從經(jīng)驗(yàn)來講,應(yīng)該保持70%的訓(xùn)練數(shù)據(jù)量,30%的測試數(shù)據(jù)量
- 訓(xùn)練和測試算法
讓我們用我們天氣預(yù)測的問題來實(shí)踐一下上面提到的步驟:
第一步是定義有意義的數(shù)據(jù)。什么樣的屬性是有意義的,怎么樣去定義一個“好”的數(shù)據(jù)點(diǎn)和“壞”的數(shù)據(jù)點(diǎn)?我們可以拿幾個我們例子中的屬性來解釋一下,比如讓我們?nèi)囟?,降雨量和風(fēng)速這三個屬性,把這三個屬性放在一起,我們可以基本了解到特定的一天天氣如何。如果同時有像特定一天多倫多人年齡中位數(shù)這樣的屬性,我們就應(yīng)該把這樣的屬性排除在有效數(shù)據(jù)之外,因?yàn)檫@樣的屬性跟我們要解決的問題并沒有關(guān)系,而且有可能會影響最終的結(jié)果。
第二步,我們已經(jīng)確定問題是一個回歸分析的問題,并且應(yīng)該使用有監(jiān)督學(xué)習(xí)的方法。第三步需要選擇一個真正的機(jī)器學(xué)習(xí)方法,在這我們不會討論太多細(xì)節(jié),簡單來說讓我們選擇線性回歸。第四步是取得訓(xùn)練數(shù)據(jù)(留下30%的數(shù)據(jù)做測試之用)。第五步就是 實(shí)際的訓(xùn)練和測試。
也許你已經(jīng)從上面的步驟中發(fā)現(xiàn)了,實(shí)際去訓(xùn)練算法是最后也只是最不重要的一步。創(chuàng)造一個強(qiáng)大的機(jī)器學(xué)習(xí)的重要的一步是在編程之前,就確保你擁有有意義的數(shù)據(jù),一個定義清晰、明確的問題和解決方案。
即使你有了定義清晰、分類準(zhǔn)確的解決方案,有意義的數(shù)據(jù),正確的測試數(shù)據(jù),在數(shù)據(jù)趨勢中包括了異常值,仍然有很多地方可能出錯。在很多機(jī)器方案背后,最常見也是最致命的錯誤是低度擬合/過度擬合。低度擬合,或者也叫過高偏差,意味著最終的近似函數(shù)太過簡單,不能很好地代表數(shù)據(jù)的趨勢。想象一下我們試圖畫一條直線穿過多倫多一年溫度的圖表,這條直線很難撞到任何一個數(shù)據(jù)點(diǎn)。在低度擬合和過度擬合兩者中,更常見也更危險的是過度擬合,或者也叫過高方差。在這個情況中,最后的近似函數(shù)會太過復(fù)雜,也不能很好地表現(xiàn)數(shù)據(jù)趨勢。過度擬合經(jīng)常產(chǎn)生比低度擬合更差的結(jié)果,大家也很容易落入這樣的陷阱。
這篇文章只是一個關(guān)于機(jī)器學(xué)習(xí)的基本介紹,更多的學(xué)習(xí)資料正變的更加普遍,在很多語言和GUIs中(目前一些最好的機(jī)器學(xué)習(xí)的資料是用Python寫就的),已經(jīng)出現(xiàn)非常多即用型的機(jī)器學(xué)習(xí)算法和測試數(shù)據(jù)可以被用來做實(shí)驗(yàn),其中包括Theano, Tensorflow, Weka甚至包括Octave和Matlab。