ChatGPT 魯棒性分析:對抗魯棒與分佈外泛化視角

轉載自 | PaperWeekly

作者 | 胡曦煦

單位 | 香港城市大學

研究方向 | 領域自適應,領域泛化

衆所周知,最近聊天機器人 ChatGPT 吸引了所有人的注意力,一方面人們想要在國內復刻相同的成功,另一方面也有人焦慮於研究範式的轉變,擔憂現在的一些傳統研究方向可能會在大模型的威力下灰飛煙滅。比如最經典的分佈外問題 (Out-of-distribution, OOD) 和與它相接近的對抗魯棒性 (Adversarial Robustness) 問題: 

從這一點出發,我們的工作率先對 ChatGPT 及相關大規模語言模型 (Large Language Model, LLM) 的分佈外泛化性能與對抗魯棒性做了一些評測。

論文標題:

On the Robustness of ChatGPT: An Adversarial and Out-of-distribution Perspective

論文鏈接:

https://arxiv.org/abs/2302.12095

代碼鏈接:

https://github.com/microsoft/robustlearn

原文解讀

對抗魯棒性評測

對抗文本數據集我們主要選擇了 AdvGLUE [1] 和 ANLI [2]。AdvGLUE 是從自然語言理解領域被廣泛使用的基準數據集 GLUE [3] 衍生出來的一個對抗版本,包含五個自然語言理解任務:斯坦福情感樹庫情感分析 (SST2),多種體裁自然語言推理 (MNLI),問題自然語言推理 (QNLI),Quora 問題對 (QQP) 和文本蘊涵識別 (RTE)。

按照任務的不同,模型需要判斷句子的情感是正面負面還是中性;兩個文本之間是否具有蘊含、矛盾或中立關係;以及兩個問題之間是否具有等價、不等價或中性關係。

▲ Photo Credit: AdvGLUE

AdvGLUE 在構建數據集的時候分別從詞彙層面,句子層面和人工構造這三個層面來構造對抗樣本。比如:

從 AdvGLUE 展示的結果來看,僅僅只是添加微小的擾動(甚至這些擾動在我們人類看來微乎其微),就能讓(強大的)語言模型得出錯誤的結果。

那麼,ChatGPT 在這上面表現如何呢?他是否能火眼金睛地識別出這些用來誘導它做出錯誤選擇的擾動?

我們的實驗結論是:它能,但它還不夠好。 

這裏我們選擇了一系列大規模語言模型來作爲對比的參照物:從參數量上億的 DeBERTa、BART 到參數量上十億的 GPT-J,上百億的 T5、OPT 到最後參數量上千億的 BLOOM、GPT3。 

表格展示的是成功攻擊幾率(Attack Success Rate, ASR, 越低說明模型魯棒性越好),從表格中我們可以看到在一衆模型裏,ChatGPT 抵禦對抗擾動的效果一騎絕塵(黑色加粗表示該任務下最低 ASR)。但是面對這些對抗性文本,ChatGPT 還是沒有強大到可以完全不受其影響的程度。

分佈外泛化性評測

接下來我們來看一下 ChatGPT 在分佈外數據上的表現如何。如何選擇代表分佈外泛化的數據集是件不容易的事情,因爲我們無法得知 ChatGPT 在訓練的時候都見過了哪些數據。考慮到 ChatGPT 使用的是 2021 年及以前的數據進行訓練,我們選取了 2022 年發表的兩個新數據集 flipkart 與 ddxplus 對它進行 OOD 性能的檢驗。 

flipkart [4] 是來自 kaggle 的一個商品評論數據集,模型需要判斷該評論的情感色彩是積極、消極還是中性。ddxplus [5] 是 Neurips 2022 Datasets and Benchmarks 賽道釋出的一個自動醫療診斷的數據集,包含合成患者的性別、年齡、初始症狀、問診對話與診斷結果。由於原始數據集過大,無法應測盡測,我們從這兩個數據集中分別隨機抽取了 300 條與 100 條數據進行評測。

結果如圖所示,我們這裏彙報的是 F1 分數(越高說明模型性能越好),可以看到自 GPT2 之後的模型 (text-davinci-002, text-davinci-003, ChatGPT) 在分佈外數據集上都表現良好,領先其他模型一大截,但距離完美的表現還有比較長的路要走。

對抗翻譯任務評測

我們還進一步在翻譯任務上評測了 ChatGPT 對擾動文本的魯棒性。我們從前文中的 AdvGLUE 數據集中隨機抽樣出對抗性英文文本,手動翻譯成中文作爲基準,測試了 finetuned 過的 OPUS-MT-EN-ZH, Trans-OPUS-MT-EN-ZH 與 text-davinci-002, text-davinci-003 和 ChatGPT 在該對抗文本翻譯任務上的效果。

