《神經網絡與深度學習》(七) 淺談AlphaGo背後所涉及的深度學習技術

導讀:關於Alfa Go的評論文章不少,但真正可以與開發團隊交流的卻很少,感謝Alfa Go開發團隊DeepMind的朋友對我這篇文章內容的關注與探討,指出我在以前那一版文章中用字上的不夠較精確,因此在此又做調整。我以前文章提到的「全局」指的是跨時間點的整場賽局,很容易被誤認爲是某個特定時點整個棋盤的棋局,因此後面所有都修改成「總體棋局」。此外,關於總體棋局評估,除了透過脫機數據學習的評價網絡以外,還能夠透過根據目前狀態實時計算的不一樣策略評價差別(這項技術稱之爲Rollouts),它透過將計算結果進行快取,也能作到局部考慮總體棋局的效果。再次感謝DeepMind朋友的斧正。html

在人類連輸AlphaGo三局後的今天,正好是一個好時機,可讓你們對於AlphaGo所涉及的深度學習技術可以有更多的理解(而不是想象復仇者聯盟中奧創將到來的恐慌)。在說明Alpha Go的深度學習技術以前,我先用幾個簡單的事實總結來釐清你們最常誤解的問題:前端

  ●AlphaGo此次使用的技術本質上與深藍大相徑庭,再也不是使用暴力解題法來贏過人類。算法

  ●沒錯,AlphaGo是透過深度學習可以掌握更抽象的概念,可是計算機仍是沒有自我意識與思考。網絡

  ●AlphaGo並無理解圍棋的美學與策略,他只不過是找出了2個美麗且強大的函數來決定他的落子。架構

 

什麼是類神經網絡?分佈式

      其實類神經網絡是很古老的技術了,在1943年,Warren McCulloch以及Walter Pitts首次提出神經元的數學模型,以後到了1958年,心理學家Rosenblatt提出了感知器(Perceptron)的概念,在前者神經元的結構中加入了訓練修正參數的機制(也是咱們俗稱的學習),這時類神經網絡的基本學理架構算是完成。類神經網絡的神經元實際上是從前端收集到各類訊號(相似神經的樹突),而後將各個訊號根據權重加權後加總,而後透過活化函數轉換成新訊號傳送出去(相似神經元的軸突)。函數


      至於類神經網絡則是將神經元串接起來,咱們能夠區分爲輸入層(表示輸入變量),輸出層(表示要預測的變量),而中間的隱藏層是用來增長神經元的複雜度,以便讓它可以仿真更復雜的函數轉換結構。每一個神經元之間都有連結,其中都各自擁有權重,來處理訊號的加權。學習


      傳統的類神經網絡技術,就是透過隨機指派權重,而後透過遞歸計算的方式,根據輸入的訓練數據,逐一修正權重,來讓總體的錯誤率能夠降到較低。隨着倒傳導網絡、無監督式學習等技術的發展,那時一度類神經網絡蔚爲顯學,不過人類很快就遇到了困難,那就是計算能力的不足。由於當隱藏層只有一層的時候,其實大多數的情況,類神經網絡的分類預測效果其實並不會比傳通通計的羅吉斯迴歸差太多,可是卻要耗費更龐大的計算能力,可是隨着隱藏層神經元的增長,或者是隱藏層的增長,那麼所須要計算權重數量就會嚴重暴增。因此到了八十年代後期,整個類神經網絡的研究就進入了寒冬,各位可能只能在洗衣機裏體會到它小小威力(如今洗衣機里根據倒入衣物評估水量與運行時間不少都是用類神經網絡做的),說真的,類神經網絡一點都沒有被認爲強大。測試

      這個寒冬一直持續到2006年,在Hinton以及Lecun小組提出了「A fast learningalgorithm for deep belief nets」論文以後,終於有了復甦的但願,它們提出的觀點是若是類神經網絡神經元權重不是以隨機方式指派,那麼應該能夠大幅縮短神經網絡的計算時間,它們提出的方法是利用神經網絡的非監督式學習來作爲神經網絡初始權重的指派,那時因爲各家的論文期刊只要看到類神經網絡字眼基本上就視爲垃圾不刊登,因此他們才提出深度學習這個新的字眼突圍。除了Hinton的努力以外,得力於摩爾定律的效應,咱們能夠用有更快的計算能力,Hinton後來在2010年使用了這套方法搭配GPU的計算,讓語音識別的計算速度提高了70倍以上。深度學習的新一波高潮來自於2012年,那年的ImageNet大賽(有120萬張照片做爲訓練組,5萬張當測試組,要進行1000個類別分組)深度學習首次參賽,把過去好幾年只有微幅變更的錯誤率,一下由26%下降到15%。而同年微軟團隊發佈的論文中顯示,他們透過深度學習將ImageNet 2012數據集的錯誤率降到了4.94%,比人類的錯誤率5.1%還低。而去年(2015年)微軟再度拿下ImageNet 2015冠軍,此時錯誤率已經降到了3.57%的超低水平,而微軟用的是152層深度學習網絡(我當初看到這個數字,嚇都嚇死了)….優化

 

