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