726
機器人
人工智能遲早滅了程序猿
前些日子,去人類文明發祥地埃及轉了一圈,不料想人類文明已臨大敵——DeepMind又在搞事情了!完全靠左右互搏練出來的AlphaZero,居然不顧人類心理陰影麵積,碾壓幾千萬張棋譜喂出來的前輩,真是嬸可忍,叔不可忍!
看起來,不僅人類經驗已成廢柴,連我們膜拜的大數據也將一無是處?正好相反,AlphaZero的勝利,恰恰說明了數據在AI領域的唯一神性。現在,請把所有異端踩在腳下,來跟我一起念:
萬物非主,唯有數據;
深度學習,數據使者!
什麼是數據?其實就是一個二元組(x,y):其中x是一次觀測值,也就是“看到了什麼”;而y是觀測的標簽,也就是“看到的是什麼”。這兩個要素,湊在一起才叫一條數據,缺一不可。舉個例子,在語音識別中,x就是一段聲音信號,y就是對應的文本;而在人臉識別中,x就是一副圖片,y就是這個人的編號。
人們對數據唯一神性的認識,並非一帆風順。在原始AI時代,由於計算能力的限製,縱有數據也無法處理,於是多神崇拜盛行:有人信算法,有人信專家,有人信窮舉,也有人隻信人品。直到本世紀,采用GPU的深度學習方案實用以後,我們才恍然大悟:原來數據裏蘊藏著那麼多的寶藏,隻是過去我們無力挖掘罷了。現在看來,有充足(x,y)這樣的數據是AI必要的物質基礎。既然數據如此關鍵,聰明人肯定會問——能不能自動獲得數據呢?對此,AlphaZero給了我們一個並不意外的漂亮答案!
在圍棋問題裏,x是某局棋,而y就是這局棋的輸贏。由於圍棋的規則確定,任給一個x很容易算出y,於是機器就可以自動生產數據了!有了無窮無盡的數據,AI笑傲江湖在戰略上並無意外。這揭示了無監督訓練的一個本質要求:由觀察x能夠顯著降低y的不確定性。對於圍棋,x定了y也就定了,這簡直太美妙了,三千萬棋譜又算什麼?我這兒要多少給你編多少!
自動生成的棋譜當然還得靠譜。就說你算力超過奧特曼,可是天天冥思苦想下圖《環珠格格》中紫薇下出的弱智局麵下的策略,也不過是浪費電罷了。這提出了自動生成數據的另一個要求:生成的數據p(x)分布,要跟真實分布盡量接近。對此,AlphaZero是否考慮了,怎麼解決的,我還沒有仔細研究過。
AlphaZero的勝利,一靠數據至上的信仰,二靠圍棋自生數據的特點。不過,不要以為在其他領域,也會被這樣的餡餅砸到,因為能自生數據的任務並不常見。那麼,有沒有可能通過方法上的改進,大幅降低對數據的依賴性呢?有可能!對比一下人與AI的視覺,會發現兩者對數據的利用效率大為不同:有寶寶的可以留意,他們在畫上見過一張卡通長頸鹿,到了動物園就能認出真的長頸鹿;而目前的AI要認長頸鹿,怎麼也得看個幾萬張高清無碼長頸鹿寫真才行。
其實,從動物到人的上億年進化中,視覺係統不斷地被外界景象所刺激,也就在不斷吸收數據和加強能力。妙就妙在,人類的視覺能力一則可以遺傳,二則可以在不同任務上複用。想想也是:辨別紋理、線條,與認長頸鹿還是河馬並無關係。那一張卡通圖片的作用,隻是告訴小孩子怎麼拚出輪廓罷了。這與“強AI“可能有些關係:深度神經網絡的下麵若幹層,往往表達的是類似“線條、紋理”這樣的初級信息,與高級語義的關係較弱,如果我們能把這些初級單元複用起來,AI就能夠充分利用類似任務的數據,而不是撂爪就忘。這樣一來,缺少數據的問題就大大緩解了。
人類的感知係統還有另一點令人困惑:別忘了在進化過程中,從來沒人告訴一隻猴子,眼前的哪個物體是鱷魚。也就是說,人類的感知進化很可能是無監督的,這給了我們無限的希望,也讓我們後背發涼。
先不扯那麼遠,僅就目前的AI來看,判斷某項工作是不是會被機器替代,有一個大前提,和一個小前提:大前提,是可以獲得足夠的有效數據(能自動生成數據則無敵),也就是說機器有快速進化的基礎;小前提,是人本身的進化過程沒有見過大量的數據,也就是說人的起點並不高。
速記、客服這些與語音視覺相關的工作,滿足大前提,不滿足小前提,AI從這裏起兵卻遭遇勁旅——人類的視聽係統可是上億年的數據喂出來的啊!反而是股票操盤手、互聯網數據分析師這些工作,遲早是AI的菜,人類並無還手之力——不信去測測基因,您有祖上遺傳下來的炒股本能麼?
還有什麼工作容易被AI顛覆呢?考慮到“自動生成數據”這個關鍵,我冥思苦想以後,無奈地告訴大家,還真沒準是編程。
機器自動寫代碼並不是個新問題,這叫做“歸納程序綜合”(Inductive Program Synthesis,IPS)。IPS問題可以描述為:給定一組數據對,自動產生一段代碼,將這些給定的輸入轉換為給定的輸出。傳統的IPS方法,有點類似隻能在4路小棋盤上的暴力搜索;可實際的編程任務,好比是19路大棋盤上的對局,還得靠萬物靈長的程序猿來人肉搞定。
可如今天下大變,機器在19路圍棋上已經碾壓人類,憑什麼編程就不行呢?機器人下棋,靠的是統計的方法和大量數據;而機器人編程,當然也要用機器學習替代暴力搜索。這裏的關鍵,還是數據從哪裏來。在這點上,AlphaZero給了我們極大的啟發。
如果在某些問題中,編程需求可以像圍棋規則那樣形式化表達。此時,給定一種輸入,輸出很容易確定,這就可以自動生成大量的測試數據。有了這些數據,後麵無非就是算法進化的問題了。
所以,真正的難點,還在那個形式化的需求表達,目前這離我們有多遠,我也說不清。設想一下,應該是在不同領域各個突破,分別製定表達方案。不過,編程領域的基礎準備相當充分:那個叫Gitbub的網站,將是機器顛覆人類程序猿的大本營!從Github上的海量項目出發,分領域定義需求表達模式的話,後麵的數據生成和編程模型訓練,其進展恐怕比我們想象得要快得多。
現有的碼農工作流程,可以分為溝通、設計、實現、調試、測試這幾個步驟。某典型程序員隨著年資變化,這幾個步驟的時間占比大致是上圖的樣子。如果形式化腳本+自動編程成為現實,上圖中的實現、測試、調試逐步驟就可以交給機器了。而溝通這一步,也將大大簡化。由於可能比較自動地生成數據,機器人編程解決複雜的任務,恐怕是遲早的事兒。到了那一天,程序猿就要大幅減少,產品狗勢力會進一步擴張:就算是不懂什麼堆排序、B+樹、CNN,隻要用腳本把需求表達出來,一樣能做出產品!不過,那時產品狗的要求可高多了,得有真正的邏輯提煉和任務分解能力,就會吵個架、搶個功是遠遠不夠的。
“遍身綺羅者,不是養蠶人。”親愛的程序猿們,不要天真地以為你們創造了未來,未來就屬於你們。狡兔死,走狗烹未必是機器自發的願望,無奈編程這樣高度形式化、數據可自生的任務,可能正是AI鐵蹄首先踏過的沃土。除了少量的高端碼皇(參見《20萬、50萬、100萬的算法工程師,到底有什麼區別?》一文),廣大碼農碼畜們隻有盡早皈依大數據教,向高級產品狗快速進化,才能避免被淘汰的命運!
最後更新:2017-11-03 10:43:54