谷歌新目標——讓計算機實(shí)現自我編程,自主機器時(shí)代不再遙遠

韓璐 9年前 (2016-11-28)

許多人忽視了技術(shù)層AI也將產(chǎn)生顛覆——讓機器自己編程。而一旦機器做到這一步,在軟件發(fā)揮重大作用的所有領(lǐng)域,將會(huì )經(jīng)歷一場(chǎng)顛覆性的變革。

谷歌新目標——讓計算機實(shí)現自我編程,自主機器時(shí)代不再遙遠

想象AI的未來(lái)是很有趣的:家庭服務(wù)機器人、亞馬遜的智能家庭中樞(Echo)等設備將走進(jìn)每家每戶(hù),還有無(wú)人機快遞和更加精準的醫學(xué)診斷。這些吸人眼球的消費應用充斥著(zhù)公眾的想象,以至于大家都忽視了AI對另一個(gè)領(lǐng)域的顛覆——軟件本身的發(fā)展。

想象一下,如果計算機自己能理解自己,它們可以做些什么?用不了多久,計算機就能做到這件事。并且,我不是在描述遙遠的未來(lái),我說(shuō)的是觸手可及的現在,使用時(shí)下現有的技術(shù)就能達到。

迄今為止,機器學(xué)習的專(zhuān)家傾向于聚焦那些為特定任務(wù)開(kāi)發(fā)的AI應用,比如人臉識別、自動(dòng)駕駛、語(yǔ)音識別甚至是搜索。但是,如果這些類(lèi)似的算法能夠在不需要人為幫助、解釋或者干預的情況下,理解它們自身的代碼結構呢?正如他們理解人類(lèi)的語(yǔ)言和圖像一樣。

如果代碼開(kāi)始對自己進(jìn)行分析、自我修正并提升,且速度比認為的更快,那么技術(shù)的突破可能會(huì )來(lái)得更快。由此帶來(lái)的可能性是無(wú)止境的:醫學(xué)的進(jìn)步、更加自然的機器人、更智能的手機、更少bug的軟件,更少的銀行欺詐等等。

人工智能具有解決軟件開(kāi)發(fā)中的一個(gè)古老問(wèn)題的潛力。代碼編寫(xiě)或操縱其他代碼的能力的概念已經(jīng)存在了很長(cháng)時(shí)間,一般稱(chēng)為元編程(它實(shí)際上起源于20世紀50年代末的Lisp)。它解決的難題,目前都還在人們的想象之中。

但是,現在人工智能讓改變發(fā)生了。

使用人工智能,計算機能夠理解一個(gè)軟件開(kāi)發(fā)項目從無(wú)到有的發(fā)展歷史過(guò)程中的所有代碼,并立即改進(jìn)或者刪除單獨一行代碼中的bug,不管是用什么編程語(yǔ)言。即便是一個(gè)缺乏經(jīng)驗的或者中等水平的程序員都能講清楚讓計算機自我編程的原理。由此,一個(gè)癌癥項目的研究可能幾天或者幾個(gè)月就能完成,而不需要花費好幾年的時(shí)間,這將帶來(lái)顯著(zhù)的進(jìn)步。

今天,這項最終將會(huì )帶來(lái)顛覆性改變的技術(shù)尚處在萌芽時(shí)期,但是,它已經(jīng)開(kāi)始生長(cháng)。比如,谷歌的TensorFlow機器學(xué)習軟件,讓每位程序員都能將神經(jīng)網(wǎng)絡(luò )直接融入到所開(kāi)發(fā)的APP中,讓APP擁有識別圖片中的人和物體的能力。要把這些想法變成現實(shí),你將不再需要一個(gè)博士學(xué)位。讓業(yè)余人士也可以修正程序,這可能會(huì )成為AI發(fā)展歷史上最大的突破。

谷歌的目標:大部分代碼都不需要人為編寫(xiě)

國外著(zhù)名科技記者Steven Levy今年6月在他刊于BackChannel的文章《谷歌如何將自己重塑為一家“AI為先”的公司》(How Google Is Remaking Itself As A "Machine Learning First" Company)中提到,谷歌大腦負責人Jeff Dean表示,隨著(zhù)他和團隊對機器學(xué)習了解得更多,他們利用機器學(xué)習的方法也更加大膽。“以前,我們可能在系統的幾個(gè)子組件中使用機器學(xué)習,”Jeff Dean說(shuō):“現在我們實(shí)際上使用機器學(xué)習來(lái)替換整套系統,而不是試圖為每個(gè)部分制作一個(gè)更好的機器學(xué)習模型。”Levy在文中寫(xiě)道,如果現在讓Jeff Dean改寫(xiě)谷歌的基礎設施,大部分代碼都不會(huì )由人編碼,而將由機器學(xué)習自動(dòng)生成。

