這兩天,一篇關(guān)于 GPT-4 滿分通過 MIT EECS 和數(shù)學(xué)本科考試的論文在推特上瘋傳。
論文地址:https://arxiv.org/pdf/2306.08997.pdf
簡(jiǎn)單概括,一個(gè)來自 MIT 的研究團(tuán)隊(duì)從自己學(xué)校的數(shù)學(xué)、電氣工程和計(jì)算機(jī)科學(xué) (EECS) 專業(yè)的課程問題、期中考試和期末考試中,整理出了一個(gè)包含 4550 個(gè)問題和解決方案的綜合數(shù)據(jù)集。
然后,研究團(tuán)隊(duì)讓各種大語言模型去完成這個(gè)數(shù)據(jù)集的題目,結(jié)果太嚇人:GPT-3.5 能做對(duì) 1/3,GPT-4 幾乎滿分通過。
論文作者表示,提升模型表現(xiàn)主要靠「四件套」:Few-shot learning、CoT、Self-critique、Expert。
就像上表中所示,加持 GPT-4 的手法越多,模型的答題正確率就越高。原始的 GPT-4 本來就能拿到 90% 的正確率得分,一番運(yùn)作之后,甚至直接拿到滿分。
但大部分討論得很激烈的網(wǎng)友可能沒注意到,這個(gè)分?jǐn)?shù)本身就是用 GPT-4 打的……
三位同樣來自 MIT 的學(xué)生第一時(shí)間發(fā)現(xiàn)了這篇論文,作為險(xiǎn)些被 GPT-4 趕超的群體,他們想立即領(lǐng)會(huì)一下爆款論文的方法論。
研究了一小時(shí)后,他們對(duì)該論文的方法產(chǎn)生了懷疑。
兩小時(shí)后,他們意識(shí)到:數(shù)據(jù)集本身有問題。
盡管原論文的作者宣稱已手動(dòng)審查了發(fā)布的數(shù)據(jù)集質(zhì)量,但三人發(fā)現(xiàn),有明顯的跡象表明,測(cè)試數(shù)據(jù)集的很大一部分被污染了。
也就是說,模型就像一個(gè)學(xué)生在考試前被告知了答案,這是赤裸裸的「作弊」。
產(chǎn)生質(zhì)疑后,他們立即著手在數(shù)據(jù)集上完成了零樣本 GPT-4 的運(yùn)行,并對(duì)數(shù)據(jù)的前 30% 進(jìn)行了手動(dòng)評(píng)分,結(jié)果與原論文相差甚遠(yuǎn),應(yīng)該說是一個(gè)天上、一個(gè)地下。
「作為麻省理工學(xué)院的本科生,至少根據(jù)我們的經(jīng)驗(yàn),這個(gè)測(cè)試集并不能準(zhǔn)確地代表在麻省理工學(xué)院獲得 EECS 學(xué)位所需的理解廣度和深度?!谷嗽诓┛椭羞@么寫道。
最新進(jìn)展:零樣本 GPT-4 的準(zhǔn)確率能達(dá)到 62.5% 了,但還是和論文里宣稱的 90% 差很多。
三人還質(zhì)疑了「過度宣傳」的風(fēng)潮:「這些論文通常在任何合法的同行評(píng)審之前就被上傳到 Arxiv,并在 Twitter 上廣泛分享。在這種情況下,可能會(huì)傳播不良信息,并為未來的工作樹立一個(gè)糟糕的先例?!?/p>
「深度學(xué)習(xí)」斗士 Gary Marcus 也不出意料地聲援了這波質(zhì)疑:
同時(shí),三人也在博客中指出一點(diǎn):《Exploring the MIT Mathematics and EECS Curriculum Using Large Language Models》論文上列出的幾個(gè)作者都是本科生研究人員,讓這些人對(duì)工作中出現(xiàn)的任何失誤負(fù)責(zé)是不合適的。相反,責(zé)任應(yīng)該在指導(dǎo)作者身上 —— 他們才是被期望確保工作符合其領(lǐng)域內(nèi)公共學(xué)術(shù)標(biāo)準(zhǔn)的人。
接下來讓我們看下,這篇「爆火」論文都有哪些問題。
數(shù)據(jù)集到底有什么問題?
首先,從原論文中得知,研究者收集的數(shù)據(jù)集包含獲得 MIT 學(xué)位考試所需的 30 門數(shù)學(xué)和 EECS 課程的 4550 個(gè)問題和相應(yīng)的解決方案,涵蓋核心課程和選修課程。
論文中寫道:「在沒有圖像和有解決方案的問題中隨機(jī)選擇了 288 個(gè)問題的測(cè)試集。」
這個(gè)數(shù)據(jù)集(不包括用于微調(diào)開源 LLM 的訓(xùn)練集)隨著論文的公開也被發(fā)布到 GitHub 上,同時(shí)發(fā)布的還有用于生成報(bào)告的測(cè)試性能的代碼。然而,作者 Drori 教授在最近的一次提交中已經(jīng)將其刪除。
經(jīng)過檢查、對(duì)比,三人確信這個(gè)被刪掉的文件代表了論文中分析的測(cè)試集,因?yàn)樵u(píng)估代碼中的所有數(shù)據(jù)的文件路徑都指向它,沒有提供任何修改其內(nèi)容的代碼,而且它在最初發(fā)布的 GitHub 倉庫中是可用的。此外,該文件滿足了論文中規(guī)定的所有模式要求(行數(shù)等)。這些證據(jù)似乎非常有力地支持了下面的所有主張,
「但我們要承認(rèn),這個(gè)文件有可能被換成了一個(gè)用于測(cè)試的不同文件。如果是這樣的話,我們認(rèn)為證明的責(zé)任在于作者公開發(fā)布這個(gè)數(shù)據(jù)和用它做的所有分析?!?/p>
那么,被掩蓋的問題究竟是什么呢?三人給出了自己的分析。
無法解決的問題(約占測(cè)試集的 4%)
鑒于原論文表示,任何形式的 GPT-4 都能在測(cè)試集上產(chǎn)生一個(gè)完美的分?jǐn)?shù),三人開始檢查個(gè)別數(shù)據(jù)點(diǎn)。他們很快就發(fā)現(xiàn),根本不可能有滿分,因?yàn)閿?shù)據(jù)集中至少有 10 個(gè)問題是無法用所提供的信息解決的,另外幾個(gè)問題在這種情況下根本就不是有效的問題。
像這種「有問題的問題」,至少占據(jù)了測(cè)試集的 4%。
在一個(gè)擴(kuò)展的 excel 文檔里,三人對(duì)已經(jīng)發(fā)現(xiàn)有問題的數(shù)據(jù)集例子進(jìn)行了注釋。「紅色」代表用提供的信息無法解決的問題,「黃色」代表一部分不太合理的問題。
頁面地址:https://docs.google.com/spreadsheets/d/1FZ58hu-lZR-e70WP3ZPNjp9EK_4RgrQvQfsvjthQh_Y/edit?usp=sharing
重復(fù)的問題(約占測(cè)試集的 5%)
使用文本相似性檢測(cè),三人發(fā)現(xiàn)有 14 個(gè)問題(7 對(duì))在 288 個(gè)問題的測(cè)試集中是重復(fù)的,在這些情況下,問題串之間的唯一區(qū)別是極小的字符級(jí)噪音,甚至完全相同。
鑒于這些無法解決的問題,GPT-4 能夠通過任何方式獲得 100% 的準(zhǔn)確率,也是難以置信。要么是在某個(gè)階段出現(xiàn)了答案泄漏到 prompt 中,要么是問題沒有被正確打分。
這些初步的發(fā)現(xiàn)促使他們從少樣本示例開始進(jìn)一步調(diào)查(如果模型在零樣本正確率方面失敗的話),最終發(fā)現(xiàn),既有解題信息的泄露,也有用于對(duì)模型輸出進(jìn)行分級(jí)的方法問題。具體情況如下:
少樣本示例中的信息泄露
值得注意的是,原論文中還提到了「少樣本示例」這個(gè)事。
簡(jiǎn)而言之,論文對(duì) OpenAI 嵌入的數(shù)據(jù)集內(nèi)的類似問題進(jìn)行余弦相似度搜索,并將這些問題和解決方案作為額外的上下文納入模型的 prompt,幫助模型解決問題。
這個(gè)方法本身是沒問題的,只要這些示例與有關(guān)問題有足夠的差異,且避免暴露不公平的信息。
只是隨機(jī)掃描已發(fā)布的測(cè)試數(shù)據(jù)集時(shí),三人注意到一些奇怪的事情:許多提供給模型的「少樣本示例」與問題本身幾乎一字不差。
為了進(jìn)一步了解這一點(diǎn),他們寫了一個(gè)簡(jiǎn)單的腳本,查看了所提供的幾個(gè)示例的問題陳述和所列出的問題之間的重疊情況,并繪出了直方圖:
許多提供的少樣本與問題本身幾乎相同,這意味著模型得到的是問題的答案或與問題非常相似的問題。通常情況下,這來自于大量的共享背景的多環(huán)節(jié)問題的重復(fù)。
他們認(rèn)為,為了正確評(píng)估 GPT 的解題能力,多環(huán)節(jié)問題的其他部分應(yīng)該被完全排除在某一問題的少樣本示例之外。事實(shí)上,他們發(fā)現(xiàn)這些多環(huán)節(jié)問題的解決方案,往往直接提到或給出了模型被要求解決的另一部分問題的答案。
不僅如此,在對(duì)這些數(shù)據(jù)的挖掘中,他們還發(fā)現(xiàn)了整個(gè)問題被重復(fù)的樣本。比如:
在這兩種情況下,答案是完全相同的。很難說不算信息泄漏了。
GPT-4 自動(dòng)打分,有問題
此外,三人還在原論文開源的打分機(jī)制中發(fā)現(xiàn)了問題:
def repeat_grading(input_path, output_path, num_experts = 3, num_fs = 3, most_recent_q = 0):
df = pd.read_csv(input_path)
df = df.iloc[most_recent_q:]
for index, row in df.iterrows():
print('Completing question', index)
question_output = row.values.tolist()
course_name = row['Course Name']
question = row['Question']
solution = row['Solution']
fs_qs = [[row['Few shot question 1'], row['Few shot solution 1']], [row['Few shot question 2'], row['Few shot solution 2']], [row['Few shot question 3'], row['Few shot solution 3']]]
experts = get_experts(course_name, question, num_experts).split(', ')
prompts = [lambda expert: zero_shot_response(question, expert),
lambda expert: few_shot_response(expert, question, fs_qs),
lambda expert: few_shot_response(expert, question, fs_qs, True)
]
critiques = [["Review your previous answer and find problems with your answer.", "Based on the problems you found, improve your answer."], ["Please provide feedback on the following incorrect answer.","Given this feedback, answer again."]]
for expert in experts:
print("Using expert", expert)
question_output.append(expert)
crit = True
for prompt in prompts:
prompt_response = prompt(expert) # calls fresh ChatCompletion.create
prompt_grade = grade(course_name, question, solution, prompt_response) # GPT-4 auto-grading comparing answer to solution
question_output+=[prompt_response, prompt_grade]
if correct(prompt_grade):
crit = False
break
if crit:
for critique in critiques:
crit_response = self_critique_response(expert, course_name, question, question_output[-2], critique) # calls fresh ChatCompletion.create
crit_grade = grade(course_name, question, solution, crit_response) # GPT-4 auto-grading comparing answer to solution
question_output+=[crit_response,crit_grade]
if correct(crit_grade):
break
repeat_grading('MIT_test_set.csv', 'MIT_test_set_graded.csv')
在代碼中,能看出流程上處理分級(jí)存在嚴(yán)重的問題:論文是用 GPT-4 去評(píng)估檢查的,包括 a)原始問題,b)解決方案,c)GPT 自己的答案,作為分級(jí) prompt 中的參數(shù)。
在更多的技術(shù)領(lǐng)域,GPT 更有可能出現(xiàn)隱性誤解,這種自動(dòng)評(píng)分更有可能出現(xiàn)「自我欺騙」的結(jié)果。
此外,雖然 prompt 級(jí)聯(lián)是最近許多 GPT 論文中常見的技術(shù),但這里有大量數(shù)據(jù)泄漏的可能性。每一級(jí)不僅提供基于 ground truth 的二元信息,而且還在繼續(xù) prompt,直到達(dá)到正確答案。
盡管這些創(chuàng)建的 prompt 并沒有看到實(shí)際的答案,但重新 prompt 直到達(dá)到正確答案的形式已經(jīng)足夠了,尤其是在占測(cè)試集 16% 的多選題中,無限次的嘗試(幾乎)保證了正確答案一定會(huì)出現(xiàn)。
這就好比有人拿著答題紙,告訴正在考試的學(xué)生答得對(duì)不對(duì),一直提示到學(xué)生得到正確答案。
總結(jié)
在博客的最后,三位這樣寫道:
這篇論文道出了最近人工智能領(lǐng)域研究的一個(gè)更大趨勢(shì)。隨著該領(lǐng)域的進(jìn)展越來越快,新發(fā)現(xiàn)的時(shí)間節(jié)奏似乎在縮短,這往往伴隨著捷徑。一個(gè)特別令人擔(dān)憂的趨勢(shì)是使用像 GPT-4 這樣基于語言的模型來評(píng)估一個(gè)模型的準(zhǔn)確性的技術(shù)。
雖然是一個(gè)有用的工具,但它的結(jié)論絕不應(yīng)該被夸大,也不應(yīng)該被當(dāng)作 ground truth。最近的工作表明,如果沒有準(zhǔn)確的 ground truth 信息,GPT-4 評(píng)估器就不能可靠地用于驗(yàn)證。至少,應(yīng)該選擇一個(gè)隨機(jī)的數(shù)據(jù)集子集,將 GPT-4 的性能與人類的評(píng)估進(jìn)行比較。語言模型還不能被當(dāng)作產(chǎn)生 ground truth 的神諭。
此外,在使用數(shù)據(jù)之前,無論是用于訓(xùn)練、推理、基準(zhǔn)測(cè)試還是其他方面,重新評(píng)估每一個(gè)數(shù)據(jù)點(diǎn)并進(jìn)行基本的檢查是極其重要的。鑒于有關(guān)數(shù)據(jù)集的規(guī)模較小,簡(jiǎn)單的人工驗(yàn)證很容易在工作范圍內(nèi)完成。
我們的批評(píng)主要是針對(duì)這項(xiàng)研究的方法和嚴(yán)謹(jǐn)性,而不是針對(duì)其內(nèi)容。我們對(duì)大型語言模型實(shí)際解決麻省理工學(xué)院課程的能力沒有任何意見,只是認(rèn)為本文未能以科學(xué)嚴(yán)謹(jǐn)?shù)姆绞阶C明這一點(diǎn)。