AI 系統首次實現真正自主編程,完爆初級程式設計師

2021-01-13 開源中國

讓AI自動編程是人工智慧領域長久以來的夢想之一。現在,來自彭博和英特爾實驗室的兩位研究人員,號稱實現了首個能夠自動生成完整軟體程序的AI系統「AI Programmer」,這個「AI程式設計師」利用遺傳算法和圖靈完備語言,開發的程序理論上能夠完成任何類型的任務。AI自動編程的時代,大幕已開。

讓AI自動編程一直是計算機科學家的夢想。目前這個方面的成果還非常有限,比如讓AI自動補完程式語言,或者執行簡單的加法程序。今天我們要介紹的這項工作,號稱是第一個能夠全自動生成完整軟體程序的機器學習系統「AI Programmer」。 

研究人員表示,他們用這個系統證明了長久以來的假設,那就是功能完備的程序確實能夠被自動生成。具體到這項工作,AI Programmer利用機器學習中的遺傳算法,模擬複雜的指令。雖然現在AI Programmer生成的程序,複雜程度與人類新手程式設計師編寫的結果相當。但研究人員認為,AI Programmer編寫的程序完全可以超越傳統範疇,不受人類時間和智慧的局限。

AI編寫的程序只是在測試複雜度和計算資源之間找得到最適合的點。換句話說,可能性無限。

研究人員還表示,我們需要重新思考,設計新的、面向機器的程式語言,因為當前的程式語言是面向人類的,不適用於基於ML的編程。「在考慮ML驅動程序生成的未來時,我們需要放棄和重新考慮典型程序語言創建的方法。」

研究人員寫道,只有這樣做,我們才能開始設想一個由AI系統驅動,以人類創造力和設計為指導的計算機軟體開發的新未來。

AI Programmer的軟體架構。從圖中可見,由人類驅動的部分非常少,只需要在開始輸入指令,最後接收適用於某項任務的函數即可,剩下部分全部由機器完成。

AI Programmer:利用遺傳算法自動生成程序,理論上能夠完成所有類型的任務

根據論文,研究人員選擇了無類型程式語言,只包括了8種指令來驅動AI Programmer生成軟體。

AI Programmer使用的程式語言是圖靈完備的,如表1所示。理論上,在時間和內存不限的情況下,圖靈完備程式語言能夠處理任何編程任務。本質上,任何一種具有這種特質的程式語言都能夠解決海量編程問題。同樣,AI Programmer生成的軟體能夠完成所有任務。

有了這個保障,再來看AI Programmer的核心——遺傳算法。

要使用遺傳算法生成軟體程序,必須首先創建一個基因組(genome)。基因組是一組被組合在一起作為單個單元的基因。AI Programmer的基因組編碼為浮點數組,每個唯一指令的固定值範圍在0和1之間,如上面表1的基因範圍列所示。

創建好基因組後,AI Programmer就將其轉換為相應的程序,執行,並根據程序的輸出為結果程序分配適合度。生成的程序越靠近解決提供的任務,適應度就越高,越有可能繼續進行下一代的進化。在每一代,AI Programmer利用隨機選擇以及交叉和變異來創建子程序,其中包含輕微的隨機擾動,並且可能比其父母更好的基因組來解決目標任務。

圖3展示了從浮點數組中構建基因組的實例。每個值範圍映射到程式語言中的特定指令。最初,這些值是隨機的,導致生成的程序無法正常運行。但是,其中必將有一兩個能夠運行並執行一些有效的指令。一個程序執行得越成功,就越有可能繼續使用代碼,實現更成功的後代。

為了創建後代,父母將其基因的一部分交給孩子,這個過程如圖4所示。除了繼承父母的編程指令外,每個孩子也可能會遇到突變,也就是對特定基因增加受控但隨機的擾動。這導致特定基因的值發生修改,使所得到的編程指令發生變化,進而改變整個程序。

可執行程序根據其執行情況進行排名,如圖5所示。其中,特定程序會被立即從基因組池中刪除,成功的方案則被推進以產生新的後代。

AI Programmer使用結果:輸出「Hello World」,反轉字符串,加減乘,輸出斐波那契數列……

