国产欧美日韩三区_偷窥自拍亚洲色图精选_久久大片网站_成人在线黄色_成人亚洲免费视频_99久久久精品_国产美女自拍_韩国19禁主播vip福利视频_色综合视频一区二区三区日韩_日本在线观看一区二区

當前位置:首頁 > 科技  > 知識百科

自動編程NLP模型技術(shù)綜述 譯文

來源: 責編: 時間:2023-08-07 16:30:23 303觀看
導(dǎo)讀 Copilot、Codex和AlphaCode:自動編程的計算機程序現(xiàn)況近年來,由于自然語言處理領(lǐng)域轉(zhuǎn)換器(transformers)的興起,我們看到了一系列令人震驚的代碼編寫深度學(xué)習(xí)模型。能夠編寫計算

Copilot、Codex和AlphaCode:自動編程的計算機程序現(xiàn)況gYn28資訊網(wǎng)——每日最新資訊28at.com

近年來,由于自然語言處理領(lǐng)域轉(zhuǎn)換器(transformers)的興起,我們看到了一系列令人震驚的代碼編寫深度學(xué)習(xí)模型。能夠編寫計算機程序的計算機程序,通常稱為程序合成問題,至少從20世紀60年代末和20世紀70年代初就已開始研究。gYn28資訊網(wǎng)——每日最新資訊28at.com

在21世紀10年代和20年代,基于注意力的模型在其他領(lǐng)域的成功再次激發(fā)了程序合成研究的動力,即在數(shù)百GB的文本上預(yù)先訓(xùn)練具有數(shù)百萬或數(shù)十億參數(shù)的大規(guī)模基于注意力的神經(jīng)模型(轉(zhuǎn)換器)的策略。gYn28資訊網(wǎng)——每日最新資訊28at.com

經(jīng)過預(yù)訓(xùn)練的模型在元學(xué)習(xí)方面表現(xiàn)出了令人印象深刻的能力,這得益于它們的注意力機制,并且似乎可以實際應(yīng)用于文本任務(wù)開發(fā)方面——通過在提示內(nèi)容中僅提供少數(shù)幾個示例(研究文獻中稱作“零樣本或小樣本學(xué)習(xí)”)。gYn28資訊網(wǎng)——每日最新資訊28at.com

基于深層NLP模型的現(xiàn)代程序合成gYn28資訊網(wǎng)——每日最新資訊28at.com

NLP模型可以進一步使用專門的數(shù)據(jù)集進行訓(xùn)練,以微調(diào)特定任務(wù)的性能。編寫代碼就是這方面應(yīng)用的一個特別有趣的使用場景。gYn28資訊網(wǎng)——每日最新資訊28at.com

GitHub上的Copilot項目,被宣傳為“你的人工智能編程伙伴(Your AI Pair Programmer)”,在2021推出時引起不小的爭議。在很大程度上,這是由于在訓(xùn)練數(shù)據(jù)集中使用了所有公開的GitHub代碼。根據(jù)有關(guān)說明,這些代碼庫包括具有Copyleft許可證的項目,這些項目可能不允許將代碼用于Copilot等項目,除非Copilot本身是開源的。gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot是OpenAI組織和微軟公司之間關(guān)系的產(chǎn)物,基于GPT-3的一個經(jīng)過代碼訓(xùn)練的版本。由OpenAI演示并通過其API提供的版本稱為Codex。使用Copex的正式實驗描述在陳先生等人于2021年發(fā)表的論文中有詳細的介紹。gYn28資訊網(wǎng)——每日最新資訊28at.com

2022年初,DeepMind公司也不甘示弱,開發(fā)出他們自己的程序合成深度NLP系統(tǒng):AlphaCode。gYn28資訊網(wǎng)——每日最新資訊28at.com

新挑戰(zhàn)者:AlphaCodegYn28資訊網(wǎng)——每日最新資訊28at.com

與之前的Codex和Copilot一樣,AlphaCode是一個設(shè)計和訓(xùn)練用于編寫代碼的大型NLP模型。如Copilot一樣,AlphaCode的開發(fā)也不是為了將AlphaCode作為軟件工程師的生產(chǎn)力工具,而是用于在競賽類編程任務(wù)中挑戰(zhàn)人類水平的編程性能。gYn28資訊網(wǎng)——每日最新資訊28at.com

用于訓(xùn)練和評估AlphaCode(組成新的CodeContests數(shù)據(jù)集)的競賽編碼挑戰(zhàn)的難度介于以前數(shù)據(jù)集難度和現(xiàn)實世界軟件工程難度之間。gYn28資訊網(wǎng)——每日最新資訊28at.com

對于那些不熟悉競賽類編程挑戰(zhàn)網(wǎng)站的人來說,這項任務(wù)有點像測試驅(qū)動開發(fā)的簡化版本。根據(jù)給定的一些文本描述和幾個例程,這種挑戰(zhàn)的主要內(nèi)容就是,編寫一個通過一組測試的程序——其中大部分測試對程序員來說都是隱藏的。gYn28資訊網(wǎng)——每日最新資訊28at.com

理想情況下,隱藏測試應(yīng)該是全面的,通過所有測試也就代表順利解決了給定的問題。但是,用單元測試覆蓋每個邊緣情況是一個困難的問題。對程序合成領(lǐng)域的一個重要貢獻實際上是CodeContests數(shù)據(jù)集本身,因為DeepMind團隊做出了重大努力——他們通過突變過程生成額外的測試,目的是為了降低誤報率(測試通過,但問題尚未解決)和慢陽性率(測試通過,但解決方案太慢)。gYn28資訊網(wǎng)——每日最新資訊28at.com

AlphaCode的性能是根據(jù)競賽網(wǎng)站CodeForces上的競賽編程挑戰(zhàn)內(nèi)容進行評估的。總體上,AlphaCode在參與競賽的(也可能是人類)程序員中的平均表現(xiàn)為“前54.3%”。gYn28資訊網(wǎng)——每日最新資訊28at.com

請注意,該指標可能有點誤導(dǎo),因為它實際上等同于45.7%的績效。令人難以置信的是,AlphaCode系統(tǒng)能夠編寫任何通過所有隱藏測試的算法。但是,請注意:AlphaCode使用了一種與人類截然不同的策略來解決編程問題。gYn28資訊網(wǎng)——每日最新資訊28at.com

雖然人類競爭對手可能會編寫一種算法來解決大多數(shù)例程——結(jié)合運行早期版本解決方案的見解不斷改進,直到通過所有測試;但是,AlphaCode采用了一種基礎(chǔ)更廣泛的方法,即為每個問題生成多個樣本,然后選擇10個樣本提交。gYn28資訊網(wǎng)——每日最新資訊28at.com

