首頁 » 科技 » 若人工智能研發是登山,我們都經歷了什麼
20160329_56fa08c0bd605

若人工智能研發是登山,我們都經歷了什麼

若人工智能研發是登山,我們都經歷了什麼

  歡迎關注“創事記”的微信訂閱號:sinachuangshiji

  創事記註:該文是卡內基梅隆大學計算機學院教授刑波在未來論壇上的演講實錄,創事記略有刪減。

  文/刑波

  大概在200年左右以前,1930年8月28日,在美國巴爾的摩曾經舉辦過一場很有意思的比賽,在那場比賽中出現了前所未有的情況,就是機器和動物站在同一個起跑線上。一邊是火車,當時蒸汽機時代第一個皇冠上的明珠;旁邊是一輛馬車。當時就有人打賭,這個蒸汽機的怪物不可能超過馬車,因為馬車我們已經用了幾千年,感覺很好使,坐着也很舒服。當然結果是可想而知的,蒸汽機遠遠超過了馬車的速度,於是就引起民眾的恐慌,他們會覺着這個鋼鐵的怪物會不會碾壓我們的莊園,碾壓原野和景觀。現在我們把坐火車已經當成很平常的事情了,他們的憂慮顯然是沒有什麼道理的。

  在上個星期,大家大概也經歷了同樣的一場震蕩,谷歌的AlphaGO和韓國圍棋選手李世石進行了“人機大賽”,結果以大比分取勝,這在公眾輿論界形成一次驚恐或者說是恐慌。我看到的一個情況就是:人工智能從教科書裡面或公司高度機密的研發部門的一個高度專業工作,變成受到公眾和輿論巨大關注的題目。我本來想講一些技術上的工作,但是這次,我不得不承擔這麼一個義務來解釋一些誤解,同時有一些事情也要以正視聽,把人工智能和人類影響、關係,給大家講一下個人的看法。

  30多年前的時候我還是一個小學生的時候,我第一次從一個叫“未來世界”的科幻電影中接觸到人工智能。

  電影的主要思想是,人工智能最終會毀滅人類生存的社會和文明。這就提出來一個問題:到底亞里士多德的觀點,還是這個電影提出來的觀點是一個更科學的見解?是一個更可行的、未來的人工智能的方向?或者它是不是正在被人工智能的工程師和學者們實踐,這是大家都關心的問題。

  所以,我要簡單的回顧一下人工智能起點。人工智能起源於人們對於智能機器的夢想, 在古代的時候,人們都很希望能出現一種聰明的機器。亞里士多德曾經說過,如果一個機器自己能幹很多有用的事,豈不是可以讓人類解放出來,我們可以不用奴 仆,不用工匠,就能做成很多事情。他的觀點是相當樂觀、積極的,他希望機器能夠完成人類的一些功能。沿着這個道路,古代的工程師用齒輪、發條等做過看似有 點像機器人的設備,他們可以經過特殊的編程方式,讓它們來執行一些任務,這是古代很常見的對人工智能的願景。

  人工智能正式成為一門顯性的、嚴格的、系統的、可實現的科學和工程的一個領域,得益於上個世紀邏輯科學、計算機科學、信息論、控制論很多學科的發展的交匯。它基於一個很基本的假設,認為人的思維活動是可以用機械的方式替代和完成。其實機械推理這個學科在中國的古代、印度古代,甚至西方都有很多人涉及。到比較近的年代里,德國的數學家萊布尼茨、法國的數學家笛卡爾,他們都曾經嘗試過把人類的思維活動用一種像數學或者幾何這樣嚴格的科學體系來描述。到上個世紀初,英國哲學家羅素曾經寫過一本很有名的著作《數學原理》,在這本書里,他對數學的基本原則做了形式化的描述,而且他的工作後來甚至被進一步推廣。希爾伯特曾向數學家們提出一個挑戰,說能不能把所有數學知識都用一種形式方法、形式邏輯進行描述,這個問題後來也被解決。後期哥德爾、圖靈、邱琪的工作都是向人們展示,實際上你可以用一種簡單的只會做二元運算的機器來模擬所有的數學邏輯的證明,這是很強大的推理,由於這一切工作推動導致計算機新的工具發明。我們就會問,隨着計算機的發明,到底將導致什麼樣的人工智能呢?一種預見是它可以產生功能性的人工智能,幫助人做很多人不願意做或者做的不太好事。同時,也有這麼一種可能性,它也許會無限接近人的思維方式,甚至是感情活動,以致於最終代替人。這為我們人工智能研究提供了很有意思的問題。

  在以後人工智能發展裡面,有很多故事,令我想起我年輕的時候一段很難忘的經歷,這裡我穿插講一下。在我大學三年級的時候很喜歡運動,而且熱衷於冒險,所以那時候我心裏面有一個夢想,我希望能夠成立一個登山隊,到西藏爬一座從來沒有被征服過的處女峰;這座山找到了,就是在長江源頭唐古拉山的主峰,叫格拉丹東,我想踏上這個山頂。

  當然人工智能先賢們的夢想比我遠大多了,圖靈也是一位運動員,他是倫敦奧運會馬拉松比賽的亞軍,他當時提出一個大膽的見解,就是“圖靈機”的概念。他認為有可能製造這麼一台機器,通過某一種電子媒介或其他的媒介跟人進行交流。如果人在跟這台機器交流過程中並不能判斷它到底是不是人的話,我們也許就可以下結論說這個機器獲得了跟人一樣的智能。

  這個概念極大影響了人工智能對於功能的定義,在這個途徑上卡耐基梅隆大學兩位科學家,阿蘭紐維爾和赫伯特西蒙做出了前期的工作叫做“邏輯理論家”。它可以把羅素這本《數學原理》中前52道定理中的38道做了自己的證明,而且它有些證明,甚至比人類證明更精巧。這使得科學家產生了相當樂觀的情緒。比如西蒙就宣稱也許十年之內,機器就可以獲得和人類平均智能一樣的高度,這是當時的很好的願景。

  這一批人找到共同的語言以後,整整60年以前,在美國達特茅斯大學開了一次會,希望通過交流來確定人工智能作為一門科學的任務和整個的路徑。同時他們也宣稱,他們認為學習以及人類智能的任何一個其他特徵都可以被精準的描述,一旦精準描述成立以後,我們就可以用機器來模擬它和實現它。我們普遍認為這個會議標誌着人工智能正式誕生。

  當然,我們的登山隊也在某一個時刻誕生了,他們就是一群志同道合的人,就像開那個會一樣,我們聚到一起,組成的隊伍進行了很多訓練。我們把這件事看得很神聖、也很嚴肅,我們經過瘋狂訓練以後也匆匆忙忙的上路了。我們上路的時候,你可以看到用的是非常原始的手段,跟現在登山隊很高大上的越野旅行很不一樣。我們到青藏公路攔截運輸貨物的卡車,坐在車鬥上,然後到了某一個地方,換上馬匹就開始向高原進發。我當時擔任登山隊的副隊長,也擔任前鋒,也就是開路的,同時因為我也比較愛吃,所以他們也認命我為廚師幫全隊去做飯,所以這裡有一張我做飯的照片。當時形式非常樂觀,大家都憧憬有一天站在山腳下開始我們的登山旅程。同樣樂觀的氣氛也在人工智能早期誕生后的那幾年裡面瀰漫著整個學界。不光是邏輯科學家的發明震撼了當時的很多學者,同時有很多其他的新的發明,比如說我們有一種學習方法叫“增強學習”的雛形,就是貝爾曼公式,也是在那個時候發現的。增強學習就是現在在谷歌AlphaGO算法裡面一個核心的思想內容。還有一個現在大家聽到的深度學習的模型,它的雛形叫做感知器,也是那個年代被發明的。不光在方法論上有了很多新的進展,而且很多科學家甚至造出了一些聰明的機器,比如說有一台機器可以做應用題,另外機器可以實現簡單人機對話,當時瀰漫著非常樂觀的氣氛,認為以這樣的速度往前發展的話,也許人工智能在不久的將來,真的就可以代替人類。做出這樣預測的人包括多位非常有智慧的、非常聰明的科學家,不只是一個文科生、一個媒體的意向,它實際上是有一定科學根據的。

  但是,毫無疑問這個前途並不是那麼順利,像我們登山一樣,我們上了高原以後很快就遇到很多困難。比如,我們馬上就遇到自然屏障,像大河、沼澤地,我們得想辦法去穿越,而我們隨身攜帶的工具是非常簡陋的,資源是很缺少的。我們甚至還走丟了幾次,有幾位隊員就迷路了,所以不得不停下來等他們,去找他們。我們的給養相當的匱乏,糧食也不夠,馬匹也不夠,所以很多東西都要自己來背。同樣比較悲慘的場景其實也發生在人工智能研究裡面,我們管它叫做“第一次人工智能的冬天”。怎麼回事呢?終於有一天人們發現邏輯證明器、感知器、增強學習、證應用題的各種各樣的東西只不過是玩具而已,它們只能做很簡單的、非常專門很窄的任務,稍微超出它們所預期的範圍以後就沒有辦法對付。這體現了兩個方面局限:一方面就是當時人工智能所運用的數學模型和數學手段被發現是有理論缺陷的,比如:馬文。明斯基在他的書中討論了感知器在模式識別裡面的局限。另一個局限是出現在算法上,我的導師之一理查德。卡普和他的同事庫克曾經發現了在很多的計算問題裡面都有一個計算複雜度的瓶頸,它使得很多計算任務是以指數級來增加複雜度 (即著名的所謂NP問題)。所以,在有限的計算資源下,你實際上是不可能完成所給予的計算任務。這些缺陷,使得人工智能在很早期發展過程中遇到難以克服的瓶頸,不可能去實現一開始所保證的目標,比如接近人類甚至超過人類,所以第一次冬天很快到來了。

  當然,這一批天才並沒有泄氣,他們還是繼續往前艱苦行進。經過寒冬以後還是重整旗鼓做了一些新的工作。一個標誌性事件就是,大概在80年代卡耐基梅隆大學製造了一個叫“專家系統”的東西,是給一個叫DEC的公司製造的,在當時,這是一個巨大的成功。這個“專家系統”幫助這個公司每年都可以節約4000萬美元左右的費用,它可能在決策方面提供更有價值的內容。同時受到這種成功的鼓勵,很多國家包括日本、美國都再次投入了很多資金,開發所謂第五代計算機,他們管它叫做人工智能計算機。我們在顯性層面也看到可以和人類下象棋高度智能的機器,在數學工具和模型方面也有了接近於我們現在所使用工具的發明,比如說多層神經網絡、霍普菲爾德網絡都是在那個時候產生的。同時也有一批人員從事算法研究,比如說現在常聽到的反向傳播算法也是那個時候發明的。那個時候通過一些很艱苦的嘗試,還是有了不少相當令人印象深刻的成果,比如說自動識別信封上郵政編碼,就是通過很精妙的人工神經網絡來做到實現,精度達到99%以上,已經超過普通人可以達到的水平。樂觀形式又一次產生,你可以想象,大家對於這種方面的工作還是覺得人工智能還是有戲的。

  很不幸的是寒冬又一次來了,這一次是由於公眾和政府興趣的轉移,甚至包括一些競爭對手的出現。比如說像蘋果公司、IBM開始推廣台式機,計算機開始走入個人家庭,不是大機房設備,費用遠遠低於專家系統所使用的機器。專家系統被發現是相當古老陳舊,非常不方便的這麼一種設備,非常難以維護,成本非常高,而且不容易延展到新的任務上去,所以經過了一段時間的使用以後,大家的熱情開始冷卻,政府經費開始下降,所以寒冬又一次來臨了。你可以想象,這種情況是很嚴重的局面。當時我在讀研究生的時候,都不太好意思跟人說是學人工智能的,那時候這個詞不是一個好看鮮亮的詞。由於這些嚴重的困境,人們開始思考人工智能到底往何處走?應該怎麼來做這個東西?一個很自然的問題就是我們要實現什麼樣的人工智能?什麼叫智能?這個問題我們一直沒有嚴肅的回答過,但我想,在有限的資源下要做最有用的事,所以不妨做個嚴肅的回答。毫無疑問,有兩種可能性:一種是向人學習、向生物學習、向自然學習,用一種仿生的反向工程的手段製造跟人腦結構原理儘可能相像的機器。比如達芬奇曾做過嘗試,他造了一個仿生鳥非常的精巧,也可以做一些動作,這個途徑最後發覺是非常困難的,首先我們對生物原理並不了解,對工作機理也不清楚,而且技術上也非常複雜,甚至不可能。這種工藝性、機械性的製造通常沒有一個嚴格透明的數學模型的輔助,使它變得非常難以分析,所以對它的成功和失敗很難做出定量而且是準確的預測。另一種方法,像我們做飛機的方法,從非常虛的水平裡面(比如)從人的、動物界獲得一些啟發,但是把它做足夠的簡化,可以使得我們能夠部署簡單明確的數學模型,和強大的計算引擎。這樣既可以使用簡單數學模型來對系統做出一定的分析,能夠把失敗、成功或者是改變這些結果的因素產生比較明確的因果連接,使得優化的途徑變得比較容易;另一方面,也可以直接利用人類工程領域的很多成果,比如電子計算機,使用一種類似暴力堆砌、資源堆砌的手段,使比賽變得不對稱,實現彎道超車式的效果,在一種不同路徑上超過人的方法,這是人們開始思考的一個問題。

  我又得拉回到我們爬山,我們也在思考,我們要把任務完成,我們給自己設定很難的目標,經過幾個星期艱苦跋涉,終於到達了山腳下。這個山腳就是在格拉丹東這個冰川的正前方。然而要實現登頂,我們必須考慮採用何種路徑,我們決定從冰川的左沿踏上雪線,我們感覺我們找到了一個比較靠譜的道路。

  大概在同一個年代,人工智能整個研究也開始重新確定自己的方向。我們也是做了一個選擇,就是我們要做一個實用型、功能型的人工智能,因為這樣至少我們知道我們在做什麼,而且我們對結果會有一個比較嚴格的判斷,而且我們能搞到經費,這樣的話我們能施展一些功能。這就導致了一個新的人工智能的路徑。由於這麼一種對於人工智能任務的明確和簡化,帶來了一次新的繁榮,比如說數學工具上找到很多新的方法,包括原來已經存在於數學或者其他學科的文獻中的方法,他們被重新發掘出來,或者重新發明出來用到計算機或者人工智能研究中。比較顯著的幾個成果就是像最近獲得圖靈獎的科學家Pearl的圖模型、Stephen Boyd《Convex Optimization》(凸優化)這本書、Hinton的深度神經網絡,這都是當時,大概15-20年前左右的時候,重新被提出來讓大家開始研究。另一方面,由於這些數學模型對自然世界的簡化,它有非常明確清晰的數理邏輯,所以使理論分析和證明變得可能,所以我們開始可以去分析到底需要多少數據、計算量才能夠獲得我們所預期的結果,這樣的理論洞見對開發系統是非常有幫助。第三方面,我個人認為更重要的,我們終於把人工智能跟人類其他工程技術方面上的成就做了很緊密的連接,摩爾定律的實現使得計算能力越來越強大,這些強大的計算能力很少被使用在人工智能以前早期應用中。現在由於我們把人工智能定義為一個數學上的解題過程,這樣我們就可以把很多計算能力轉移過來提高人工智能的效果。

  由於這麼一系列的突破,人工智能又產生了一個新的繁榮期,產生很多驚人的突破。早期的結果包括1997年的時候IBM深藍和卡斯帕羅夫這場非常吸引人眼球的象棋大賽,也是機器人獲勝。當然最近我們看到類似的結果在圍棋中產生。甚至人們認為在更加通用型的功能中,比如在回答智力競賽或是識別圖片的比賽中,機器也可以達到或者超過人類的標準。機器人也因此有了很大的進步,這個視頻展示了早期自動駕駛車的原型,而這是一個把人工智能原理用在設計中的一個機器狗。我要解釋一下這個機器狗和玩具狗有什麼不一樣的地方?這是一條真正人工智能的狗,它走路的步態、自我穩定性等等不是我們用編程方法給它寫出來,比如你看到坡就往上爬,被踢倒后爬起來,我們不是具體寫出控制指令。實際上我們寫的程序是一套學習算法,讓這些算法在模擬器上不斷的走路、開車,讓它們自己學到一種策略來完成不同環境,狀態下的行動,這是人工智能和以前控制論最核心不同地方。

  這些突破使得人們又變得很樂觀的起來,這也是一個幸運的時代,我個人職業生涯也在這個時候跟人工智能產生交集。我從清華大學畢業以後,就進入到RUTGERS和Berkeley做了研究生,然後在十二年前到卡耐基梅隆大學成為一名人工智能的教授,卡耐基梅隆大學是人工智能比較重要的基地,很多原創性成果從那兒出來,所以我當時是非常興奮。我過去后成立了一個比較強大的小組,試圖在人工智能各個方面都產生突破,包括理論,算法,和各種各樣的應用。

  在這樣的背景下,我們有理由對以後前景又產生樂觀的情緒,就是人工智能真的有希望接近人類了嗎?事實上我們又遇到了困難,爬山的時候也遇到了困難,那邊人工智能領域也有同樣的困難。困難在哪兒呢?

  我再講一個故事,在2011年,我迎來了做教授以後的第一次學術休假,在美國教授大概每六年可以做一次學術休假。當時選擇去了一個很年輕的公司,就是這個Facebook公司,現在已經是個很著名的全球公司,但那個時候它只是一個500人的公司,在斯坦福大學校旁邊的一個小倉庫里搭起了他們的實驗室。他們雄心非常大,希望為上億用戶提供服務,把他們連接起來;他們也希望能夠運用人工智能來幫他們投放有價值的廣告,增加公司的收入;他們設立的目標,認為在不久的將來把用戶從1億增長到10億,當然現在他們已經達到這個目標。我們的任務是幫助他們實現這麼一個願景,當時我是Facebook第一個訪問教授,感覺壓力特別大。其中一個任務就是通過社交網絡裡面(用戶)跟別人連接的方式,把他們投射到一個社交空間中,這樣可以做一個社群的檢測。把他們來分組、特徵化。這個任務實際上在統計學里、在人工智能里並不是很陌生的任務,比如說在這個任務2011年以前,我們曾經對此發表一個工作叫做混合成員隨機區塊模型,工作的第一作者現在是哈佛大學統計系的一位教授,也是我原來在CMU的學生。但這個工作有一個問題,它的計算複雜度是平方型的,也就是當你的人從10個人增加到100個人的時候,你的計算量就會增加到1萬,再平方一次,那這樣的話就會產生瓶頸。當你網絡特別大的時候,其實還不用太大,比如1萬人的話,我們就沒有辦法去克服計算的障礙,這是當時讓我們頭大的問題。但是我們作為人工智能學者、應用數學家還是很興奮,我們不怕這個東西,我們很擅長研究算法、模型、特徵,看看能不能做加速。實際上我們也的確做了很好的工作,比如我們把社交網絡抽取比“邊”更強大的特徵叫做“三角特徵”,我們把模型也做了升級,從混合區塊模型到混合三角模型。在算法上也做了一兩次非常顯著的革新。從蒙特卡羅算法和隨機變分算法,每一次突破都產生良好的效果,這個曲線代表複雜度在不斷下降,以致於我們可以在比較大的網絡裡面,產生了實際上的結果,而且比原來結果在速度上提升兩到三個數量級。

  到了我工作快結束的時候,我們都可以給老闆做一個如下的展示:這是一個全球電影明星的網絡,大概100萬人左右,我們可以做實時的展示,讓你看到人是怎麼在模型驅動下,不斷開始在社交空間找自己的朋友,落入不同的社交群,這個是可以通過計算實現的;而且它的速度從學術意義上講還是很說得過去,100萬的網絡,幾億條邊,500多億特徵數,用十核單機在40分鐘里實現這樣的模擬,後來進一步提升到6分鐘。這在學術上是一個驚人的成果,我們用這個方法發了若干篇很有意思的文章。但是我們實際上的任務不是如此,我們的任務不是100萬個用戶,而是1億個用戶或者是大於1億個用戶,這裡還是差了兩個數量級,當然我們也有理由說我們的確還有潛力,因為我們只用一台筆記本電腦。但是在Facebook機房裡躺着1000台Hadoop機器,可以運轉分佈式程序;所以我們做了一個簡單的計算,任務大了100倍,但是資源大了1000倍,也許我可以在原來6分鐘基礎上繼續減,可以在0.6分鐘把這個問題搞定。這是當時的願景,我們寫了Hadoop程序,把我們的算法做了并行化。可惜最後的結果非常不理想,我們等了一個多星期還是沒有得到結果,而不是0.6分鐘。

  實際上我們看到情況是在算法的運轉過程中,因為它是一個迭代的算法,在每一次迭代裡面,好像接近結束進入下一個迭代時,總會說我們完成90%、99%,每次都是有1%的東西沒有完成,拖一兩個星期。這裡面就產生了本質性的問題,好像并行運算不是我們理想中這麼簡單倍增的結果,而是有它內在的複雜性,顯然我們還不知道,到底發生什麼事情呢?原來這樣的事情發生了。當你把大任務分割在不同機器上讓它們分開跑,又同時在共同執行同一個全局任務的時候,它們是需要做這樣一件事情的:首先,它們各自得做自己局部的運算,但是它們因為是在完成一個共同的任務,它們需要做一個握手,能夠達成一致性,所以需要來一次通訊,那麼這個通訊是必須發生在每台機器把它們的子任務完成以後才能通訊。所以每次我們都可以想象需要有一個等待的時間,讓所有機器都完成它們的任務。當然在一個大的集群裡面,總有拖後腿慢慢做這個事情,不是它不願意做,而是在實際的計算機環境里,總還有其他用戶,別人也在跑程序,或者是機房裡的溫度不均勻。反正機器搞得不一樣,而且每次還不是同一台機器不一樣,同一台機器慢,把它拿掉就可行了,用剩下快的機器。而它是隨機性的不一樣,現在這台機器快,過一會兒那台機器快。所以,最後每一次迭代循環的時間都是由最慢機器決定的,這就產生了Hadoop這種模式下并行計算機的瓶頸,你很難實現把它加速。這個困難相當嚴重,以致於到我當時做訪問教授結束的時候還是沒有解決,所以我當時覺得非常的尷尬,卡耐基梅隆大學人工智能教授搞不定1000台機器,也沒有產生什麼功能,當時走的時候還是比較沮喪的。

  我們在爬山也有類似沮喪的時候,比如說我們遇到很多冰裂縫,爬不過去。我們也遇到了暴風雪甚至雪崩,後來在山上也迷了路,各種各樣的挫折使得我們目標離我們好像更加遙遠了。

  這個時候可能開始重新思考到底我們目標是什麼?我們到底需要什麼來達成這樣一個目標?從人工智能角度來講,我們需要完成大型的任務,而且我們需要用一個嚴格的數學上圓滿的或者嚴格的方法來實現這麼一個目標。到底我們需要什麼呢?很顯然,從剛才的例子來看,光是有一個好的模型或者好的算法顯然是不夠的,我們還需要對於人工智能計算部分的強力的引擎支持,而且這個引擎支持有可能跟原來不一樣,因為千台計算機裝了Hadoop以後實際上已經是一個過去被認為很有效的引擎,它曾經很好的支持了Facebook當時其他的業務,比如說搜索業務或者存儲業務。為什麼人工智能業務不能被好好的支持?原因是因為人工智能計算有它的獨特性,它是一種原來我們不常用的方法,它是用迭代的、反覆讀取數據和刷新模型的方法來實現解決方案的。由於任務更新,我們就要問,是不是引擎也需要同樣的更新?如果看看飛機的發展過程,你就會發現這實際上是一個Commonsense(常識),大家都會覺得這是有必要的,從最原始的達芬奇設計的飛機,到後來的螺旋槳飛機,噴氣式飛機,它每一代的設計都伴隨着它引擎的變化,好的模型設計其實是不夠的,必須要有助推器把它驅動起來,我想這就是當時人工智能發展中遇到的一個瓶頸,大部分理論科學家,甚至算法專家對搞引擎這種臟活興趣不大甚至完全不懂,所以他們把自己關在理論和算法的象牙塔裡面找出貌似前進的很好的感覺,到真正戰場就出現這麼一個問題。

  所以我們意識到這個問題以後,我們就想是不是把引擎這個事情好好看一看。計算引擎的起點當然是從馮。諾依曼一開始的計算框架作為原點,他當時設計了這麼一個模型,包括中央處理器、記憶存儲器、輸入和輸出,通過一個抽象把軟件和硬件之間實現簡潔的橋接,以致於編程員不用對每一個晶體管和電子管做顯性的、局部的編程。從這個地方發展到60年代就已經有人看到它的局限,因為它是單機,當你有大的任務或者對速度有更高要求的時候,你需要讓很多台機器一起跑甚至是一起執行同一個任務的,這塊我們已經有了早期的原形設計。但是有一個瓶頸,它的使用性是非常差的,因為你在編輯并行程序的時候掌控幾十台甚至上百台機器,這本身就有技術上的困難,就像一個指揮官,讓你指揮1000人,每個人單獨通信的話這個指揮難度是何其之大,所以需要一個新的橋接模型,來使機群展現出簡單的應用界面,這就是後來萊斯利。瓦利恩特做出的一個主要貢獻。他發明了一個新的橋接模型叫BSP(整體同步并行)模型。在這種模型下,他做了一個非常簡單的抽象,把計算和通訊分割成了兩個不重合的項,在某一個項里只做所有的計算,在另一個項里只做通信,這就是我們剛才看到的Hadoop的模型,它讓各種機器執行子任務,都完成了以後,來進入下一個階段,來通訊來握手,達成一個一致性。Hadoop是這個思路的優秀代表,它產生了很大影響,甚至到現在都是主流的運算平台,它對支持傳統計算程序像數據庫、鍵值搜索、簡單的統計數據的歸納都是相當有效的。當然,最近還有一個新的突破,SPARK,它也用了一個BSP的橋接模型。但它的區別是在Hadoop裡面我們是用硬盤作為記憶單元,而在這塊我們是用內存作為記憶單元,但它們的通信原理實際上是一樣的。

  但是我們剛才也看到,人工智能在這樣一個框架底下好像沒有被搞定,為什麼呢?因為人工智能運算跟剛才講到傳統計算很不一樣,它的任務是解決一個數學優化方程,而且實現的方法不是基於解析解,而是用了一種類似於漸進迭代方式,自動收斂,迭代次數和每次迭代的效率和整個數學方程難度有關係。在大數據和複雜任務情況下,這個任務產生的挑戰是很顯著的,比如,當我們數據非常大的時候,在每一次計算更新的時候,都要把大數據刷一遍,刷幾千遍是何其難的事情。如果我們致力於大型高參數模型,比如說有幾十億參數的深度學習模型,那則意味着每一個迭代都要把所有的參數也都刷新一遍,這也是很難的任務,當然數據和模型同時都大這個任務就變得更難。所以我們必須走一個并行路線,但是我們現有并行方法好像不太靈光。因為在進行程序并行的時候首先要關注的問題就是它的一致性,就是說我們每一次子任務群彼此是一致,而不是產生相悖的局部結果,以致於導致整個全局結果的錯誤和實驗失敗。剛才我講的BSP通信協議先計算再通信,再計算再通信,實際上是實現一致性基本保障之一。通常理論科學家和算法科學家,是假設這種協議或這種通訊的代價是零代價;我們不去考慮它,就想喝水一樣,我們不覺着那是事兒,算法數學上優異就行。但很遺憾的是當我們進入工程界以後,就像在座的京東各位工程師和技術人員肯定有這個體會,實際系統不是一個零代價的通訊,它有各種各樣的問題使你機群不和諧、不同步,那個時候你要麼花很多時間去做等待,等待它的一致,等待它算對。或者有些缺乏良好數學嚴密性的操作員會選擇放棄同步,讓機群在異步情況下自由迭代,就好像車間里的各條傳送帶速度各異,這最後有可能使一個程序處在算法發散或者失敗的風險下。

  到底怎麼辦?我們怎麼能夠從這種失敗的經驗中找到一個更加快速,但同時又數學上正確的方法來運行一個并行人工智能程序?這就把我們拉回到離開Facebook以後回到卡耐基梅隆大學進行的一系列新的思考。我們發現人工智能運算和傳統計算非常不一樣,傳統計算由一堆指令集構成,你要執行各種各樣的指令,執行這個程序的目的就是為了執行這個程序本身,以達到一個功能,而且中間是絕對不能出錯的。就像搭房子你要是把哪一塊磚放錯了,你一定得重新放,否則整個東西都會垮下來。這是傳統計算任務經典的特徵,而且所有現有操作系統實際上都是圍繞着這個目的來做的很多優化,包括容錯性和通訊有效性都是如此。人工智能運算跟這個很不一樣,雖然很多人在一開始的時候並沒有意識到。因為人工智能也是一個程序,好象也是一堆指令集,但是這裡執行指令集只是一個過程而不是目的,它目的是為了解一個優化方程,就像爬座山一樣,目的是爬到山頂;你固然可以沿着它給你設置好的路徑一步一步爬,但是如果你哪一步走歪了,就像這個圖中的小夥子喝了酒腳步不太穩定,開始歪七走八,但只要他大致靠譜,知道目標且能判斷好壞,他還是可以爬到達山頂,只不過是稍微慢了一點,但是總比每次走錯了以後再走回原點重新爬要快很多。這就體現了人工智能作為一個迭代漸進算法跟傳統的一次性的掃描算法所不一樣的地方。因為這樣一種認知,我們終於迎來了新的理論突破,在2012年的時候,我還有幾位同事設計一種叫做參數服務器新型的系統模型,我們設計它的新的理論基礎,給出了嚴格的數學證明,同時也搭出了框架原型。在這個框架底下,核心的概念就是人工智能計算任務不再像傳統并行任務,比如像飛機表演隊一樣,每一個飛機的飛行精準到位非常重要,需要不惜代價保住每一步的準確— 這樣做會有很昂貴的代價。在我們參數服務器框架底下,我們更把一個并行人工智能程序當成是一個在執行救火任務的機群,它的任務為了撲滅火,編隊飛行去達到火場只是一個手段,編隊飛行很好,但也不用不惜代價的保持飛行姿態的完美,你到了目的地,把滅火劑扔掉,再很有效的飛回去補充,再返回參與下一輪滅火,直至熄滅,這個是最主要的一個目標。所以,這兩個是不一樣的。而且在撲火機群需要以整個機群作為整體單位給上級簡單的指揮界面,使得負責人可以說你去哪兒滅火、去哪兒取水,而不是說每一台機器、每一架飛機走哪、走幾分鐘、什麼時候走。這個細節的掌控應該是在飛行中這些飛行員和他們的大隊長來負責協調,而不是總司令提出的協調。這是一個對人工智能比較新的一種看法。也就是說小的錯誤是可以容納的,但總體的目標是不可改變的。

  基於這樣一個目標我們就設計了一個新的橋接模型,叫做有限異步模型,在這個有限異步模型下,它大致就是把整個機群的行為比喻成為一個實戰型的職業軍人團,他們服從中央指揮,但每個連隊、每個人都有一定的局限性自由度,不能完全亂打,但是還有一定自由度,目的是共同打贏這個仗。

  對比來說,傳統整體并行模型更像是儀仗隊或者飛行表演隊的活動,需要很精準的協調,他們目的更像是為了展示,他們更適合於閱兵。還有一種就是異步并行,每個機器能夠各自為政,在我看來,這更像游擊隊員的戰鬥,大部分不能協調高效的完成一個共同的目標。這三種模型實際上體現了不同的內部的設計原理和對任務的定義,我們用有限異步并行的橋接原理去構架了參數服務器的編程界面,它擁有一個共享內存大規模編程界面,使并行程序的編寫容易度,運行速度和精度都有巨大的提高。這個系統並不是為某一個特定人工智能計算來設計的,比如說深度學習。它更像是平台通用模型,它設計考慮整個人工智能程序家族的普遍共享的一些特徵,給他們提供比較優質的通訊上的服務,所以在我們軟件包裡面包括不同其他的算法。最後這個系統也有非常靈活的容錯或者通訊管理的機制,所以使得隨機的資源空檔或者小錯誤也會獲得關注,最後的結果是整個系統的工效獲得巨大的提升。

  我們還實現了另外一個突破,就是當訓練巨大模型的時候,到底應該怎麼辦 (前面的參數服務器主要適用於分佈式的大“數據”問題,而非大“模型”問題)?模型很大的時候大家可以想到,我們也得分步,這次分不是數據,而是把模型分到各處去。這個時候每個機器就獲得一個子任務,這個子任務跟其他子任務實際是有更緊密的數學關聯,他們必須得做動態分割和通訊,只有一致了以後,才能保證整體訓練任務不失敗。這個時候需要有一個協調裝置,像拉小提琴家的十個手指一樣,雖然是在那很快速的運動,但是它們是在執行同一個樂譜,是有目標的在運動。為此,我們就設計了這樣一個系統,叫做一個動態的調度器。它可以實時來監控子模型或者子任務之間的一致性,保證數學上是正確而不是衰減的。這樣的結果有一個比較深刻在數學上和功效上質量保障。

  這個圖裡面講的是我們如果只是為了快,沒有把子任務做好,最後會造成更多次迭代才能達到收斂的結果,這是很多在工業界實現模型并行的程序所遭受到的損失,而且在實驗的彙報里並沒有被別人關注,但是我們發現經過剛才協調器處理以後這樣一個問題就被清除了,而且我們還有一些其他的技術,比如包括自適應負載均衡技術,使得每個模型之間彈性的對於資源的要求可以得到及時的滿足。最後的結果又是一個數量級的倍增,它不僅使得大型的人工智能程序可以在很細顆粒度下做一個正確性的保障,而且,有時候會實現一些令我們很吃驚的結果。比如在這個收斂曲線的展示中,你會發覺有時候由於這麼一種加速,會使收斂曲線突然從緩慢路徑跳到很快途徑實現加速的收斂,這是傳統的通過完全同步運行來實現的程序所無法達到的效果。

  由於這一系列的成果,我們感覺是在一個正確的路上在走,我們的確跟這個目標開始接近了,我們爬山的活動也類似經歷這樣一個過程,我們開始向峰頂接近。

  我們的登山活動還是有一個光榮的名字的 —— 清華大學登山隊就是從我們那次活動開始成立,我們很自豪,能把自己的小小夢想跟一個很響亮的名字聯繫在一起。在這個活動中我們也遇到很多緣分,比如我們曾經在路上不期而遇很多朋友,包括這位相片中的台灣探險家,都是在爬山的時候認識的。有時候不期而遇、沒有事先計劃的好事,也會對研究或對我們的活動產生一些很正面的影響,這件事情就發生在我們系統命名上面。任何好的系統都需要比較有意思的名字,我們這裡面也遇到一些問題,這個系統工程量很大,也很複雜,到了需要在2013年的年底做第一次開源發布的時候,我們突然發現還沒有起好名字,大家也都想不出來一個很好的名字,我就在那花了幾個星期,還是想不出一個滿意的名字。通常在計算機業界裡面,名字都比較無趣。Hadoop是什麼嗎?它就是工程師的兒子玩的那個大象,撿了個名字就用上了。我感覺還是希望有一個更雋永、更有意思的名字。有一天我從辦公室開車回家,經過高地公園橋,這是我家到辦公室的必經之路,我還在想這個事,我突然就想到,我們的調度器簡稱是Strads,是意大利傳奇的“斯特拉迪瓦里”小提琴的簡稱。所以我突然跳到這樣一個思路,我不是用小提琴來構思協調的形態嗎?小提琴顯然是很美好的樂器,令我聯想到一首音樂,就是我非常喜歡聽的這一首音樂。(梅紐因的演奏透出背景) 我不知道大家聽這首音樂有沒有一種感覺,是不是有音符,旋律,循環漸進向你撲來的感覺;我當時就感覺到我這個系統能夠把機器學習跑成這麼一個節奏,又優美又正確,還能讓人興奮,那是一個非常好的效果。這個曲子名叫《無窮動》(Moto Perpetuo, or Perpetuum Mobile),是帕格尼尼給小提琴創作的一個難度非常高,但又是一個非常技巧性和優美的作品,也是我很喜歡的一個作品,所以我就取了它一個字頭,把它叫做Petuum,這就是名字的由來。

  我們由於各種各樣的機緣、努力、運氣,在學術上和我們個人的活動上,都達到了一定的高度。比如我們已經爬到了一個相當高的山脊,我們也看到了不可思議的美景,這種景象和飛機上看到還是不太一樣的。我們看到了更多的山峰,我們的課題也在不斷的生出新的枝葉來,比如我們後來關注集群上面不應該跑一項任務,應該跑多項任務。多項任務的時候,你就會遇到資源調配的問題,到底每項任務應該佔用多少資源?是應該動態調控還是靜態調控?在一個交響樂隊裡面,一個主旋律是不會在一個人手裡面的,它會在不同的人中間傳過去,做不同的展示和放大,或者是變奏,這也是體現我們系統應有的風格,所以我們就開發了一個面向多任務的靈活的資源配置系統。同時我們還是關注到解決辦法的部署,希望整個人工智能解決程序是能夠被裝在一個容器裡面拿來拿去在不同硬件環境下或者配置環境下運行自如,這也是我們所說分佈式容器技術。就像玩音樂的時候不能帶着樂隊走,只能帶着唱片走一樣,這也是我們整個系統中用的即插即用的設計思路。最後我們希望整個系統是輕量級的解決方法,而不是一個幾百萬行程序,把內存占的滿滿的解決方法。所以,我們還有很多設計使整個平台加上上面的軟件都變得輕便可用,而且可以調試,易於維護的解決方法。所以這些不同角度的設計就成就了最後一個最佳的解決方案。它就是我們現在所打造的這個Petuum數據中心操作系統。這就像一個交響樂隊,它可以用來演奏不同的音樂,可以是可以有不同的組合,大也可以,小也可以。而且可以根據指揮的需要演奏出不同的風格,一個好的操作系統應該有這樣一種特徵,能夠實現靈活的功能。

  我們用Petuum最後還是回到了原點——當時在Facebook不太成功的經歷,我們還沒有把這個問題忘掉,所以我們最後還是把數據通過合作繼續用了新的辦法來做了一個重新的演算。這次我們有了一個突破,1億個節點的網絡,只用了5台Petuum的機器可以在37小時之間計算完成,得到一個非常有意思的社交群可視化結果。但是如果用1000台Hadoop機器,基本上需要跑400個小時,當然我們沒有跑完,我們只是預期它跑400個小時,實際上可能比這個還要長。這還是一個比較成功的經歷。

  這個系統處在多次發布中,我們有規律的發布開源展示,包括平台、工具庫,工具庫有不同的、常用的大型人工智能的軟件,包括深度學習、主題模型,推薦模型等。

  這就是我講座的一個尾聲,讓我解釋一下登山為什麼會放在這兒?我覺得它跟我從事的事業還有很多相同之處的。人工智能算法本身這個計算任務像登山,它是有明確的目標的,可以用數學描述的目標,它本身有彈性、容錯性、隨機性。如果你能夠很好使用這些特徵和機會的話,你就可以獲得事半功倍的結果。人工智能領域的發展也像登山,它有各種各樣的起伏,有各種各樣的思路的跳躍和重新的定位,一個好的解決方法,通常對於任務目標、數學模型、計算引擎有比較全面精確掌控和實現才能達到目的。而如果你對它設置一個像類似科幻不切實際的目標,或者是一個模糊的路徑、錯誤的定位,都會導致挫折,就會像人工智能的前幾次冬天一樣。從我角度,大家固然會說冬天和夏天是一個不可逆轉的潮流,那我還是希望至少在我有生之年,我不希望再看到一個冬天,能夠把人工智的輝煌繼續下去。這就是我今天講演的全部,但不是最後一章。

  這裡有一個小小的後記:我發覺人生很有意思,你做的每一件是好像最後的結果都是有一個兩面的反映,有些人會喜歡,有些人會不喜歡。比如說像人工智能,我們有很多人對它的結果很興奮,有些人又相當恐懼的。像我登山的結果也有類似的狀況。從西藏爬完山回來以後到清華大學我們面對了非常出乎意料的反應,大學官方不太贊成我們的舉動,認為我們違反了規則,由於種種原因我們每個人都得到的了一個處分,我本人的考研資格都失去了。當然這也沒有太大影響,索幸就出國深造去了。有時候你做成一件事以後,外界反映的確有出乎意料的一些結果,比如最近我從我的同事那兒得到了這些東西,有各種各樣的人機大賽的看法,甚至包括機器人是不是要統治地球?人類會不會淪為寄生者?諸如此類,讓人感到恐懼的評論。我不知道這個東西怎麼理解,我還是引用我一個好朋友加上同事(目前是Facebook人工智能實驗室主任) Yann Lecun的預言。他的預測是,“有些人是因為對人工智能的原理不理解而導致,有些人是為了個人名望而宣揚人工智能威脅論,有些人則是為了商業的利益推動人工智能威脅論。”所以,各位在讀這些東西的時候,還是應該把這麼一個背景給考慮進去,不要被這些觀點去隨便的誤導,它們有一定的道理,但是還可以看一看其他的觀點,這塊可以分享一下我的觀點,我認為人工智能和人類對決不是什麼大的了不起的事,人類和機器對決自古就有,還在發生,這幾張圖大家看到,馬車被火車戰勝以後,固然有人驚呼,但是世界運轉如故。大概在同一個時代有人發明了照相機,當時有人驚恐,照相機來了以後畫家就失業了,但是現在畫家還是活的好好的,甚至新的藝術形式也被創造出來了。人機大賽放在這麼一個背景下,它只不過是我們在技術上的里程碑,展示了人類智慧的力量和功能,我們可以以歡迎的心態接受它。當然我們的確是對它的功能的邊界有一些憧憬,但是它到底會不會強到把我們給幹掉的地步,我想這也是不必擔心的。如這張圖展示,人工智能和自然智能或者是人類智能其實走的路是非常不一樣的。人類智能定義實際上不是單一的,它是一個泛化的、比較模糊、非常難以衡量的功能,比如說某一個人會笑,某一個人會哭,誰笑的好,誰哭的好這是很主觀的事情。而人工智能所集中的東西是單一的、明確的、可評測的功能,比如說下圍棋、下象棋、搜索。人類智能使用的數學模型(如果有的話)未知,具有無限潛能;而人工智能使用顯性,簡化的數學模型,可以獲得理論、實際的邊界,而人類的潛能,還沒有看到它的邊界。在兩者實現方式上你會發覺也很不一樣。在硬件上人類智能用的是生物組織和器官,軟件上的方式可能用到了類似皮茨-麥卡洛二元神經網絡,但實際上遠遠更複雜;而人工智能使用的電子設備、暴力計算,搜索, 優化,隨機模型的方法,它有它的優勢、也有它的劣勢。我個人觀點只要是在有限,透明規則、特定任務下,機器超過人的水平是時間問題,絕對是會超過的,沒有什麼好擔心的,而且是好事,因為它可以幫人類實現很多有價值的功能,成為人類的好助手,降低我們生活的成本,提高我們的效率。

  但人工智能是代替人嗎?對我個人來說,這是天方夜譚。我想分享一段很喜歡的鋼琴曲,表演者是一個很著名的鋼琴家叫弗拉基米爾·霍洛維茨,是上個世紀最偉大的鋼琴家之一。他在俄國十月革命以後就離開了俄國,離開了蘇聯,到的西方,大概70年以後,他90歲的時候,終於有機會回到他的故土,在莫斯科舉辦了一場音樂會。他彈了這麼一首曲子,這首曲子的名字大家可能都知道,是舒曼創作的《童年回憶》,非常簡單,連我的兒子都會彈。沒有什麼技術難度。所以機器人是絕對可以勝任的。但是我不知道大家在聽這個音樂的時候,會不會產生一種,人彈和機器彈完全不一樣的感覺,一種寧靜,深沉,直達心脾,催人淚下的感動。人在很多方面,實際上跟機器是很不一樣的。我們的工程能力連造一個細菌用生物學角度講都沒法造出來,更不要說去實現人的思維和頭腦,所以說從技術的可能性上來講,還有很大的距離。而且人的頭腦有很多獨特的功能,比如創造性思維、感情、常識、美感,這都是人工智能途徑或者方法無法企及的。特別是當音樂進行某一個時刻,你可以看到,它能夠直接去接觸到人的心理,這個我們人工智能不知道怎麼去用數學公式定義這麼一個程度。

  大家在聽機器人彈琴能不能被彈哭,我自己還有待觀察,但這個曲子,這個表演,絕對可以達到這麼一個境界,我們歷史上的偉人孔子、拿破崙、貝多芬、梅紐因、托爾斯泰,巴蘭欽、普列賽斯卡婭,愛因斯坦,你覺着他們會被機器代替嗎?

若人工智能研發是登山,我們都經歷了什麼

(聲明:本文僅代表作者觀點,不代表新浪網立場。)

看看這個吧

20160413_570dcdddbebff

霍金想要探測比鄰星,有可能成功嗎?

  歡迎關注“創事記”的微信訂 ...

9iNe-fxrcizu4067037

蘋果購地以時光女神命名 疑有關電動汽車項目

蘋果新大樓以古希臘“時光女神” ...