卷積神經網絡(Convolutional Neural Network)

      在圖像識別的問題上,咱們處理的是一個二維的神經網絡結構,以100*100像素的圖片來講,其實輸入數據就是這10000像素的向量(這仍是指灰階圖片,若是是彩色則是30000),那若是隱藏層的神經元與輸入層至關,咱們等於要計算10的8次方的權重,這個數量想到就頭疼,即便是透過並行計算或者是分佈式計算都恐怕很難達成。所以卷積神經網絡提出了兩個很重要的觀點:

    1.局部感知域:從人類的角度來看,當咱們視覺聚焦在圖片的某個角落時,距離較遠的像素應該是不會影響到咱們視覺的,所以局部感知域的概念就是,像素指須要與鄰近的像素產生連結,如此一來,咱們要計算的神經連結數量就可以大幅下降。舉例來講,一個神經元指須要與鄰近的10*10的像素髮生連結,那麼咱們的計算就能夠從10的8次方下降至100*100*(10*10)=10的6次方了。

    2.權重共享:可是10的6次方仍是不少,因此這時要引入第二個觀念就是權重共享。由於人類的視覺並不會去認像素在圖片上的位置,當圖片發生了平移或者是位置的變化,咱們都仍是能夠理解這個圖片,這表示我從一個局部所訓練出來的權重(例如10*10的卷積核)應該是能夠適用於照片的各個位置的。也就是說在這個10*10範圍所學習到的特徵能夠變成一個篩選器,套用到整個圖片的範圍。而權重共享形成這10*10的卷積核內就共享了相同的權重。一個卷積核能夠理解爲一個特徵,因此神經網絡中能夠設計多個卷積核來提取更多的特徵。下圖是一個3*3的卷積核在5*5的照片中提取特徵的示意圖。


      卷積層找出了特徵後,就能夠作爲輸入變量到通常的類神經網絡進行分類模型的訓練。不過當網絡結構愈來愈複雜,樣本數若是不是極爲龐大,很容易會發生過分學習的問題(over-fitting,神經網絡記憶的建模數據的結構,而非找到規則)。所以咱們後來引入池化 (pooling)或是局部取樣(subsampling)的概念,就是在卷積核中再透過n*n的小區域進行彙總,來凸顯這個區域的最顯著特徵,以免過分學習的問題。

      因此常見的圖像識別技術(例如ImageNet)就是透過多階段的卷積層+池化層的組合,最後在接入通常的類神經網絡架構來進行分類預測。下圖是一個圖像識別的範例。其中的C二、C四、C6都是卷積層,而S3與S5則是池化層。卷積神經網絡建構了一個透過二維矩陣來解決抽象問題的神經網絡技術。而圖像識別再也不須要像過去同樣透過人工先找出圖像特徵給神經網絡學習,而是透過卷積網絡結構,它們能夠本身從數據中找出特徵,並且卷積層越多,可以辨識的特徵就越高階越抽象。因此你要訓練神經網絡從照片中辨識貓或狗,你再也不須要本身找出貓或狗的特徵註記,而是隻要把大量的貓或狗的照片交給神經網絡,它本身會找出貓或狗的抽象定義。



      講到這裏有沒有發現卷積神經網絡做圖像識別與圍棋有甚麼類似性?沒錯,圍棋是一個19*19的方陣,而圍棋也是一個規則不像象棋或西洋棋般的明確,並且具有了很高的須要透過直覺才能判斷落子的特性。這個時候,深度學習就能發揮極佳的做用,由於程序設計師不須要本身把圍棋的遊戲規則輸入給計算機,它能夠透過大量的棋譜本身找出對應的邏輯與抽象概念。

 

爲何圍棋比較困難?

爲何深藍能夠在西洋棋贏過人類可是卻沒法贏圍棋,這是由於深藍透過強大的計算能力,將將來局勢的樹狀架構,推導出後面勝負的可能性。可是各位要知道,以西洋棋或中國象棋來講,它的分支因子大概是40左右,這表示預測以後20步的動做須要計算40的20次方(這是多大,就算是1GHz的處理器,也要計算3486528500050735年,請注意,這仍是比較簡單的西洋棋),因此他利用了像是MinMax搜索算法以及Alpha-Beta修剪法來縮減可能的計算範圍,基本上是根據上層的勝率,可能勝的部分多算幾層、輸的少算,無關勝負不算,利用暴力解題法來找出較佳策略。可是很不幸的是,圍棋的分支因子是250,以圍棋19*19的方陣,共有361個落子點,因此整個圍棋棋局的總排列組合數高達10的171次方,有很多報導說這比全宇宙的原子數還多,這是採用了以前的一個古老的研究說全宇宙原子數是10的75次方,不過我對此只是笑笑,我以爲這也是低估了宇宙之大吧。

 

AlphaGo的主要機制

      在架構上,AlphaGo能夠說是擁有兩個大腦,兩個神經網絡結構幾乎相同的兩個獨立網絡:策略網絡與評價網絡,這兩個網絡基本上是個13層的卷積神經網絡所構成,卷積核大小爲5*5,因此基本上與存取固定長寬像素的圖像識別神經網絡同樣,只不過咱們將矩陣的輸入值換成了棋盤上各個座標點的落子情況。


      第一個大腦「策略網絡」基本上就是一個單純的監督式學習,用來判斷對手最可能的落子位置。他的作法是大量的輸入這個世界上職業棋手的棋譜,用來預測對手最有可能的落子位置。在這個網絡中,徹底不用去思考「贏」這件事,只須要可以預測對手的落子便可。目前AlphaGo預測對手落子位置的正確率是57%(這是刊登在Nature文章時的數據,如今想必更高了)。那各位可能認爲AlphaGo的弱點是否應該就在策略網絡,一方面是預測準確率不高,再者是若是下了以前他沒看過的棋局是否是就有機會能夠贏過他。惋惜並非,由於AlphaGo的策略網絡有作了兩個層面加強,第一個層面是利用了名爲加強策略網絡(reinforced-learning (RL) policynetwork)的技術,他先使用部分樣本訓練出一個基礎版本的策略網絡,以及使用完整樣本創建出來的進階版策略網絡,而後讓兩個網絡對弈,後者進階版策略網絡等因而站在基礎版前的「高手」,所以可讓基礎網絡能夠快速的熟即到高手可能落子的位置數據,進而又產生一個加強版,這個加強版又變成原有進階版的「高手」,以此循環修正,就能夠不斷的提高對於對手(高手)落子的預測。第二個層面則是如今的策略網絡再也不須要在19*19的方格中找出最可能落子位置,改良過的策略網絡能夠先透過卷積核排除掉一些區域不去進行計算,而後再根據剩餘區域找出最可能位置,雖然這可能下降AlphaGo策略網絡的威力,可是這種機制卻能讓AlphaGo計算速度提高1000倍以上。也正由於Alpha Go一直是根據總體局勢來猜想對手的可能落子選擇,也所以人類耍的當心機像是刻意下幾步但願擾亂計算機的落子位置,其實都是沒有意義的。


      第二個大腦是評價網絡。在評價網絡中則是關注在目前局勢的情況下,每一個落子位置的「最後」勝率(這也是我所謂的總體棋局),而非是短時間的攻城略地。也就是說策略網絡是分類問題(對方會下在哪),評價網絡是評估問題(我下在這的勝率是多少)。評價網絡並非一個較精確解的評價機制,由於若是要算出較精確解可能會耗費極大量的計算能力,所以它只是一個近似解的網絡,並且透過卷積神經網絡的方式來計算出卷積核範圍的平均勝率(這個作法的目的主要是要將評價函數平滑化,同時避免過分學習的問題),最終答案他會留到最後的蒙利卡羅搜索樹中解決。固然,這裏提到的勝率會跟向下預測的步數會有關,向下預測的步數越多,計算就越龐大,AlphaGo目前有能力本身判斷須要展開的預測步數。可是如何能確保過去的樣本可以正確反映勝率,並且不受到對弈雙方實力的事前判斷(可能下在某處會贏不是由於下在這該贏,而是這我的比較厲害),所以。這個部分它們是透過兩臺AlphaGo對弈的方式來解決,由於兩臺AlphaGo的實力能夠看成是相同的,那麼最後的輸贏必定跟原來的兩人實力無關,而是跟下的位置有關。也所以評價網絡並非透過這世界上已知的棋譜做爲訓練,由於人類對奕會受到雙方實力的影響,透過兩臺對一的方式,他在與歐洲棋王對弈時,所使用的訓練組樣本只有3000萬個棋譜,可是在與李世石比賽時卻已經增長到1億。因爲人類對奕動則數小時,可是AlphaGo間對奕可能就一秒完成數局,這種方式能夠快速地累積出正確的評價樣本。因此先前提到機器下圍棋較大困難點評價機制的部分就是這樣透過卷積神經網絡來解決掉。


      AlphaGo技術的最後環節就是蒙地卡羅搜索樹,相較於之前深藍所使用的搜索(搭配MinMax搜索算法以及Alpha-Beta修剪法,這裏就再也不贅述),因爲咱們並不是具備無限大的計算能力(請注意,若是是有限的排列組合,蒙地卡羅搜索樹的確有可能針對全部組合進行通盤評估,可是在圍棋的場景下是沒有辦法的,就算這樣作,恐怕也會形成計算時間的大幅增長),所以不多是適用於舊的方法,不過在前面策略網絡以及評價網絡中,AlphaGo已經能夠針對接下來的落子(包括對方)可能性縮小到一個可控的範圍,接下來他就能夠快速地運用蒙地卡羅搜索樹來有限的組合中計算較佳解。通常來講蒙地卡羅搜索樹包括4個步驟:

    1.選取:首先根據目前的狀態,選擇幾種可能的對手落子模式。

    2.展開:根據對手的落子,展開至咱們勝率較大的落子模式(咱們稱之爲一階蒙地卡羅樹)。因此在AlphaGo的搜索樹中並不會真的展開全部組合。

    3.評估:如何評估較佳行動(AlphaGo該下在哪?),一種方式是將行動後的棋局丟到評價網絡來評估勝率,第二種方式則是作更深度的蒙地卡羅樹(多預測幾階可能的結果)。這兩種方法所評估的結果可能大相徑庭,AlphaGo使用了混合係數(mixing coefficient)來將兩種評估結果整合,目前在Nature刊出的混合係數是50%-50%(可是我猜實際必定不是)

    4.倒傳導:在決定咱們較佳行動位置後,很快地根據這個位置向下透過策略網絡評估對手可能的下一步,以及對應的搜索評估。因此AlphaGo其實最恐怖的是,李世石在思考本身該下哪裏的時候,不但AlphaGo可能早就猜出了他可能下的位置,並且正利用他在思考的時間繼續向下計算後面的棋路。


      根據AlphaGo團隊的實測,若是單獨使用一個大腦或是蒙利卡羅搜索樹技術,都能達到業餘(段)的等級(歐洲棋王樊摩強度等級大概是在2500~2600,而李世石是在3500以上)。可是當這些技術整合就能呈現更強大的力量。可是在刊登Nature論文時他的預估強度大概也只有職業3~4段(李世石是9段),不過剛剛提到他透過加強技術強化策略網絡、透過兩臺AlphaGo來優化評價網絡,這均可以讓他能夠在短期變得更增強大。並且計算機沒有情感也不怕壓力,更不會由於對手錶現而輕敵(AlphaGo的策略網絡一貫只預測強者),因此人類就算有更強大的實力也未必可以承受輸贏壓力而作較好的發揮。


 

李世石有沒有贏的機會?

      在不少評論中,我以爲對於AlphaGo都有不少不正確的猜想,首先是AlphaGo有沒有「總體棋局」評估的能力,必須說的是以整臺AlphaGo來講是有的,這主要是來自於評價網絡的計算結果(由於它計算的是最後勝率),可是得到的是個池化區域的平滑化後平均勝率。在AlphaGo的策略網絡主要是針對對手接下來的落子進行評估,至於蒙地卡羅搜索樹則是使用了評價網絡的參數(脫機訓練的結果)以及根據目前狀態實時計算價值差別的Rollouts技術,因此能夠作出具備總體棋局考慮的模擬試算。可是人類對於「總體棋局」的掌控是透過直覺,這一點應該仍是比計算機強大,並且若是利用目前AlphaGo是透過卷積核池化事後結果評估平均勝率(主要是爲了平滑化以及避免過分學習),若是李世石有辦法利用AlphaGo會預測他的行爲作後面決策,做出陷阱,來製造勝率評估的誤區(在池化範圍內平均是高勝率,可是某個位子下錯就形成「總體棋局」翻覆的情況,這就是勝率預測的誤區),那麼人類就有可能獲勝(固然啦,我這裏只是提出可能性,可是知易行難,這樣的行動的實際執行可能性是偏低的)。如今李世石必輸的緣由在於它一直在猜想AlphaGo的棋路,可是事實上反而是AlphaGo一直在靠猜想李世石的下一步來作決策,因此他應該改變思路,透過本身的假動做來誘騙AlphaGo,這纔有可能有勝利的可能性。

 

人工智能與強人工智能

      如今計算機在圍棋這個號稱人類最後的堡壘中賽過了人類,那咱們是否是要擔憂人工智能統治人類的一天到來,其實沒必要杞人憂天,由於在人工智能的分類上來講,區分爲弱人工智能(ArtificialNarrow Intelligence)與強人工智能(Artificial General Intelligence)(事實上還有人提出高人工智能Artificial Super Intelligence,認爲是比人類智力更強大,具有創造創新與社交技能的人工智能,但我以爲這太科幻了,再也不討論範圍內),其中較大的差異在於弱人工智能不具有自我意識、不具有理解問題、也不具有思考、計劃解決問題的能力。各位可能要質疑AlphaGo若是不能理解圍棋他是如何能夠下的那麼好?請注意,AlphaGo本質上就是一個深度學習的神經網絡,他只是透過網絡架構與大量樣本找到了能夠預測對手落子(策略網絡)、計算勝率(評價網絡)以及根據有限選項中計算較佳解的蒙地卡羅搜索樹,也就是說,他是根據這三個函數來找出較佳動做,而不是真的理解了什麼是圍棋。因此AlphaGo在本質上與微軟的Cortana或iPhone的Siri其實差異只是專精在下圍棋罷了,並無多出什麼思考機制。我也看到一些報導亂說AlphaGo是個通用性的網絡,因此以後叫他學打魔獸或是學醫都可以快速上手,那這也是很大的謬誤,若是各位看完了上面的說明,就會知道AlphaGo根本就是爲了下圍棋所設計出來的人工智能,若是要拿它來解決其餘問題,勢必神經結構以及算法都必需要從新設計。因此李世石與其說是輸給了AlphaGo,還不如說是輸給了數學,證實其實直覺仍是不如數學的理性判斷。有人以爲人類輸掉了最後的堡壘,圍棋這項藝術也要毀滅了…其實各位真的不用太擔憂。人類跑不過汽車的時候爲什麼沒有那麼恐慌呢?跑步這項運動到如今也好好的,奧運推薦也不是都被法拉利拿走了…因此真的沒必要太過緊張。

      那麼會有強人工智能出現的一天嗎?2013Bostrom對全球數百位最前沿的人工智能專家作了問卷,問了到底他們預期強人工智能何時會出現,他根據問卷結果推導出了三個答案:樂觀估計(10%的問卷中位數)2022年,正常估計(50%的問卷中位數)2040年,悲觀估計(90%的問卷中位數)2075年。因此離咱們還久的呢。不過當弱人工智能的發展進入到成本下降可商業化的時候,你們與其關心人工智能會不會統治地球,還不如先關心本身的工做技能會不會被計算機取代來實際些吧。

轉自:http://f.dataguru.cn/thread-719041-1-1.html

相關文章
相關標籤/搜索