AI寫程序,這事可沒那麼簡單!
來自專欄我是程序員11 人贊了文章
去年年初,微軟公司推出了一款名為DeepCoder的機器學習系統,同時宣稱該系統具有自我編碼的能力,這一舉動又將人工智慧的發展向前推進了一步。
正如人工智慧是建立在眾多機器學習或深度學習方法之上一樣,DeepCoder創建的代碼也是基於大量現有代碼示例,研究人員通常會用這些代碼進行系統的訓練。
其結果是:DeepCoder編寫的軟體彙集了部分其它人工編寫的程序,著名的雜誌《連線》將這稱之為「掠取其它軟體」。
當然,儘管DeepCoder存在不盡如人意的地方,但該讓軟體自己進行應用程序編寫這項研究仍舊是一項具有非凡的工作,也有著令整個數字世界為之振奮的前景。
基於意圖的編程
當我們希望一款軟體能夠為我們編寫應用程序時,我們真正想要的是什麼呢?答案就是:我們希望軟體所編寫出的應用程序,能夠較好地表達出我們的意圖。
術語「基於意圖」源自於近期興起的「基於意圖的網路」,這是一種基於人工智慧對網路進行配置的方法,它可以對管理者的業務意圖進行預測。
基於意圖的網路能夠幫助管理者制定級別較高的業務策略,緊接著,它會對自己是否能夠執行該策略進行驗證,並且檢查自己能否使配置的網路資源達到理想狀態,以及是否能對網路狀態進行有效監管以保證所有策略能夠持續執行,並在必要的時候對其進行糾正。例如,您可以要求Alexa為您編寫一款應用程序,該程序能夠對您的相冊收藏進行追蹤。此時,Alexa會自動為您編寫代碼,在完成後向您展示,以供使用。
原理是什麼呢?
剛剛以Alexa為例進行了簡單的說明,其實不難發現,AI採用的方法就是去找到一個與您要求相似的應用程序,然後根據您的需求對代碼進行調整,或者挑選出一些代碼片段對其進行程序組合。
換言之,Alexa採用的方法與DeepCoder類似,也就是從其他地方「借用」代碼,並將這些代碼進行組合以滿足當前客戶的需求。
但是將人工編寫的代碼進行彙集並不是我們真正想得到的AI編寫軟體,不是么?我們真正尋求的是有能力對應用進行創新的編寫軟體。
換言之,AI在編寫程序的時候能具有創造力么?它能寫出真正具有創新性的應用程序么?這些應用程序是人們未曾設想過的。第五代語言
幾十年來,對於計算機科學的研究學者們來說,他們一直盼望著有一款根據用戶意圖生成所需應用程序的軟體能夠問世。但事實上,根據來自維基百科的資料,上世紀80年代掀起的第五代語言浪潮曾試圖「讓計算機在沒有程序員的情況下解決給定的問題」。
第五代語言是一種期望計算機能對問題自動求解的意圖,基於所給定的某些約束,交由程序來處理而不需要程序員再投入人力。這個想法看上去很有前景,但實驗結果證明它仍然具有很大的局限性。
僅僅指定約束就可以解決問題過於理想化了:大多數數學優化問題都在尋求一組數學表達式,這些表達式能夠很好的描述約束條件。
在創造應用程序時所面臨的一個巨大挑戰是第五代語言並不能很好的表達演算法——程序員在編寫代碼時都有他們特定的步驟。
因此,第五代語言的發展並不樂觀,儘管它促進了聲明式以及為特定應用而設計的語言(如SQL和HTML)的快速發展——這些語言將用戶意圖和底層軟體區分開來。
但毫無疑問:用聲明式的語言表達您的意圖與能夠自己編寫應用程序的軟體大有不同。編寫「SELECT * FROM ALBUMLIST」與「Alexa,為我編寫一個追蹤我相冊的應用程序」相去甚遠。第五代語言中缺失的部分是AI。
演算法
在20世紀80年代,我們還沒有辦法讓軟體自己編寫應用程序,但隨著人工智慧的快速發展,這個想法不再遙不可及。第五代語言處理簡單優化任務的能力促進了計算機代數系統的發展,使其在自動優化方面日趨成熟,這也被稱為計算機生成演算法。當然,發展並不局限於此。
還有一些研究項目,例如谷歌的AutoML,它能夠構建基於機器學習的神經網路架構。您可以將神經網路架構視為一種應用程序,儘管它使用了人工智慧技術。在這種情況下,我們擁有足夠聰穎的人工智慧軟體,它能夠對應用程序進行編寫。
AutoML以及與其類似的項目都具有廣闊的發展空間。儘管如此,我們仍舊沒有更接近天網,就連這些努力,也不夠企及我們前面所描述的那些基於意圖的編程目標。
人類意圖
從本質上來看,AutoML和基於意圖的編程正朝著不同的方向發展,因為對於用戶會如何表達各自的意圖,兩者有著不同的處理方式。如上述示例,Alexa是以人為中心,利用Alexa的自然語言處理能力結合其它上下文技巧,能夠提供以消費者為導向的用戶體驗。
在AutoML(或者任何機器學習或深度學習工作)中,工程師們必須以對約束條件(例如用戶意圖)進行正確的描述。
舉個例子,如果你想教會人工智慧識別貓的圖片,那麼就應有如下約束條件:在一個包含一百萬張圖片的數據集中,其中至少有十萬張圖片包含貓。軟體也許能正確的將它們進行區分,也有可能區分錯誤,但它會在每一次嘗試中進行學習。
那麼,「我想要的相冊追蹤應用程序」的有效約束又是什麼呢?目前,這個問題仍在我們所能解決的範圍之外。
目前發展
目前,人工智慧雖然還不能創造出一種能夠滿足用戶意圖的應用程序,但是它在一些簡單的應用場景中已經得到了較好的應用。我們現在所達到的,是能從大型數據集中進行模式分析的人工智慧。
如果我們可以把演算法成熟的運用到數據集中,或許能夠取得一些進展。例如,如果基於AI的應用程序可以訪問大量人工創建的工作流程,那麼它可以很好的預測出您目前所處工作流程的下一步。
換句話說,我們將現在所擁有的演算法的功能稱之為「下一步最佳行動」。我們可能仍然需要更多的努力,使得軟體了解我們對應用程序的要求,目前,我們能夠藉助AI探尋到達此目標的步驟。
對於找到「下一步最佳行動」,AI能夠提供一些建議,但是不能夠系統的構建出整個演算法,這看上去更像增強型智能而非人工智慧。
我們在試圖創建一類軟體,它們能夠表達出人類意圖,而並不僅僅是自動解決問題。當然,我們仍需要在構建應用程序時伸出援手,但儘可能的讓這個過程變得簡單。
基於此,新興的低代碼或無代碼平台市場在這個方向快速創新發展也就顯得不那麼奇怪了。
如今的低代碼或無代碼平台能夠支持複雜的,特定領域的聲明式語言,使人們能夠以類似英語的表達式(或其他人類語言)表達他們的意圖。
他們還具有將應用程序和應用程序組件用模板表示的能力,使用戶能夠以「拖放」這種簡單的方式對應用程序進行組裝。現在,許多低代碼或無代碼平台供應商正想辦法將AI應用其中,這將會增加應用程序創建者的能力,並有助於他們指定他們想要應用程序遵循的演算法。
或許有那麼一天,我們可以直接告訴這些平台我們的需求是什麼,然後它們就會自動為我們編寫出來。雖然現在我們的技術還沒有發展到這個程度,但是今天,我們已經比低代碼或無代碼平台更加接近目標,加上創新正以驚人的速度發展著。我相信這種等待不會太久。
以上為譯文,由阿里云云棲社區組織翻譯。
譯文鏈接
文章原標題《Can AI Write Its Own Applications? Its Trickier Than You Think》
作者:Jason Bloomberg,譯者:Elaine,審校:袁虎。
文章為簡譯,更為詳細的內容,請查看原文
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
本文為雲棲社區原創內容,未經允許不得轉載。
推薦閱讀:
※如何用張量分解加速深層神經網路?(附代碼)
※神經網路模型的可執行軟體包,可以壓縮到多小?
※機器學習(吳恩達)之學習筆記2--淺層神經網路