<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SynthID on 海狸大師部落格</title><link>https://blog.yenslife.top/tags/synthid/</link><description>Recent content in SynthID on 海狸大師部落格</description><generator>Hugo -- gohugo.io</generator><language>zh-Hant-TW</language><lastBuildDate>Tue, 22 Sep 2026 11:15:51 +0800</lastBuildDate><atom:link href="https://blog.yenslife.top/tags/synthid/index.xml" rel="self" type="application/rss+xml"/><item><title>SynthID-Text 論文筆記：Scalable watermarking for identifying large language model outputs</title><link>https://blog.yenslife.top/post/synthid-text-paper-note/</link><pubDate>Tue, 22 Sep 2026 11:15:51 +0800</pubDate><guid>https://blog.yenslife.top/post/synthid-text-paper-note/</guid><description>&lt;img src="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament.png" alt="Featured image of post SynthID-Text 論文筆記：Scalable watermarking for identifying large language model outputs" /&gt;&lt;h1 id="scalable-watermarking-for-identifying-large-language-model-outputs"&gt;Scalable watermarking for identifying large language model outputs
&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;text SynthID 原始論文&lt;/li&gt;
&lt;li&gt;Published online: 23 October 2024 發表在 Nature&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;免責聲明&lt;/strong&gt;：這篇是我準備 seminar 報告時整理的個人筆記，主要是幫助自己理解論文，不是嚴謹的論文導讀。內容可能有理解錯誤或不精確的地方，數學推導也是我自己重新推過一遍的版本，如果發現錯誤歡迎在留言區指正。閱讀時建議搭配&lt;a class="link" href="https://www.nature.com/articles/s41586-024-08025-4" target="_blank" rel="noopener"
 &gt;論文原文&lt;/a&gt;一起看。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;LLM 已經可以合成高品質的文字了，這些文字有時候和人類打得很難分辨。這樣的 AI 垃圾充斥在網路上可能會對整個資訊知識體系造成很大的影響。這個時候如果可以朔源 (Provenance) 就太好了，所以浮水印很重要，我們想要知道這段文字的來源到底是什麼，浮水印就是一個好用的工具。不論是文字還是圖片都一樣。&lt;/p&gt;
&lt;p&gt;之所以看 SynthID Image 以及 SynthID Text 是我覺得這兩篇都是 Google 的論文，與其說是論文不如說是一個有學術理論支持的產品，Anthropic 也公告他們的 Model 產生的文字現在都有浮水印加入在裡面(&lt;a class="link" href="https://www.anthropic.com/news/claude-text-watermark" target="_blank" rel="noopener"
 &gt;官方說明&lt;/a&gt;)。或許我可以在這邊找到一些我的碩論的方法，把浮水印作為一種手段來使用。&lt;/p&gt;
