人工智能編程有助于人類(lèi)制造更多智能機(jī)器嗎?
技術(shù)日新月異的當(dāng)下,人工智能編程日益成熟,它的發(fā)展能有助于人類(lèi)制造更多智能機(jī)器嗎?
程序合成是指基于規(guī)范自動(dòng)生成程序的概念。它不同于程序驗(yàn)證。程序驗(yàn)證依賴(lài)于正式的證明來(lái)證實(shí)程序按照正式的規(guī)范運(yùn)行。
1957年,在康奈爾大學(xué)符號(hào)邏輯協(xié)會(huì)舉行夏季會(huì)議期間,阿隆佐·邱奇試圖基于數(shù)學(xué)要求合成程序。20世紀(jì)60年代,人工智能相關(guān)研究人員詳細(xì)闡述了程序合成的概念,并將其應(yīng)用于典型的人工智能研究。
近年來(lái),深度學(xué)習(xí)已經(jīng)改變了人工智能完成任務(wù)的方式。這種進(jìn)步促使研究人員嘗試教授人工智能人類(lèi)擅長(zhǎng)的工作。其中一個(gè)重要領(lǐng)域就是創(chuàng)建元學(xué)習(xí)系統(tǒng),讓人工智能學(xué)習(xí)人類(lèi)擅長(zhǎng)的各種工作。神經(jīng)程序合成和機(jī)器人技術(shù)的相關(guān)研究初步展現(xiàn)了利用程序合成來(lái)教授機(jī)器人精準(zhǔn)執(zhí)行任務(wù)的能力。
程序合成最常用于使計(jì)算機(jī)編程更容易實(shí)現(xiàn)。諸如AutoProf、FlashFill、Storyboard編程工具等應(yīng)用程序允許學(xué)生通過(guò)直接操作某些概念以更直觀的方式編寫(xiě)程序,而無(wú)需編寫(xiě)代碼。
在人工智能研究人員弗朗索瓦·喬萊的論文《智力測(cè)試》中,他將程序合成作為一種用于解決智力測(cè)試問(wèn)題后建模的ARC任務(wù)的技術(shù)。
在接受Verge網(wǎng)站關(guān)于其論文的采訪時(shí),喬萊說(shuō):“關(guān)鍵點(diǎn)是,在任何任務(wù)中,獲得高技能都不是智力的表現(xiàn)。除非這個(gè)任務(wù)是一個(gè)元任務(wù),涉及到從大量此前未知的問(wèn)題上獲得新的技能。這正是我所認(rèn)為的智力基準(zhǔn)。”
從本質(zhì)上講,系統(tǒng)智力應(yīng)通過(guò)以下方式測(cè)試, 正如喬萊所說(shuō)“這意味著只使用系統(tǒng)之前不知道的新任務(wù),測(cè)量系統(tǒng)開(kāi)始時(shí)對(duì)該任務(wù)之前的知識(shí),以及測(cè)量系統(tǒng)的采樣效率(即學(xué)習(xí)完成該任務(wù)需要多少數(shù)據(jù))。達(dá)到某一技能水平所需的信息(先前的知識(shí)和經(jīng)驗(yàn))越少,就說(shuō)明越智能。如今的人工智能系統(tǒng)一點(diǎn)也不智能。”
他后來(lái)將ARC任務(wù)作為問(wèn)題發(fā)布,來(lái)解決Kaggle的抽象和推理問(wèn)題挑戰(zhàn)。解決這一問(wèn)題將涉及到利用編程綜合的力量來(lái)學(xué)習(xí)以前未知的ARC任務(wù)。
分解編程合成問(wèn)題
對(duì)于每一個(gè)看似不可能解決的問(wèn)題,可以先把問(wèn)題分解成小問(wèn)題。如果您從未學(xué)習(xí)過(guò)編程合成,那么就在開(kāi)始工作前了解一下存在什么問(wèn)題以及怎么解決。
1.程序空間問(wèn)題
每個(gè)編程合成問(wèn)題最終都要在整個(gè)程序空間中進(jìn)行搜索。搜索方法必須是有效的。想象一下,若使用樹(shù)算法,就必須有辦法砍下這棵樹(shù)的枝干,否則,在它生長(zhǎng)的過(guò)程中,它有無(wú)限生長(zhǎng)的潛力。
2. 用戶(hù)意向問(wèn)題
在測(cè)試用戶(hù)意圖的邏輯之間常常存在模糊領(lǐng)域。當(dāng)用戶(hù)與環(huán)境交互時(shí)人們有了一方面的發(fā)現(xiàn),在用戶(hù)參與時(shí),新的數(shù)據(jù)可能會(huì)將問(wèn)題轉(zhuǎn)化為用戶(hù)眼中的全新問(wèn)題。
若要成功解決Kaggle挑戰(zhàn)必然涉及解決這兩個(gè)問(wèn)題。
用于程序合成的實(shí)用工具
在Python中,Z3是用于程序合成的Python包。這里是阿德里安·桑普森為Z3提供的優(yōu)秀教程。
其文章中的例子如下:
構(gòu)建泛型求解器,如下所示:

代碼源于阿德里安·桑普森博客
然后,定義要運(yùn)行的公式。

代碼源于阿德里安·桑普森博客
運(yùn)行:print(solve(formula)) 來(lái)解決任何問(wèn)題。您可以閱讀他的教程了解更多細(xì)節(jié)和例子。
想要了解更多有關(guān)程序合成的知識(shí)嗎?
下面是幾個(gè)程序合成相關(guān)學(xué)習(xí)資源.
1. 程序合成之深度學(xué)習(xí)(DeepLearning for Program Synthesis)https://sunblaze-ucb.github.io/program-synthesis/index.html
2. 深度編碼器:學(xué)習(xí)編寫(xiě)程序(Deep Coder: Learning To WritePrograms)
https://openreview.net/pdf?id=ByldLrqlx
3. 深度學(xué)習(xí)程序合成微軟研究(Deep Learning Program SynthesisMicrosoft Research)
https://www.microsoft.com/en-us/research/blog/deep-learning-program-synthesis/
如果您正在著手解決弗朗索瓦·喬萊提出的Kaggle挑戰(zhàn),那么本文將為您提供幫助。
“任何問(wèn)題都不可能從創(chuàng)造它的同一層次的意識(shí)中得到解決。”——愛(ài)因斯坦
每一個(gè)“不可能”的挑戰(zhàn)都是由不放棄解決問(wèn)題的人一步一步解決的。
加油,你是最棒的!























