美國(guó)橡樹嶺國(guó)家實(shí)驗(yàn)室的一些專家預(yù)測(cè),到2040年,AI技術(shù)將會(huì)強(qiáng)大到足以替代程序員。不過(guò),即使機(jī)器能夠完全代替今天程序員所做的工作,但這并不意味著它們不需要人類的幫助。
程序員以及其他類型的IT工作無(wú)疑是當(dāng)前最熱門的工作。然而,這種趨勢(shì)可能不會(huì)一直持續(xù)下去。
美國(guó)橡樹嶺國(guó)家實(shí)驗(yàn)室的一些專家預(yù)測(cè),到2040年,AI技術(shù)將會(huì)強(qiáng)大到足以替代程序員,AI編寫軟件將比人類程序員更好、更快。換句話說(shuō),軟件編寫的軟件比人類編寫的更好。
這是怎么發(fā)生的?AI能真正學(xué)會(huì)如何做需要高度創(chuàng)造性的智力工作嗎?畢竟創(chuàng)造性一直被認(rèn)為是人類特有的。AI能學(xué)到的東西會(huì)比我們教它的更多嗎?
利用人工神經(jīng)網(wǎng)絡(luò)制定編寫規(guī)則
人工神經(jīng)網(wǎng)絡(luò)是一種試圖模仿人類大腦學(xué)習(xí)機(jī)制的技術(shù)。它啟發(fā)自真實(shí)的神經(jīng)網(wǎng)絡(luò),并且部分地模擬真實(shí)的神經(jīng)網(wǎng)絡(luò)。我們可以試著把人類的神經(jīng)系統(tǒng)想象成一臺(tái)非常強(qiáng)大的計(jì)算機(jī)。
在上面這幅圖中,每個(gè)神經(jīng)元都有一個(gè)輸入和輸出,輸入實(shí)際上是一系列信號(hào)的加權(quán)組合。每個(gè)信號(hào)都有自己的數(shù)學(xué)上可表達(dá)的影響,信號(hào)的總和決定了輸出。人類神經(jīng)網(wǎng)絡(luò)的特殊之處在于,它們能夠基于學(xué)習(xí)和經(jīng)驗(yàn)進(jìn)行適應(yīng)和改變,這意味著相同的輸入并不總是產(chǎn)生相同的輸出。
這是通過(guò)改變不同脈沖的優(yōu)先次序和修改神經(jīng)元之間的物理連接來(lái)完成的。這些變化通過(guò)學(xué)習(xí)算法和成本函數(shù)來(lái)指定,以提高人類適應(yīng)新環(huán)境和優(yōu)化未來(lái)行為的能力。
研究人工神經(jīng)網(wǎng)絡(luò)的科學(xué)家和工程師試圖復(fù)制這種機(jī)制,并在軟件開發(fā)中實(shí)施。具體地說(shuō),這意味著軟件不會(huì)以傳統(tǒng)的方式編寫,比如一系列的“if… then”規(guī)則。從理論上講,我們可以想象通過(guò)漸進(jìn)式學(xué)習(xí)和優(yōu)化的過(guò)程,人工神經(jīng)網(wǎng)絡(luò)能夠?qū)W習(xí)如何制定(或“編寫”)規(guī)則,從而得到比人類編寫的更好的輸出。在AI科學(xué)中,這被稱為深度學(xué)習(xí),通常在一定程度上依賴人類的反饋。
以下是幾個(gè)可以代替程序員的應(yīng)用程序。
Karpathy:利用循環(huán)神經(jīng)網(wǎng)絡(luò)自動(dòng)生成代碼
早在2015年,當(dāng)時(shí)是斯坦福大學(xué)計(jì)算機(jī)科學(xué)博士生的Andrej Karpathy就使用循環(huán)神經(jīng)網(wǎng)絡(luò)來(lái)生成代碼。他使用了一個(gè)Linux存儲(chǔ)庫(kù)(所有的源文件和 headers files),將它合并成一個(gè)巨大的文檔(超過(guò)400 MB的代碼),并用這些代碼來(lái)訓(xùn)練RNN。
他讓系統(tǒng)跑了一晚上。第二天早上,他得到了這個(gè):
AI生成的代碼樣本
從字面上來(lái)看,AI生成的代碼包含函數(shù)和函數(shù)裝飾。它有參數(shù)、變量、循環(huán)和正確的縮進(jìn)形式。括號(hào)有開括號(hào)和收括號(hào),甚至還有注釋。
在這些代碼中,AI當(dāng)然也犯了一些錯(cuò)誤。有時(shí)變量從未被使用。其他時(shí)候,有些變量沒有更早定義。但Karpathy對(duì)這個(gè)結(jié)果感到滿意。
“這些代碼總體上看起來(lái)非常棒。當(dāng)然,我不認(rèn)為它會(huì)編譯,但是當(dāng)你瀏覽生成的代碼時(shí),它感覺非常像一個(gè)巨大的C代碼庫(kù),”Karpathy在他的博客中寫道。
這個(gè)項(xiàng)目在GitHub上可以找到。它使用了Torch7 的深度學(xué)習(xí)庫(kù)。這里有Karpathy得到的整個(gè)輸出文件:
https://github.com/karpathy/char-rnn
DeepCoder
微軟和劍橋大學(xué)的研究人員開發(fā)了一種可編寫代碼的機(jī)器學(xué)習(xí)系統(tǒng),被稱為DeepCoder,它具有學(xué)習(xí)的能力。
DeepCoder可以在龐大的代碼庫(kù)中進(jìn)行檢索,然后編寫有效的代碼。DeepCoder 所用的技術(shù)叫程序合成( program synthesis),通過(guò)截取已有軟件的代碼行來(lái)組成新的程序。不得不承認(rèn),當(dāng)下很多程序員也是這樣做的。通過(guò)學(xué)習(xí)一系列代碼片(code fragment)的輸入和輸出數(shù)據(jù),DeepCoder 能自動(dòng)摘取出對(duì)目標(biāo)任務(wù)有用的代碼片。
DeepCoder 可以在一秒鐘之內(nèi)寫出能夠跑通的程序。隨著 DeepCoder 的編程經(jīng)驗(yàn)增加,其分辨有用及無(wú)用的代碼片的能力增加,其生成程序的速度將會(huì)越來(lái)越快。
這并不意味著AI是在竊取代碼,或者從現(xiàn)有軟件復(fù)制粘貼代碼,或者在互聯(lián)網(wǎng)上搜索解決方案。DeepCoder的作者期望它將在不久的將來(lái)參與編程競(jìng)賽。
由DeepCoder創(chuàng)建的域特定語(yǔ)言(DSL)示例程序
DeepCoder 的創(chuàng)造者之一,在劍橋大學(xué)參與微軟研究項(xiàng)目的 Marc Brockschmidt 表示:“該程序最終可以讓非編程人員通過(guò)向計(jì)算機(jī)描述自己的程序構(gòu)想來(lái)獲得想要的程序,系統(tǒng)會(huì)自動(dòng)寫就?!?/p>
你可以在這里找到DeepCoder的文檔:
https://openreview.net/pdf?id=ByldLrqlx
AI編寫Python代碼
一名法國(guó)工程師以BenjaminTD的昵稱發(fā)表了一篇博客文章,解釋了自己是如何“教一個(gè)AI系統(tǒng)如何用Python代碼編寫Python代碼”。
他使用了長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM),這是最流行的遞歸神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)之一。他用大量的Python代碼(使用Pandas、Numpy、Scipy、Django、Scikit-Learn、PyBrain、Lasagne、Rasterio等庫(kù))來(lái)“喂給”這個(gè)網(wǎng)絡(luò)。組合文件大小有27MB。
然后,AI生成了自己的代碼。下面是定義初始化:
...使用布爾表達(dá)式:
...并創(chuàng)建數(shù)組:
如果仔細(xì)觀察數(shù)組,你會(huì)發(fā)現(xiàn)有一個(gè)語(yǔ)法錯(cuò)誤。BenjaminTD的代碼遠(yuǎn)非完美,但是他認(rèn)為,對(duì)于一個(gè)只是從閱讀示例代碼中學(xué)習(xí)的網(wǎng)絡(luò)來(lái)說(shuō),這些代碼看上去不錯(cuò)。
AI Programmer
2017年 ,來(lái)自彭博和英特爾實(shí)驗(yàn)室的研究人員號(hào)稱實(shí)現(xiàn)了首個(gè)能夠自動(dòng)生成完整軟件程序的 AI 系統(tǒng) “AI Programmer”。
AI Programmer 利用機(jī)器學(xué)習(xí)中的遺傳算法,模擬復(fù)雜的指令。雖然現(xiàn)在 AI Programmer 生成的程序,復(fù)雜程度與人類新手程序員編寫的結(jié)果相當(dāng)。但研究人員認(rèn)為,AI Programmer 編寫的程序完全可以超越傳統(tǒng)范疇,不受人類時(shí)間和智慧的局限。
AI Programmer 的軟件架構(gòu)。從圖中可見,由人類驅(qū)動(dòng)的部分非常少,只需要在開始輸入指令,最后接收適用于某項(xiàng)任務(wù)的函數(shù)即可,剩下部分全部由機(jī)器完成。
研究人員表示,他們能用 AI Programmer 生成很多軟件程序。下表是所生成程序的名單。
潛在的威脅:不確定機(jī)器能做到什么程度
現(xiàn)在已經(jīng)有程序可以代替人類了,但隨之而來(lái)的問題是,如果機(jī)器能夠自己學(xué)習(xí),他們能學(xué)到多少?極限在哪里?這個(gè)優(yōu)化的過(guò)程真的能教軟件比人更好地寫代碼嗎?網(wǎng)站開發(fā)機(jī)構(gòu)和軟件公司是否會(huì)利用AI驅(qū)動(dòng)的程序?yàn)樽约壕帉懘a,以節(jié)省資金?事實(shí)是,我們還不確定機(jī)器能做到什么程度。
但是,我們知道人工智能已經(jīng)在影響IT行業(yè)的一些工作。印度軟件咨詢和外包公司W(wǎng)ipro Ltd.自去年6月以來(lái)使用AI平臺(tái)Holmes來(lái)維護(hù)軟件,其3000多名工程師因此擔(dān)心他們的工作。更不用說(shuō),我們經(jīng)常使用的許多技術(shù)都采用機(jī)器學(xué)習(xí)技術(shù)——從語(yǔ)音識(shí)別到機(jī)器翻譯。
AI和人類程序員將在編程中扮演互補(bǔ)的角色
人工神經(jīng)網(wǎng)絡(luò)的一個(gè)問題是它們使用的算法是“黑盒”,這意味著它們內(nèi)部的工作方式太過(guò)復(fù)雜。特斯拉的AI總監(jiān)Andrej Karpathy認(rèn)為,對(duì)于大多數(shù)應(yīng)用領(lǐng)域,我們永遠(yuǎn)無(wú)法得到完全由AI驅(qū)動(dòng)的100%精確的模型。他認(rèn)為AI系統(tǒng)的準(zhǔn)確率將超過(guò)90%,但它們并不完美,它們偶爾會(huì)以出人意料的方式失敗。
一般來(lái)說(shuō),有監(jiān)督和有人控制的深度學(xué)習(xí)系統(tǒng)比無(wú)監(jiān)督的系統(tǒng)表現(xiàn)更好。這意味著,即使是最復(fù)雜的AI軟件也需要人類的參與和反饋,以學(xué)習(xí)和適應(yīng)新的環(huán)境。這個(gè)事實(shí)為未來(lái)人工智能和人類程序員之間的緊張關(guān)系提供了一種解決方案——共同工作。
我們可以肯定的是,在不久的將來(lái),AI和人類程序員將在編程中扮演互補(bǔ)的角色。AI的工作可能是處理重復(fù)性的、耗時(shí)的任務(wù),這些任務(wù)需要機(jī)器優(yōu)異的精確性。機(jī)器可以避免由于人為因素而產(chǎn)生的語(yǔ)法錯(cuò)誤或設(shè)計(jì)錯(cuò)誤。例如,AI可以提供幫助的一種方式是自動(dòng)完成功能,程序員只編寫一小部分代碼,然后AI識(shí)別程序員的意圖,并完成剩下的代碼,從而為人類節(jié)省大量的工作。
即使機(jī)器能夠完全代替今天程序員所做的工作,但這并不意味著它們不需要人類的幫助。但程序員必須將注意力從編寫程序轉(zhuǎn)移到監(jiān)控AI的性能,并將數(shù)據(jù)“喂給”AI。正如Karpathy所指出的,程序員可能會(huì)成為一種數(shù)據(jù)加持者——收集、整理和分析數(shù)據(jù),然后將它們用作AI的輸入,然后讓AI完成剩下的工作。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4749瀏覽量
100433 -
AI
+關(guān)注
關(guān)注
87文章
29850瀏覽量
268148
原文標(biāo)題:AI搶程序員工作:2040年AI可能代替程序員
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論