機器學習是如何運作的?谷歌來告訴你
最近媒體報道谷歌正在利用機器學習幫助處理搜索結果,這引發了人們對于這一人工智能領域的興趣和疑問。什么是“機器學習”,機器是如何自學的呢?這里有一些 Google 內部關于機器學習的背景介紹。
昨天 Google 為科技記者舉辦了一場活動 —— “機器學習的入門課程”。我就是其中一位與會者。盡管宣傳上說只是一些介紹,但對我和其他一些記者而言,里面的內容有相當的技術含量,難以消化。
例如,當一個演講者告訴我們機器學習中的數學是“容易的”,而且還在同一句話里提到了微積分。我不得不說,和外行相比,他們對于“容易”有著完全不同的理解。
然而,我還是對機器學習的過程和組成有了進一步的理解,涉及機器(計算機)如何學會自學,去識別物體、文字、口語詞匯和其他的東西。下面是我記錄的要點。
機器學習的組成
機器學習系統由三個主要部分組成,包括:
- 模型:用來預測或識別的系統。
- 參數:模型做決定所使用的信號或因素。
- 學習器:這個系統通過檢查預測和實際輸出的差異來調整參數,再對模型進行調整。
現在讓我把昨天 Greg Corrado 討論的東西轉換成現實世界的一個實際問題。Greg Coorado 是 Goolge 的一位資深研究科學家,也是公司深度學習團隊的共同創始人。
想象你自己是一位老師。你想確認如果學生要在考試中取得好成績,最優的學習時間會是多少。你向機器學習求助以便找到一個解決方案。是的,對于這個問題而言,可能有點大材小用。但這是一個非常簡單的說明。
構造模型
一切都要從模型開始,機器學習用它來進行預測。至少在這個特定的例子中,系統最初的模型必須由人類提供。在我們的例子中,老師可以告訴機器學習模型進行這樣的假設,即學習 5 個小時就可以取得好成績。
模型本身借助參數進行計算。這個例子中,參數是學習時間和取得的分數。假設參數像下面這樣:
- 0 小時 = 50% 分數
- 1 小時 = 60% 分數
- 2 小時 = 70% 分數
- 3 小時 = 80% 分數
- 4 小時 = 90% 分數
- 5 小時 = 滿分
實際上機器學習系統使用一個數學方程式來表示上述模型,事實上形成了一條預期的趨勢線。這個是昨天講座的一個例子:
提供最初的輸入
現在模型已經確定了,需要輸入實際的信息了。比如我們的老師可能會輸入不同學生的 4 個分數,以及他們學習的小時數。
在這個例子中,結果是這些分數和模型不匹配。有的分數在預測趨勢線的上面,有的在下面:
現在該輪到機器學習中的學習器了!
學習器進行學習
那些輸入分數的集合?這些輸入機器學習系統的數據通常被稱為“訓練集”或者“訓練數據”,因為系統中的學習器借助它們訓練自己,以便生成一個更好的模型。
學習器查看這些分數,看它們距離模型有多遠。它利用更多的數學知識來調整最初的假設。比如,上面的列表很可能被替換成這樣:
- 0 小時 = 45% 分數
- 1 小時 = 55% 分數
- 2 小時 = 65% 分數
- 3 小時 = 75% 分數
- 4 小時 = 85% 分數
- 5 小時 = 95% 分數
- 6小時 = 滿分
新的預測被重新調整了,取得滿分需要更多的學習時間。
這只是流程的一個例子,當然這個例子完全是虛構的。最重要的收獲就是理解學習部分對參數進行微調,并改善模型。我稍后再討論這一點。
清洗并重復
現在輸入一個新的分數集和時間,系統重新運行。這些實際的分數和學習部分修改后的模型做比較。如果成功,這些分數會很接近預測結果:
但是還不夠完美。所以學習器再一次調整參數,重構模型。另外一組測試數據被輸入進去。重新比較,學習器再一次調整模型。
這個循環過程會一直重復,直至得到一個最終的模型,它可以真的根據學習的小時數預測出取得的分數。
梯度下降法:如何避免機器學習失敗
Google 的 Corrado 強調絕大多數的機器學習都是基于“梯度下降”或“梯度學習”的概念。也就是系統通過不斷的微小調整直至得到正確的答案。
Corrado 喜歡把這比喻成從一個很陡峭的山峰下來。你不會想要跳下來或者跑下來,那樣太危險了。你很可能會不小心掉下去。事實上你會很小心得一點點挪下去。
還記得我上面提到的“數學很簡單”嗎?很顯然對于那些了解微積分和數學運算的人來說,涉及到的方程式真的很簡單。
事實上現實的挑戰是計算能力。要完成所有這些步驟,機器要花很長時間學習。但是計算機會更快更強大,機器學習之前被認為是不可能的,而現在已變得相當普遍了。
異想天開:識別貓
上面的例子非常簡單。就像上面說的,一個老師利用機器學習預測考試分數實在是大材小用。但同樣簡單的系統可以用來做復雜的事情,比如識別貓的圖片。
計算機不能像人類那樣看東西。所以它們如何能夠識別物體?就像 Google Photos 可以從我的照片中挑出很多物體一樣:
機器學習可以做到這一點!還是同樣的原理。你利用一些可能的因素構建了一個模型,這些因素可以幫助識別圖像中的貓,比如顏色,形狀等等。接下來你輸入一個訓練集,是一些有貓的圖片,然后看這個模型工作的怎么樣。
學習器進行調整,重復訓練的循環。但識別貓和其它物體是很困難的。有很多參數可作為模型的一部分,甚至參數里還可以嵌套參數,這些參數被用來把圖片轉換成系統匹配物體的模式。
比如,最終系統是這樣找到一只地毯上的貓:
這是一幅類似油畫的圖片,是利用 Google 發布的 DeepDream 代碼做出來的,Google 進一步 分享 了機器學習系統是如何建立模式來識別物體。
The image is really an illustration of the type of patterns that the computer is looking for, when it identifies a cat, rather than being part of the actual learning process. But if the machine could really see, it’s a hint toward how it would actually do so.
這幅圖事實上說明了,當計算機識別一只貓的時候,是在查找某種模式類型,而不是作為實際學習過程的一部分。但如果機器真的可以看到,這就提示了實際上它會如何做。
順便說一下,從我們最初的例子發展到圖像識別,模型已經不是人類而是機器創造出來的。它們自己嘗試理解一個物體是什么,通過原始的顏色、形狀和其他特性的組合來構建,然后利用訓練數據進行優化。
識別活動
進一步加大難度,想象除了識別物體還要識別活動。Google 解釋說要增加一些常識性的規定,而且人類還要引導機器學習過程,讓它理解不同的物體如何出現在一個活動上。
比如考慮這個:
就像上面投影片里描述的,一個機器學習系統看到一個小孩、一個籃子和一個雞蛋。但一個人類看到所有這些,會知道這是尋找復活節彩蛋的活動。
RankBrain的技術內幕呢?
所有這些機器學習是如何應用到 Rank Brain 上的?Google 并沒有討論這方面的技術細節。事實上在正式討論中都沒有提及,在演講間歇中也沒有披露什么新的消息(都是一些已經公開的信息)。( 譯者注:RankBrain,是 Google 研發的一套機器學習人工智能系統,用來幫助排序搜索結果。 )詳見《 谷歌人工智能算法 RankBrain 運行原理解析 》。
為什么?當然是競爭的考量。Google 分享了很多它如何利用機器學習的信息。甚至在其他領域分享了很多技術細節。但是它對將如何在搜索上應用機器學習諱莫如深,防止泄漏很多它認為重要和獨特的信息。
想了解更多?
如果你想要進一步了解機器學習,可以參考 Google 相關研究的 博客 , 這里 還有一些共享的研究報告和下面一個最新的視頻: