type
status
date
slug
summary
tags
category
icon
password
😀
这是一篇2023年1月份发布的文章,文章主要论述了如何给语言大模型增加水印,该论文被评为ICML杰出论文。
 
论文代码

📝 引言

大模型在技术上的应用越来越广泛,但由于其内部参数量巨大,控制极其复杂,有很多毫无逻辑和正确性的文字将被输出“一本正经地胡说八道”,其中包括在社交媒体平台上利用自动机器人的社会工程和选举操纵运动,创造假新闻和网页内容,以及使用人工智能系统来欺骗学术写作和编码任务。
研究目标和标准的制定 关于原文的研究目标是这样的阐述的:
  • The watermark can be algorithmically detected without any knowledge of the model parameters or access to the language model API. This property allows the detection algorithm to be open sourced even when the model is not. This also makes detection cheap and fast because the LLM does not need to be loaded or run.
  • Watermarked text can be generated using a standard language model without re-training.
  • The watermark is detectable from only a contiguous portion of the generated text. This way, the watermark remains detectable when only a slice of the generation is used to create a larger document.
  • The watermark cannot be removed without modifying a significant fraction of the generated tokens.
  • We can compute a rigorous statistical measure of confidence that the watermark has been detected.

模型设计

针对语言模型水印的加注会存在一个难题,这就是向低熵序列加注水印的问题。
语言模型的运行机理:
语言模型的核心是一个词汇表,词汇表中包含被“标记”的各个单词片段,我们称之为令牌(token),典型的词汇表包含50000个以上的单词片段。在语言模型实际运行过程中,前端会输入一段提示语(promote),经过词汇表的处理后我们将提示语根据单词切割成各个片段,并且针对每一个片段给与一个标记,这些令牌按照一定顺序组成的集合(tokens)就是我们解析得到的计算机可识别的提示语序列。
语言模型本质上是一个函数,无论是通过数学公式生成的还是通过神经网络组合的,其本质上都具有特定输入返回特定输出的特性。当我们将先前标记的集合作为输入的时候便得到了回答。 更加详细的内部运行逻辑大概是这样的,模型可以获得前n个标记,那么就可以根据这前n个标记计算出一个向量,这个向量包含了词表中所有单词片段出现的概率信息,那么接下来我们对这样的向量进行softmax操作,该操作就可以将向量中的出现概率最大的单词片段寻找出来,之后采用多项式采样或者是贪婪采样(谁大选谁)以此来确定n+1个单词片段是什么。当然,在确定谁是最有可能出现的单词片段之前有一种技术也可以被使用,那就是波束搜索。 波束搜索:束搜索考虑了多个可能的输出并且会保留前k个输出结果。多波束搜索是束搜索的扩展形式,多波束搜索在束搜索基础上允许同时保留多个束,在每个束上去筛选得到满意解,这样做的目的是提高生成束的多样性,以便于提高生成的字段的多样性。 波束搜索具体的内部运行细节如下: 1、给定一个超参数k,该参数表明每一步保留多少个束。 2、选取每一次预测单词片段概率相对较大的前k个片段。 3、分别选用这k个片段作为已知输入单词片段,预测下一个单词片段。 4、重复2、3的操作直到结束预测。 更便于理解的可视化流程请参考这篇文章。 接下来的操作同理,我们已知了n+1个标记,那么我们便可通过这样n+1个标记将n+2个最有可能的单词片段预测出来,这就是语言模型运行的内部细节。 这种语言模型的运行流程和Transformer相似,可以参考这篇文章,详细了解Transformer的运行机理。
水印注入的方法 目前,水印注入的基本方法是利用红绿列表的差异来进行区分,简单解释就是我们首先根据模型的提示语句得到根据模型生成的可能出现的令牌集合,将这些令牌的集合随机切分成红绿两个列表,并且规定根据模型预测生成的令牌只能是绿色列表中的令牌。然后对某一段生成的文本进行检验,检查这些文本中含有红绿列表中令牌的数目,正常情况下人的输出红绿令牌的比例应该各占1/2,如果是机器生成,则绿色令牌数目显然占比会很大,这就实现了水印的注入。
 
基础水印注入方法 作者对这种水印的注入首先提出了一种基础算法:
notion image
下面我们对这种算法进行分析:
1、首先,使用语言模型根据已知的提示语句生成预测下一个令牌的词概率向量。 2、根据已知提示语句的最后一个令牌,将其用哈希值表示(这里使用哈希值是为了唯一标注这个令牌,因为不同的令牌会有截然不同的哈希值),然后根据令牌的哈希值赋予其一个唯一的随机种子。 3、根据随机种子对词概率向量进行随机拆分,并且保证红绿列表中包含的令牌数一致。 拆分的方法大概是这样的,假设有词概率向量的维度为10000,这就相当于有10000个令牌,当随机种子为0.4的时候,我们就从第4000个词概率进行拆分,选取4000~8999作为红色列表中的令牌,选取9000~10000和1~3999作为绿色列表中的令牌。这样就实现了对词概率向量的随机拆分。 4、接下来在选择预测的令牌中,我们就只能从绿色列表中的令牌去挑选,而不能从红色列表中的令牌去挑选。 5、循环上述1-4步骤,直到生成全部语句。 通过这种方法得到的水印我们显然是可以不依靠模型的运行就可以检测到的,该方法相当于我们给词汇表中的每一个词组都设置了一个哈希值,并且针对每一个哈希值设置了一个随机种子。在循环生成语句的过程中,由于新的令牌的生成只和前一个令牌是什么有关,所以生成的过程是独立的。用一个简单的例子来说明,现在有一个语句“我是一只猫。”,在检验的过程中“我”后面的令牌如果非机器生成,则有一般可能是绿色列表中的令牌,一半可能是红色列表中的令牌,如果是机器生成则只有可能是绿色列表中的令牌。而在检验推进的过程中,“是”令牌下面的令牌是否是机器生成这与“我”这个令牌并没有联系,所以在整体检验过程中,检验模型只需要知道总的词表,每一个令牌的哈希值,每一个哈希值对应的随机种子,就可以对这类水印进行检测。 很显然,自然状态下想要达到输出全为绿色列表中的令牌的概率为,其中T为被检验的句子的总令牌数,就算是一个十几个令牌组成的句子,概率也会由于指数递减变得非常小。 在这里文章是采用了一个假设检验的方法来对水印检验的效果进行评估。文章的原假设是这样设置的: 参考这个文章吧 先不写了
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
Cryptanalytic Extraction of Neural Network ModelsCipher lab NAS 使用教程
Loading...