&lt;p&gt;SynthID 好用就在於它不會改變 LLM 訓練的流程，只是修改 LLM sample 的過程，道理和 KGW 紅綠 token 應該類似，不過他似乎有做一些增強。為了讓浮水印可以大規模部署，SynthID-Text 採取了可以和 speculative sampling 兼容的策略，speculative sampling 是一種 LLM 推論的加速方法 (預測要出來的 token 的道理)&lt;/p&gt;
&lt;p&gt;作者做實驗發現 SynthID 甚至不會降低原本 LLM 的能力，他們進行了線上實驗，分析了將近 2000 萬筆 Gemini 回覆的使用者反饋，看這個浮水印有沒有辦法維持文字品質 (不過 Gemini 最近的風評似乎不太好，我猜他們又在做實驗了哈)&lt;/p&gt;
&lt;p&gt;這邊他 introduction 的用詞是「identification and attribution of LLM text is critical to ensure safe and responsible use of the technology」，而不是用 Provenance。&lt;/p&gt;
&lt;p&gt;目前要做到這件事有幾種方法&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;retrieval-based approach：保存所有生成文字的紀錄，把檢測文字與這邊的文字作比對。但是會有隱私疑慮，因為要把所有和 LLM 互動的文字都存起來。&lt;/li&gt;
&lt;li&gt;post hoc detection：利用文字本身的統計特徵，或者再額外訓練一個分類器。優勢是不需要保存生成紀錄，缺點是可能要很高的計算成本，且效能不穩定，在 out of domain data 上的表現差 (資料分布外的) 會有高 false positive&lt;/li&gt;
&lt;li&gt;text watermarking：在生成的文字內加入一些肉眼無法分辨的標記，又可以分為三種方法
&lt;ul&gt;
&lt;li&gt;generative watermarking：在生成的過程中加入浮水印&lt;/li&gt;
&lt;li&gt;edit-based watermarking：在生成出來的文字上加浮水印&lt;/li&gt;
&lt;li&gt;data-driven watermarking：修改 LLM 的訓練資料&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Edit-based watermarking 依賴 rule-based 文字轉換，像是同義詞轉換或者插入不可見的 Unicode 字元 (應該就是類似 ascii smuggling 那種方式)&lt;/p&gt;
&lt;p&gt;Data-driven 則是在訓練時會有一個 trigger phrase，當 LLM 看到這個 trigger 才會輸出帶有浮水印的內容，類似植入 watermark 後門的感覺&lt;/p&gt;
&lt;p&gt;所以這邊 SynthID 使用的是 Generative watermarking，因為這邊有一個條件是 Google 希望在大規模的情框也可以精細操作對文字的影響，維持低計算成本。但作者也說不存在完全可靠的文字偵測方法。&lt;/p&gt;
&lt;p&gt;SynthID-text 其實是建立在現有的浮水印元件上的，不過採用了新的 Sampling 方式叫做：Tournament Sampling (競賽式採樣)。SynthID-text 可以設定兩種模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;non-distortionary：以維持文字品質為目標&lt;/li&gt;
&lt;li&gt;distortionary：會破壞文字品質但是更容易偵測出 watermark&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="watermarking-with-synthid-text"&gt;Watermarking with SynthID-Text
&lt;/h2&gt;&lt;p&gt;這邊 x 是一段輸入文字序列，其中包含來自 vocabulary &lt;span class="math math-inline"&gt;$V$&lt;/span&gt; 的 &lt;span class="math math-inline"&gt;$t - 1$&lt;/span&gt; 個 token
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$x_{&amp;lt;t} = x_1, \dots, x_{t-1},$$&lt;/div&gt;&lt;p&gt;
LLM 會根據 &lt;span class="math math-inline"&gt;$x_{&amp;lt;t}$&lt;/span&gt; 來計算下一個字的機率分佈
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$p_{\text{LM}}(\cdot \mid x_{&amp;lt;t}).$$&lt;/div&gt;&lt;p&gt;以上過程如 figure 1 的上半部所示&lt;/p&gt;
&lt;p&gt;&lt;img alt="figure1" class="gallery-image" data-flex-basis="466px" data-flex-grow="194" height="1302" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark_hu_5a4287f8d0e06e5.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark_hu_65952a71426e28bc.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark_hu_2895cbe5a8f82afa.png 2400w, https://blog.yenslife.top/post/synthid-text-paper-note/fig1-generative-watermark.png 2530w" width="2530"&gt;&lt;/p&gt;
&lt;p&gt;這樣的 generative watermark 又可以分成三個元件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;random seed generator&lt;/li&gt;
&lt;li&gt;sampling algorithm&lt;/li&gt;
&lt;li&gt;scoring function&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;figure 1 下半部可以看到，在每一個步驟 &lt;span class="math math-inline"&gt;$t$&lt;/span&gt; ，random seed generator 會產生一個隨機種子 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt;，這個種子可能是根據前面出現的文字 + 一個 key 來產生的。然後 sampling algorithm 會根據 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 以及 &lt;span class="math math-inline"&gt;$P_{LM}(\cdot | x_{&amp;lt;t})$&lt;/span&gt; 來取樣下一個 token。重點就是這個 sampling algorithm 會讓 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 和 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 產生相關性 (correlations)，這樣輸出的文字就是帶有統計訊號的 watermarked text。&lt;/p&gt;
&lt;p&gt;然後這邊採用 sliding window 的方式來取得最近 &lt;span class="math math-inline"&gt;$H$&lt;/span&gt; 個 token 並與 key 進行 hash 得到 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt;。figure 2 上半部可以看到，下面式子則是 &lt;span class="math math-inline"&gt;$H=4$&lt;/span&gt;。不過這邊也不一定要用 sliding window 就是了。到目前為止的 idea 都和 KGW 相同，唯一不同的就是前面提到的 tournament sampling 方法這個等等會提到。&lt;/p&gt;
&lt;div class="math math-block"&gt;$$r_t = \text{Hash}(x_{t-4}, x_{t-3}, x_{t-2}, x_{t-1}, k),$$&lt;/div&gt;&lt;p&gt;&lt;img alt="figure 2 上半部" class="gallery-image" data-flex-basis="708px" data-flex-grow="295" height="728" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator_hu_939942cd49dd54a9.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator_hu_8da926ba318b68ff.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-top-seed-generator.png 2150w" width="2150"&gt;&lt;/p&gt;
&lt;h3 id="synthid-texts-tournament-sampling-approach"&gt;SynthID-Text’s Tournament sampling approach
&lt;/h3&gt;&lt;p&gt;所謂的 Tournament 就是讓候選 token 去競賽，這邊會先定義要用到的 watermark function g 的數量 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt;，figure 2 上半部的右邊可以看到有 &lt;span class="math math-inline"&gt;$m=3$&lt;/span&gt; 個 function &lt;span class="math math-inline"&gt;$g_1$&lt;/span&gt; &lt;span class="math math-inline"&gt;$g_2$&lt;/span&gt; &lt;span class="math math-inline"&gt;$g_3$&lt;/span&gt;，彼此是獨立的 pseudorandom number functions (偽隨機函數)。&lt;/p&gt;
&lt;p&gt;這個 function g 會給一個 score，公式會像這樣 &lt;span class="math math-inline"&gt;$g_{l}(x_t, r_t)$&lt;/span&gt;，在 figure 2 的例子輸出只有 0 或 1。也就是說同一個 token 在不同的 watermark function 可能會得到不同的輸出。function g 出來的分數我接下來都簡稱為 &lt;code&gt;g-score&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;在 figure 2 下半部可以看到比賽流程，這邊會先定義 sample 的候選數量 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt;，從 LLM 的輸出機率中 sample &lt;span class="math math-inline"&gt;$M=2^m$&lt;/span&gt; 個 token 出來，而且同一個 token 可能會被選到多次。像下圖的 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt; 定義為 3，所以會有八個，不過這邊有四組重複的。&lt;span class="math math-inline"&gt;$m=3$&lt;/span&gt; 意味著會經過 3 輪比賽，每一輪取分數高者獲勝，如果同分就隨機選一個，最後那個 token 就會是 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="figure2 下半部" class="gallery-image" data-flex-basis="494px" data-flex-grow="205" height="934" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament_hu_92f240108ec417fc.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament_hu_b8de37d119afc8d9.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig2-bottom-tournament.png 1924w" width="1924"&gt;&lt;/p&gt;
&lt;p&gt;前面作者有提到這套方法可以用在拿不到 LLM 權重的情況，我一開始想說這不還是要拿到機率分佈嗎？後來想到 &lt;code&gt;openai-python&lt;/code&gt; 套件在呼叫的時候有一個參數 &lt;code&gt;n&lt;/code&gt; 可以生成多份獨立的完成結果，不過他也不是逐 token 的，所以&amp;hellip;不太確定怎麼用在完全黑箱的情況下。誒等等，我想到這個有沒有機會做呀，不過這就類似 &lt;a class="link" href="https://arxiv.org/abs/2410.02099" target="_blank" rel="noopener"
 &gt;A Watermark for Black-Box Language Models&lt;/a&gt; 提到的，會有很大量的推論成本。&lt;/p&gt;
