對于一臺電腦來說,它可能寫下它自己的程序嗎? 人類軟件開發(fā)者有一天能夠被電腦取代嗎?如同一個農(nóng)民,一個流水線工人,一個電話運(yùn)營員被取代一樣,軟件開發(fā)者會是下一個嗎? 這篇論文詮釋了這個概念: 回復(fù):ai寫代碼 下載論文 論文的精華部分: 接下來我們將會描述創(chuàng)造一個人工智能程序的實(shí)驗(yàn),人工智能工程能夠開發(fā)其自己的程序,執(zhí)行一個遺傳算法,具有自我修正的代碼。 上面這個代碼是由人工智能程序創(chuàng)造的。這個人工智能被設(shè)計(jì)出寫能夠自我修正的代碼。上面的代碼是在29分鐘中寫出來的。其程序語言是brain-fuck。 什么是BrainFuck ? BrainFuck 語言,是一種按照“Turing complete”思想設(shè)計(jì)的語言,它的主要設(shè)計(jì)思路是:用最小的概念實(shí)現(xiàn)一種“簡單”的語言,BrainFuck 語言只有八種符號,所有的操作都由這八種符號的組合來完成。
BrainFuck 基于一個簡單的機(jī)器模型,除了八個指令,這個機(jī)器還包括:一個以字節(jié)為單位、被初始化為零的數(shù)組、一個指向該數(shù)組的指針(初始時指向數(shù)組的第一個字節(jié))、以及用于輸入輸出的兩個字節(jié)流。
人工智能占據(jù)寫代碼 人工智能隨著電腦科技,硬件,CPU的發(fā)展,不斷地發(fā)展著。隨著計(jì)算機(jī)越來越快發(fā)展,更多的計(jì)算被執(zhí)行,所以人工智能算法所要求的計(jì)算密集型處理能夠被實(shí)現(xiàn)。 人工智能習(xí)慣 對于我來說,讓人工智能寫程序是我的愛好。我指的是從一個完全白手起家,對于程序完全沒有認(rèn)知的人工智能,它自己學(xué)習(xí)如何去創(chuàng)造功能性程序。
這是個艱難的任務(wù):首先,使用使if/else條件寫一個隨機(jī)程序看起來并不是那么智能。無論是BASIC,C,C++語言,都不能產(chǎn)生一個能夠運(yùn)行的程序。因?yàn)檫@些語言都是以被人類使用為目的的,對于人工智能來說太復(fù)雜。
最終的目標(biāo)是創(chuàng)造一個能夠?qū)懽约旱奶幚碥浖?,圖像編輯工具和瀏覽器的計(jì)算機(jī)程序。我堅(jiān)定于這樣的想法是可能的。
很多的猴子和破碎的打字機(jī) 這個想法源于無限猴子定理:這個定理描述了如果你有1000只猴子,在打字機(jī)上不斷地敲擊足夠長的時間的話,它們最終會創(chuàng)造由莎士比亞寫出的話劇。這聽起來很荒唐,但是給定足夠的時間,這些猴子最終會創(chuàng)造出隨機(jī)的文字,組成莎士比亞的作品。 如果這些猴子得到指引呢?每次其中一個猴子敲對鍵盤的話,就會得到獎勵。在足夠長的時間后,猴子能夠開始習(xí)得規(guī)律和模式。 遺傳算法 遺傳算法是一種人工智能,以生物進(jìn)化為模型。人工智能隨機(jī)選擇一系列的指令(DNA中的一個),檢查結(jié)果的合適度。在很多的程序中,比方說100個程序,選擇出最佳合適度的進(jìn)行配對,產(chǎn)生后代。
每一代得到額外的多樣性,由進(jìn)化的技巧例如輪盤選擇,交叉,和突變而來。這個過程在每一代中重復(fù)。但愿產(chǎn)生更好的結(jié)果,直到找到解決方法。遺傳算法執(zhí)行適者生存法則。最合適的生存下來,并被執(zhí)行。遺傳算法可以被劃分為人工智能搜索算法。在巨大的問題空間中尋找具體的解決方案。 為什么是Brain-fuck解釋器? 開始尋找簡單的程序語言,用有限數(shù)量的指令,來訓(xùn)練人工智能程序使用。Assembly(ASM)很接近,但是仍然包含太多的排列。聽起來很幽默,最后brain-fuck解釋器產(chǎn)生,產(chǎn)生了上面的代碼。
brain-fuck最初被設(shè)計(jì)的初衷是一個笑話程序語言,產(chǎn)生于對于人們使用來說,它的難度是怎樣。它實(shí)際上有著一些對于電腦來說不同的優(yōu)勢。 Brain-fuck作為人工智能程序語言的優(yōu)勢 1. Turning complete 完全圖靈 這意味著它在理論上能夠解決任何的計(jì)算問題。有著這樣能力的程序語言打開了很大可能性的序列。總之很多(如果不是所有的的話)計(jì)算機(jī)程序被設(shè)計(jì)來執(zhí)行計(jì)算。
2. 由簡化的只有8個指令的序列組成 簡化的指令序列減少了搜索空間,很容易搜索到目標(biāo)程序代碼。隨著計(jì)算機(jī)運(yùn)行越來越快,問題空間能夠被搜索到。然而,搜索空間需要被限制。限制程序指令在8個不同的字母,人工智能能夠更快運(yùn)行,在合理的時間內(nèi)獲得最優(yōu)的合適度。
3. 很容易建立一個解釋器 指令系列很好整理,容易理解。因此,創(chuàng)造一個執(zhí)行程序的簡單解釋器很直接。在包含人工智能程序+遺傳算法的解釋器中,代碼能夠被優(yōu)化,運(yùn)行更快。這也能提供安全約束。人工智能能夠獲得解釋器的內(nèi)部內(nèi)容,例如內(nèi)存,指令和輸出。這在計(jì)算合適度中非常有用。然而,第三方的編譯器的這些內(nèi)容很難獲得。
4. 每個指令一個字節(jié) 因?yàn)槊總€指令只是一個字節(jié),很容易找到每個double。
5. 擴(kuò)展指令的可能性存在 很多程序語言的解釋器簡單地執(zhí)行代碼,保存記憶值,支持輸入和輸出的操控臺。然而,擴(kuò)展解釋器支持產(chǎn)生圖標(biāo),文件系統(tǒng)途徑是可能的。 如何運(yùn)行 人工智能程序工作如下: 1. 一個genome由一組的double 組成。 2. 每個gene等同于在brainfuck語言中的指令。 3. 從大量隨機(jī)的genome開始。 4. 解碼每個genome成為想要的程序,轉(zhuǎn)化每個double成為對應(yīng)的指令并執(zhí)行程序。 5. 在輸出的基礎(chǔ)上得到每個程序的合適度,然后將它們排序。 6. 使用輪盤選擇,交叉,和突變方法將最好的genome配對,產(chǎn)生新的一代。 7. 使用新的一代重復(fù)過程,知道達(dá)到目標(biāo)的合適度。 因?yàn)楹线m度方法是計(jì)算最集中的部分(執(zhí)行程序中每個gene),人工智能程序使用Parallel。用這種方法,它能夠?yàn)槊恳淮鄠€genome執(zhí)行多樣的合適度算法。這個允許程序利用最大化CPU資源,利用多樣的CPU核心。這個程序也能夠保存狀態(tài),防止程序突然關(guān)閉,然后從離開的地方繼續(xù)搜索。 The Fitness Method合適度方法通過產(chǎn)生程序的結(jié)果的獲得得分運(yùn)行。這個分?jǐn)?shù)通過在觀察每個字母輸出進(jìn)行計(jì)算,減去和目標(biāo)字母的數(shù)值差距。 當(dāng)然,最初很多產(chǎn)生的程序不能夠編譯,更不用說將文字輸出到操控臺。這些被廢棄了,支持至少能夠輸出一些東西的程序。進(jìn)一步引導(dǎo)和金湖知道輸出結(jié)果和目標(biāo)的解決方案接近。 解釋指令序列 Brainfuck由以下指令序列組成。
結(jié)果 人工智能最后成功地在一分鐘內(nèi)5700代后寫下程序輸出“hi”,在一分鐘內(nèi)。產(chǎn)生了如下的代碼: +[+++++-+>++>++-++++++<]>++.[+.]-.,-#>>]<> 盡管以上的代碼有語法錯誤,例如不匹配的括號。我們的模擬解析器計(jì)算結(jié)果直到程序無法運(yùn)行。所以語法錯誤并不影響合適度。
你可以嘗試將以上的代碼放入brain-fuck解析器,點(diǎn)擊“開始調(diào)試”,忽略警告提示,點(diǎn)擊運(yùn)行到斷點(diǎn)。注意輸出。
如果我們?nèi)サ舳嘤嗟拇a,會得到以下句法上有效的代碼:
+[+++++-+>++>++-++++++<]>++.[+.] 看下面的截屏,當(dāng)程序運(yùn)行時候截取下來的。
人工智能學(xué)習(xí)寫程序 人工智能學(xué)習(xí)寫程序
人工智能找到解決方案
這是一張歷史圖表,畫出合適度和時間的關(guān)系。能看到人工智能是如何學(xué)習(xí)在目標(biāo)語言中寫程序和達(dá)到想要的解決方案。
Hello 人工智能最后成功地寫下程序輸出“hello”,在29分鐘內(nèi)252,0000代后,產(chǎn)生了如下的代碼:
1.+-+-+>-<[++++>+++++<><>++]>[-[---.--[[-.++++[+++..].+]],]<><+,.+>[[.,],+<><> 2.[[[.+.,,+].- 在每代的過程中,人工智能都接近解決方案,但是一對字母在一個循環(huán)中相互束縛。人工智能能夠解決這個問題,創(chuàng)造出一個內(nèi)在的循環(huán)。成功輸出正確的字母,繼續(xù)處理程序。 人工智能學(xué)習(xí)寫程序 人工智能找到解決方案 合適度和時間的關(guān)系圖表 執(zhí)行程序,人工智能開發(fā) Hi! 人工智能成功寫下程序“Hi!”,在兩個小時七分鐘1,219,400代 之后。產(chǎn)生了如下的代碼: >-----------<++[[++>++<+][]>-.+[+++++++++++++++++++++++++++++><><><-->>>+].] 這實(shí)際上是我最喜歡的環(huán)節(jié)。運(yùn)行,并且看到為什么(點(diǎn)擊開始調(diào)試運(yùn)行到斷點(diǎn))。好像電腦知道在知道做什么的感覺。很有趣的是,我們注意到怎么產(chǎn)生這個程序花費(fèi)了比之前長的時間。很可能是因?yàn)槭褂玫奈淖?,包括大寫字母和一個標(biāo)志。另外兩個例子使用了字母(在ASCII系統(tǒng)中的數(shù)值特別接近)。因此人工智能能夠很容易找到。 人工智能找到解決方案 執(zhí)行程序,人工智能開發(fā) 合適度和時間的關(guān)系圖表 人工智能最后成功在22分鐘195,000代后寫成了reddit的程序。代碼如下: 1.+[+++++>++<]+>++++++[[++++++.-------------.-.-+.+++++.+++++],.,+,-+-,+>+.++<><><> 2.-[-<>.]>+.-.+..] 由于長度,可能由于d的位置。這是一個挑戰(zhàn)。 人工智能學(xué)習(xí)寫程序 人工智能找到解決方案 合適度和時間的關(guān)系圖表 Hello world 在兩個小時和580,900代后,產(chǎn)生了這個程序。代碼如下: 1.-><[>-<+++]->>++++[++++++++++++++++++<+]>.---.+-+++++++..+++.+>+<><+[+><><>+++++++++.+- 2.-++++[++[.--------.+++.------],.-----],,.>.+<[><>]<++>+.[]+[.[+]],[[.]..,<><> 3.]],[[+[,+[]-<><><><]-><>-]-<>+[-,-[<.>][--+<>+<><><><-,,-,[,[.>]]<> 4.>+[<><><>].[--+[<->--],-+>]-,[, 如果去掉多余的代碼,打印如下: 1.-><[>-<+++]->>++++[++++++++++++++++++<+]>.---.+-+++++++..+++.+>+<><+[+><><>+++++++++.+- 2.-++++[++[.--------.+++.------],.-----]] 人工智能找到解決方案 合適度和時間的關(guān)系圖表 I love all humans 在十個小時和6057,200代后,產(chǎn)生了這個程序。代碼如下: 1.+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++ 2.++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.-- 3.----------.+++++++++++++.+++++.]-+,.-<[><><-[+[>[<><-[+[,]-,,-[>[+[-<><><><> 4..,,>[<><[.]>[<><-.]><> 如果去掉多余的代碼如下: 1.+[>+<+++]+>------------.+<+++++++++++++++++++++++++++++++.>++++++++++++++++++++++++++++++ 2.++++.+++.+++++++.-----------------.--<.>--.+++++++++++..---<.>-.+++++++++++++.--------.-- 3.----------.+++++++++++++.+++++. 在以上的運(yùn)行中,人工智能有著300個指令的數(shù)列大小的開始程序(例如300字節(jié))。他并不需要整個程序代碼的長度,值需要209個指令即可寫出程序。
注意,這個解決方案需要10個小時去完成。然而,記住,當(dāng)人工智能在做這些程序的時候,和人類相比,完成所需要的時間是更少需要擔(dān)心的。人工智能能夠默默在幕后運(yùn)行。我也希望計(jì)算時間有望在將來能夠減少。 人工智能找到解決方案 未來前景
伴隨著遺傳算法,產(chǎn)生關(guān)于設(shè)計(jì)合適度功能。合適度功能等同于向人工智能描述你在尋找什么。用這種方式,創(chuàng)造合適度功能本身和寫程序相似。如果人工智能開發(fā)自己的合適度功能成為可能的話,這將是一個里程碑。同時,創(chuàng)造更加復(fù)雜的程序成為可能。 |
|