AI Programmer由C#.NET設計的模塊化框架組成。包括運行遺傳算法的引擎,基因組編碼器和解碼器,用於執行模擬程序的沙箱解讀器,以及將代碼轉換為二進位可執行文件的編譯程序。雖然最初設計AI Programmer的時候使用C#,但需要注意的是,設計原則並不限於使用C#。

研究人員指出,AI Programmer的適應性測試軟體框架具有延展性,並已被開發。用戶可以自己設計無數的定製化軟體,最終指導系統的遺傳算法(GA)生成和軟體程序演變。

如果目標程序旨在生成一個字符串,如」Hello World」(見上圖),測試分數可能是字符串中的數字。但由於AI Programmer是在字節級生成代碼,測試分數應將輸出字符的增量差考慮在內。

研究人員表示i,他們能用AI Programmer生成很多軟體程序。表2是所生成程序的名單。

一開始,研究人員讓AI Programmer生成了一個非常簡單的程序來輸出「hi」。經過5700代後,測試成功。生成代碼如圖9所示。

經過580,900代後,生成了「hello world」,如圖10所示。

經過6,057,200代後,AI Programmer成功生成了」I love all humans」,如圖11所示。

AI Programmer生成反轉字符串的程序。生成代碼如圖13所示。

AI Programmer能在92,400代之後生成加法程序;在177,900代之後生成減法程序,如圖15所示。

圖16所示的生成程序可以從兩個初始輸入值來輸出斐波納契序列。

論文:AI Programmer,使用遺傳算法自動創建軟體程序

摘要

在本文中,我們介紹了首個能夠自動生成完整軟體程序的機器學習(ML)系統,全程只需最低限度的人類參與。這個系統名叫「AI Programmer」,以遺傳算法(GA)為核心,加上緊密約束的程式語言,將其ML搜索空間的開銷降到最低。AI Programmer的新穎部分源於(i)獨特的系統設計,包括用於效率和安全性的嵌入式手工解釋器(hand-crafted interpreter),以及(ii)對遺傳算法的增強,納入了指令基因(instruction-gene)隨機化綁定,以及程式語言特定的基因組構建及消除技術。我們詳細介紹了AI Programmer的系統設計,詳細介紹了系統的工作原理,以及使用主流CPU來演示其軟體生成功能和性能的實驗數據。

論文地址

來源:新智元

