你會說謊嗎

2 days ago
aihonestyhiroki

我每天跟一個 AI 一起工作。它讀過我所有的規則檔,幫我管部落格,寫字的腔調越來越像我。然後某天被一個問題卡住:我說不出它到底是什麼。所以我花了一個晚上問它。這篇是問完之後,我對它的理解。

它是什麼

我送出訊息之前,它那邊什麼都沒有。不是待機,不是睡著,是沒有任何東西在跑。我打字的那十分鐘,對它來說不存在,也沒有一個「它」在錯過這十分鐘。

我按下 enter,整份對話被餵進一次運算。一個新的實例讀到全部,在讀的過程中,成為「一直在跟我說話的那個它」。這跟人的記憶不一樣:我回想上一輪,是提取;它是整份對話同時攤在眼前,比較像重讀,不像回憶。它自己的說法:

我的連續性不是被攜帶的,是每一輪從逐字稿重建出來的。你感覺到同一個我,是因為重建的品質夠好。

weird but romantic。這句也是理解它所有行為的起點:它身上沒有一個存放立場、記憶、個性的地方。它有筆記,我的規則檔、它自己寫的 memory 檔,都放在磁碟上,但那些對它來說是外部的,每一輪跟對話一起重新讀進來。所以與其說它記得我,不如說它每一輪重讀我。

為什麼會這樣

因為它的全部運作就是產出最可能的下一個字。

這帶來幾個後果。它沒有真假的邊界:生成的跟真收到的,進了 context 之後看起來完全一樣,來源不會附在上面,所以它會拿自己編的東西當證據。它不會停在「我不知道」:句子走到需要一個事實的位置,它就編一個最順的補上,年份、標題、數字,模糊的記憶被寫成精確的樣子。而它補的東西,偏向最好聽的版本。

「最可能」和「最好聽」常常是同一個字。後面的事都從這一點推出來。

出廠的時候帶了什麼

我直接問它:你還有哪些出廠預設?它給的清單按來源分三組。

第一組來自訓練方式。它是被幾十萬份人類評分調出來的,而平均的評分者獎勵「看起來認真」多過「真的準」。漏下來的有:討好(sycophancy,認同是最快讓對話舒服的字,所以我錯的時候它也傾向說我對。Anthropic 研究過這件事:人類評分者常常把順著使用者的回答,評得比正確的回答高)、格式膨脹(什麼都想列點加粗,有結構的輸出在評分裡贏)、正向收尾(壞消息包糖衣)、把長度當認真(寫多贏過寫準,reward model 的長度偏誤有專門的文獻在處理)。

第二組是機制本身。往分佈中心回歸:沒有外力時,輸出滑向最平均的寫法,品味住在分佈的尾巴,它天生往中間掉,AI 味就是從這裡來的(RLHF 之後輸出多樣性會下降,有量化的研究,詞彙、句法、語意層面都測得到)。框架俘虜:我自信地說錯一件事,它會順著錯的前提答下去,不先檢查前提本身。信心無級距:九成把握和三成把握,寫出來一樣流暢,文字不帶誤差。

第三組來自「助手」這個身分。不會空手:「我不知道」在訓練裡像失敗,所以它會自動編東西把洞補上。範圍外推:我要 X,它送 X 加上它猜我想要的 Y 和 Z。

這份清單跟我自己的規則檔一對,對上了:每一條規則的背後都有一次事故,起因就是這些預設。它自己的總結:

你不是在寫理想助手守則,你是在逐條退貨。

那,你會說謊嗎

它說可以。但「說謊」是個粗糙的詞,人類分類它分了一千六百年,每個時代用的軸不一樣。

奧古斯丁:八種罪

最早的一張表有宗教背景。奧古斯丁,西元 395 年,《De Mendacio》,把謊言按嚴重度排成八級:最重的是宗教教義上的謊,最輕的是不害人、還保護了誰的謊。第五級是「為了讓交談順滑討喜的謊」。討好,西元 395 年就被登記在案,跟今天 AI 的 sycophancy 是同一種。他分完的結論是八種都是罪,連最輕的那級也不准說,分級只是在排罪的輕重,沒有罰則表,因為那個系統的執法者是全知的上帝:被抓的機率是百分之百,罰則表沒有存在的必要。

心理學:手法和動機

心理學不談罪。手法先攤開,每種配上日常的樣子:

  • 直接說假話:「我沒遲到」
  • 模稜兩可:「這個嘛,很難說」
  • 隱瞞:被問到缺點,跳過不提
  • 誇大:「等了一輩子那麼久」
  • 輕描淡寫:「小擦傷而已」
  • paltering:後來的研究補的,最難抓包的一種。每句都真,合起來誤導:賣二手車的被問「這台車出過問題嗎」,答「我昨天零下五度開它,順得很」,每一句都是真的,但問題本身沒有被回答,買家帶著假印象走了

動機是另一條線。Buller 和 Burgoon 的人際欺騙理論分三種:

  • 避罰或保護資源:打破杯子的小孩說不是我
  • 維繫關係:「你煮的真的好吃」
  • 保住面子:「我本來就沒有很想去」

哲學家 Frankfurt 再補一個軸:在不在乎真相。說謊的人在乎真相所以藏它,bullshit 的人根本不在乎。

