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