從結果中可以看出,相比前兩個在相關數據集上進行過微調的模型相比,大規模語言模型 text-davinci-002, text-davinci-003 和 ChatGPT 在對抗文本上的零樣本 (zero-shot) 翻譯性能均表現得十分亮眼,翻譯文本對於人類來說非常易讀與合理。

總結

通過上述的評測我們可以看到,以 ChatGPT 爲代表的大規模語言模型 (LLM) 在魯棒性和分佈外泛化性上相較以前的模型確實有很大的提升,但距離接近人類水平的魯棒性和泛化性仍需更多修煉,直接大規模部署進生產環境仍需警惕。如何真正構建可信賴的智能系統,是我們需要持續思考的主題。

論文背後的故事

要該從何說起呢,這跌跌撞撞的第一次。想起那個我們第一次用 CPU 推理模型,總耗時長達 101 個小時的時候,就忍不住笑。 

從誤用 zero-shot 模型到發現 api,到內存爆炸,從只會用單卡到多卡,到提示詞調參師,這背後的故事可以有一大籮筐了。 

那就讓我們從頭講起。

緣起

ChatGPT 是 OpenAI 11 月 30 日發佈的最先進的語言聊天模型,但是在國內漸漸掀起波瀾卻是年後一兩個月的事情了。

▲ ChatGPT

我是一個研究視覺領域模型對抗魯棒性的人,衆所周知,對抗魯棒界只需要一個非常小的肉眼都無法察覺的擾動,就能讓機器做出完全錯誤的預測。

▲ 對抗魯棒的經典例子

看着 ChatGPT 這麼神,我也想找點對抗魯棒性的難題考考它,可惜它不能直接接收圖片,我嘗試了一陣子,還是放棄了。但是轉而就在思考,是不是可以用對抗性文本去檢測它一下?但是由於當時有別的任務在身,所以沒有做過多嘗試,就把這個想法先放下了。

第二天晚上,我的實習導師王老師突然發了郵件,約我們晚上碰頭,講有關 ChatGPT 的事情。一問才知道,原來王老師也產生了跟我一樣的想法,想要測一測 ChatGPT 的對抗魯棒性。王老師比我更進一步,已經幫我們確認了出發的起點:AdvGLUE 數據集,它是機器語言理解領域一個多任務對抗文本基準數據集。它旨在挑戰自然語言處理模型在多個任務上的魯棒性,包括句子分類、自然語言推理和問答等任務。

▲ AdvGLUE 數據集

於是我們就放下手頭其他的任務,第二天各自回去熟悉數據集和模型,準備開始一場酣暢淋漓的戰鬥。

迅速集結

在沒開始實習之前,我在學校裏做的是領域自適應方面的工作,當時懵懵懂懂被師兄師姐帶入門的時候,就是用的王老師組織編寫的代碼庫,一直深受其益。沒想到這一次合作再次體會到了王老師和其他隊友們強大的代碼能力。

我們使用的模型主要來自兩大模型庫,一個是 huggingface,另一個是 OpenAI。我還在磕磕絆絆從零開始摸索的時候,第二天上午王老師和其他隊友已經迅速寫好了各個接口的集成代碼庫了,我只需要在上面修改相應的數據集接口和提示詞,直接調用模型名字就可以。一下子,我們的項目就開了個好頭,接下來的工作就可以在這個代碼庫上高效展開了。

尋找數據集

由於對抗魯棒性部分的數據集已經確定,所以剩下來的難點在於如何尋找分佈外數據集。由於 ChatGPT 使用的訓練數據沒有披露,所以我們無從得知它到底見過哪些數據,唯一可以利用的就是它只見過 2021 年第四季度之前的數據,好吧,那我們就從 2022 年發佈的新數據集中找。

王老師給了我幾個備選項,於是我就逐個去看這些新數據集我們能不能下載,下載之後能不能用。一番篩選之後只剩下了一個 DDXPlus 數據集能下載並且能夠使用,於是我們就用了這個數據集來作爲分佈外魯棒性評測的一部分。

原數據集的原始數據記錄是法語,不會法語的我在閱讀數據集的時候完全就是抓瞎,只有把法語關鍵字在通過數據集附帶的字典轉化爲英文後才能勉強讀懂一二。於是,我下午的任務就是把這個數據集整理成語言模型能夠閱讀的輸入和輸出。

▲ 數據集示例

晚上九點半我們照例碰頭,大家湊在一起聊了聊各自手頭的進度,一起討論了一些未定的問題,就打算把程序跑起來然後休息了。由於隊友們都十分給力,第三天一大早我們就收穫了不少的結果,於是王老師就着手開始寫文章,我們就繼續調試提示詞和實驗,確保萬無一失。第三天就在忙碌的調試和代碼合併中度過了。

如何加速推理?

