
來源:極客鵬友說(ID:geekpys)
口述:科普作家 瘦駝、Jina AI 創始人兼 CEO 肖涵、一流科技 OneFlow 創始人兼 CEO 袁進輝、極客公園創始人兼總裁 張鵬
整理:湯一濤
原标題:能自主程式設計的 AI,會搶程式員的飯碗嗎?
春節期間,開發出 AlphaGo 的人工智能公司 DeepMind 又釋出一個能夠自主程式設計的新模型——AlphaCode。
在程式設計競賽網站 Codeforces 舉辦的 10 場比賽中,AlphaCode 取得了前 54.3% 成績。這意味着,它打敗了将近一半的人類選手。更為關鍵的是,比賽中的所有代碼都是由 AlphaCode 自動生成的,全程無需人工監督。
AlphaCode 取得的成績意味着什麼?它會搶走程式員的飯碗嗎?在基礎科學領域,AI 發揮了怎樣的作用?該如何了解人類和 AI 的關系?
上周,《今夜科技談》邀請到了科普作家瘦駝、Jina AI 創始人兼 CEO 肖涵、一流科技 OneFlow 創始人兼 CEO 袁進輝,聊了聊和 AI 有關的話題。
如何評價 AlphaCode 取得的成績?它需要人工訓練嗎?
肖涵:AlphaCode 其實不是一個單一的算法,它是根據 GPT-3 模型搭建出來的一個系統。是以我們不認為 AlphaCode 是 AI 算法上的突破,它的突破在于産生了一個能夠勝任比較複雜任務的系統。
就算法訓練來說,人工智能的第一步是預訓練。就是把 GitHub 上的程式都拉下來,讓這個模型對程式設計有一個初步的認識。
第二步是微調。因為預訓練得到的知識并不都是有用的,它們給出了一個大體的世界觀,但如果要解決具體的問題,就需要定向調整。
AlphaCode 做的另外一件事就是建構了一套評判系統。因為基于給定的題目,AlphaCode 可以生成大量答案,但它并不知道這些答案正确與否。是以把問題答案和他給出的答案輸入到這個系統中,它就可以評判答案正确與否。
整個過程确實就像 AlphaCode 釋出時所宣稱的,是可以做到完全無監督的。
袁進輝:我認為 AlphaCode 是裡程碑式的進展,根據自然語言描述,自動生成可解決算法問題的完整程式,這很了不起。
其實我對 AlphaCode,經曆了從低估到高估再到低估的心理轉變。
我在看到論文細節之前,低估了 AlphaCode。和 GPT-3 訓練自然語言類似,AlphaCode 本質上也是抓取了 GitHub 上的幾百億行代碼,捕捉語言結構,再生成。并且,相比于非常不規律的自然語言,代碼的文法是非正常律的。從這個角度來說,AlphaCode 和以前解決問題的方法差不多。
但令我感到意外的是,我本來以為 AlphaCode 的原理是自動搜尋代碼庫中已有的代碼片段,但實際上這些代碼都是預訓練模型自動生成的。傳統上我們認為 AI 解決的通常是低精度的問題,比如圖檔識别準确率 90% 已經很高了,但讓 AI 做到 100% 的準确率是極難的。而代碼恰恰要求 100%,即使是寫錯一個變量名稱,或者少打一個「;」,程式也會報錯。是以這時我又高估了 AlphaCode。
後來我又看了 AlphaCode 的論文,發現它确實可以自己生成完整程式,但中間也用了一些取巧的成分。比如說它會為一個問題生成 100 萬份程式,其中當然有對有錯。AlphaCode 會篩選掉 99% 的代碼,留下 1%。在這 1% 的幾千份代碼中,AlphaCode 又通過聚類篩選等方式,篩選出 10 個答案送出到 Codeforces。隻要這 10 個答案中有一個正确答案,就算過了。
是以 AlphaCode 并不是一次性生成解決問題的程式,而是為一個問題生成數十萬、上百萬的程式,經過簡單測試、樣例篩選,最終篩選出正确答案。
對比 Codex、GitHub Copilot 這些輔助程式設計工具,AlphaCode 有什麼不同?
袁進輝:我覺得有兩點,一是解決的問題不同,二是方法不同。
AlphaCode 解決的問題,還是有一定難度的問題。
二是 AlphaCode 不是網上搜尋的現成代碼片段,是自己生成的。像 Github Copilot,就是搜尋的現成代碼片段。之前有人做過實驗,發現它會從 Stack Overflow(代碼問答網站)上抓取代碼,因為它把程式員寫在代碼裡的注釋都抓取過來了。
這些 AI 程式設計工具,會取代程式員嗎?
肖涵:其實這些 AI 輔助程式設計工具,都是為了幫助開發者能有更好的程式設計體驗。隻不過 AI 發展到今天已經非常強大,它可以自動把代碼寫完,而不僅僅是填函數名這麼簡單。
但是今天所有的 AI 都沒有到達取代開發者的程度,開發者本身還是那個最終的決策人。AI 所生成的代碼,僅僅是一個參考。
瘦駝:作為一個文字工作者,我還是想把這件事映射到「自然語言」的領域來。
首先,讓 AI 生成一段沒有任何文法錯誤的代碼沒有那麼難。在自然語言裡有大量不符合邏輯和文法的東西,我們在說話的時候并不是嚴格遵循某種規律的。但代碼本身是嚴格遵守文法的,它有一套通用的邏輯。
第二點,我覺得碼農其實不必太緊張,對于文字創作者來說,我們在前幾年已經碰到過類似的挑戰了。現在一些固定格式的文本已經大量地由 AI 生成,比如比賽結果、股市播報、天氣預報。對于這種有規律可循的文本來說,AI 寫得比人快多了。但是想讓 AI 寫一些有創造性的東西還是非常困難的,因為創造性本質上是對現有邏輯和體系的挑戰,甚至創造性包含了允許 AI 犯錯。對 AI 來說,它很難保持一定的個性,比如《紅樓夢》裡,賈寶玉的詩和林黛玉的詩就有明顯的不同。這種能力,AI 現在可能還很難做到。
肖涵:我覺得性格的差别,無非就是訓練語料的不同。如果我想生成一個朦胧派詩人的風格,我就把所有朦胧派詩人的語料收集起來,訓練一下就可以了。
是以我覺得對 AI 最重要的還是資料。算法模型如果能更好地挖掘資料,把資料的價值充分利用起來,那其實所謂的性格也就達成了。
袁進輝:我來補充一個反方向。按照肖涵的邏輯,那如果沒有朦胧派的語料,就生成不出朦胧派的 AI;如果沒有梵高這個人,就訓練不出梵高風格的繪畫。是以 AI 在創造層面,本質上還是更像一種記憶,差别在于是一種機械的記憶還是比較聰明的記憶,但其實都跳脫不出原有的範疇。
專業術語裡有兩個詞,「exploitation」和「exploration」。exploitation 指的是保守地在應有的範圍内工作,exploration 指的是在範圍之外探索。
也許我們需要給 AI 一點犯錯空間。
在 AI 崛起的背景下,怎麼做一個有價值的程式員?
袁進輝:AI 比較擅長做比較機械的工作,但寫代碼也是需要創造性的,寫到一定程度,我們也把它稱之為藝術。
代碼裡面也有好壞,寫出來的代碼是不是足夠簡潔優雅,是否有創造性的審美,這可能還是人類的優勢。
張鵬:但這種美,是不是也要能展現在效率上高于醜和複雜的東西,商業世界才會認可?
袁進輝:這種美,确實在效率上有展現。判斷代碼美醜的一個标準,就是可複用性。簡單的代碼有更好的擴充性,未來就可以在更多的地方複用。如果我的代碼隻在目前的任務可以用,就是不太好的實踐。
肖涵:我想起來之前國外論壇上有一個特别火的文章,就是說一個律所雇傭了一個小夥子做類似報表整理之類的工作。恰好這個小夥子懂一點程式設計,就把這個工作自動化了,程式運作 5 分鐘就可以做完原來一周的工作。兩周之後,這個小夥子内心有點愧疚,就把這件事發到了論壇上,問大家該不該告訴老闆這件事。
我覺得這件事反映了一點——不管他有沒有告訴老闆,機械化的工作一定會被取代。甚至他自己也覺得做這種工作沒有意義,否則就不會有這種糾結。人生總要有點追求,何必在這裡浪費時間?
其次是我覺得出現這些代碼輔助 AI 不是壞事。人類發展到今天,不管是工業革命還是流水線的引入,人類總會從事更進階的職業,會創造更高的價值。總體來說,我覺得這是一件正向的事。
怎麼了解當下很火熱的低代碼、軟體 2.0 這些概念?
肖涵:低代碼出現的原因,其實是過去幾十年我們已經積累了大量的代碼資本。今天任何一個軟體,都不是從頭開始寫的,它們都有自己的上遊依賴關系——軟體庫。
實際上我們建構現代軟體的時候,最重要的往往不是創新,而是可複用性。可複用性指的就是,這個軟體完成之後,一定要成為更大型軟體中的一個元件,而不是從頭開始重複造輪子。
當「可複用性」這種概念深入人心之後,于是才有了低代碼、無代碼這種概念。今天我們建構的代碼越來越進階,不再是作業系統這種底層軟體,更多的是面向 C 端使用者的進階軟體。這種情況下就非常凸顯低代碼、無代碼的重要性。
如果縱觀整個人類的工程史,其實可複用性就是非常關鍵的轉折點——一旦一個東西可以被複用,人類的文明就會發展到一個新高度。我們可以假想一下,一個原始人拿着兩塊石頭碰觸了火花,這是一個偶然嗎?還是說它成為了可以被複用的經驗,于是人類就此掌握火的使用?
是以我更想強調的是,低代碼和無代碼肯定是發展趨勢。但趨勢背後的原因在于,我們現在面向的是更進階的軟體開發,這種開發尤其強調複用性。
袁進輝:我來補充一下軟體 2.0。
軟體 1.0 說的是代碼是資料。我們在代碼的基礎上,基于資料訓練一個 AI 模型。
軟體 2.0 指的是模型是代碼。在 AlphaCode 之前,AI 的模型早就開始為人寫代碼了。比如圖形識别模型,它的原理是計算機視覺科學家寫了一堆規則——圖檔裡有哪些特征,那這張圖檔就是汽車。但是這麼做了幾十年之後,發現這種方法識别率并不高。是以現在的做法是從一堆資料中訓練出一個模型。
以前代碼必須由程式員了解問題之後轉化成計算機了解的語言,計算機才能幫我們解決問題,本質上是一個從實體世界遷移到數字世界的過程。模型即代碼的意思就是,現在我們不需要經過人腦了,隻要收集一堆資料,計算機就能自動挖掘資料中的規律,生成模型。
如果可複用代碼所引用的底層代碼本身就有問題,該怎麼辦?
肖涵:現實世界中确實發生過這樣的事。前幾個月 Log4j 軟體包出錯,就造成了非常多軟體公司的恐慌。這樣的問題,在低代碼和無代碼的環境下會更難發覺。因為沒有多少人會去寫這種底層的代碼了,大家關注的更多是更進階的軟體業務邏輯。
之前在 Javasript 社群還發生了一件事。維護底層代碼的程式員因為覺得别人在網上攻擊他,一怒之下把代碼删了。這導緻的後果就是整個複用的鍊條斷了。
是以說在低代碼、無代碼的環境下,一定要保證上遊足夠穩健。即使出錯也要能夠及時修複,這一點非常重要。
袁進輝:其實 AI 的模型是很脆弱的,非常容易被攻擊。實際上訓練 AI 模型的就是一堆資料,簡單了解就是高維空間中的一個方向。如果進來的資料是沿着這個方向的,AI 就判斷得很準。如果進入的資料和那個方向垂直,那 AI 的判斷就會出錯。
前幾年有人在特斯拉的雷射雷達上做了一個實驗,用一個小紙片稍微改變一下傳進去的信号,特斯拉的識别就出錯了。
張鵬:前段時間我還聽到過這種觀點。就圖像識别技術而言,在最初建構 ImageNet(視覺影像網資料庫)的時候,因為當時資料的局限,導緻現在形成了一些偏差,比如 AI 對人類的歧視問題。但今天 ImageNet 已經成為了一個基礎設施,無數人在這之上建構了新的設施,這種偏差就成為了一個逐級感染的問題,越來越難以克服。
可能在某些時刻,需要一個根本性的重新開機,才能解決這個問題。
在基礎科學領域,AI 能夠發揮哪些作用?
瘦駝:對于很多資料敏感型的行業來說,AI 确實解放了很多科學家,讓這些科學家可以去做更多有創造性的工作。
之前讨論過,在人類的天文學家中,最容易被 AI 取代的可能是埃德文·哈勃。他花了幾十年時間,從大量資料中發現了星系的「紅移-距離關系」。這本質上是一個資料相關性的問題,放在今天的 AI 身上,可以立刻發現這種資料間的規律。
又比如說快速射電暴,它以前經常被人忽略。因為快速射電暴太短暫了,很容易被認為是資料中出現的一個異常。但是有了 AI 這樣的工具後,它就可以從這些不斷出現的偶然異常中發現規律。
我覺得 AI 的出現改變了科學發現的範式,讓我們具備了從資料中找出被忽略的規律的能力。
AI 公司的商業化都很困難,但 DeepMind 在去年盈利了,怎麼了解這家公司?
肖涵:首先我對 DeepMind 是非常崇敬的,但我不會做這種公司,我個人認為 DeepMind 風險性是非常高的,回本的機率很低。
首先在深度學習的前提下,算力成本和存儲成本的投入是非常高的,這個很好了解。
第二個是人員原因。每年 DeepMind 都有一兩篇轟動性的論文面世,很重要的原因就在于,它儲備了大量全世界最頂尖的人才。這種人才成本,不是每個公司都能承擔的。深度學習發展到今天,實際上拉大了大公司和小公司間的貧富差距。
我個人其實更看重 AI 在工程領域的突破,如何更好地解決已有的問題,而不是找到一個從沒被解決過的新問題去突破。
袁進輝:DeepMind 的确不太典型,他理論上不是一家商業公司。大部分商業公司,一定是要做一個可複制的商業化産品,更多的是考慮市場規模等一系列更實際的問題。
DeepMind 更像一家科研機構。隻不過它不像科研機構申請經費那麼困難,DeepMind 背後有谷歌源源不斷地投入資金。
這些年,AI 的發展思路有什麼變化?
肖涵:我覺得有兩點,一是 AI 的解釋性,二是 AI 的訓練過程。
1、解釋性。AI 這些年其實經曆了從可解釋到不可解釋的過程。
早期的 AI 是基于一套規則生成的,比如最早的問答機 Eliza,它的邏輯在于,識别你說的話包含哪些字元,經過因果判斷,傳回特定的答案。這些回答都是可以解釋的,因為程式是寫死的。
後來 AI 發展到 2000 年左右,出現了參數化模型。參數化模型會把圖檔、聲音、文本等資訊描述成一個資料函數,AI 所要做的,就是填入系數。這一階段的 AI 也是可解釋的。
自 2010 年以來,AI 逐漸轉向了深度學習架構,AI 開始變得不可解釋。因為深度學習架構拆分到最細,其實是由一個一個非線性函數疊加而成的。如果隻有一個非線性函數的話還比較好解釋,但疊加在一起的非線性函數有點類似蝴蝶效應,基本上是不可能溯源的。
我們整個深度學習網絡是一個非常深的非線性系統,比如 AlphaCode 就包含 400 多億個參數,實際上無法追根溯源,到底是哪個參數産生的影響。這就好像我們無法判斷,到底是哪一個神經元令人腦産生了意識一樣。
但是今天,又有一些人要求 AI 具有可解釋性。因為随着 AI 越來越聰明,我們要求它承擔它的社會責任了,比如不能歧視黑人。當出現問題時,就可以找到出現問題的原因,這就要求 AI 可以被解釋。
2、訓練過程。AI 的訓練過程,從一開始的「端到端」過程,拆分成了「預訓練」和「微調」兩步,專業術語叫遷移學習。
其實我本人非常喜歡遷移學習,因為它為機器學習指明了一個大方向。以往的機器學習,每解決一個問題,就要專門建構一個模型。即使是解決兩個非常相似的問題,比如識别是籃球新聞還是足球新聞,哪怕都是自然語言處理,在傳統機器看來都是不同的任務。
機器學習将端到端訓練的過程拆分成了兩部分。一部分是預訓練,從大規模的語料中學到一個相對通用的知識。然後是微調,将通用的知識去解決特定的細節問題。
這樣拆分的好處在于,大規模語料訓練的模型可以得到複用。因為不是所有公司都有能力建構這種超大規模的模型。可以複用之後,中小公司就可以拿這個模型針對自身特定的領域微調,就能産生子領域上的業務價值,節省了大量的人力、物力和時間成本。
袁進輝:我想補充的是,這種大模型還沒到頭,以後還會越來越大。像 GPT-3,參數已經達到 1700 億,但和人腦的神經元連接配接數相比,還差 1000-10000 倍左右。
一個可能的猜想是,智能或許沒有那麼神奇,隻是一個規模的問題,最後會由量變産生質變。
另一種觀點認為,預訓練模型在腦科學和神經科學上也有一定的支撐。人之是以這麼聰明,有一部分是後天習得的,但主要還是先天決定的。在一個嬰兒出生之前,大腦皮層間的連接配接和神經元的突起,就已經大緻由基因決定了。在嬰兒出生看到這個實體世界後,神經元之間的連接配接會根據實體信号微調——有的連接配接會越來越強,不太使用的連接配接就會變弱。
這整個過程都非常類似預訓練和微調的模式。是以從某種意義上來說,大模型預訓練,的确有生物的合理性。
AI 和人類會是怎樣的關系?
肖涵:我對 AI 能力的增強是非常有信心的。但是,在目前這套方法之下,我認為 AI 可能最終無法産生自我意識。
可話說回來,難道 AI 一定要有自我意識嗎?
50 年後可能 AI 仍然沒有自我意識,但它可以解決非常多重要的問題,要比人類解決得好得多,這個時候你會願意承認這種形态的東西是「智能」嗎?
袁進輝:我傾向于從正面了解這件事,就是 AI 可以解放人類,讓人類去追求更本質的東西,就好像蒸汽機把我們從體力勞動中解放出來一樣。
這讓我想起了劉慈欣的小說《朝聞道》中的一個設定:地球人可以向外星人提任何問題,外星人會告訴你正确答案。但代價是知道答案後,這個提問者會立刻死去。但最終有一個人問了外星人這樣一個問題:宇宙的目的是什麼?
外星人也不知道,于是他崩潰了。
張鵬:雖然我們被冠以「擁有自我意識」,但全世界也有大量的人不知道自己的目的是什麼。是以我覺得以自我意識來定義也許是一種人類沙文主義。
瘦駝:我覺得對于 AI 的思考有幾個層面。
一個是哲學層面上的。我認為如果未來 AI 變得像人一樣,那一定是失敗的 AI。他有人的缺點,有人自己都搞不清的邏輯錯誤,那我們為什麼要造 AI?直接造人不是簡單地多嗎?我們之是以要造 AI,一定是它可以解決人類解決不了的問題,這樣 AI 才有意義。
另外我也有一些應用層面上的顧慮。剛剛幾位也說到,AI 很脆弱。如果我們已經高度依賴 AI 了,一旦底層的東西有問題,會造成非常大的影響。
然後是關于解釋性的困局。解釋性的困局其實是用來解放人類自己的,就是想求一個安心。但即便這個說法本身沒有意義,也一定會讓很多人心生警惕。這種警惕,從人作為社會性動物的角度來說,就會對 AI 的發展産生影響。我們需要有一定的準備,不要讓這種警惕發酵到一個比較尖銳的地步,那到時狀況就比較糟糕了。
張鵬:我覺得真正的問題是,AI 今天還有大量的基礎工作要做好。我們可以确定,AI 會成為人類未來文明程序中重要的夥伴,但它距離這個角色,其實還有很長的路要走。
今天我們對于 AI 的探讨,如果是針對「不要犯一些基礎錯誤」,是有意義的。但在 AI 能力還比較羸弱的時候過度讨論「自我意識」之類的話題,其實是很務虛的。
*頭圖來源:Unsplash,DeepMind