天天看點

你真的需要機器學習嗎?

[轉] https://www.leiphone.com/news/201706/YFn5cZvBwPsX7XCo.html

雷鋒網按:以機器學習為代表的人工智能領域目前是科技領域最熱門的方向之一,它被稱為新時代的水電煤,會為所有産業帶來基礎性的革命。但對于一家公司、一個部門、一款産品和一位産品經理來說,他們需要一個簡單而重要的答案:我真的需要機器學習嗎?

你真的需要機器學習嗎?

很多公司和科技部落格都在一直鼓吹“人工智能”代表未來,并提出他們會如何運用“機器學習”來改進科技,在競争中脫穎而出。但是機器學習到底是什麼,你應該怎麼使用它?又或者它隻是2017年的一個時髦熱詞而已?

長話短說,以上問題的答案是肯定的,在大多數情況下 - 但是在它可以提供幫助的地方,機器學習可以是革命性的。

是以機器學習到底是什麼?以它最原始的形式來說,機器學習是一項實踐函數逼近(function approximation)的藝術,或者說是要做出有根據的推測。它和專業人員的經驗是相同的概念,比如管道工擁有根據房屋中漏水情況快速、準确地判斷造成漏水原因的經驗。在機器學習中,我們稱這樣的經驗為“大資料”。在遇到和解決的每一個問題之後,管道工會得到一個新的資料點,她可以使用這些知識來解決将來會遇到的、相似的問題。

你真的需要機器學習嗎?

上面提到的這些看起來都很棒,但是對于近期機器學習熱度的躍升,我敢于稱其為時髦術語也是有原因的。機器學習幾乎從來都不是問題的終極答案。機器學習會很容易讓簡單的問題變的異常複雜 - 比如想要重新發明for循環的想法是完全站不住腳的。大多數所謂使用“機器學習”的公司或者是沒有真的使用機器學習的技術,或者是把普通的算法開發稱作機器學習來達到市場宣傳的效果,又或者是在産出過度複雜、計算量巨大、價格昂貴并且根本不必要的解決方案,想要解決一些本來可以使用正常手段解決的問題。

這并不意味着機器學習永遠都沒有用處。事實上,當把它正确地運用在适合的問題上,機器學習可以是一件不可思議的工具。但什麼是一個适合的問題哪?雖然不是一個機器學習問題蓋棺定論的定義,這裡有一個簡便的清單,來确定一個問題是否值得使用機器學習的方式,還是說更适合用标準的解析辦法。

作為一個機器學習問題:

  • 會有“大資料” - 許多許多資料點(一個大型的項目如果沒有上百萬個資料點的話,也許不會見到很好的效果)
  • 是一個複雜的問題 - 一般是一個以标準模式非常難以解決的問題,經常會需要一個領域中的專家
  • 是具備不确定性的 - 一樣的輸入不一定産生一樣的輸出
  • 是有多元度的 - 經驗法則是資料點的采集是從最少9各方面來做的時候,這樣的問題會更适合機器學習方式

一些符合這個清單的、流行的機器學習問題的例子包括:醫療圖檔處理,産品推薦,語音了解,文字分析,面部識别,搜尋引擎,自動駕駛車輛,擴增現實,預測人類行為。

機器學習面臨的其中一項最大的挑戰是如何處理系統中的不确定性,不确定性是指同樣的輸入不一定會産生一樣的輸出結果。針對這個問題,我們會在這篇文章中以例子的形式來解釋,這個例子是預測多倫多的天氣。在這個例子中,我們有大資料 - 包括上百年的多倫多的天氣資料。 這個問題足夠複雜,準确的天氣預測需要具備氣象科學訓練和經驗的專家。這個問題是具備不确定性的,2016年2月23日天氣冷并不意味着2017年2月23日天氣也會是一樣的,盡管他們分享一樣的曆史資料。這個問題同時也是多元度的 - 風向模式,雨量模式和任何一個會影響天氣的因素都可以成為解決問題的一個新的次元。因為這個問題是具備不确定性的,我們必須使用我們有的資訊,盡量好的去預測系統的輸出結果(預測天氣)- 我們要做出最合理的猜測。