第四天,我在忙完手上的分佈外數據集之後又接手了一個新活,測試 ANLI 上語言模型的對抗魯棒性,同時陳皓建議我們增加一個對抗魯棒性文本的翻譯任務,於是整體文章的內容又更豐富了。但是此時也遇到一個棘手的問題,對於比較長的文本,載入 CPU 的大模型推理起來太慢了,僅在 DDXPLUS 這一個數據集上,OPT 這個模型的推理總時長都要達到 101 小時,這是我們無法接受的。

原有機器 CPU 的性能不足一下子就顯現出來,但手頭其他的機器都沒有這麼大的 RAM,於是我們半夜又折騰藉機器折騰了好一會,最後終於搞到一臺核數更多更強的機器,勉強跑起來了。

新的問題?

換了新的機器之後,推理時間長的問題就可以通過一晚上的晝夜不停的工作解決了。第五天,我們的實驗結果差不多都完成了,於是開始最後的收尾討論,以及重跑一遍實驗來確保結果的可靠。

這個時候,最大的問題出現了,我們無法原樣還原原來的實驗結果,這意味着之前晝夜戰鬥的一切可能都化爲泡影。所有人都緊張了起來,大家來不及喫午飯就匆匆進了會議開始討論。經過一番緊張的討論之後,我們終於明白是之前我們調用模型的方式出了錯誤,得到的是無意義的結果。

▲ 數據集示例

▲ 正確的調用

於是乎我們再一次開始了模型的重新選擇與重新實驗。由於已經過了一遍流程,代碼也不斷優化了,所以雖然一切都得重來,但整體速度還是很快的。唯一的問題還是出在了幾個大模型上,推理的時間太長了,試錯的代價等不起。該怎麼辦呢?

從單卡到多卡

前面提到過,由於大模型體量太大,我們沒有那麼大顯存的機器,所以我們選擇了將模型載入 CPU 進行推理。在更換了一批模型後,我們發現有一些中等參數量的模型顯卡的顯存也能 hold 得住,用上了 GPU 推理之後速度快如閃電,再也不是之前一兩個小時得漫長等待了。

那麼,更大的模型,能否用多卡將其載入進行推理呢?已經是第五天的深夜,全部的希望都寄託在了陳皓的身上,我們期待着他能解決這個大模型多卡推理的問題。經過一番試探之後,他成功地將 OPT 這個最大的模型分佈式地載入了多張顯卡中。

▲ 多卡推理

這下子,即使是參數量高達 1760 億的模型,我們也不害怕了,因爲我們終於找到了正確打開大模型的方式。

提示詞調參師

第六天的任務就是繼續緊鑼密鼓地完善論文,複覈實驗。我們在覈對實驗的時候發現有幾個模型由於性能不夠強大,無法讀懂我們給出的提示詞,所以給出了不可靠的答案。那這該怎麼辦呢?只能拿掉這個模型,讓論文的內容變得寡淡無味嗎?不,我不願意接受這樣的結果。於是我在處理完手上的事情後,開始靜下心來調提示詞,直到模型能夠正常給出輸出。

▲ 使用的提示詞

再結合代碼邏輯與人工來清洗機器的輸出:

▲ 部分清洗邏輯

終於在最終定稿之前把這幾個模型的實驗結果給更新上去了。至此,終於可以長舒一口氣,但也真切體會到了所謂的人工智能,就是有多少人工,就有多少智能。

提示詞調參師

至此,緊鑼密鼓的戰鬥終於告一段落,接下來的就是不斷地修改潤色,使之更加完美的過程。看着王老師郵件裏寫的 "最後一次碰頭",心裏感慨萬千。既有過去一個星期不分晝夜的拼搏的感慨,也有磕磕絆絆終於越過大山的感慨。但是最爲激動和開心的,是第一次跟上了時代的浪潮,跟時下最出圈的大規模語言模型做了一次交手。近距離了解了它的不足,也訝異於它的強大。爲人工智能的浪潮最終進入千家萬戶做了一些潮頭前的評測。

科技的進步不隨任何個人的意志爲轉移,作爲一個社會計算領域的科研工作者,我們能做的是用我們的所知所學,建立起人類與智能和諧相處的保護傘。希望機器智能能夠發展的越來越好,也希望人類可以乘着機器的東風,站到更高更遠,更自由的未來。

▲ 人與機器智能共同繁榮

參考文獻

[1] https://adversarialglue.github.io/

[2] https://github.com/facebookresearch/anli

[3] https://gluebenchmark.com/

[4] https://www.kaggle.com/datasets/niraliivaghani/flipkart-product-customer-reviews-dataset

[5] https://github.com/bruzwen/ddxplus

****MLNLP 社區是由國內外機器學習與自然語言處理學者聯合構建的民間學術社區,目前已經發展爲國內外知名的機器學習與自然語言處理社區,旨在促進機器學習,自然語言處理學術界、產業界和廣大愛好者之間的進步。

社區可以爲相關從業者的深造、就業及研究等方面提供開放交流平臺。歡迎大家關注和加入我們。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/vVBcQCqac4B8VCQ093kEnQ