不做搬運(yùn)工 微軟AI學(xué)習(xí)自行編寫代碼
據(jù)國(guó)外媒體Quartz報(bào)道,要是計(jì)算機(jī)能夠理解人們想要解決的問題,并編寫代碼將其解決,而不像微軟Excel那樣要在程序內(nèi)的菜單人工找尋合適的公式,會(huì)怎么樣?這是一個(gè)非常未來(lái)主義的想法,但在這方面微軟研究院和劍橋大學(xué)最近已經(jīng)取得了進(jìn)展。
本文引用地址:http://www.ex-cimer.com/article/201703/344764.htm在2016年11月的論文中,微軟和劍橋大學(xué)稱它們開發(fā)了一種能夠自行編寫代碼解決簡(jiǎn)單的數(shù)學(xué)問題的算法。該算法名為DeepCoder,能夠通過研究有哪些潛在的代碼組合可以解決問題,來(lái)強(qiáng)化自己的能力。(它有點(diǎn)復(fù)雜想,下文將會(huì)詳談。)然而,這并不意味著該算法從現(xiàn)有軟件那里竊取、復(fù)制或者粘貼代碼,也不意味著它是通過搜索互聯(lián)網(wǎng)來(lái)找到解決方案。
該論文的共同作者、微軟研究院研究者馬克·布洛克施密特(Marc Brockschmidt)表示,“我們?cè)诿闇?zhǔn)那些不懂得或者不想編程,但能夠鑒別問題的人。”他稱該項(xiàng)技術(shù)就像是Excel公式,后者接收簡(jiǎn)單的指令就能夠得出答案,無(wú)需獲得數(shù)學(xué)方程式。
該系統(tǒng)分成兩個(gè)組成部分:代碼編寫算法,以及搜索潛在代碼的機(jī)制。
自動(dòng)化代碼
代碼編寫算法的運(yùn)行并不簡(jiǎn)單,下面先用盡可能簡(jiǎn)單的話來(lái)說(shuō)明一下。
一個(gè)數(shù)學(xué)問題有輸入和輸出——或者說(shuō)你有的數(shù)字和你需要計(jì)算的數(shù)字。研究人員以用非常基礎(chǔ)的代碼就能解決的問題為例,給算法展示輸入、輸出以及用來(lái)解決它們的代碼。
不妨拿它來(lái)跟用積木堆砌塔樓的過程進(jìn)行類比。研究人員給算法展示了積木,然后再展示塔樓最終完工后的模樣的圖片。但算法需要知道如何對(duì)齊每個(gè)積木的邊緣,使得它們能夠堆砌在其它積木上面。雖然這對(duì)于人類來(lái)說(shuō)很簡(jiǎn)單,但對(duì)于機(jī)器來(lái)說(shuō)這并非易事,因?yàn)闄C(jī)器不知道重力,也不知道為什么大的積木要放在小積木下面來(lái)提供支撐。
但如果給機(jī)器展示積木堆疊拼湊成最終的塔樓的整個(gè)過程,讓它觀看數(shù)百乃至數(shù)千座塔樓的構(gòu)建過程,那它們就將能夠用類似形狀的積木來(lái)構(gòu)建塔樓。而對(duì)于DeepCoder而言,積木就是一個(gè)個(gè)的代碼。
當(dāng)被要求解決新問題,而不是使用之前行得通的代碼的時(shí)候,該算法會(huì)預(yù)測(cè)什么代碼會(huì)被用來(lái)解決它之前見過的類似問題,以及這些代碼會(huì)以怎樣的順序排列。
學(xué)習(xí)整套的編程語(yǔ)言對(duì)于這些算法而言過于復(fù)雜,因此微軟和劍橋團(tuán)隊(duì)打造了一種小型語(yǔ)言。它被稱作領(lǐng)域特定語(yǔ)言,就像是幼兒的積木玩具。該系統(tǒng)能夠在線上解決簡(jiǎn)單的編程問題,這些問題一般需要使用3到6行的代碼。
無(wú)限的可能性
DeepCoder還能夠搜尋可帶來(lái)可行解決方案的潛在代碼,這可強(qiáng)化它自身編寫代碼的能力。它并不是像StackOverflow或者GitHub那樣通過掃描熱門代碼庫(kù)來(lái)獲得解決方案,盡管研究人員很希望這一點(diǎn)未來(lái)可以實(shí)現(xiàn)。
“我們會(huì)研究你能在特定的長(zhǎng)度下用這種語(yǔ)言編寫出的所有潛在項(xiàng)目。”布洛克施密特說(shuō)道,“計(jì)算機(jī)非常善于搜索這些東西。”
他將該項(xiàng)任務(wù)比作是在毫無(wú)語(yǔ)言知識(shí)的情況下僅用一些單詞來(lái)造一個(gè)關(guān)于狐貍越過小狗的句子。
一開始你可能會(huì)得到“狐貍狐貍狐貍狐貍狐貍狐貍”,然后是“狐貍狐貍狐貍狐貍狐貍小狗”……直至恰當(dāng)?shù)木渥映霈F(xiàn)。思考該項(xiàng)任務(wù)的另一種方式是Salesforce人工智能研究者史蒂芬·梅里蒂(Stephen Merity)的“無(wú)限猴子理論”。該理論說(shuō),讓無(wú)限數(shù)量的猴子完全無(wú)限時(shí)地在鍵盤上任意敲字,最終會(huì)寫出像莎士比亞那樣的作品。這里說(shuō)的是同樣的事情,不同的就只是猴子的鍵盤不是打字,而是敲代碼。
但算法搜遍程序所有的變異版本,找出正確的那個(gè)的能力,是該團(tuán)隊(duì)的真正貢獻(xiàn):該算法可預(yù)測(cè)哪些代碼最有可能被用來(lái)解決問題,然后先關(guān)注那些解決方案。如果算法找到合適的激發(fā),那問題就被視作已經(jīng)解決,它對(duì)于什么才是合適的代碼的理解也隨之增進(jìn)。
搜尋代碼聽上去像是人類的做法——上網(wǎng)去尋找一些代碼行來(lái)解決他們的問題——但這只是最接近于恰當(dāng)描述該算法生成和整理代碼過程的說(shuō)法。如果人類要做該人工智能那樣的技術(shù),那就等于是輸入他們能夠想到的所有代碼組合,然后復(fù)制粘貼剛記入新文件的代碼,再看看是否行得通。
微軟和劍橋團(tuán)隊(duì)表示,他們希望該系統(tǒng)未來(lái)能夠理解完整編程語(yǔ)言的細(xì)微差別,能夠識(shí)別網(wǎng)絡(luò)上的優(yōu)質(zhì)代碼。
評(píng)論