讓程式碼寫程式碼,自主程式設計的 AI 離我們還有多遠?

黃小非發表於2016-11-30

設想一下人工智慧的未來:家庭服務機器人、每個房間都有亞馬遜的智慧家庭音響,快遞無人機,還有能提供準確診斷資訊的醫用機器人,這該是多麼美好的未來啊!不過,在這些花裡胡哨的美好設想吸引著大眾眼球的同時,人工智慧在另外一個領域的可能帶來的變革,卻沒有引起公眾的足夠注意——這就是:讓計算機自己程式設計

設想一下,如果計算機自己能夠理解自己會是什麼情況吧。其實,這不是一個設想。而且,應該很快就能實現。再說明白點兒吧,“很快”就是指最近,用市面上現有的技術就能實現。

讓程式碼寫程式碼,自主程式設計的 AI 離我們還有多遠?

目前,機器學習方面的專家傾向於把研究聚焦於具體領域內高度裁剪的 AI 應用——比如:面部識別、自動駕駛汽車、語音識別,甚至是網際網路搜尋結果等方面。但是,這些技術同樣可以應用到讓計算機理解其自身的程式碼架構上——當然這裡是指脫離人類的幫助、解釋和干涉的情況下進行的理解——其實這種對程式碼的“理解”和讓計算機理解自然語言,或是識別影象並沒有本質的區別。

如果程式碼能夠自我分析——做到比人類更快地修正錯誤並不斷優化——那麼技術革新將會發生得越來越快。其帶來的可能性幾乎是無窮無盡的:醫學上的進步,更智慧的機器人,更“智慧“的手機等等。

人工智慧在解決一個已有問題的方面一直很有潛力。而且,通過一種計算機語言來編寫或者修改其他各種計算機語言——也就是傳說中的超程式設計語言的概念——的技術已經有很長的歷史了(實際上1950年代的Lisp就是為了實現這個概念而發明的),單這種超程式設計語言還是無法超越人類想象範圍的問題。

而 AI 將會改變這種局面。

通過使用 AI,計算機能理解軟體專案歷史上所有的程式碼,針對所有的計算機語言,立刻就能對程式碼進行優化和除錯。

如此一來,即使是經驗不足或者中級程式設計師,只要有一個關於應用程式的想法,就能夠通過向電腦描述,並讓計算機自動去構建這個應用程式。這意味著在完成一件事情的速度上的重大提升,比如,可以在幾天內完成一個”癌症研究計劃“,而不是幾個月,甚至幾年。這可是非常重要的進步。

儘管一開始處於幼稚的萌芽階段,但是各種技術終將引領我們取得難以置信的進展,現在這些萌芽已經開始出現了。比如,Google的TensorFlow 機器學習軟體,就能讓廣大開發者直接在應用程式裡構建神經網路,從而實現類似於在照片中辨識人或者物品的功能。你不再需要讀書讀到博士水平,也能去鼓搗這些高階的技術了。要知道在從前,人工智慧領域的技術門檻可是非常高的。

你覺得 AI 技術還離你很遠麼?如果你意識到,有些公司已經開始使用 AI 的概念來做內部專案管理系統了,你會不會感到驚奇?——Google就是如此,它構架了一套bug預測程式,用機器學習和統計學分析的方法來預測一段程式碼是否存在潛在的bug。Ilya Grigorik(W3C的聯合主席)也建立了一套類似的開源版本的工具叫做 bugspots,目前經有 20000 次的下載量了。

另外一個例子是 Siri 的繼任者 Viv。最近由《連線》雜誌曝光的 Viv 不僅僅是一個基於智慧自然語言處理技術的語音識別軟體。Viv 還能基於英語來構建複雜的適應性計算機程式。讓程式碼來寫程式碼!不過,由於寫出來的程式碼是由Viv的開發者高度訓練和特化處理的,因此它還無法達到本文所期望的那種普適度。但是,這至少是邁向這個方向的堅實一步。

在這個方向上邁出的另外一步來自於廣大的開發者領域。Emil Schutte 曾經發表過一段頗具挑釁性的宣告:”寫程式碼寫累了嗎?我也是!那麼讓 Stack Overflow 幫我們寫吧。”然後,他給出了這一說法的證明,一段完整的可工作的程式碼,直接可以從 Stack Overflow 巨大的程式設計知識資料庫中扒出來,而資料庫裡還有無數人已經寫好的各種不同目的的程式碼。

隨著這一技術的上線以及愈發成熟,計算機就能夠表現得越來越像人類,可以完成各種任務:視覺處理、影象處理、遊戲,那麼給其他計算機程式設計又有什麼不可以的呢?

所以,如果問為什麼計算機目前還不能理解自己?答案是,還需要時間。不過,一旦它們做到了那個程度,你就會發現,只要在軟體技術可以應用的領域,都必將發生令人難以置信的突破。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

讓程式碼寫程式碼,自主程式設計的 AI 離我們還有多遠?

相關文章