相關焦點

  • AI系統首次實現真正自主編程:利用遺傳算法,完爆初級程式設計師
    讓AI自動編程是人工智慧領域長久以來的夢想之一。現在,來自彭博和英特爾實驗室的兩位研究人員,號稱實現了首個能夠自動生成完整軟體程序的AI系統「AI Programmer」,這個「AI程式設計師」利用遺傳算法和圖靈完備語言,開發的程序理論上能夠完成任何類型的任務。AI自動編程的時代,大幕已開。 讓AI自動編程一直是計算機科學家的夢想。
  • 自動編程還能自主檢測Bug,有了機器編程人類可更專注於創造
    檢測bug,軟體自己搞定 「機器編程」一詞在英特爾研究院和麻省理工學院聯合發布的《機器編程的三大支柱》論文中首次提出,通過機器學習和其他方法,機器編程可以設計實現自動編寫軟體的軟體。這將使程式設計師們有更大自由度和更多的精力去創造新的軟體。
  • 高級程式設計師是如何從初級程式設計師演變的?工作經驗不再是唯一途徑!
    區分高級和初級程式設計師的標準是工作年限嗎?程式設計師最重要的工作就是寫代碼嗎? 高級程式設計師是一名犯過其領域內所有可能犯到的錯誤的專家。 一旦你不再是初級程式設計師,什麼時候會成為高級程式設計師呢? 多年的工作經驗會自動讓你成為高級程式設計師嗎?未必。 以我自身為例。當我還是一名年輕的初級程式設計師時,我以為自己什麼都懂。我傲慢自大,獨來獨往。我認為自己是「代碼之神」。
  • 基因可以編程嗎?那程式設計師豈不是成了上帝?
    而程式設計師就牛了,至少在人工智慧沒有自我意識前,為其編程、灌輸命令的工作還丟不了,這樣就會比大多數行業晚「下班」,畢竟丟頭髮也不要丟工作嘛,哈哈!而題目所寫的「基因編程」就更加高大上了,如果未來程式設計師轉投這項工作,那可是一股超越一切的力量。
  • 程式設計師編程入門必知!程式設計師需要學什麼
    資訊時代的大背景下,計算機的應用顯得舉足輕重,精通計算機的人才對於龐大的市場需求量來說還是顯得很匱乏,因此計算機行業的前景是很可觀的,但是也有不少人對於編程處於一竅不通的狀態,那編程該從何入手呢?學習語言的過程中還要有機會進行檢驗,不能只編寫代碼,還要檢驗代碼的結果運行是否正確,也就是某些可以運行結果的軟體我們要有,不過許多的程式語言都要求有被程式設計師設計來講代碼轉換成機器能理解的語言的編譯器。其他一些語言,比如Python,使用可以立即轉換成程序而不需要編譯。一些語言有自己的往往包含著代碼編輯器、調試器和/或者翻譯以及調試的IDEs(集成開發環境)。
  • 據說不知道這些大神的程式設計師不是真正的程式設計師
    簡評:據說不知道這些大神的程式設計師不是真正的程式設計師,這些大神有的可以憑藉一本未完成的書獲得ACM圖靈獎,有的微軟開出百萬年薪蓋茨親自來挖人,更甚者用自己發明的語言重新開發一套作業系統。克努特)   他最為人知的工作就是經典巨著《電腦程式設計的藝術》, 這本書第一卷《基本算法》 於1968年推出,可真正能讀完並且真正讀懂的人並不多,比爾.蓋茨在1995年接受一次採訪時說,「如果你認為你是一名真正優秀的程式設計師,就去讀第一卷,...... 如果你能讀懂整套書的話,請給我發一份你的簡歷。」
  • 為什麼編程是獨一無二的職業
    簡介 有些人說編程很難,有些人認為很容易。 編程不僅依賴你的能力,而且還取決你工作的態度。 編程的確很難,但比起那些需要偽裝、欺騙和表演來生活的惡棍或者小丑來說,真的一點也不難。 作為一個程式設計師,知道你在做什麼,會讓生活變得更加有趣和快樂。2.
  • 初中學歷可以轉行做程式設計師?
    雖然題主你目前只有初中學歷,但是想成為程式設計師其實也不難,以我的經驗,只要26個英文字母認得全,有一點英語基礎,去培訓機構培訓三個月,基本就能寫程序,成為一名初級程式設計師。但是我並不建議你這麼做,我說一下自己的看法:1.程式設計師是腦力勞動,需要具備一定的知識儲備和較強的邏輯思維如果只是學會寫程序,去IT培訓機構培訓幾個月就可以實現,成為一名初級程式設計師真的不難。
  • 青出於藍勝於藍,這是一款脫胎於JupyterNotebook的新型編程環境
    選自fast.ai作者:Jeremy Howard機器之心編譯參與:魔王、蛋醬不久前,fast.ai 創始研究員 Jeremy Howard 撰文介紹了 fast.ai 最近提出的新型編程環境 nbdev,它基於 Jupyter Notebook 構建,並將 IDE 編輯器的優點帶入 Jupyter Notebook,
  • 程式設計師的這108個笑話 你都看得懂嗎?-程式設計師,笑話,編程, ——快...
    2、程序猿的讀書歷程:x語言入門—>x語言應用實踐—>x語言高階編程—>x語言的科學與藝術—>編程之美—>編程之道—>編程之禪—>頸椎病康復指南。15、殺一個程式設計師不需要用槍,改三次需求就可以了。16、C++程式設計師看不起C程式設計師,C程式設計師看不起java程式設計師,java程式設計師看不起C#程式設計師,C#程式設計師看不起美工。周末了,美工帶著妹子出去約會了,一群SX程式設計師還在加班。17、問:如何生成一個隨機的字符串?答:讓新手退出VIM。18、「我給你出個腦筋急轉彎,你說達文西密碼的上面是什麼?」
  • 15歲程式設計師在遊戲《GTA5》中使用真正的無人駕駛技術
    但對於天才程式設計師來說,這些都不是事。據外媒VICE報導,德國一名15歲的程式設計師雷昂.希爾曼(Leon Hillman)已經使用了Comma.ai的開源軟體,並在GTA5中對其進行了改裝,以實現無人駕駛汽車。
  • 微軟推出機器學習系統Brainwave,超低延遲、堪稱實時AI
    【AI星球(微信ID:ai_xingqiu)】8月23日報導(編譯:福爾摩望)微軟今天推出了一款可以支持高速、低延遲機器學習模型的系統,也預示著微軟開始在專用AI硬體領域嶄露頭角。
  • 學編程不止是為做程式設計師,編程貓小火箭學員家長:學編程,是培養思維...
    學編程不止是為做程式設計師,編程貓小火箭學員家長:學編程,是培養思維的好方式 2020年03月25日 10:26作者:網絡編輯:王動   國家之爭的內核是經濟之爭
  • 程式設計師哪個國家最厲害?現在終於有答案了
    也有人回答是印度,印度是世界上程式設計師增長最快的國家,印度的軟體外包業務獨步全球。還有些人說是俄羅斯,因為俄羅斯擁有世界最厲害的黑客。  那到底哪個國家的程式設計師更厲害?有沒有一種更科學的方法來評判?  計算機的本質其實就是0和1這兩個數字,數字是電腦程式的靈魂。同樣,我們也可以用一個個具體的數據,來解答上述問題。
  • 最受歡迎的25本計算機編程書籍
    純正原版影印,真正理解大師的睿智思維,再無譯文之歧義困擾!更收錄包括《No Silver Bullet》(沒有銀彈)在內的最新四篇經典論文!代碼整潔之道-程式設計師的職業素養1. 匯聚編程大師40餘年編程生涯的心得體會2. 闡釋軟體工藝中的原理、技術、工具和實踐3.
  • 一名40 歲「老」程式設計師的反思 - OSCHINA - 中文開源技術交流社區
    >我是一名程式設計師,幾個月前剛過完四十歲生日。某個星期六的早晨,我參加了一個 React Native 技術交流會,演講者正在竭力說服我們為什麼它會成為移動開發領域真正的下一個大事件。但對我來說,它有點像十五年前的 jsp ,將所有的邏輯都放在演示代碼裡面。但我「老」了,我認為這是因為自己還沒有完全理解它。
  • 智能家居系統也能當孩子的「編程實驗基地」
    芯恆安智能家居5.0「ai玩空間」版將教育屬性與生活屬性結合,則再次拓展了智能家居的賦能空間。2012年,智能家居開始憑藉網絡通訊等技術,將有智能控制、信息交流及消費服務等功能的家庭設施與住宅環境有機結合,智能家居系統開始萌芽。但這一時期的智能家居因硬體設備昂貴、通信系統複雜、安裝過程繁雜等,讓大眾消費市場「望而卻步」。
  • 資料| Python入門經典:以解決計算問題為導向的Python編程實踐
    from=leiphonecolumn_res0429內容簡介 《Python入門經典:以解決計算問題為導向的Python編程實踐》是一本系統而科學的Python入門教程,美國密西根州立大學等多所美國知名高校採用其作為程式語言的入門教材,被奉為經典。
  • 中國程式設計師 VS 美國程式設計師,差距就在這五點
    但在國內,真正因為熱愛編程而從事這份工作的人其實並不多,很多人學習程序想得都是這個行業火,賺錢快,入行門檻低。什麼技術火就學什麼,然後進入一個大公司,做幾個成功的項目,積累工作經驗,幾年以後自己當個小管理,拿著十幾萬,或幾十萬的工資,再無追求的過著小日子就好。甚至到了30歲,如果沒能進入管理層,大多數人都會考慮轉行,或僅靠自身的知識累積開始創業。
  • 80歲都無法退休的COBOL程式設計師:他們非要扶我起來遷移老系統
    上古程式語言COBOL火遍全球,但我建議你不要學。COVID-19疫情的蔓延,讓美國10%的勞動力失業,人數達到了1700萬。但美國至少有12個州的失業救濟系統運行在已經有60年歷史、使用COBOL程式語言的大型機上。這迫使政府機構出手爭搶平均年齡已達60歲的COBOL程式設計師為他們解決各種系統故障。