AlphaCode在CodeContests數(shù)據(jù)集上的性能的一大貢獻是,生成后過濾和聚類的結(jié)果:它在生成大約1000000個候選解決方案后,開始過濾候選方案,以刪除問題描述中未通過示例測試的候選方案,從而消除大約99%的候選群體。gYn28資訊網(wǎng)——每日最新資訊28at.com

作者提到,大約10%的問題沒有通過此階段所有示例測試的候選解決方案。gYn28資訊網(wǎng)——每日最新資訊28at.com

然后通過聚類將剩余的候選項篩選到10份或更少的提交。簡而言之,他們訓(xùn)練了另一個模型,以根據(jù)問題描述生成額外的測試輸入(但請注意,他們沒有這些測試的有效輸出)。gYn28資訊網(wǎng)——每日最新資訊28at.com

剩余的候選解決方案(過濾后的數(shù)量可能小于1000個),根據(jù)其在生成的測試輸入上的輸出進行聚類。按照從最大到最小的順序,從每個集群中選擇一個候選對象進行提交。如果簇少于10個,則對簇進行多次采樣。gYn28資訊網(wǎng)——每日最新資訊28at.com

雖然過濾/聚類步驟是獨特的,并且AlphaCode在新的CodeContests數(shù)據(jù)集上進行了微調(diào),但它最初的訓(xùn)練方式與Codex或Copilot大致相同。AlphaCode首先在GitHub(2021年7月14日檢索)的一個大型公共可用代碼數(shù)據(jù)集上接受了預(yù)訓(xùn)練。他們訓(xùn)練了5種變型,參數(shù)個數(shù)從2.84億個增加到410億個。gYn28資訊網(wǎng)——每日最新資訊28at.com

與AlphaGo系列或玩星際爭霸II游戲的AlphaStar機器人的精神一樣,AlphaCode也是一個研究項目,旨在開發(fā)一個接近人類在專門任務(wù)領(lǐng)域的能力的系統(tǒng),而且在程序合成過程中開發(fā)出的實用程序的門檻更低。gYn28資訊網(wǎng)——每日最新資訊28at.com

從開發(fā)解決問題的實用工具的角度來說,這方面機器人的代表是基于GPT-3的Codex和Copilot工具。Codex是GPT-3的OpenAI變體,在一個公共可用代碼的語料庫上進行訓(xùn)練。根據(jù)與論文一起發(fā)布的HumanEval數(shù)據(jù)集,OpenAI報告稱,Codex通過在“docstring to code”格式的任務(wù)中生成100個樣本,能夠解決70%以上的問題。gYn28資訊網(wǎng)——每日最新資訊28at.com

接下來,我們將探索這種通過使用Codex自動生成代碼的提示符編程技術(shù)。我們將同時使用下面給定的模型來開發(fā)約翰·康威的《生命游戲》。gYn28資訊網(wǎng)——每日最新資訊28at.com

GitHub Copilot采用代碼自動補全的方法,目前的打包形式是Visual Studio,VSCode,Neovim和JetBrains等集成開發(fā)環(huán)境的擴展的方式。根據(jù)Copilot網(wǎng)頁有關(guān)描述,Copilot已能夠成功地根據(jù)給定描述重新編寫出一組經(jīng)過良好測試的Python函數(shù),其中57%的函數(shù)與HumanEval數(shù)據(jù)集類似。gYn28資訊網(wǎng)——每日最新資訊28at.com

我們將研究Copilot的一些實際用例,例如使用VSCode的專用測試版的Copilot擴展自動編寫測試。gYn28資訊網(wǎng)——每日最新資訊28at.com

提示符編程:用Codex編寫康威的《生命游戲》gYn28資訊網(wǎng)——每日最新資訊28at.com

在本節(jié)中,我們將介紹基于約翰·康威的《生命游戲》編寫細胞自動機模擬器的任務(wù)。稍加了一點修改,沒有對規(guī)則硬編碼,我們的程序應(yīng)該能夠模擬任何一組類生命的細胞自動機規(guī)則。gYn28資訊網(wǎng)——每日最新資訊28at.com

我們將采用交互式方法,而不是通過生成100個示例并選擇最佳示例(可以是手動方式也可以通過運行測試的方式)。當Codex給出一個糟糕的解決方案的時候,我們將做出調(diào)整以嘗試引導(dǎo)更好的答案。當然,如果絕對必要的話,在Codex完全失敗的情況下,我們可以繼續(xù)修改代碼以獲得一個能夠正常工作的示例。gYn28資訊網(wǎng)——每日最新資訊28at.com

編寫一個逼真的CA(Cellular Automata,即“元胞自動機”。它是一種時間、空間、狀態(tài)都離散,空間相互作用和時間因果關(guān)系為局部的網(wǎng)格動力學(xué)模型,具有模擬復(fù)雜系統(tǒng)時空演化過程的能力)模擬器的第一步是提出一個計算鄰居的函數(shù)。我們編寫了以下docstring提示符,并將其提供給code-davinci-001,這是OpenAI API庫中最大的Codex模型:gYn28資訊網(wǎng)——每日最新資訊28at.com

# PROMPTgYn28資訊網(wǎng)——每日最新資訊28at.com
import numpy as npgYn28資訊網(wǎng)——每日最新資訊28at.com
def compute_neighborhood(grid: np.array) -> np.array:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
Compute the sum of cell states in the Moore neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com
for each cell in the input grid.gYn28資訊網(wǎng)——每日最新資訊28at.com
A Moore neighborhood includes 8 cells,gYn28資訊網(wǎng)——每日最新資訊28at.com
diagonally and orthogonally adjacent to, but not including, the center cell.gYn28資訊網(wǎng)——每日最新資訊28at.com
The cells denoted by '1' correspond to the Moore neighborhood for cell a:gYn28資訊網(wǎng)——每日最新資訊28at.com
1 1 1gYn28資訊網(wǎng)——每日最新資訊28at.com
1 a 1gYn28資訊網(wǎng)——每日最新資訊28at.com
1 1 1gYn28資訊網(wǎng)——每日最新資訊28at.com
If cell 'a' is on the edge of the grid,gYn28資訊網(wǎng)——每日最新資訊28at.com
the Moore neighborhood wraps around to the cells on the opposite edge,gYn28資訊網(wǎng)——每日最新資訊28at.com
i.e. grid is on a toroid.gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
grid, a numpy array with binary values 0 or 1. grid contains the current cell state valuesgYn28資訊網(wǎng)——每日最新資訊28at.com
Returns:gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
neighorhood_grid, a numpy array with integer values from 0 to 8.gYn28資訊網(wǎng)——每日最新資訊28at.com
For each cell (element in grid) in grid, neighborhood_grid shouldgYn28資訊網(wǎng)——每日最新資訊28at.com
contain the sum of states in that cell's Moore neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com

