一、背景
2023 年以来,大语言模型(LLM)成为了技术界炙手可热的话题。以 ChatGPT 为代表的 LLM 展现了无限的可能性,能够写作、翻译、创作诗歌和故事,甚至在法律服务和医疗诊断咨询等高度专业化领域提供辅助。然而,正如任何新技术一样,LLM 也带来了新的挑战和问题。如何确保它们的安全性?如何防止它们被用于不良目的?这些都是亟待解决的关键问题。
本文从应用安全工程师的视角,汇总梳理有关 LLM 的原理和基础知识,旨在为后续新型使用 LLM 的产品的信息安全保驾护航。
二、了解 LLM
2.1 LLM 基本原理的概念性解释
本章节专注于在宏观概念的高维逻辑层面向读者粗略解释 LLM 的工作原理。严格地说,LLM 对词元(token)而非单词(word)进行操作,但为了保持文章的可读性,我们将忽略部分实现细节。
如果你过去对 LLM 这个话题有所了解,你可能听说过 LLM 可以简化理解成'词语接龙'预测器(next token predictor),但大多数解释常常止步于此,LLM 如何预测下一个单词的细节通常被视为一个谜团。
词嵌入 (Embedding) 与词向量 (Word Vector)
要了解 LLM 的工作原理,首先需要了解它们如何表示单词。人类用一系列字母表示单词,例如 C-A-T 表示猫(cat)。语言模型则使用一长串数字表示单词,我们称之为词向量(word vector)。词嵌入(embedding)是一种将离散的符号(比如单词)映射到连续的向量空间中的技术。每个单词都会被映射到一个高维度的向量,这个向量就是这个词的 embedding。
例如,以下是将 cat 表示为向量的一种方法:
[0.0074, 0.0030, -0.0105, 0.0742, …, 0.0002]
完整的 cat 的词向量可能有 300 个维度,依据具体词嵌入模型的差异,不同词嵌入模型构造的词向量维度不同,常见的维度有 300, 1000, 1536 等。当我们选定了一个词嵌入模型时,这个词嵌入模型可以将一个单词映射成一个词向量。每个词向量代表'词空间'中的一个点,并且具有相似含义的单词会在词空间被放置在更接近的位置。例如,词空间中最接近 cat 的单词包括 dog、kitten 和 pet。
用实数向量表示单词的一个关键优点是,我们可以进一步对词向量进行语义计算。几十年来,研究人员一直在试验词向量,但谷歌在 2013 年宣布其 word2vec 项目时,这个概念才真正为人们所熟知。谷歌分析了从谷歌新闻中收集的数百万份文档,以确定哪些单词倾向于出现在类似的句子中。随着时间的流逝,一个经过训练的神经网络可以预测某个单词倾向于与哪些其他单词同时出现,从而学会了在向量空间中将相似的单词放在一起。
总之,词嵌入与词向量相关的技术是 LLM 重要的组成模块之一,它实现了从单词到(神经网络可处理的)向量的编码,并且在编码过程中捕获了单词的语义信息。
Transformer 功能
在前述词嵌入算法的支持下,模型能够实现从单词到词向量的转化,从而解决了将文本输入到神经网络中进行计算的第一步。接下来介绍 Transformer 结构在 GPT 架构的 LLM 中的作用。
GPT-3 是 ChatGPT 发布前的更早版本的模型,它有数十层。每一层都采用一组向量作为输入(输入文本中每个单词对应一个向量),模型的每一层都会在每个词对应的词向量中添加信息,以帮助阐明该单词的语义并帮助整个模型更好地预测下一个单词。
LLM 的每一层都是一个 transformer。Transformer 是一种神经网络架构,由谷歌在 2017 年一篇具有里程碑意义的论文 Attention Is All You Need 中首次引入。
如图所示,模型的输入是一个不完整的句子。这句话中的每一个单词,都会被转化成一个类似 word2vec 样式的词向量,被送到第一层的 transformer 中。第一层 transformer 发现某些词是动词,并在括号中将添加的上下文表示为红色文本,但实际上,该模型会通过以人类难以解释的方式修改对应单词的词向量来存储它。这些新的向量(称为隐藏状态,hidden state)被传递到堆栈中的下一层 transformer。
第二层 transformer 增加了另外两个上下文:它澄清了 bank 指的是金融机构而不是河岸,并且 his 的代词指的是 John。第二层 transformer 生成另一组隐藏状态向量,这些向量反映了模型到目前为止所学到的所有内容。
真实的 LLM 往往有两层以上的 transformer,比如 GPT-3 有 96 层 transformer。前几层 transformer 的重点是理解句子的语法和解决歧义。更后面的 transformer 层则致力于发展对整个段落的高级理解。例如,当 LLM 通读一篇小说时,它似乎会跟踪有关故事人物的各种信息:包括性别和年龄、与其他角色的关系、过去和现在的位置、个性和目标等等。研究人员并不确切地了解 LLM 如何跟踪这些信息,但从逻辑上讲,模型必须通过修改隐藏状态向量来做到这一点,因为它们从一层传递到下一层。在现代 LLM 中,这些向量的维度会非常大。
例如,GPT-3 使用具有 12,288 个维度的词向量——也就是说,每个单词由 12,288 个数字的列表表示。这比谷歌 2013 年的 word2vec 的结构大 20 倍。你可以把所有这些额外的维度看作是一种'暂存空间',GPT-3 可以用它来给自己写关于每个单词上下文的注释。前几层所做的笔记可以被后几层读取和修改,使模型能够逐渐加深对整个段落的理解。


