【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(42)——從代碼-語言模型中恢復(fù)整個AST
今天來講下這篇論文:

本篇涉及到的術(shù)語可能比較難理解一些,特別是對于沒有系統(tǒng)學(xué)過《數(shù)據(jù)結(jié)構(gòu)》的朋友(這也是我不太喜歡講代碼-語言模型相關(guān)論文的原因)

1.黑盒模型與探針
眾所周知,神經(jīng)網(wǎng)絡(luò)是一個黑盒,雖然我們能了解一個神經(jīng)元的運(yùn)行機(jī)理,但是大量神經(jīng)元之間復(fù)雜的交互就不是人的大腦能方便理解的了。但黑盒不代表我們不能對其進(jìn)行研究,至少你能通過看輸入和輸出總結(jié)出不少規(guī)律。除此之外,使用探針程序也是一個很好的方法。
舉個不恰當(dāng)?shù)睦樱僭O(shè)一個黑盒模型是一灘黑水,我們不能直接潛入黑水中查看很多東西,但是我們可以通過釣魚的方式分析水下一些生物的生存情況,探針程序就類似于這樣的功能。
其實探針程序也是基于這樣一個常識:雖然神經(jīng)網(wǎng)絡(luò)內(nèi)部的運(yùn)行原理是神秘的,但輸出一般會變?yōu)槿祟惪勺x的形式(也有些不是,例如輸入一個神經(jīng)網(wǎng)絡(luò)權(quán)值,輸出變換后的權(quán)值這樣有些“邪道”的網(wǎng)絡(luò))。所以我們可以把語言模型的權(quán)值作為輸入,輸出一些我們感興趣的東西。
在上篇論文中提到的“代碼追蹤”能力就可以通過探針程序發(fā)現(xiàn):
前不久一個很有意思(也很難)的論文也是用了探針,名字是《Evidence of Meaning in Language Models Trained on Programs》,因為真的有些不好理解的東西就沒在b站發(fā),感興趣的可以自行知乎上搜。

2.AST
然后就要講這個東西了,其實我覺得即使是學(xué)過《數(shù)據(jù)結(jié)構(gòu)》的朋友也不一定還記得這是個什么東西了,也正常。我大四的時候?qū)W一門課,老師讓我們畫AST,我當(dāng)時一臉懵,百度了一下才知道這玩意原來學(xué)過。
AST,英文是Abstract Syntax Tree(雖然英文中本身就帶有“Tree”了,但是日常使用時一般還是習(xí)慣叫“AST樹”,也許是為了強(qiáng)調(diào)這是一顆樹吧,當(dāng)然這個樹是離散數(shù)學(xué)意義上的樹),中文是抽象語法樹,簡而言之就是把我們平時寫的代碼轉(zhuǎn)換成一種樹的形式,這個樹包含了代碼的結(jié)構(gòu)和語義信息,有利于代碼分析等。實在難以理解的話就當(dāng)做是關(guān)于代碼的一種抽象信息吧。

比較意外的是,ChatGPT竟然可以處理AST,雖然經(jīng)常出問題就是了:


3.從代碼-語言模型中恢復(fù)AST樹
沒錯,這篇論文就是要從代碼-語言模型中用探針探測出整個AST。
我們首先輸入代碼,然后就可以從代碼-語言模型的隱藏向量中用探針程序恢復(fù)AST了。
做法不詳細(xì)展開了,要做的事情還是很多的,包括把AST轉(zhuǎn)換成“嚴(yán)格的”二叉樹再扁平化等。總之,從結(jié)果來看,在當(dāng)時(2022年)最強(qiáng)大的五個代碼-語言模型中都成功恢復(fù)出了AST。
這個發(fā)現(xiàn)說明了比較強(qiáng)的代碼-語言模型確實能夠掌握一些足夠抽象的表示了。
另一個重要發(fā)現(xiàn)是,實驗的大部分模型都是把AST放在模型的中層的。這也符合之前一些研究發(fā)現(xiàn)的規(guī)律:低層做初級表示,中層形成知識,高層決定輸出。

4.結(jié)語
其實對于這篇文章的研究我也是有些疑問的:
(1)說到底,先給輸入然后直接探測的方法總感覺有些奇怪,雖然這方法其實很常見,例如之前寫過的“從腦電波中恢復(fù)圖像”:
【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(21)——離大譜,腦信號還原圖像?
(2)本文是將AST轉(zhuǎn)換后再扁平化處理的,感覺和原先的AST還是不同的
但不管怎么說吧,這確實是一個不錯的研究。
【花師小哲】當(dāng)代煉金術(shù)(神經(jīng)網(wǎng)絡(luò))前沿(42)——從代碼-語言模型中恢復(fù)整個AST的評論 (共 條)
