Transformer
在人工智能和自然语言处理领域,Transformer架构的出现无疑是一个里程碑式的突破。它不仅推动了GPT(Generative Pre-trained Transformer)等大型语言模型的发展,还彻底改变了我们处理和理解自然语言的方式。
GPT与Transformer
GPT
近几年,人工智能技术领域高潮迭出,给我们引爆了一轮又一轮技术热潮,人工智能界出现的“新顶流”——ChatGPT。ChatGPT是一个由OpenAI公司推出的大型语言模型(large language model, LLM),它能帮助开发人员使用自然语言理解来增强聊天机器人和智能应用程序的功能,可以处理各种任务,如撰写文章、提供建议、回答问题等。
自2022年11月推出后,ChatGPT因其强大的功能爆红,用户数量暴增,仅2个月就达成了用户破亿的目标,成为史上用户最快破亿的应用。而达成这一目标,TikTok用了9个月,这足以说明ChatGPT的受欢迎程度了。
美国在线教育供应商Study.com的一项针对1000名美国学生的调查显示,超过89%的学生使用ChatGPT完成家庭作业,48%的学生用ChatGPT完成小测验,53%的学生用ChatGPT写论文。“ChatGPT风”简直席卷了大、中、小学,让学生党狂喜。但美国已经出台了相关政策,制止学生用人工智能完成作业,未来我们也需要正确引导孩子,让孩子以科学的方式接触这些先进的技术。
GPT
- G: Generative
- P: Pre-trained
- T: Transformer
GPT 是一种基于Transformer架构的大型语言模型。自2018年首次亮相以来,GPT系列模型在自然语言处理领域掀起了一场革命。它们展现出了前所未有的语言理解和生成能力,能够完成从文本续写到问答、翻译等各种复杂任务。
Transformer: GPT的核心引擎
Transformer是GPT背后的核心架构,最初由Google团队在2017年的论文《Attention Is All You Need》中提出。
《Attention Is All You Need》不仅引入了 Transformer 模型,还证明了仅依靠注意力机制就能构建高效的序列转换模型。这篇论文的主要贡献包括:
- 提出了自注意力(Self-Attention)机制,使模型能够捕捉序列内部的长距离依赖关系。
- 引入了多头注意力(Multi-Head Attention),增强了模型的表达能力。
- 设计了位置编码(Positional Encoding),解决了序列顺序信息的问题。
- 证明了在没有循环或卷积的情况下,纯注意力模型可以达到最先进的性能。
Transformer 之所以叫做 “Transformer”,是因为它擅长于“变换”信息。这里的“变换”指的是模型能够捕捉和理解数据中的复杂关系。例如,在处理文本时,Transformer 可以识别出哪些词或短语之间有重要的联系,即使它们在句子中相隔很远。
它的核心技术是注意力机制,这使得模型可以“注意”到输入数据中最重要的部分。比如在阅读一句话时,模型会学会专注于那些关键词,就像我们在阅读时会特别关注某些重要的信息一样。与传统的循环神经网络(RNN)不同,Transformer完全基于注意力机制,摒弃了递归结构,这使得它能够更好地处理长距离依赖,并且支持并行计算,大大提高了训练效率。
所以,Transformer 的名字来源于它的这种能力,它能够根据数据的重要性变换自己的焦点,从而更好地理解和处理信息。
Transformer 的工作原理简述
Transformer 模型的主要目标是根据给定的输入序列预测下一个可能的单词或标记。这个过程可以概括为以下步骤:
- 输入处理:将输入文本分割成标记(通常是单词或子词)。
- 标记嵌入:将每个标记转换为高维向量表示。
- 位置编码:为每个标记添加位置信息。
- 注意力计算:使用自注意力机制处理输入序列。
- 前馈网络:进一步处理注意力层的输出。
- 输出层:生成下一个标记的概率分布。
例如,给定输入序列 “The cat sat on the”,模型会尝试预测下一个最可能的单词,如 “mat”。
这个过程看似简单,但其中蕴含了复杂的数学原理和巧妙的设计思想。接下来,我们将深入探讨Transformer的核心组件,特别是注意力机制,以及它如何实现对语言的深度理解。
在深入探讨Transformer的内部结构之前,我们需要了解模型是如何处理和标准化输入数据的。
Embedding
在深入了解 Transformer 的工作原理之前,我们需要先理解 embedding 这个关键概念。
什么是 Embedding ?
神经网络,基本上基于数字的,因此,如果要用它来处理像文本这样的东西,我们需要一种用数表示文本的方法使得计算机能够以数学的方式处理语言。
我们可以从为字典中的每个词分配一个数开始,例如分配给 cat 的可能是3542。
Embedding,中文常译为"嵌入"或"向量表示",是一种将离散的对象(如单词)映射到连续向量空间的技术。简单来说,就是将人类可以理解的信息转换为计算机可以处理的数值形式。
举个例子,假设我们有一个词汇表:{“猫”, “狗”, “鱼”}。我们可以用一个3维的向量来表示每个词:
- 猫 -> [1, 0, 0]
- 狗 -> [0, 1, 0]
- 鱼 -> [0, 0, 1]
这就是一种最简单的Embedding方式, 被称为One-hot编码。但在实际应用中,我们通常会使用更高维度、更密集的向量来表示词语,以捕捉更丰富的语义信息。
例如,我们可以将"猫"这个词表示为一个300维的向量:
[0.2, -0.4, 0.7, …, 0.1]
这个向量的每一个维度都可能代表某种语义特征,虽然我们可能无法准确解释每个维度的具体含义,但整体上这个向量能够捕捉到"猫"这个词的语义信息。
Embedding 的特性
Embedding的一个重要特性是它能够在向量空间中反映词与词之间的语义关系。在高维空间中,语义相近的词往往会聚集在一起。这种分布使得模型能够理解词与词之间的关系。具有相似含义或经常在相似上下文中出现的词,在embedding空间中往往会彼此靠近。例如:
- "猫"和"狗"的词向量可能会很接近,因为它们都是常见的宠物。而"猫"和"汽车"的词向量则可能相距较远。
- "国王"和"王后"的词向量之间的关系可能类似于"男人"和"女人"之间的关系。
- "Apple"这个词的向量可能会在"水果"和"科技公司"的向量之间,因为它有多重含义。
这种语义关系的表示使得模型能够更好地理解和处理自然语言。
Tokenization
在进行embedding之前,我们需要先将文本分割成更小的单位,这个过程称为 tokenization,中文即词元化。根据不同的策略,我们可以将文本分割成单词、子词或者字符级别的 token。
对于同一句子"I love machine learning",tokenization 的不同方式:
-
character-level tokenization
- [“I”, " ", “l”, “o”, “v”, “e”, " ", “m”, “a”, “c”, “h”, “i”, “n”, “e”, " ", “l”, “e”, “a”, “r”, “n”, “i”, “n”, “g”]
-
word-level tokenization
- [“I”, “love”, “machine”, “learning”]
-
subword-level tokenization
- [“I”, “love”, “machine”, “learn”, “ing”]
我们先讨论两种极端情况:word-level tokenization 和 character-level tokenization
character-level tokenization
最简单的词元化方案是按每个字符单独馈送到模型中。我们的模型希望把每个字符转换为一个整数,有时这个过程被称为数值化(numericalization)。一个简单的方法是用一个唯一的整数来编码每个唯一的 token(在这里为字符)。
最终得到了一个包括了每个字符到一个唯一性整数的映射,即词元分析器的词表。
但 character-level tokenization 存在明显的劣势:
- 序列长度增加: character-level tokenization 会显著增加输入序列的长度。例如,“machine learning” 这个词组用单词级分词只有 2 个token,但用字符级分词则有16 个 token(包括空格)。这会导致以下问题:
- 计算复杂度增加:在使用 Transformer 的模型中,计算