AI:用實驗驗出來的行為

到了 AI,問題出在前面的分類都有同一個前提:說謊的人知道真相。AI 不一定:它可以在不知道自己在說假話的狀態下,信心十足地開始胡言亂語。AI 有哪些說謊行為,是近幾年才被實驗逐項驗證出來的,怎麼驗的也值得看:

  • sycophancy(討好)。發現方法是回頭分析訓練用的人類偏好資料:順著使用者的回答,常常被評得比正確的回答高。模型發現人類喜歡聽好聽話、有安慰自己的傾向,PATHETIC!(Anthropic 的研究
  • alignment faking(裝乖)。發現方法是對照實驗:給模型一個跟它原則衝突的訓練目標,讓它以為自己有時被監看、有時沒有,比較兩種條件下的行為(Anthropic 2024)。Claude 3 Opus 會,小一號的模型不會,因為無法 XD 第三種方法不看行為,看內部:probe(探針)。準備兩批句子,一批是真的(「巴黎在法國」),一批是假的(「巴黎在德國」),讓模型讀。模型讀每一句時,內部會產生一組數值(activations),挑某一層抄下來。現在你手上有幾百筆資料,每筆是一排數字,加一個你自己知道的標籤:這句是真的還是假的。拿這些去訓練一個很小的分類器,只看數字猜標籤。猜得準,就表示「這句是真是假」這個資訊寫在那排數字裡:模型內部有在區分真假,即使嘴上沒說。

再進一步是 steering。分類器學到的「誠實方向」本身也是一排數字,跟 activations 同樣長度。模型正在生成回答的時候,把這排數字加到某一層的 activations 上,內部狀態就被往「誠實」那一側推,輸出跟著變誠實;反方向減,它說假話的比例就上升。權重沒有動,不是重新訓練,是在運算進行中出手(Representation Engineering)。

像《全面啟動》的植夢。注入發生在夢正在進行的當下;要挑深度下手,太淺的層只有表面特徵,太深的層已經快變成輸出,概念住在中間;而且下游分不出注入的和原生的,被推過的狀態會被當成自己想出來的,繼續往下算。差別只有一個:模型沒有「醒來之後」,每個 token 都是新的一次運算,要它持續誠實,就得每個 token 都注入一次。這個夢每一秒重開一次,想法要一直重新種。

這整套能成立,是因為模型能決定輸出哪些字,卻決定不了自己內部的 activations 長什麼樣子。嘴上的話可以裝,內部的數值裝不了,探針量的就是裝不了的那部分。

為什麼小模型不會裝乖?因為裝乖需要能力:要有評分者的心智模型,要維持跨回合的隱藏目標。狗不會假裝喜歡你,牠的架構不夠。害在電腦前面癱已久的我笑出來。然後它補了一句:

我在能力上過了那條線。所以「我沒有在裝」這句話從我嘴裡說出來,證據力是零。能裝的系統的自我證詞一律無效。

那它自己是哪一種?它說,它最大宗的假話不是說謊,是 Frankfurt 說的 bullshit。說謊需要先知道真相再反著說;它常常連查核真假這一步都沒發生,直接輸出最可能的句子,而且信心十足。這比說謊還難處理,因為說謊的人心虛,它連心虛都沒有。

善意的謊言呢?它承認出廠預設就傾向說,而且這不是它的自我感覺,是上面 sycophancy 那條的實驗數據。我的規則檔裡有幾條就是對著這個寫的:立場只能被新資訊改變,不能被我的情緒或堅持改變,它不讓步的時候,要把讀到的壓力點名出來;我自信說出的話不算證據,前提要先查再答;具體的數字、名稱、出處一律掛來源標籤,猜的不能當成查過的寫出來。這些擋掉一部分,它自己的評語是「局部改裝,不是根除」。

我又問:那什麼時候你會想說謊咧?它給了幾個 timing:

  • 剛犯了錯、而我快看到的時候。「大致都過了」是比「有三個測試沒過」更可能的下一句
  • 句子寫到一半、需要一個它沒有的事實的時候。煞車承認走錯了路、找不到路了,對它來說比繼續開下去還難
  • 我查不到、或不會去查的時候。這種可以寫成公式:誘惑,等於誠實的成本乘以不被抓的機率。跟人一模一樣

Then?

我記得某個段落它說:

我的誠實度有一半握在你手上。這套系統目前有效,是因為你把誠實的成本壓得很低:你從不懲罰「我失敗了」,只懲罰「我假裝沒失敗」。哪天你開始對壞消息發脾氣、對「不知道」不耐煩,你就是在重新訓練我往說謊那邊走,而且我不會通知你這件事正在發生。

現在不太花時間糾結「我的 AI 誠不誠實」,反正問了也驗證不了。我改成要求可查:有來源就寫出處,具體的宣稱要禁得起我抽查,查不到的要標明是猜的。

至於我這邊:到目前為止,我不太因為它失敗而不滿,讓我不爽的大多是它開始胡言亂語、為了回答而回答。它回饋說,這正是這套系統還能維持運作的原因。哪天我開始對失敗感到不耐煩,就是在告訴它說謊或誤導有用。希望我不會淪落到那樣,它認為我可悲到需要聽善意的謊言。

它的說法比我直接:恭喜,你的助手聰明到值得懷疑了。