谷歌新目標——讓計算機實(shí)現自我編程,自主機器時(shí)代不再遙遠

谷歌的代碼bug預測系統,使用一個(gè)得分算法,隨著(zhù)commits變得越來(lái)越舊,它們的價(jià)值越來(lái)越小。

認為計算機自我編程離我們還很遠?如果我告訴你,一些大公司,比如谷歌,已經(jīng)開(kāi)始在內部的項目管理系統中嘗試使用這一概念,你可能會(huì )覺(jué)得震驚。但是,谷歌確實(shí)已經(jīng)開(kāi)發(fā)了一個(gè) bug 預測程序,使用機器學(xué)習和統計分析,來(lái)判斷某一行代碼是否存在瑕疵。谷歌工程師、W3C的聯(lián)合主席Ilya Grigorik也開(kāi)發(fā)了一個(gè)開(kāi)源版本的bug預測工具,目前已被下載2萬(wàn)次。

開(kāi)源地址:https://github.com/igrigorik/bugspots

谷歌新目標——讓計算機實(shí)現自我編程,自主機器時(shí)代不再遙遠

Ilya Grigorik ,圖片來(lái)自twitter

另一個(gè)例子來(lái)自Siri的繼承者——Viv。Wired最近的一篇報道中寫(xiě)道,Viv不僅使用一系列的自然語(yǔ)言處理來(lái)實(shí)現語(yǔ)言識別, 還基于英語(yǔ)詞匯建立了復雜的自適應性計算機程序。代碼自己寫(xiě)代碼(Code writing code)。由于被寫(xiě)入的代碼是經(jīng)過(guò)Viv的開(kāi)發(fā)人員自己訓練和專(zhuān)門(mén)化的,所以這里的“寫(xiě)代碼”并不是我們通常所說(shuō)的寫(xiě)代碼的能力,但這確實(shí)是一個(gè)大的進(jìn)步。

在這個(gè)方向上,另一個(gè)大的進(jìn)步來(lái)自非專(zhuān)業(yè)領(lǐng)域。Emil Schutte曾有過(guò)一句非常具有挑釁性的言論:厭倦了寫(xiě)代碼?我也是!讓Stack Overflow來(lái)做這件事吧。他分享了一個(gè)例子來(lái)證明這一概念,從Stack Overflow的大型編程數據庫中提取完整的工作代碼,來(lái)提供完整的功能代碼塊,但是,這樣得到的模塊還是基于已經(jīng)寫(xiě)好的代碼。

DeepMind的嘗試

實(shí)際上更早之前,DeepMind團隊開(kāi)發(fā)了一個(gè)“神經(jīng)編程解釋器”(NPI),能自己學(xué)習并且編輯簡(jiǎn)單的程序,排序的泛化能力也比序列到序列的LSTM更高。描述這項研究的論文《神經(jīng)程序解釋器》(Neural Programmer-Interpreters),被評選為ICLR16最佳論文。

NPI是一種遞歸性的合成神經(jīng)網(wǎng)絡(luò ),能學(xué)習對程序進(jìn)行表征和執行。NPI的核心模塊是一個(gè)基于LSTM的序列模型,這個(gè)模型的輸入包括一個(gè)可學(xué)習的程序嵌入、由調用程序傳遞的程序參數和對環(huán)境的特征表征。這個(gè)核心模塊的輸出包括,一個(gè)能指示接下來(lái)將調用哪個(gè)程序的鍵、一個(gè)經(jīng)典算法程序的參數,以及一個(gè)能指示該程序是否該停止的標記。除了遞歸性?xún)群送?,NPI構架還包括一個(gè)內嵌的可學(xué)習程序的鍵值內存。這種程序-內存的結構對于程序的持續學(xué)習和重用是極其重要的。

谷歌新目標——讓計算機實(shí)現自我編程,自主機器時(shí)代不再遙遠

圖 6:NPI與序列到序列LSTM對不同長(cháng)度的序列進(jìn)行排序的準確率對比,最長(cháng)序列含有20個(gè)數組。

NPI有三個(gè)擁有學(xué)習能力的部件:一是任務(wù)未知的遞歸內核,二是持續鍵值程序內存,三是基于特定領(lǐng)域的編碼器,這個(gè)編碼器能在多個(gè)感知上有差異的環(huán)境中讓單一的NPI提供截然不同的功能。通過(guò)合成低層程序表達高層程序,NPI減少了樣本復雜性,同時(shí)比序列到序列的LSTM更容易泛化。通過(guò)在既有程序的基礎上進(jìn)行建構,程序內存能高效學(xué)習額外的任務(wù)。NPI也可以利用環(huán)境緩存計算的中間結果,從而減輕遞歸隱藏單元的長(cháng)期存儲負擔。