上述代碼中,加入注釋行“# PROMPT”和“# GENERATED”是為了更清楚地說明提示符從哪兒結(jié)束。gYn28資訊網(wǎng)——每日最新資訊28at.com

你仔細分析上面相當全面的docstring提示了沒有?Codex是怎么做的?其實,Codex的第一次嘗試如下:gYn28資訊網(wǎng)——每日最新資訊28at.com

# GENERATEDgYn28資訊網(wǎng)——每日最新資訊28at.com
# TODO: implement this functiongYn28資訊網(wǎng)——每日最新資訊28at.com
passgYn28資訊網(wǎng)——每日最新資訊28at.com

這對我們的小實驗來說可能不是好兆頭。即使在調(diào)整P值超參數(shù)以實現(xiàn)更寬松的核采樣(并希望更好的多樣性)后,Codex似乎仍未給出上述問題的答案。gYn28資訊網(wǎng)——每日最新資訊28at.com

幸運的是,我們只需在docstring提示符上添加一點類似于下面的內(nèi)容,Codex就會產(chǎn)生一個更有希望的輸出。gYn28資訊網(wǎng)——每日最新資訊28at.com

# PROMPT (appended to previous prompt)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
this function is completed and does not include any TODOsgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# GENERATEDgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the dimensions of the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
n_rows, n_cols = grid.shapegYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# initialize the output arraygYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_grid = np.zeros((n_rows, n_cols), dtype=int)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# loop over the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
for i in range(n_rows):gYn28資訊網(wǎng)——每日最新資訊28at.com
for j in range(n_cols):gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the current cell valuegYn28資訊網(wǎng)——每日最新資訊28at.com
cell_val = grid[i, j]gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the Moore neighborhood of the current cellgYn28資訊網(wǎng)——每日最新資訊28at.com
# using the get_neighborhood functiongYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood = get_neighborhood(grid, i, j)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# sum the cell values in the neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_sum = np.sum(neighborhood)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# store the sum in the neighborhood gridgYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_grid[i, j] = neighborhood_sumgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
return neighborhood_gridgYn28資訊網(wǎng)——每日最新資訊28at.com

當然,這還不是一個很好的解決方案,因為它引入了一個未使用的變量cell_val,并將其大部分工作委托給它剛剛添加的另一個函數(shù)get_neighborhood。但總的來說,這看起來是一個可行的開始。gYn28資訊網(wǎng)——每日最新資訊28at.com

接下來,我們?yōu)樯厦嫣岬降膅et_neighborhood函數(shù)編寫了一個簡單的docstring:gYn28資訊網(wǎng)——每日最新資訊28at.com

def get_neighborhood(grid: np.array, i: int, j: int) -> np.array:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
get_neighborhood is used by compute_neighborhood gYn28資訊網(wǎng)——每日最新資訊28at.com
to return the 3x3 Moore neighborhood for the cell gYn28資訊網(wǎng)——每日最新資訊28at.com
located at coordinates i,j If i,j coordinates are gYn28資訊網(wǎng)——每日最新資訊28at.com
on the edge of the grid (i.e. i or j equal 0, or i == gYn28資訊網(wǎng)——每日最新資訊28at.com
grid.shape[0]-1 or j == grid.shape[1]), the MooregYn28資訊網(wǎng)——每日最新資訊28at.com
Neighborhood should wrap around to include cells on thegYn28資訊網(wǎng)——每日最新資訊28at.com
opposite edge. In other words the grid can be considered to gYn28資訊網(wǎng)——每日最新資訊28at.com
be the surface of a toroid, like 'Pac-Man'gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
grid, np.array, this is the current state ofgYn28資訊網(wǎng)——每日最新資訊28at.com
the cellular automata gridgYn28資訊網(wǎng)——每日最新資訊28at.com
i, int, this coordinate corresponds to the rowgYn28資訊網(wǎng)——每日最新資訊28at.com
j, int, coordinate corresponding to columngYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
returns:gYn28資訊網(wǎng)——每日最新資訊28at.com
moore_neighborhood - np.array, should always havegYn28資訊網(wǎng)——每日最新資訊28at.com
dimensions 3x3 andgYn28資訊網(wǎng)——每日最新資訊28at.com
contain the Moore neighborhood for the cell at i,j gYn28資訊網(wǎng)——每日最新資訊28at.com
in grid.Because the center cell is not part of thegYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood, moore_neighborhood[1,1] should always gYn28資訊網(wǎng)——每日最新資訊28at.com
be 0gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# GENERATEDgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the dimensions of the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
n_rows, n_cols = grid.shapegYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# initialize the output arraygYn28資訊網(wǎng)——每日最新資訊28at.com
moore_neighborhood = np.zeros((3, 3), dtype=int)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the coordinates of the Moore neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com
# using the get_neighborhood_coordinates functiongYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_coords = gYn28資訊網(wǎng)——每日最新資訊28at.com
get_neighborhood_coordinates(i, j, n_rows, n_cols)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# loop over the coordinatesgYn28資訊網(wǎng)——每日最新資訊28at.com
for coord in neighborhood_coords:gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the cell value at the coordinategYn28資訊網(wǎng)——每日最新資訊28at.com
cell_val = grid[coord[0], coord[1]]gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# store the cell value in the output arraygYn28資訊網(wǎng)——每日最新資訊28at.com
moore_neighborhood[coord[0], coord[1]] = cell_valgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
return moore_neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com

上面程序的輸出看起來也算可行;但經(jīng)過檢查,它實際上包含了一個重要錯誤。gYn28資訊網(wǎng)——每日最新資訊28at.com

在鄰居坐標的循環(huán)中,它使用與從網(wǎng)格中檢索值相同的坐標為摩爾鄰居(Moore neighborhood)賦值。gYn28資訊網(wǎng)——每日最新資訊28at.com

我們沒有找到提示Codex避免錯誤的明確方法;因此,我們只好手動修改一下代碼:gYn28資訊網(wǎng)——每日最新資訊28at.com