&lt;p&gt;&lt;img alt="openai-python 原始碼中 create 參數 n的用途，但還是不能逐個 token 取樣，應該是因為這樣會大幅拖累 server 的 inference 速度" class="gallery-image" data-flex-basis="1318px" data-flex-grow="549" height="344" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param_hu_925a06acf843894b.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param_hu_79c85d33e25e5c97.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/openai-python-n-param.png 1890w" width="1890"&gt;&lt;/p&gt;
&lt;p&gt;不過到這邊也不難發現 SynthID-Text 和 KGW 最大的差異就是在於不需要修改 logits (可以參考下圖我擷取自 KGW 原始論文 algorithm 2 的第四步驟)，KGW 是直接把修改 logits 後的 LLM 輸出當作有浮水印訊號的文字；SynthID 則是去取樣更多文字，然後 g function 數值高的獲勝 (還要贏每一輪)。KGW 這樣改 logits 的方式是很容易影響文字輸出品質的，而 SynthID 則比較不會，這個後面的章節會提到。&lt;/p&gt;
&lt;p&gt;&lt;img alt="擷取自 KGW 原始論文 algorithm 2 的第四步驟可以看到修改 logits 的意思" class="gallery-image" data-flex-basis="551px" data-flex-grow="229" height="654" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/kgw-algorithm2-step4.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/kgw-algorithm2-step4_hu_4f61e67a13717c36.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/kgw-algorithm2-step4.png 1504w" width="1504"&gt;&lt;/p&gt;
&lt;h3 id="watermark-detection"&gt;Watermark detection
&lt;/h3&gt;&lt;p&gt;偵測方式非常簡單，就是去計算這段可疑文字的 &lt;code&gt;g-score&lt;/code&gt; 即可，因為文字的採樣偏好 &lt;code&gt;g-score&lt;/code&gt; 高者，公式如下：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\text{Score}(x) = \frac{1}{mT} \sum_{t=1}^{T} \sum_{\ell=1}^{m} g_\ell(x_t, r_t).$$&lt;/div&gt;&lt;p&gt;這邊 m 是 g function 的數量，T 是 token 數量，其實就是把每一輪的每一個 token 的分數加總後平均。如果 Score 異常高，那表示這段文字極有可能是含有 SynthID-Text 的輸出。&lt;/p&gt;
&lt;p&gt;有兩種會影響浮水印偵測效能的因素，一個是文字的長度，長度越長偵測就越準；另一個因素則是 entropy，就是輸出下一個 token 的確定程度。如果今天 LLM 分部的 entropy 特低，表示模型每一次 sample 幾乎都會拿到一樣的回覆。直覺想一個例子就是我告訴 ChatGPT 給我生成 100 個 a 好了，那他怎麼可能給我生成 b，這 100 個 a 要怎麼去加浮水印？反之，如果要他生成一篇小說，那可能性就非常多樣且長度也很長。這和其他浮水印方法遇到的問題可以說是一模一樣。&lt;/p&gt;
&lt;p&gt;作者提到，LLM 分佈的 entropy 大小有很多因素會影響，越大的模型對自己的輸出就越有自信所以 entropy 會越低，如果有經過 RLHF 也可能降低 entropy，此現象又稱為 mode collapse (在 GAN model 常常用到的詞)，還有前面我提的例子的 prompt 也是、temparature 也是，還有很多。&lt;/p&gt;
&lt;p&gt;如果增加 Tournament layer m 的數量，可以讓每一個 token 提供更多 watermark evidence，同時降低 Score 公式的變異數。不過偵測的能力也不會隨著 layer 提升而無限增加 (直覺理解就是你後面的 layer 能選的多樣性也不多了，已經被前面選過多次了)&lt;/p&gt;
&lt;p&gt;本篇論文測試的 &lt;span class="math math-inline"&gt;$m$&lt;/span&gt; 如果沒有特別講都設定成 &lt;span class="math math-inline"&gt;$30$&lt;/span&gt;。&lt;/p&gt;
&lt;h3 id="preserving-the-quality-of-generative-text"&gt;Preserving the quality of generative text
&lt;/h3&gt;&lt;p&gt;這邊要提到一個詞叫「non-distortionary」，在過去的文獻這個詞有點混淆了，作者把所謂讓文字失真這件事定義成幾種不同的程度，從最弱到最強去分。其中最弱的就是 single-token non-distortionary。定義是當我們對 random seed &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 取平均時，由 watermark sampling algorithm 採樣的分佈，要等於從 &lt;span class="math math-inline"&gt;$P_{LM}(\cdot|x_{&amp;lt;t})$&lt;/span&gt; 取樣的分佈。&lt;/p&gt;
&lt;p&gt;我一開始有點看不懂但我仔細想想他要怎麼驗證這件事就通了，其實就是去產生各種不同的 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 然後把經由這些 &lt;span class="math math-inline"&gt;$r_t$&lt;/span&gt; 的 sampling algorithm 產生的文字去取平均就知道了。&lt;/p&gt;
&lt;p&gt;更強的 non-distortionary 定義就會擴展到更長的 token 而不是 single-token 而已，可能是整個序列之類的。就是從 &lt;span class="math math-inline"&gt;$P(x_t)$&lt;/span&gt; 到要求 &lt;span class="math math-inline"&gt;$P(x_1, x_2, ..., x_t)$&lt;/span&gt; 都要保證和 LLM 的分佈相同。(這點其實就是 &lt;a class="link" href="https://arxiv.org/abs/2410.02099" target="_blank" rel="noopener"
 &gt;A Watermark for Black-Box Language Models&lt;/a&gt; 提到的 distortion-free 的概念)&lt;/p&gt;