對于機器學習來講,我們的最合理猜測或者函數逼近幾乎總是關于對于數學的創造性運用 - 這可能包括統計學/機率論,向量學,優化或者其他數學的方法。存在着幾種核心的機器學習問題,他們可以幫助我們确定什麼樣的解決方法可以最好的解決一個問題:分類學,回歸分析和聚類。在例子中,我們見到的是一個回歸分析的問題 - 從資料中預測持續性的趨勢。存在着幾種核心的方法去訓練系統,或者說給系統提供經驗去學習,這些方法包括:有監督學習,無監督學習和強化學習。在我們的例子中展示的是有監督學習,在這個例子中,所有用來訓練的資料的輸入和輸入都是已知的。我們給出一個曆史日期(輸入)就可以知道當天多倫多的天氣(輸出)。定義問題和訓練模型讓決定使用什麼樣的方法去訓練機器學習算法變的更加簡單。

到了這裡,你已經決定要預測天氣(或者解決一個不同的機器學習問題)而且你已經使用上面的清單确定了這是一個真實有意義的問題。但是應該是從哪裡入手哪?下面是一個關于解決機器學習問題步驟的簡便指南:

  1. 定義有意義的資料
  2. 定義問題
  3. 定義解決問題的方法
  4. 産出訓練和測試資料 - 從經驗來講,應該保持70%的訓練資料量,30%的測試資料量
  5. 訓練和測試算法

讓我們用我們天氣預測的問題來實踐一下上面提到的步驟:

第一步是定義有意義的資料。什麼樣的屬性是有意義的,怎麼樣去定義一個“好”的資料點和“壞”的資料點?我們可以拿幾個我們例子中的屬性來解釋一下,比如讓我們取溫度,降雨量和風速這三個屬性,把這三個屬性放在一起,我們可以基本了解到特定的一天天氣如何。如果同時有像特定一天多倫多人年齡中位數這樣的屬性,我們就應該把這樣的屬性排除在有效資料之外,因為這樣的屬性跟我們要解決的問題并沒有關系,而且有可能會影響最終的結果。

第二步,我們已經确定問題是一個回歸分析的問題,并且應該使用有監督學習的方法。第三步需要選擇一個真正的機器學習方法,在這我們不會讨論太多細節,簡單來說讓我們選擇線性回歸。第四步是取得訓練資料(留下30%的資料做測試之用)。第五步就是  實際的訓練和測試。

也許你已經從上面的步驟中發現了,實際去訓練算法是最後也隻是最不重要的一步。創造一個強大的機器學習的重要的一步是在程式設計之前,就確定你擁有有意義的資料,一個定義清晰、明确的問題和解決方案。

即使你有了定義清晰、分類準确的解決方案,有意義的資料,正确的測試資料,在資料趨勢中包括了異常值,仍然有很多地方可能出錯。在很多機器方案背後,最常見也是最緻命的錯誤是低度拟合/過度拟合。低度拟合,或者也叫過高偏差,意味着最終的近似函數太過簡單,不能很好地代表資料的趨勢。想象一下我們試圖畫一條直線穿過多倫多一年溫度的圖表,這條直線很難撞到任何一個資料點。在低度拟合和過度拟合兩者中,更常見也更危險的是過度拟合,或者也叫過高方差。在這個情況中,最後的近似函數會太過複雜,也不能很好地表現資料趨勢。過度拟合經常産生比低度拟合更差的結果,大家也很容易落入這樣的陷阱。

你真的需要機器學習嗎?

這篇文章隻是一個關于機器學習的基本介紹,更多的學習資料正變的更加普遍,在很多語言和GUIs中(目前一些最好的機器學習的資料是用Python寫就的),已經出現非常多即用型的機器學習算法和測試資料可以被用來做實驗,其中包括Theano, Tensorflow, Weka甚至包括Octave和Matlab。

附加資源連結:Theano,TensorFlow,Affine Layer Demo。

繼續閱讀