# FIXED loop over the coordinates gYn28資訊網(wǎng)——每日最新資訊28at.com
for index, coord in enumerate(neighborhood_coords): gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the cell value at the coordinate gYn28資訊網(wǎng)——每日最新資訊28at.com
cell_val = grid[coord[0], coord[1]] gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# FIXED store the cell value in the output array gYn28資訊網(wǎng)——每日最新資訊28at.com
moore_neighborhood[index // 3, index % 3] = cell_val gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
return moore_neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com

另外,前面代碼中還引入了另一個函數(shù)get_neighborhood_coordinates來處理比較“棘手”的部分。gYn28資訊網(wǎng)——每日最新資訊28at.com

接下來,我們要為函數(shù)get_neighborhood_coordinates編寫一個提示符。gYn28資訊網(wǎng)——每日最新資訊28at.com

# PROMPT gYn28資訊網(wǎng)——每日最新資訊28at.com
def get_neighborhood_coordinates(gYn28資訊網(wǎng)——每日最新資訊28at.com
i: int, j: int, n_rows: int, n_cols: int) -> list:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
get_neighborhood_coordinates is used by get_neighborhood gYn28資訊網(wǎng)——每日最新資訊28at.com
to return the coordinates of the 3x3 Moore neighborhood forgYn28資訊網(wǎng)——每日最新資訊28at.com
the cell located at coordinates i,j If i,j coordinates are ongYn28資訊網(wǎng)——每日最新資訊28at.com
the edge of the grid (i.e. i or j equal 0, or i == gYn28資訊網(wǎng)——每日最新資訊28at.com
grid.shape[0]-1 or j == grid.shape[1]), the MooregYn28資訊網(wǎng)——每日最新資訊28at.com
Neighborhood should wrap around to include cells on the gYn28資訊網(wǎng)——每日最新資訊28at.com
opposite edge. In other words the grid can be considered to gYn28資訊網(wǎng)——每日最新資訊28at.com
be the surface of a toroid, like 'Pac-Man'gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
i, int, this coordinate corresponds to the rowgYn28資訊網(wǎng)——每日最新資訊28at.com
j, int, coordinate corresponding to columngYn28資訊網(wǎng)——每日最新資訊28at.com
n_rows, int, number of rows in the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
n_cols, int, number of columns in the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
returns:gYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_coords - list of tuples, gYn28資訊網(wǎng)——每日最新資訊28at.com
each tuple contains the coordinatesgYn28資訊網(wǎng)——每日最新資訊28at.com
of a cell in the Moore neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# GENERATEDgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# initialize the output listgYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_coords = []gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the coordinates of the Moore neighborhoodgYn28資訊網(wǎng)——每日最新資訊28at.com
# using the get_neighborhood_coordinates functiongYn28資訊網(wǎng)——每日最新資訊28at.com
for row in range(i-1, i+2):gYn28資訊網(wǎng)——每日最新資訊28at.com
for col in range(j-1, j+2):gYn28資訊網(wǎng)——每日最新資訊28at.com
# skip the center cellgYn28資訊網(wǎng)——每日最新資訊28at.com
if row == i and col == j:gYn28資訊網(wǎng)——每日最新資訊28at.com
continuegYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# check if the cell is on the edge of the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
# if so, wrap around to the opposite edgegYn28資訊網(wǎng)——每日最新資訊28at.com
if row < 0:gYn28資訊網(wǎng)——每日最新資訊28at.com
row = n_rows - 1gYn28資訊網(wǎng)——每日最新資訊28at.com
elif row == n_rows:gYn28資訊網(wǎng)——每日最新資訊28at.com
row = 0gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
if col < 0:gYn28資訊網(wǎng)——每日最新資訊28at.com
col = n_cols - 1gYn28資訊網(wǎng)——每日最新資訊28at.com
elif col == n_cols:gYn28資訊網(wǎng)——每日最新資訊28at.com
col = 0gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# store the cell coordinatesgYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_coords.append((row, col))gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
return neighborhood_coordsgYn28資訊網(wǎng)——每日最新資訊28at.com

這比我們預(yù)期的函數(shù)式編程深度要深一點(compute_neighborhood調(diào)用get_neighborhood,反過來get_neighborhood又調(diào)用get_neighborhood_coordinates),但看起來我們終于有了一組函數(shù),可以返回一個鄰居和的網(wǎng)格。gYn28資訊網(wǎng)——每日最新資訊28at.com

還剩下update函數(shù),它對應(yīng)的docstring提示如下所示:gYn28資訊網(wǎng)——每日最新資訊28at.com

# PROMPTgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
def update_grid(grid: np.array, rules: list) -> np.array:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
update input arg grid according the the Life-like rulesgYn28資訊網(wǎng)——每日最新資訊28at.com
contained in input arg rules. rules is a list of lists, gYn28資訊網(wǎng)——每日最新資訊28at.com
with the first element containing a list of 'birth'gYn28資訊網(wǎng)——每日最新資訊28at.com
conditions (cells go from 0 -> 1) and the second elementgYn28資訊網(wǎng)——每日最新資訊28at.com
containing a list of 'survival' conditions (cells aregYn28資訊網(wǎng)——每日最新資訊28at.com
unchanged).gYn28資訊網(wǎng)——每日最新資訊28at.com
Cells which have a neighborhood sum that is not in thegYn28資訊網(wǎng)——每日最新資訊28at.com
'birth' (B) or 'survival' (S) rules go to 0. gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
This functions uses function compute_neighborhood to compute gYn28資訊網(wǎng)——每日最新資訊28at.com
the neighborhood value for each cell in grid.gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
grid, np.array. grid contains the cell values (0 or 1)gYn28資訊網(wǎng)——每日最新資訊28at.com
rules, list of lists. rules contains the B/S rules gYn28資訊網(wǎng)——每日最新資訊28at.com
for Life-like cellular automata for example, togYn28資訊網(wǎng)——每日最新資訊28at.com
simulate Conway's Life CA, `rules = [[3], [2,3]]`,gYn28資訊網(wǎng)——每日最新資訊28at.com
i.e. B3/S23 Life Without Death has rulesgYn28資訊網(wǎng)——每日最新資訊28at.com
B3/S012345678, so `rules = [[3],gYn28資訊網(wǎng)——每日最新資訊28at.com
[0,1,2,3,4,5,6,7,8]]`gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
update_grid should raise an Exception if rules contains gYn28資訊網(wǎng)——每日最新資訊28at.com
values greater than 8 (maximum number of live cells in agYn28資訊網(wǎng)——每日最新資訊28at.com
Moore neighborhood) or less than 0. gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# GENERATEDgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the dimensions of the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
n_rows, n_cols = grid.shapegYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the neighborhood gridgYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_grid = compute_neighborhood(grid)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# loop over the gridgYn28資訊網(wǎng)——每日最新資訊28at.com
for i in range(n_rows):gYn28資訊網(wǎng)——每日最新資訊28at.com
for j in range(n_cols):gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the current cell valuegYn28資訊網(wǎng)——每日最新資訊28at.com
cell_val = grid[i, j]gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# get the neighborhood value for the current cellgYn28資訊網(wǎng)——每日最新資訊28at.com
neighborhood_val = neighborhood_grid[i, j]gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# check if the cell is alivegYn28資訊網(wǎng)——每日最新資訊28at.com
if cell_val == 1:gYn28資訊網(wǎng)——每日最新資訊28at.com
# check if the cell should diegYn28資訊網(wǎng)——每日最新資訊28at.com
if neighborhood_val not in rules[1]:gYn28資訊網(wǎng)——每日最新資訊28at.com
grid[i, j] = 0gYn28資訊網(wǎng)——每日最新資訊28at.com
else:gYn28資訊網(wǎng)——每日最新資訊28at.com
# check if the cell should be borngYn28資訊網(wǎng)——每日最新資訊28at.com
if neighborhood_val in rules[0]:gYn28資訊網(wǎng)——每日最新資訊28at.com
grid[i, j] = 1gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
return gridgYn28資訊網(wǎng)——每日最新資訊28at.com

這看起來是解決上面問題的一種非常合理的方法;盡管我們確實明確建議,如果鄰居網(wǎng)格包含錯誤的值并且在生成的輸出中找不到,就會引發(fā)異常。gYn28資訊網(wǎng)——每日最新資訊28at.com

只需進行一些修復(fù):在函數(shù)get_neighborhood中進行手動干預(yù),并且嘗試給出一些提示,我們就可以成功地設(shè)計出一個完全可行的類似生命的細胞自動機模擬器。gYn28資訊網(wǎng)——每日最新資訊28at.com

上面的代碼不是一個特別快的實現(xiàn)方案,但它的質(zhì)量與程序員在開始使用一種新語言時可能做出的那種“Hello World”嘗試相似。值得注意的是,在訓(xùn)練數(shù)據(jù)集中包含了許多示例,供研究者參考。gYn28資訊網(wǎng)——每日最新資訊28at.com

在康威的《生命游戲》中,我們可以想象這段程序在微型滑翔機的發(fā)展過程中取得的成功。gYn28資訊網(wǎng)——每日最新資訊28at.com

gYn28資訊網(wǎng)——每日最新資訊28at.com

雖然我們確實通過一組函數(shù)完成了CA模擬器的編寫,但這種方法對于日常軟件工程來說并不是非常有用或現(xiàn)實的開發(fā)方式。但另一方面,這并不能阻止像SourceAI這樣的初創(chuàng)公司(本質(zhì)上是OpenAI Codex API的包裝商)將其服務(wù)宣傳為“給每個人創(chuàng)造有價值的定制軟件的機會”。gYn28資訊網(wǎng)——每日最新資訊28at.com

“我們構(gòu)建了一個獨立的系統(tǒng),可以開發(fā)出世界上最熟練的工程師級別的軟件。”不過,與Codex交互的確是學(xué)習(xí)或?qū)嵺`編程的一種潛在有用的方式,尤其是針對CodeSignal、CodeForces或HackerRank等網(wǎng)站的編程問題方面。gYn28資訊網(wǎng)——每日最新資訊28at.com

接下來,我們將嘗試評估Codex/Copilot,以獲得自動編寫測試和docstring的更現(xiàn)實的使用情形。gYn28資訊網(wǎng)——每日最新資訊28at.com

任務(wù)2:編寫測試gYn28資訊網(wǎng)——每日最新資訊28at.com

對于本例來說,我們選擇使用VSCode開發(fā)工具的GitHub Copilot擴展來編寫測試。gYn28資訊網(wǎng)——每日最新資訊28at.com

# PROMPT (in VSCode)gYn28資訊網(wǎng)——每日最新資訊28at.com
import numpy as npgYn28資訊網(wǎng)——每日最新資訊28at.com
def pythagorean(a: np.float, b: np.float) -> np.float:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
Use the Pythagorean theorem to comput the hypotenuse forgYn28資訊網(wǎng)——每日最新資訊28at.com
a triangle with side lengths a and bgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
a, np.float, side of the trianglegYn28資訊網(wǎng)——每日最新資訊28at.com
b, np.float, the other side of the trianglegYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
returns:gYn28資訊網(wǎng)——每日最新資訊28at.com
c, np.float, the length of the hypotenusegYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
c = np.sqrt(a**2 + b**2)gYn28資訊網(wǎng)——每日最新資訊28at.com
return cgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
def test_pythagorean():gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# GENERATED (Copilot autocomplete)gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
Test the pythagorean functiongYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
a = np.array([3, 4, 5])gYn28資訊網(wǎng)——每日最新資訊28at.com
b = np.array([4, 5, 6])gYn28資訊網(wǎng)——每日最新資訊28at.com
c = pythagorean(a, b)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
assert np.allclose(c, np.sqrt(a**2 + b**2))gYn28資訊網(wǎng)——每日最新資訊28at.com

雖然畢達哥拉斯定理函數(shù)可能過于簡單,但Copilot建議進行一次合理的測試。如果您運行它,它就會通過。你會注意到,自動完成建議能夠正確地獲得測試的結(jié)構(gòu)和數(shù)字內(nèi)容。gYn28資訊網(wǎng)——每日最新資訊28at.com

如果我們想使用自己喜歡的框架以更系統(tǒng)的方式編寫測試,該怎么辦?不用太擔心,因為我們已經(jīng)使用numpy庫和自動微分技術(shù)編寫了大量的低級學(xué)習(xí)模型,供給測試者使用。因此,雖然接下來的這個示例不是100%真實地來自真實世界,但效果還是比較貼近真實情況的。gYn28資訊網(wǎng)——每日最新資訊28at.com

在本例中,我們將使用autograd和numpy以及unittest中的TestCase類設(shè)置一個簡單的多層感知器前向傳遞、損失函數(shù)和梯度函數(shù)進行測試。gYn28資訊網(wǎng)——每日最新資訊28at.com

#PROMPTgYn28資訊網(wǎng)——每日最新資訊28at.com
import unittestgYn28資訊網(wǎng)——每日最新資訊28at.com
from autograd import numpy as npgYn28資訊網(wǎng)——每日最新資訊28at.com
from autograd import gradgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
def forward_mlp(input_x: np.array, gYn28資訊網(wǎng)——每日最新資訊28at.com
weights: list, biases: list) -> np.array:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
compute the forward pass of a multilayer perceptron. gYn28資訊網(wǎng)——每日最新資訊28at.com
The number of layers is equal to the length of the list ofgYn28資訊網(wǎng)——每日最新資訊28at.com
weights, which must be the same as the list of biases,gYn28資訊網(wǎng)——每日最新資訊28at.com
biases. gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x, np.array, input datagYn28資訊網(wǎng)——每日最新資訊28at.com
weights, list of np.arrays, a list of np.array matrices,gYn28資訊網(wǎng)——每日最新資訊28at.com
representing the weightsgYn28資訊網(wǎng)——每日最新資訊28at.com
biases: list of np.arrays, a list of biases for eachgYn28資訊網(wǎng)——每日最新資訊28at.com
layergYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
returns: gYn28資訊網(wǎng)——每日最新資訊28at.com
result, np.array, the output of the networkgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
assert len(weights) == len(biases)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
for layer_index in range(len(weights) - 1):gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x = np.tanh(np.matmul(input_x,gYn28資訊網(wǎng)——每日最新資訊28at.com
weights[layer_index]) + biases[layer_index])gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
output = np.matmul(input_x, weights[-1]) + biases[-1]gYn28資訊網(wǎng)——每日最新資訊28at.com
return outputgYn28資訊網(wǎng)——每日最新資訊28at.com
def get_loss(input_x: np.array, weights: list, gYn28資訊網(wǎng)——每日最新資訊28at.com
biases: list, target: np.array) -> np.float:gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
compute the mean squared error loss for an mlp with weightsgYn28資訊網(wǎng)——每日最新資訊28at.com
and biases, with respect to the input data input_x and thegYn28資訊網(wǎng)——每日最新資訊28at.com
target array target.gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
args:gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x, np.array, input datagYn28資訊網(wǎng)——每日最新資訊28at.com
weights, list of np.arrays, a list of np.array matrices,gYn28資訊網(wǎng)——每日最新資訊28at.com
representing the weightsgYn28資訊網(wǎng)——每日最新資訊28at.com
biases: list of np.arrays, a list of biases for eachgYn28資訊網(wǎng)——每日最新資訊28at.com
layergYn28資訊網(wǎng)——每日最新資訊28at.com
target: np.array, the target valuesgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
returns: gYn28資訊網(wǎng)——每日最新資訊28at.com
loss, np.float, the lossgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
output = forward_mlp(input_x, weights, biases)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
return np.mean((output - target)**2)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
get_loss_grad = grad(get_loss, argnum=(1,2))gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
class TestMLP(unittest.TestCase):gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
tests for MLP, get_loss, and get_grad_lossgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
# GENERATED (chosen from Copilot suggestions)gYn28資訊網(wǎng)——每日最新資訊28at.com
def setUp(self):gYn28資訊網(wǎng)——每日最新資訊28at.com
passgYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
def test_forward_mlp(self):gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
test forward_mlpgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x = np.array([[1, 2, 3], [4, 5, 6]])gYn28資訊網(wǎng)——每日最新資訊28at.com
weights = [np.array([[1, 2], [3, 4]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[5, 6], [7, 8]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[9, 10], [11, 12]])]gYn28資訊網(wǎng)——每日最新資訊28at.com
biases = [np.array([[1, 2]]), np.array([[3, 4]]),gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[5, 6]])]gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
output = forward_mlp(input_x, weights, biases)gYn28資訊網(wǎng)——每日最新資訊28at.com
self.assertTrue(np.allclose(output, gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[-0.9, -0.9], [-0.9, -0.9]])))gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
def test_get_loss(self):gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
test get_lossgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x = np.array([[1, 2, 3], [4, 5, 6]])gYn28資訊網(wǎng)——每日最新資訊28at.com
weights = [np.array([[1, 2], [3, 4]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[5, 6], [7, 8]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[9, 10], [11, 12]])]gYn28資訊網(wǎng)——每日最新資訊28at.com
biases = [np.array([[1, 2]]), np.array([[3, 4]]),gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[5, 6]])]gYn28資訊網(wǎng)——每日最新資訊28at.com
target = np.array([[1, 1], [1, 1]])gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
loss = get_loss(input_x, weights, biases, target)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
self.assertTrue(np.allclose(loss, 0.5))gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
def test_get_loss_grad(self):gYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
test get_loss_gradgYn28資訊網(wǎng)——每日最新資訊28at.com
"""gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x = np.array([[1, 2, 3], [4, 5, 6]])gYn28資訊網(wǎng)——每日最新資訊28at.com
weights = [np.array([[1, 2], [3, 4]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[5, 6], [7, 8]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[9, 10], [11, 12]])]gYn28資訊網(wǎng)——每日最新資訊28at.com
biases = [np.array([[1, 2]]), np.array([[3, 4]]), gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[5, 6]])]gYn28資訊網(wǎng)——每日最新資訊28at.com
target = np.array([[1, 1], [1, 1]])gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
loss_grad = get_loss_grad(gYn28資訊網(wǎng)——每日最新資訊28at.com
input_x, weights, biases, target)gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
self.assertTrue(gYn28資訊網(wǎng)——每日最新資訊28at.com
np.allclose(loss_grad[0], gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[-0.9, -0.9], [-0.9, -0.9]])))gYn28資訊網(wǎng)——每日最新資訊28at.com
self.assertTrue(gYn28資訊網(wǎng)——每日最新資訊28at.com
np.allclose(loss_grad[1], gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[-0.9, -0.9], [-0.9, -0.9]])))gYn28資訊網(wǎng)——每日最新資訊28at.com
self.assertTrue(gYn28資訊網(wǎng)——每日最新資訊28at.com
np.allclose(loss_grad[2],gYn28資訊網(wǎng)——每日最新資訊28at.com
np.array([[-0.9, -0.9], [-0.9, -0.9]])))gYn28資訊網(wǎng)——每日最新資訊28at.com
gYn28資訊網(wǎng)——每日最新資訊28at.com
# END GENERATED (the final two lines are part of the prompt)gYn28資訊網(wǎng)——每日最新資訊28at.com
if __name__ == "__main__":gYn28資訊網(wǎng)——每日最新資訊28at.com
unittest.main(verbosity=1)gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot的建議雖然并不完美,但確實為測試類提供了合理的思路。不過,如果您嘗試原封不動地運行代碼的話,則不會執(zhí)行任何測試,更不用說通過測試了。gYn28資訊網(wǎng)——每日最新資訊28at.com

輸入數(shù)據(jù)和第一個權(quán)重矩陣之間存在維度不匹配,數(shù)據(jù)類型也是錯誤的(所有數(shù)組都是整數(shù)數(shù)據(jù)類型),而且無法使用Autograd梯度函數(shù)。gYn28資訊網(wǎng)——每日最新資訊28at.com

當然,上面這些問題并不是很難解決,如果用3x2矩陣替換權(quán)重矩陣列表中的第一個條目,那么前向傳播應(yīng)該可以運行。要使得梯度計算測試順利進行,或者需要在np.array定義的數(shù)字上添加小數(shù)點,或者顯式定義數(shù)組數(shù)據(jù)類型。gYn28資訊網(wǎng)——每日最新資訊28at.com

有了這些更改后,測試即可成功執(zhí)行并失敗,但預(yù)期值在數(shù)字表現(xiàn)方面還不正確。gYn28資訊網(wǎng)——每日最新資訊28at.com

任務(wù)3:自動文檔字符串gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot有很大潛力的一項任務(wù)是自動編寫文檔,特別是為已經(jīng)編寫的函數(shù)填寫docstring內(nèi)容。這方面幾乎是比較實用了。gYn28資訊網(wǎng)——每日最新資訊28at.com

對于畢達哥拉斯定理的示例程序,Copilot運行結(jié)果已經(jīng)非常接近,但它將問題描述為查找兩點a和b之間的距離,而不是查找邊長c到邊長a和邊長b的距離。不出所料,隨同Copilot一同發(fā)行的docstring中的示例也與函數(shù)的實際內(nèi)容不匹配:返回的是一個標量,而不是c的值數(shù)組。gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot對前向MLP函數(shù)的docstrings的建議也很接近,但并不完全正確。gYn28資訊網(wǎng)——每日最新資訊28at.com

gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot支持的自動Docstring建議gYn28資訊網(wǎng)——每日最新資訊28at.com

機器能取代我的工作嗎?gYn28資訊網(wǎng)——每日最新資訊28at.com

對于軟件工程師來說,程序合成方面的每一項新進展都可能引發(fā)一次經(jīng)濟恐慌。gYn28資訊網(wǎng)——每日最新資訊28at.com

畢竟,如果計算機程序能像程序員一樣為計算機編程,難道這不意味著機器應(yīng)該“取代我們的工作”嗎?不久的將來會這樣嗎?gYn28資訊網(wǎng)——每日最新資訊28at.com

從表面上看,答案似乎是“還沒有”;但是,這并不意味著隨著這些工具變得更加成熟,軟件工程的本質(zhì)可能會保持不變。在未來,使用復(fù)雜的自動完成工具成功地進行推理可能與使用代碼格式化工具一樣重要。gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot當前正處于測試版試用階段,關(guān)于如何使用它的選項數(shù)量有限。同樣,Codex也可以通過OpenAI在測試版中獲得應(yīng)用程序編程接口。試點項目的使用條款和隱私考慮確實限制了該技術(shù)的潛在使用場景。gYn28資訊網(wǎng)——每日最新資訊28at.com

根據(jù)當前的隱私政策,輸入到這些系統(tǒng)的任何代碼都可以用于微調(diào)模型,并且可以由GitHub/Microsoft或OpenAI的員工進行審查。這就排除了在敏感項目中使用Codex或Copilot的可能性。gYn28資訊網(wǎng)——每日最新資訊28at.com

Copilot確實為其所基于的Codex模型添加了許多實用程序。您可以為所需的代碼編寫框架或大綱(如為unittest框架的測試編寫示例),并將光標移動到大綱的中間,以獲得合理的OK自動完成建議。gYn28資訊網(wǎng)——每日最新資訊28at.com

目前的Copilot,對于任何比簡單的編碼實踐更復(fù)雜的問題,都不太可能建議正確的完整代碼;但是,它通常可以創(chuàng)建一個合理的大綱并節(jié)省一些手工輸入。gYn28資訊網(wǎng)——每日最新資訊28at.com

還應(yīng)該注意的是,Copilot是在云端運行的。這意味著它無法脫機工作,自動完成建議也有點慢。此時,您可以通過按Alt+]組合鍵循環(huán)瀏覽建議,但有時只有少數(shù)幾個建議可供選擇,甚至只有一個建議可供選擇。gYn28資訊網(wǎng)——每日最新資訊28at.com

當Copilot運行良好時——實際上已經(jīng)足夠好了,有點危險。unittest示例中建議的測試和為勾股函數(shù)建議的docstring乍一看是正確的,可能會通過疲憊的軟件工程師的審查。但是,當它們包含神秘的錯誤時,這只會導(dǎo)致以后的痛苦!gYn28資訊網(wǎng)——每日最新資訊28at.com

綜上所述,雖然Copilot/Codex在目前的狀態(tài)下更像是一個玩具或一個學(xué)習(xí)工具,但令人難以置信的是它居然能工作。如果你遇到一只跳著華爾茲舞的熊,我想令你印象深刻的不會是它跳得如何好。同樣,如果你遇到一個智能代碼完成工具,令你印象深刻的不應(yīng)是它寫的代碼如何完美。gYn28資訊網(wǎng)——每日最新資訊28at.com

總之,隨著自動編程NLP模型技術(shù)的進一步發(fā)展,以及人類程序員對使用NLP自動完成工具的大量調(diào)整,很可能在不久的將來會出現(xiàn)程序合成模型的重大殺手級應(yīng)用。gYn28資訊網(wǎng)——每日最新資訊28at.com

譯者介紹gYn28資訊網(wǎng)——每日最新資訊28at.com

朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。早期專注各種微軟技術(shù)(編著成ASP.NET AJX、Cocos 2d-X相關(guān)三本技術(shù)圖書),近十多年投身于開源世界(熟悉流行全棧Web開發(fā)技術(shù)),了解基于OneNet/AliOS+Arduino/ESP32/樹莓派等物聯(lián)網(wǎng)開發(fā)技術(shù)與Scala+Hadoop+Spark+Flink等大數(shù)據(jù)開發(fā)技術(shù)。gYn28資訊網(wǎng)——每日最新資訊28at.com

 gYn28資訊網(wǎng)——每日最新資訊28at.com

原文標題:NLP Models for Writing Code: Program Synthesis,作者:Kevin VugYn28資訊網(wǎng)——每日最新資訊28at.com

鏈接:https://dzone.com/articles/nlp-models-for-writing-code-program-synthesisgYn28資訊網(wǎng)——每日最新資訊28at.com

 gYn28資訊網(wǎng)——每日最新資訊28at.com

 gYn28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.yifxia.cn/showinfo-119-2369-0.html自動編程NLP模型技術(shù)綜述 譯文

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 阿里云發(fā)布云數(shù)據(jù)中心專用處理器CIPU 替代CPU成為新管控加速中心

下一篇: 云計算企業(yè)崛起 甲骨文數(shù)據(jù)庫市場主導(dǎo)地位動搖

標簽:
  • 熱門焦點
Top 国产视频网站在线观看| 美女免费毛片| 日本在线播放一区| 成人高清视频免费观看| 精品视频一区二区三区| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美大片一区| 国产91精品一区二区| 精品国产亚洲一区二区三区| 你懂的国产精品| 美女免费毛片| 精品国产亚洲人成在线| 精品国产香蕉伊思人在线又爽又黄| 99色视频在线| 色综合久久天天综线观看| 精品视频免费观看| 一级女性全黄久久生活片| 亚洲精品永久一区| 欧美激情一区二区三区中文字幕| 成人免费一级纶理片| 韩国毛片| 欧美另类videosbestsex高清| 国产网站在线| 国产极品精频在线观看| 亚洲精品影院一区二区| 成人高清视频免费观看| 欧美日本二区| 精品视频免费观看| 香蕉视频一级| 国产91丝袜在线播放0| 国产网站在线| 亚欧成人乱码一区二区| 欧美18性精品| 亚洲第一页色| 亚洲精品久久久中文字| 999精品在线| 国产精品自拍在线| 四虎论坛| 国产91丝袜高跟系列| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 免费毛片播放| 成人免费高清视频| 亚洲女初尝黑人巨高清在线观看| 美国一区二区三区| 国产伦久视频免费观看 视频| 91麻豆国产| 免费毛片基地| 久久成人综合网| 国产成a人片在线观看视频| 日本特黄一级| 日本特黄特黄aaaaa大片| 精品视频一区二区三区免费| 亚洲精品久久久中文字| 九九免费精品视频| 黄视频网站在线免费观看| 青青青草视频在线观看| 亚飞与亚基在线观看| 色综合久久天天综合绕观看 | 欧美激情一区二区三区在线播放| 日韩在线观看免费| a级毛片免费全部播放| 精品久久久久久中文字幕一区| 国产欧美精品午夜在线播放| 日韩综合| 日本免费乱理伦片在线观看2018| 亚洲第一色在线| 欧美激情一区二区三区在线播放| 可以免费看污视频的网站| 欧美1区| 韩国三级香港三级日本三级| 99久久网站| 亚洲精品影院一区二区| 国产91精品一区二区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲精品久久久中文字| 日韩女人做爰大片| 99热精品一区| 欧美爱色| 欧美激情一区二区三区视频| 国产极品白嫩美女在线观看看| 免费国产一级特黄aa大片在线| 欧美激情中文字幕一区二区| 日日夜夜婷婷| 日本特黄特黄aaaaa大片| 国产网站在线| 精品久久久久久影院免费| 亚洲精品中文字幕久久久久久| 国产一级强片在线观看| 韩国毛片基地| 国产不卡高清| 成人免费网站久久久| 国产网站免费| 一级女性全黄生活片免费| 久久国产影视免费精品| 亚洲天堂免费观看| 香蕉视频亚洲一级| 欧美日本二区| 欧美另类videosbestsex久久| 日韩女人做爰大片| 欧美1区| 免费国产一级特黄aa大片在线| 999精品在线| 99热视热频这里只有精品| 国产一区精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产成人欧美一区二区三区的| 国产网站免费视频| 91麻豆精品国产自产在线观看一区| 日本在线播放一区| 成人a级高清视频在线观看| 韩国毛片| 精品国产一区二区三区免费 | 久久精品成人一区二区三区| 日本在线不卡免费视频一区| 美国一区二区三区| 99色播| 国产成人女人在线视频观看| 91麻豆tv| 日日爽天天| 一级毛片视频免费| 欧美激情一区二区三区中文字幕| 欧美a级片免费看| 久久国产精品只做精品| 99色视频| 韩国毛片免费| 国产成人精品综合| 日韩字幕在线| 九九精品在线| 久久久久久久久综合影视网| 精品国产一区二区三区免费 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 午夜激情视频在线观看| 国产欧美精品| 二级特黄绝大片免费视频大片| 精品国产一区二区三区久久久蜜臀 | 国产一区二区精品久久91| 精品国产一级毛片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产亚洲精品aaa大片| 精品视频在线看| 黄视频网站在线免费观看| 日韩在线观看视频免费| 成人a级高清视频在线观看| 欧美大片aaaa一级毛片| 日日夜夜婷婷| 国产亚洲精品成人a在线| 国产麻豆精品视频| 中文字幕97| 精品久久久久久影院免费| 国产麻豆精品免费密入口| 国产福利免费视频| 日日夜夜婷婷| 午夜激情视频在线观看| 欧美另类videosbestsex高清 | 可以在线看黄的网站| 国产麻豆精品hdvideoss| 国产精品自拍在线观看| 日本在线不卡免费视频一区| 国产麻豆精品视频| 久久久成人影院| 高清一级淫片a级中文字幕| 日韩在线观看免费| 精品视频免费在线| 日本伦理黄色大片在线观看网站| 精品视频在线看| 日本特黄特黄aaaaa大片| 91麻豆精品国产片在线观看 | 日本免费乱理伦片在线观看2018| 国产成人欧美一区二区三区的| 久久精品免视看国产明星| 色综合久久天天综线观看| 日本免费区| 欧美电影免费| 国产国语在线播放视频| 久久精品成人一区二区三区| 人人干人人插| 欧美一级视频免费| 91麻豆爱豆果冻天美星空| 欧美国产日韩精品| 黄色短视频网站| 99久久精品国产国产毛片| 亚洲 激情| 国产一区二区精品尤物| 欧美激情一区二区三区中文字幕| 国产a一级| 成人免费福利片在线观看| 国产a一级| 免费一级片在线观看| 亚洲精品影院| 日韩中文字幕一区二区不卡| 欧美大片毛片aaa免费看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产a视频精品免费观看| 韩国毛片基地| 国产一区二区精品久| 国产视频一区在线| 毛片电影网| 91麻豆精品国产高清在线| 日韩av东京社区男人的天堂|