&lt;p&gt;至於 SynthID-Text 為什麼可以做到 single-token non-distortionary，在 Supplementary Information Section G.1 有證明，當競賽的候選只有兩個的情況，那就有 single-token non-distortionary 的性質。如果大於兩個那就不可能會 non-distortionary。&lt;/p&gt;
&lt;h4 id="大於-2-不可能-non-distortionary-的證明如下"&gt;大於 2 不可能 non-distortionary 的證明如下：
&lt;/h4&gt;&lt;p&gt;假設 LLM 在只有兩個 token 的 vocabulary &lt;span class="math math-inline"&gt;$V=\{a,b\}$&lt;/span&gt; 中抽樣 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次，&lt;span class="math math-inline"&gt;$a$&lt;/span&gt; 產生的機率為 &lt;span class="math math-inline"&gt;$p$&lt;/span&gt;，&lt;span class="math math-inline"&gt;$b$&lt;/span&gt; 產生的機率為 &lt;span class="math math-inline"&gt;$1-p$&lt;/span&gt;。在 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次抽樣中，&lt;span class="math math-inline"&gt;$a$&lt;/span&gt; 出現的次數 &lt;span class="math math-inline"&gt;$i$&lt;/span&gt; 符合二項式分佈 &lt;span class="math math-inline"&gt;$Binomial(N,p)$&lt;/span&gt;。我們要算的是 &lt;span class="math math-inline"&gt;$a$&lt;/span&gt; 最後被選為 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 的機率 &lt;span class="math math-inline"&gt;$p_{wm}(a)$&lt;/span&gt;，對 &lt;span class="math math-inline"&gt;$r$&lt;/span&gt; 取期望後希望它等於 &lt;span class="math math-inline"&gt;$p$&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;考慮三種情況&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a 被選中 0 次，也就是 &lt;span class="math math-inline"&gt;$(1-p)^N \times 0=0$&lt;/span&gt;。&lt;/li&gt;
&lt;li&gt;a 被選中 N 次，也就是 &lt;span class="math math-inline"&gt;$p^N\times 1=p^N$&lt;/span&gt;。&lt;/li&gt;
&lt;li&gt;a 和 b 都有被選中，就是後面這個二項式分佈的式子，後面就是 g function 的數值，如果平手的話就直接是 &lt;span class="math math-inline"&gt;$\frac{i}{N}$&lt;/span&gt; 因為隨機挑。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;對 r 取期望值&lt;/strong&gt;，因為 &lt;span class="math math-inline"&gt;$p^N$&lt;/span&gt; 和二項式分佈那坨都和 r 沒關係所以可以取出來，等於說是取後面這項的期望值。這邊 &lt;span class="math math-inline"&gt;$C_{f_g}$&lt;/span&gt; 是 Collision probability (碰撞機率或者說平手機率) 的意思，利用指示函數 (Indicator function) 對指示函數取期望值，結果正好等於該事件發生的機率，而 &lt;span class="math math-inline"&gt;$\frac{1-C_{f_g}}{2}$&lt;/span&gt; 就是這樣來的，1 扣掉 &lt;span class="math math-inline"&gt;$C_{f_g}$&lt;/span&gt; 後剩下的就是 &lt;span class="math math-inline"&gt;$P(g_1(a) &amp;gt; g_1(b))&amp;#43;P(g_1(a) &amp;lt; g_1(b))$&lt;/span&gt; 的機率，而雜湊函數的設計就是讓他是公平的，所以這邊可以直接除以二。
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
\mathbb{E}_r \left[ p_{\mathrm{wm}}(a \mid p_{\mathrm{LM}}, r, f_g, N, 1) \right] 
&amp;amp;= \mathbb{E}_r \left[ p^N &amp;#43; \sum_{i=1}^{N-1} \binom{N}{i} p^i (1-p)^{N-i} \left[ \mathbb{1}_{g_1(a, r) &amp;gt; g_1(b, r)} &amp;#43; \mathbb{1}_{g_1(a, r) = g_1(b, r)} \frac{i}{N} \right] \right] \\
&amp;amp;= p^N &amp;#43; \sum_{i=1}^{N-1} \binom{N}{i} p^i (1-p)^{N-i} \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{i}{N} \right]
\end{aligned}$$&lt;/div&gt;&lt;p&gt;
這個期望值的式子展開後會長得像 &lt;span class="math math-inline"&gt;$c_0\cdot p^0 &amp;#43; c_1\cdot p^1 &amp;#43; ...c_N \cdot p^N$&lt;/span&gt; ，而這個東東要恆等 (Identically Equal，在所有可能的變數取值下都成立) 於 &lt;span class="math math-inline"&gt;$p$&lt;/span&gt; (就是 &lt;span class="math math-inline"&gt;$1\cdot p^1$&lt;/span&gt;)，才符合 non-distortionary 的期待。也就是說要成立的話，因為 Polynomial Identity Theorem (多項式恆等定理) 的關係，&lt;span class="math math-inline"&gt;$c_1$&lt;/span&gt; 必須為 1，其他係數都要是 0。只要找出其他係數非 0 那就矛盾&lt;/p&gt;
&lt;p&gt;&lt;span class="math math-inline"&gt;$p^2$&lt;/span&gt; 係數的展開與計算，這邊 &lt;span class="math math-inline"&gt;$N&amp;gt;2$&lt;/span&gt; 且 &lt;span class="math math-inline"&gt;$C_{f_g} \neq 1$&lt;/span&gt; 所以會是非 0，矛盾了。&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned} &amp;amp;\sum_{i=1}^{2} \binom{N}{i} \binom{N-i}{2-i} (-1)^{2-i} \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{i}{N} \right] \\ &amp;amp;= - N(N-1) \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{1}{N} \right] &amp;#43; \frac{N(N-1)}{2} \left[ \frac{1 - C_{f_g}}{2} &amp;#43; C_{f_g} \frac{2}{N} \right] \\ &amp;amp;= \frac{N(N-1)}{4} \left[ C_{f_g} - 1 \right] \end{aligned}$$&lt;/div&gt;&lt;h4 id="當一層是兩個樣本去競賽時必定-non-distortionary-的證明如下"&gt;當一層是兩個樣本去競賽時必定 non-distortionary 的證明如下：
&lt;/h4&gt;&lt;p&gt;這個是 single layer (&lt;span class="math math-inline"&gt;$m=1$&lt;/span&gt;) &lt;span class="math math-inline"&gt;$p_{wm}$&lt;/span&gt; 的定義，分子是「在 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次抽樣中，每一個樣本的分數都小於或等於 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 的機率」減去「在 &lt;span class="math math-inline"&gt;$N$&lt;/span&gt; 次抽樣中，每一個樣本的分數都嚴格小於 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 的機率（代表最高分比 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 還低）。」，兩者相減就是最高分數正好等於 &lt;span class="math math-inline"&gt;$g_1(x_t, r)$&lt;/span&gt; 的機率。分母則是所有和 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 同 g-value 的 token 的機率總和 (包含 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 自己)。&lt;/p&gt;
&lt;div class="math math-block"&gt;$$p_{wm}(x_t \mid p, r, f_g, N, 1) = \begin{cases}
p(x_t) \left( \frac{p(V \le g_1(x_t, r))^N - p(V &amp;lt; g_1(x_t, r))^N}{p(V = g_1(x_t, r))} \right) &amp;amp; \text{if } p(x_t) \neq 0 \\
0 &amp;amp; \text{if } p(x_t) = 0.
\end{cases}$$&lt;/div&gt;&lt;p&gt;
也可以想成下式：&lt;/p&gt;
&lt;div class="math math-block"&gt;$$p_{\mathrm{wm}}(x_t) = \underbrace{\left[ p\left(V^{\le g_1(x_t,r)}\right)^N - p\left(V^{&amp;lt; g_1(x_t,r)}\right)^N \right]}_{\text{最高分恰好等於 } g_1(x_t, r) \text{ 的機率}} \times \underbrace{\frac{p(x_t)}{p\left(V^{= g_1(x_t,r)}\right)}}_{\text{在平手群體中，} x_t \text{ 贏得選取的機率}}$$&lt;/div&gt;&lt;p&gt;將 &lt;span class="math math-inline"&gt;$N=2$&lt;/span&gt; 帶入後可以寫成以下，就是按照原始 LLM 的機率分佈去乘以「Vocabulary 中分數和 &lt;span class="math math-inline"&gt;$x_t$&lt;/span&gt; 剛好相同的機率」+「Vocabulary 中分數大於或小於的機率」，這邊之所以可以直接 &lt;span class="math math-inline"&gt;$2p(V^{g_1(x_t,r)})$&lt;/span&gt; ，這個 2 倍純粹來自代數：&lt;span class="math math-inline"&gt;$\le$&lt;/span&gt; 可以拆成 &lt;span class="math math-inline"&gt;$&amp;lt;$&lt;/span&gt; 和 &lt;span class="math math-inline"&gt;$=$&lt;/span&gt;，所以 &lt;span class="math math-inline"&gt;$A&amp;#43;B = (B &amp;#43; p(V^{=})) &amp;#43; B$&lt;/span&gt; 會多出一倍的 &lt;span class="math math-inline"&gt;$p(V^{&amp;lt;g_1(x_t,r)})$&lt;/span&gt;，這一步還沒用到雜湊函數的性質。機率可以變成指示函數的加總所以有了最後的式子。&lt;/p&gt;
&lt;p&gt;平方差公式：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$ A^2 - B^2 = (A - B)(A &amp;#43; B) $$&lt;/div&gt;&lt;p&gt;然後 &amp;ldquo;&lt;span class="math math-inline"&gt;$\le$&lt;/span&gt;&amp;rdquo; 可以拆成 &amp;ldquo;&lt;span class="math math-inline"&gt;$&amp;lt;$&lt;/span&gt;&amp;rdquo; 和 &amp;ldquo;&lt;span class="math math-inline"&gt;$=$&lt;/span&gt;&amp;rdquo;, &lt;span class="math math-inline"&gt;$A = B &amp;#43; p\left(V^{= g_1(x_t, r)}\right)$&lt;/span&gt;：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$ A - B = p\left(V^{= g_1(x_t, r)}\right), \quad A &amp;#43; B = p\left(V^{= g_1(x_t, r)}\right) &amp;#43; 2p\left(V^{&amp;lt; g_1(x_t, r)}\right) $$&lt;/div&gt;&lt;p&gt;帶回去消掉：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$ p_{\text{wm}}(x_t) = \underbrace{(A - B)}_{p\left(V^{= g_1}\right)} (A &amp;#43; B) \times \frac{p(x_t)}{\underbrace{p\left(V^{= g_1(x_t, r)}\right)}_{\text{cancels}}} = p(x_t) \left[ p\left(V^{= g_1}\right) &amp;#43; 2p\left(V^{&amp;lt; g_1}\right) \right] $$&lt;/div&gt;&lt;p&gt;機率就可以寫成，並還原為 indicator function 的加總：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
p_{\mathrm{wm}}(x_t \mid p, r, f_g, 2, 1) 
&amp;amp;= p(x_t) \left( p(V^{= g_1(x_t, r)}) &amp;#43; 2 p(V^{&amp;lt; g_1(x_t, r)}) \right) \quad \\
&amp;amp;= p(x_t) \left( \sum_{x \in V} p(x) \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} &amp;#43; 2 \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} \right] \right) \quad 
\end{aligned}$$&lt;/div&gt;&lt;p&gt;
然後我們要對 r 取期望值 &lt;span class="math math-inline"&gt;$\mathbb{E}_r[p_{wm}]$&lt;/span&gt;，也就只要算下面這個，可以發現這邊有用到雜湊函數的性質，也就是把 &lt;span class="math math-inline"&gt;$2\mathbb{E}[\mathbb{1}_&amp;lt;]$&lt;/span&gt; 拆成 &lt;span class="math math-inline"&gt;$\mathbb{E}[\mathbb{1}_&amp;lt;] &amp;#43; \mathbb{E}[\mathbb{1}_&amp;gt;]$&lt;/span&gt;：
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
&amp;amp;\mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} \right] &amp;#43; 2 \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} \right] \\
&amp;amp;= \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} \right] &amp;#43; \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} \right] &amp;#43; \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) &amp;gt; g_1(x_t, r)} \right] \quad \text{(by Methods Def 4)} \\
&amp;amp;= \mathbb{E}_r \left[ \mathbb{1}_{g_1(x, r) = g_1(x_t, r)} &amp;#43; \mathbb{1}_{g_1(x, r) &amp;lt; g_1(x_t, r)} &amp;#43; \mathbb{1}_{g_1(x, r) &amp;gt; g_1(x_t, r)} \right] \\
&amp;amp;= \mathbb{E}_r [1] \\
&amp;amp;= 1.
\end{aligned}$$&lt;/div&gt;&lt;p&gt;帶回去，得到了。(multi-layer 也有證明出一樣的結果)
&lt;/p&gt;
&lt;div class="math math-block"&gt;$$\begin{aligned}
\mathbb{E}_r \left[ p_{\mathrm{wm}}(x_t \mid p, r, f_g, 2, 1) \right] 
&amp;amp;= p(x_t) \left( \sum_{x \in V} p(x) \right) \\
&amp;amp;= p(x_t).
\end{aligned}$$&lt;/div&gt;&lt;p&gt;然後 Section G.2 又有詳細描述透過 repeated context masking 的方式來達到 non-distortionary for one or more sequences 性質的證明。就是去避免同一個 context 再次出現時，又套用相同的 watermark bias。這個就留給大家自己去看吧，反正我是相信他了，絕對不是懶得看了。&lt;/p&gt;
&lt;p&gt;這篇文章的 Supplementary Information 根本在寫課本了，從基本的開始講，蠻值得一看，但我有點累了。&lt;/p&gt;
&lt;h3 id="ensuring-computational-scalability"&gt;Ensuring computational scalability
&lt;/h3&gt;&lt;p&gt;因為只要在 sampling layer 做一些改動，所以不會重新執行 LLM 本身，因此附帶的計算成本可以忽略。且這些候選 token 的 g-value 可以平行運算，很適合 vectorization。&lt;/p&gt;
&lt;p&gt;要注意一點就是 production system 通常不是一般的 autoregressive loop，像是 production 可能會利用 speculative sampling 的方式，就是一種利用一個更小更快的 model 去預測 token 讓 LLM 可以更快運算的方法。target LLM 會再去檢查這些預測的 Token，就不用 Target LLM 每次都要浪費時間 forward，多出來的這些預測 token 可以平行運算。&lt;/p&gt;
&lt;p&gt;以下是 speculative sampling 的演算法，這邊 q 是 target LLM，p 是小模型&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;4 ~ 6 行，先讓小模型 draft K 個候選 token&lt;/li&gt;
&lt;li&gt;7 行，大模型把這 K 個 token 一起輸入，就可以平行運算 logits&lt;/li&gt;
&lt;li&gt;8 ~ 15 行，檢查的步驟，對每一個 drafted token &lt;span class="math math-inline"&gt;$\tilde{x_t}$&lt;/span&gt; 抽取隨機均勻數 &lt;span class="math math-inline"&gt;$r \sim U[0,1]$&lt;/span&gt; ，如果 &lt;span class="math math-inline"&gt;$r &amp;lt; min(1, \frac{q(\tilde{x_t})}{p(\tilde{x_t})})$&lt;/span&gt; 就把小模型 q 的 token 納入最後結果。如果不符合就立刻中斷本輪驗證，然後從殘差分佈中重新抽樣正確的 token 替換&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這邊值得注意的是 reject 的情況，就是要避免被拒絕的那個 token 變高，所以才要用這個式子，把兩個機率分佈相減。還有他們比較的方式，是用 target model 機率除以小 LLM 機率，越接近 1 甚至 &amp;gt; 1 就越有可能被接受，所以就是比較大模型和小模型對這個 token 的認同度的概念。然這邊也利用了 Uniform，因為小魔型的機率乘以這個 accept rate 的機率剛好就會是 target LLM 的機率，這麼做才不會讓 sampling 的分佈和 target LLM 不同，才不會影響生成品質，這樣才公平。
&lt;img alt="擷取自 supplement information 的 speculative sampling 演算法 algorithm4" class="gallery-image" data-flex-basis="261px" data-flex-grow="109" height="976" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm4-speculative-sampling.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm4-speculative-sampling_hu_3b5376cd52f6a632.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/algorithm4-speculative-sampling.png 1065w" width="1065"&gt;&lt;/p&gt;
&lt;p&gt;這邊右下角的 + 符號表示「Positive Part Operator / Rectified Unit」，效果就和 ReLU + L1 normalization 相同&lt;/p&gt;
&lt;p&gt;&lt;img alt="definition 34 定義一個 operator" class="gallery-image" data-flex-basis="1068px" data-flex-grow="445" height="166" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/definition34-positive-part-operator.png" width="739"&gt;&lt;/p&gt;
&lt;p&gt;在這之前還沒有人討論過怎麼把 generative watermarking 與 speculative sampling 結合，這是他的貢獻之一。這邊作者提出了兩種 generative watermarking scheme with speculative sampling 演算法，在 supplementary Information Section I.4：&lt;/p&gt;
&lt;h4 id="high-detectability-watermarked-speculative-sampling"&gt;high-detectability watermarked speculative sampling
&lt;/h4&gt;&lt;p&gt;目標是維持 watermark 的可偵測性，可能會降低 speculative sampling 的效率但是不會犧牲浮水印的訊號。這邊演算法 (algorithm5) 就不特別說明了，和 speculative sampling 的方法一樣，只是 target LLM 的機率分佈換成 watermark sampling function 的機率分佈而已。不過會增加成本，因為演算法要求直接算出 &lt;span class="math math-inline"&gt;$p_{wm}$&lt;/span&gt; 以及 &lt;span class="math math-inline"&gt;$q_{wm}$&lt;/span&gt; 的分佈。主要是慢在 reject 的機率高，被 reject 後還要算整個 Vocabulary 的 watermark 分佈。&lt;/p&gt;
&lt;p&gt;&lt;img alt="algorithm5 high-detectability watermarked speculative sampling" class="gallery-image" data-flex-basis="315px" data-flex-grow="131" height="810" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm5-high-detectability.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm5-high-detectability_hu_7f839a29c33e9fca.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/algorithm5-high-detectability.png 1066w" width="1066"&gt;&lt;/p&gt;
&lt;h4 id="fast-watermarked-speculative-sampling"&gt;fast watermarked speculative sampling
&lt;/h4&gt;&lt;p&gt;可以維持 speculative sampling 的效率，但是可偵測性可能下降。針對這個 approach 作者提出了 learned bayesian scoring function，讓偵測端更有效。&lt;/p&gt;
&lt;p&gt;以下演算法可以看到，他不需要算出 &lt;span class="math math-inline"&gt;$p_{wm}$&lt;/span&gt; &lt;span class="math math-inline"&gt;$q_{wm}$&lt;/span&gt; 之類的機率，只要能夠 sample 就好。然後還有雙金鑰的機制，Draft key &lt;span class="math math-inline"&gt;$k^D$&lt;/span&gt; 是小模型用的，Target Key &lt;span class="math math-inline"&gt;$k^T$&lt;/span&gt; 是大模型用的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;4 ~ 6 行，一樣讓小模型產生 K 的 draft token，產生這些 token 時小模型用的是 &lt;span class="math math-inline"&gt;$k^D$&lt;/span&gt;。&lt;/li&gt;
&lt;li&gt;然後大模型開始跑平行運算，算出這 K 個位置未加浮水印的分佈&lt;/li&gt;
&lt;li&gt;然後用跟前面提到一樣的方式去檢查 draft token
&lt;ol&gt;
&lt;li&gt;有通過的話，那就是 accept，不過注意這個 token 保留的是小模型的 key 的 watermark&lt;/li&gt;
&lt;li&gt;沒通過的話，這時候大模型會用 &lt;span class="math math-inline"&gt;$k^T$&lt;/span&gt; 從分佈抽一個 token 補上，然後中斷這回合&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;之所以可以說他是 fast 是因為 algorithm 5 的 10 行比值是 &lt;span class="math math-inline"&gt;$\frac{q_{wm}(\tilde{x_t})}{p_{wm}(\tilde{x_t})}$&lt;/span&gt; 也就是說系統要把這幾萬個 token 都丟回 watermark sampling function 算一遍，但是 algorithm 6 第十行只要算 &lt;span class="math math-inline"&gt;$\frac{q(\tilde{x_t})}{p(\tilde{x_t})}$&lt;/span&gt; 就可以了。和完全沒有浮水印的原始 speculative sampling 一樣快。之所以要用 two key 也是考慮到機率獨立性的問題 (&lt;span class="math math-inline"&gt;$k^D$&lt;/span&gt; 和 &lt;span class="math math-inline"&gt;$k^T$&lt;/span&gt; 互相獨立抽樣)，這樣可以提升 target model 接受 draft model 的 token 機率，因為理論上 p 和 q 會很像，two key 等於說消除了 watermark 的干擾。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Fast watermarked speculative sampling algorithm 6" class="gallery-image" data-flex-basis="248px" data-flex-grow="103" height="1027" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm6-fast-watermarked.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/algorithm6-fast-watermarked_hu_d5c85b3ab2c78366.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/algorithm6-fast-watermarked.png 1062w" width="1062"&gt;&lt;/p&gt;
&lt;h2 id="evaluation"&gt;Evaluation
&lt;/h2&gt;&lt;p&gt;作者做了很多實驗，這邊只挑有趣的講。&lt;/p&gt;
&lt;p&gt;作者比較對象分為兩種，non-distortionary 和 distortionary，前者選擇當時最佳的 Gumbel sampling 後者則選擇 Soft Red List。為了公平比較 (like-for-like comparison)，作者把焦點放在 sampling algorithm 上，其他部分都維持相同 (像是 random seed generator、scoring 之類的)，對所有 baseline 作者使用相同的 sliding window random seed generator，以及相同的 repeated context masking。&lt;/p&gt;
&lt;p&gt;希望驗證 quality (不能影響文字品質) 和 scalability (不能 cost 太高)&lt;/p&gt;
&lt;h3 id="synthid-text-preserves-quality-including-in-a-large-scale--production-system"&gt;SynthID-Text preserves quality including in a large-scale- production system
&lt;/h3&gt;&lt;p&gt;在 gemini 還叫做 bard 的時候，他們就做了線上的測試，把 user query 一半丟給 watermarked sampling 一半丟給沒有 watermark 的，讓使用者透過 UI 上的 👍 和 👎 來評分。結果就是 thumbs-up rate 說差 0.01 (thumbs-down 則是差 0.02)，而且有 2000 萬筆喔，等於說幾乎沒差的意思，至少人類感覺不出來。&lt;/p&gt;
&lt;p&gt;為了提供其他人可以 reproduce 的實驗，作者用 Gemma 7B-IT (IT -&amp;gt; instruction-tuned) 對 300 個 ELI5 (explain like im five 取名來自知名的 Reddit 論壇，有很多複雜且開放式的大哉問) 問題來回答，然後一樣讓人類評分，以 side-by-side comparison 的方式 (應該就是 LM-SYS 那種)，對以下面向進行評分&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;grammaticality / coherence：文法與連貫性&lt;/li&gt;
&lt;li&gt;relevance：相關性&lt;/li&gt;
&lt;li&gt;correctness：正確性&lt;/li&gt;
&lt;li&gt;helpfulness：實用性／幫助程度&lt;/li&gt;
&lt;li&gt;overall quality：整體品質&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;果就是沒有統計上的差異，可以看到 Extended Data Table 1&lt;/p&gt;
&lt;p&gt;&lt;img alt="Extended data table 1" class="gallery-image" data-flex-basis="668px" data-flex-grow="278" height="649" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1_hu_eb22f892f23fa9cd.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1_hu_4576ae7feffc2835.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-table1.png 1808w" width="1808"&gt;&lt;/p&gt;
&lt;p&gt;然後他還有做 perplexity 和 automated benchmark performance，結論就是 non-distortionary SynthID-Text 與 unwatermarked model 都沒有顯著差異。&lt;/p&gt;
&lt;h3 id="synthid-text-provides-better-detectability-than-existing-watermarks"&gt;SynthID-Text provides better detectability than existing watermarks
&lt;/h3&gt;&lt;p&gt;&lt;img alt="figure3 detection performance of SynthID-Text" class="gallery-image" data-flex-basis="417px" data-flex-grow="173" height="979" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance_hu_eedc951637b242d0.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance_hu_9aa6bb92d18c7bf7.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/fig3-detection-performance.png 1702w" width="1702"&gt;
model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gemma 2B-IT&lt;/li&gt;
&lt;li&gt;Gemma 7B-IT&lt;/li&gt;
&lt;li&gt;Mistral 7B-IT
實驗採用 ELI5 資料集，都是一些需要具有解釋性的多句回答，我在想他們的目的是這樣的 prompt 會使輸出 entropy 高的意思。在 figure 3a 是 non-distortionary 的類別，可以看到 SynthID-Text 確實比 Gumbel sampling 的效果好，且可以看到 token 越長確實 TPR 就越高。注意這邊的縱軸是 &lt;span class="math math-inline"&gt;$TPR\ @\ FPR = 1\%$&lt;/span&gt; 也就是在 FPR 最多只能 1% 的情條件下，模型的 TPR 是多少 (可以想成 score 的門檻)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果是在需要非常低 FPR 的場景，可以用 selective prediction mechanism 的方式，就是對那些 scoring function 沒有信心的 sample 直接不做判斷 (abstention)。系統會設定兩個分數門檻&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高門檻 &lt;span class="math math-inline"&gt;$\tau_{positive}$&lt;/span&gt;：根據 unwatermarked text 算出來，高於這個門檻才敢判斷為有 watermark (控制 FPR)&lt;/li&gt;
&lt;li&gt;低門檻 &lt;span class="math math-inline"&gt;$\tau_{negative}$&lt;/span&gt;：根據 watermarked text 算出來，低於這個門檻才敢判斷為無 watermark (控制 FNR)
如果 &lt;span class="math math-inline"&gt;$\tau_{positive} &amp;lt; \tau_{negative}$&lt;/span&gt; 表示目前長度的檢測能力非常好，完全不需要棄權就可以完成要求。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;figure 3b 就是在描述採用 selective prediction mechanism 的情況，縱軸是放棄率，可以看到 token 越多，detector 越不會放棄。&lt;/p&gt;
&lt;p&gt;figure 3c，低 perplexity 和高 TPR 的搭配在左上角，越靠近左上角越好。可以看到 SynthID-Text 與 Soft Red list 的方法相比，模型困惑度更低，表示句子的品質犧牲較少。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Extended data fig4" class="gallery-image" data-flex-basis="466px" data-flex-grow="194" height="1316" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4.png" srcset="https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4_hu_4c9f452e6afc4904.png 800w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4_hu_fb95c3e56fa710fc.png 1600w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4_hu_25f19a90eeba13ff.png 2400w, https://blog.yenslife.top/post/synthid-text-paper-note/extended-data-fig4.png 2558w" width="2558"&gt;&lt;/p&gt;
&lt;p&gt;Extended data fig 4，這邊用的是一個叫 Self-BLUE 的指標，用來衡量文字的多樣性，數值越低表示 diversity 越高。可以看到 SynthID-Text 也是比 Gumbel sampling 的多樣性更高&lt;/p&gt;
&lt;h3 id="synthid-text-has-minimal-computational-impact"&gt;SynthID-Text has minimal computational impact
&lt;/h3&gt;&lt;p&gt;作者指出，Tournament sampling 花費的時間確實可能比 Gumbel 和 Soft Red List sampling 還要久，但是這些時間都還是遠小於 LLM 本身推論的時間，所以對系統整體的影響相較是比較小的。&lt;/p&gt;
&lt;p&gt;這邊作者做了一個實驗是當 Gemma 7B-IT 使用 4 個 v5e TPU 時，原始文字生成速度為 15.527 ms / token，加入 30-layer tournament sampling 後，時間來到 15.615 ms / token。latency 只多了 0.57%。作為比較，Gumbel 增加的 latency 為 0.26%，Soft Red List 則增加 0.28%。可以看到根本就沒什麼差。&lt;/p&gt;
&lt;h2 id="discussion"&gt;Discussion
&lt;/h2&gt;&lt;h3 id="contribution"&gt;Contribution
&lt;/h3&gt;&lt;p&gt;以下是我整理的 Contribution&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We have introduced SynthID-Text, a method for watermarking LLM text.&lt;/li&gt;
&lt;li&gt;SynthID-Text uses certain elements introduced in previous work, but differs in the use of the sampling algorithm, Tournament sampling, which we find provides superior detectability compared with existing methods. 採用了過去研究的部分元素，但多了一個創新 sampling 方法：tournament sampling，這樣的方法優於現有方法的檢測能力。&lt;/li&gt;
&lt;li&gt;SynthID-Text comes with rigorous and customizable non-distortion properties that can be configured to guarantee text quality preservation. SynthID-Text 具有可以客製化的 non-distortionary 特性 (兩個面向，一個是 tournament 每一場有幾個 competitors，如果剛好只有兩個那就是 single-token non-distortionary；另一個面向是 repeated context masking 的 K 值)，可以確保文字品質不受影響&lt;/li&gt;
&lt;li&gt;We have also proposed an algorithm to combine generative watermarking with speculative sampling. 提出 generative watermarking 與 speculative sampling 結合的演算法&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="limitations"&gt;Limitations
&lt;/h3&gt;&lt;p&gt;這種 generative watermark 的優點是跨語言穩定性高，且比 post hoc detector 還要好 (因為不會有遇到沒看過的資料的問題)。比較顯著的限制：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要服務提供商配合，如果不配合的話，那可能要搭配 post hoc detector 來檢驗。也就是說 SynthID-Text 也不是萬能解。&lt;/li&gt;
&lt;li&gt;開源模型通常是去中心化的方式部署，官方無法強制每一個人都帶有浮水印的機制去推論&lt;/li&gt;
&lt;li&gt;浮水印還是可能被竊取 (stealing，透過觀察大量 watermarked output 去推出 watermark 規則)、偽造 (Spoofing)、抹掉 (Scrubbing)&lt;/li&gt;
&lt;li&gt;改寫攻擊 (LLM paraphrasing)：用其他 LLM 來改寫具有浮水印的文字，其實很容易就把 watermark 訊號移除了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;啊我還有想到一個，對我們這樣的 LLM 應用開發者來說，其實我們也拿不到 sampling 的東東，應該說我們也沒辦法對 sampling 的過程做到如 SynthID-Text 這麼細節的操作。所以黑箱 API 的浮水印也是一個值得挑戰的問題。&lt;/p&gt;
&lt;h3 id="conclusion"&gt;Conclusion
&lt;/h3&gt;&lt;p&gt;這篇論文為 SynthID-Text 提供了證據證明 SynthID-Text 在真實世界是有可行性的，據他們所知，這是第一個大規模部署的 Generative text watermark。(但應該也只有 Google 可以做到這種程度XD)&lt;/p&gt;</description></item></channel></rss>