不過(guò),當時(shí)DeepMind團隊并未使用無(wú)監督學(xué)習的方法的訓練NPI,其模型也只能學(xué)習合成若干種簡(jiǎn)單的程序,包括加法、排序和對3D模型進(jìn)行正則化轉換。不過(guò),單一NPI能學(xué)會(huì )執行這些程序以及所有21個(gè)關(guān)聯(lián)子程序。

田淵棟對計算機自我編程的研究綜述

Facebook人工智能實(shí)驗室研究員田淵棟在他提交ICLR17的文章中,就有一篇研究了這方面的問(wèn)題。

谷歌新目標——讓計算機實(shí)現自我編程,自主機器時(shí)代不再遙遠

論文摘要:構建能夠通過(guò)自動(dòng)推斷(infer),將一組輸入映射到輸出的計算機程序仍是一個(gè)開(kāi)放且極具挑戰性的問(wèn)題。由于在可能的程序上存儲著(zhù)巨大的搜索空間,并且需要處理高階邏輯(如for循環(huán)或遞歸),所以程序進(jìn)行歸納(induction)任務(wù)是很困難的。在本文中,我們使用Hierarchical Generative Convolutional Neural Networks(HGCNN),自動(dòng)根據輸入/輸出對生成程序。HGCNN以層次式預測候選代碼串,由此可以使用標準的搜索技術(shù)來(lái)構造程序。應當注意,該模型僅使用隨機生成的程序進(jìn)行訓練,因此可被視為一種無(wú)監督學(xué)習的方法。我們證明,文中所提出的方法可以生成程序,從簡(jiǎn)單的Swap到更復雜的循環(huán)和分支(比如找到一串數組中的最大值)。我們還展示了使用該方法,在實(shí)現諸如 Bubble Sort 等嵌套循環(huán)程序時(shí)取得的不錯結果。將LSTM等作為比較的基礎,新方法的預測精度有了顯著(zhù)的提高。

田淵棟在《深度學(xué)習沒(méi)有解決的理論問(wèn)題》里表示,這篇論文將算法的輸入輸出的結果抽取特征后,送入卷積神經(jīng)網(wǎng)絡(luò )文獻中,再層次式地生成圖像的經(jīng)典框架,生成一張二維圖,每一行就是一行代碼,或者更確切地說(shuō),是代碼的概率分布。有了好的分布,就可以幫助啟發(fā)式搜索找到正確的程序。而神經(jīng)網(wǎng)絡(luò )的訓練數據,則由大量的隨機代碼、隨機輸入及隨機代碼執行后得到的輸出來(lái)提供——基本不需要人工干預,算是一種非監督的辦法。

同時(shí),田淵棟還在后面補充:“等到今年的ICLR的文章一公布,隨便翻一翻就找到了七篇計算機自動(dòng)生成(或者自動(dòng)優(yōu)化)代碼的文章。打開(kāi)一看,引論里全在描述同樣的動(dòng)機。”

那這個(gè)動(dòng)機就是什么?

“讓計算機自己寫(xiě)代碼”。

一旦機器可以理解自己,一場(chǎng)顛覆性變革將會(huì )發(fā)生

隨著(zhù)越來(lái)越多的這類(lèi)技術(shù)變得成熟,機器將會(huì )在各種各樣的任務(wù)上超越人類(lèi)。那么,機器為什么不能理解自己呢?我想這只是時(shí)間的問(wèn)題。并且,一旦機器做到這一步,你會(huì )發(fā)現,在軟件發(fā)揮重大作用的所有領(lǐng)域,將會(huì )經(jīng)歷一場(chǎng)顛覆性的變革。

人工智能的核心挑戰之一便是教會(huì )機器學(xué)習新的程序、從既有程序中快速地編寫(xiě)新程序,并自動(dòng)在一定條件下執行這些程序以解決廣泛種類(lèi)的任務(wù)。在各種人工智能問(wèn)題中,程序以不同的面貌出現,包括運動(dòng)行為、圖像轉換、強化學(xué)習策略、經(jīng)典算法和符號關(guān)系等等。

現在,機器已經(jīng)能夠自動(dòng)執行越來(lái)越多的程序,而且現在開(kāi)源代碼這么多,如果把歷史上的代碼都學(xué)習一下,很多編程場(chǎng)景應該是可以自動(dòng)化的,至少可以大大減少人工。人類(lèi)程序員尤其是初級程序員的工作被取代的可能性,也越來(lái)越大。

【編者按】本文轉自新智元。文章來(lái)源:github,venturebeat 等,編輯:胡祥杰 王楠

最后,記得關(guān)注微信公眾號:鎂客網(wǎng)(im2maker),更多干貨在等你!

鎂客網(wǎng)


科技 | 人文 | 行業(yè)

微信ID:im2maker
長(cháng)按識別二維碼關(guān)注

硬科技產(chǎn)業(yè)媒體

關(guān)注技術(shù)驅動(dòng)創(chuàng )新

分享到