Bootstrap

深入理解GPT底层原理--从n-gram到RNN到LSTM/GRU到Transformer/GPT的进化

从简单的RNN到复杂的LSTM/GRU,再到引入注意力机制,研究者们一直在努力解决序列建模的核心问题。每一步的进展都为下一步的突破奠定了基础,最终孕育出了革命性的Transformer架构和GPT大模型。

1. 从n-gram到循环神经网络(RNN)的诞生

1.1 N-gram 模型

在深度学习兴起之前,处理序列数据主要依靠统计方法,如n-gram模型。

N-gram 是一种基于统计的语言模型,它的核心思想是:一个词出现的概率只与它前面的 n-1 个词有关。

举个例子,假设我们有一个句子:“我喜欢吃苹果”

  • 1-gram (unigram): 只考虑单个词的概率,如 P(苹果)
  • 2-gram (bigram): 考虑相邻两个词,如 P(苹果|吃)
  • 3-gram (trigram): 考虑相邻三个词,如 P(苹果|喜欢吃)

n-gram 模型的工作原理:

  1. 统计训练语料中各种 n-gram 组合出现的次数
  2. 根据统计结果计算条件概率
  3. 预测时,使用这些概率来估计下一个词或整个句子的可能性

优点:

  • 简单直观,计算效率高
  • 在一些简单任务中效果不错

缺点:

  • 无法捕捉长距离依赖
  • 数据稀疏问题:n 越大,出现未见过的组合的概率就越高
  • 没有语义理解,纯粹基于统计

1.2 循环神经网络 (RNN)

RNN 是一种能够处理序列数据的神经网络,它的核心思想是在处理序列的每一步都保持一个"内部状态"。

想象 RNN 是一个处理信息的工人:

  • 他有一个记事本(隐藏状态),记录了之前看到的重要信息
  • 每次他接收新信息时,都会结合记事本上的内容来理解
  • 然后他会更新记事本,并给出一个响应
  • 这个过程不断重复,直到处理完整个序列

优点:

  • 能够处理变长序列
  • 理论上可以捕捉长距离依赖
  • 参数共享,模型更紧凑

缺点:

  • 实际中难以学习很长的依赖关系(梯度消失/爆炸问题)
  • 计算是顺序的,难以并行化

1.3 n-gram到RNN的进化

  • n-gram 是一种"死记硬背"的方法,它只能记住固定长度的词组
  • RNN 更像是"理解"了语言,它可以灵活地处理不同长度的输入,并尝试捕捉更长距离的关系

n-gram 模型简单高效,但缺乏灵活性和对长距离依赖的理解。RNN 引入了"记忆"的概念,使模型能够更好地处理序列数据,但也带来了新的挑战。

这两种方法代表了自然语言处理从纯统计方法到神经网络方法的演进,为后续的深度学习模型(如 LSTM、Transformer 等)铺平了道路。

2. 从RNN到LSTM/GRU

2.1 RNN的问题

简单的RNN存在严重的问题:
a) 梯度消失/爆炸
想象一下,你在玩传话游戏。如果链条很长:

  • 梯度消失就像每个人都小声说话,到最后几乎听不见了
  • 梯度爆炸就像每个人都大声喊叫,到最后变成了刺耳的噪音

在RNN中,这个问题体现为:

  • 长序列中,早期信息对后期的影响会变得极小(消失)或极大(爆炸)
  • 这使得网络难以学习长期依赖关系

b) 长期依赖难以捕捉
RNN理论上可以记住长序列的信息,但实际上:

  • 新信息不断覆盖旧信息
  • 久远的信息很容易被"遗忘"

这就像你试图记住一本长篇小说的所有细节,但到最后可能只记得最近看的几章。

2.2 LSTM (长短期记忆网络)

LSTM通过引入"门"机制来解决上述问题。想象LSTM是一个更智能的记事本系统:

a) 结构
LSTM有三个门:

  • 遗忘门: 决定丢弃哪些信息
  • 输入门: 决定存储哪些新信息
  • 输出门: 决定输出哪些信息

还有一个单元状态(cell state),作为长期记忆。

b) 工作原理

  1. 遗忘门决定从单元状态中删除什么信息
  2. 输入门决定向单元状态添加什么新信息
  3. 更新单元状态
  4. 输出门决定基于单元状态输出什么

c) 如何解决RNN的问题

  • 长期记忆: 单元状态可以长期保存重要信息,不易被新信息覆盖
  • 梯度流动: 门机制允许梯度更容易地流过网络,缓解梯度消失/爆炸问题

2.3 GRU (门控循环单元)

GRU是LSTM的简化版本,性能相当但计算更高效。

a) 结构
GRU只有两个门:

  • 更新门: 决定保留多少旧信息和添加多少新信息
  • 重置门: 决定忽略多少过去的信息

b) 工作原理

  1. 更新门决定保留多少过去的信息和加入多少新信息
  2. 重置门帮助决定如何将新输入与先前的记忆组合
  3. 计算候选隐藏状态
  4. 最终更新隐藏状态

c) 与LSTM的比较

  • 简化结构: 没有单独的单元状态,直接更新隐藏状态
  • fewer参数: 计算更高效
  • 性能: 在许多任务上与LSTM相当

比喻理解:

  • 如果说简单RNN是一个只会机械记录的秘书
  • 那么LSTM就像一个有条理的管理者,懂得取舍、分类和整理信息
  • 而GRU则像一个精简版的管理者,用更少的步骤完成类似的工作

3. 从注意力机制到Transformer的演变

3.1 注意力机制的引入

在注意力机制被引入之前,序列到序列(Seq2Seq)模型通常采用编码器-解码器结构:

  • 编码器读取整个输入序列,将其压缩成一个固定长度的向量
  • 解码器基于这个向量生成输出序列

这种方法的问题是:

  • 信息瓶颈: 所有信息都被压缩到一个固定长度的向量中
  • 长序列困难: 对于很长的序列,难以保留所有重要信息

**注意力机制的核心思想: **

注意力机制的本质是"从关注全部到关注重点"。就像人类在阅读长文本时会自然地聚焦于关键信息一样,注意力机制使得机器学习模型能够在处理大量输入数据时,将计算资源更多地分配给重要的部分。

  1. 人类认知过程的启发

想象你正在翻译一本书:

  • 你不会先读完整本书,把所有内容记在脑子里,然后开始翻译
  • 相反,你会一边读一边译,每翻译一个词或一个句子时,你都会回看原文的相关部分

这就是注意力机制的灵感来源。它模仿了人类处理复杂信息的方式:有选择性地关注最相关的部分。

  1. 权重分配

注意力机制通过分配"权重"来决定关注度:

  • 相关性高的部分获得更高的权重
  • 相关性低的部分获得更低的权重

这就像你在阅读时,重要的内容你会多看几眼,不重要的则可能略过。

  1. 突破长度限制

注意力机制有效地解决了处理长序列的问题:

  • 不再受固定长度向量的限制
  • 理论上可以处理任意长度的输入
  • 长距离依赖可以直接建立,而不需要通过多个时间步传递

3.2 查询-键-值(Query-Key-Value)机制

QKV机制是实现注意力的一种具体方法。这里的Q代表Query(查询),K代表Key(键),V代表Value(值)。

在这个机制中,模型会计算Query和每个Key之间的相似度,然后用这些相似度作为权重来对Value进行加权求和。这样,与Query更相关的内容就会得到更多的"注意力"。

想象你在一个大型图书馆里:

  1. 查询(Query)就像你脑海中的问题或需求。比如,“我想了解人工智能”。

  2. 键(Key)就像每本书的标题或目录。它们是书籍内容的简要概括。

  3. 值(Value)就是书籍的实际内容。

现在,注意力机制的工作方式是:

  1. 你带着你的问题(Query)在图书馆里走动。

  2. 你快速浏览每本书的标题和目录(Key),看看哪些可能与你的问题相关。

  3. 对于看起来相关的书,你会多花些时间翻阅其内容(Value)。

  4. 最后,你综合了所有相关书籍的信息,形成了对你问题的答案。

在这个过程中:

  • "注意力"体现在你对不同书籍投入的时间和精力不同。与你问题相关度高的书,你会更加关注。

  • Query和Key的匹配度决定了你对某本书的关注程度。

  • Value是你最终获取的信息。

在机器学习中:

  1. 系统计算Query和每个Key的相似度。

  2. 用这些相似度作为权重,对所有Value进行加权求和。

  3. 得到的结果就是系统"关注"后的输出。

这种机制允许模型动态地决定要关注输入的哪些部分,从而更好地处理序列数据(如文本或时间序列)。

总的来说,Query-Key-Value机制是实现注意力的一种聪明方法,它模仿了人类有选择性地关注信息的过程。

3.3 自注意力(Self-Attention)的提出

注意力机制和自注意力机制两者都旨在提高模型对重要信息的关注度,但它们在应用场景和工作方式上有着显著的区别。

简单来说:

  • 注意力机制主要用于处理输入和输出序列之间的依赖关系。
  • 自注意力机制则专注于处理序列内部的依赖关系。

让我们深入了解它们的区别:

  1. 应用场景:

    • 注意力机制通常在编码器-解码器结构中使用,作为连接两者的桥梁。例如,在机器翻译任务中,它帮助模型在生成目标语言时关注源语言的相关部分。
    • 自注意力机制可以在同一个模型中多次使用,是网络结构的一个组成部分。它在处理长序列时特别有效,如长文本理解或图像处理。
  2. 工作原理:

    • 注意力机制计算输入序列和输出序列之间的相关性,为输入的不同部分分配不同的权重。
    • 自注意力机制计算序列内部各元素之间的相关性,允许每个元素与序列中的所有其他元素进行交互。
  3. 信息处理方式:

    • 注意力机制像人类大脑一样,在面对大量信息时,能够筛选出最重要的部分进行处理。
    • 自注意力机制更像是序列中的每个元素都在相互"交谈",互相理解彼此的重要性。
  4. 计算复杂度:

    • 注意力机制的计算复杂度通常较低,因为它只在编码器和解码器之间进行一次计算。
    • 自注意力机制的计算复杂度较高,因为它需要计算序列中每个元素与其他所有元素的关系。
  5. 灵活性:

    • 自注意力机制比传统的注意力机制更加灵活,能够捕捉到更复杂的序列内部依赖关系。

3.4 Transformer在自注意力基础上的创新

Transformer在自注意力的基础上引入了几个重要创新:

a) 多头注意力(Multi-Head Attention)

  • 原理:同时从多个角度理解信息
  • 比喻:像是多个专家同时分析同一问题,每个专家关注不同的方面

b) 位置编码(Positional Encoding)

  • 原理:在输入中加入位置信息
  • 比喻:给圆桌会议的每个参与者一个编号,让大家知道谁在哪个位置说话

c) 前馈神经网络(Feed-Forward Neural Network)

  • 原理:在注意力层后增加非线性变换
  • 比喻:像是在每轮讨论后,给每个参与者一些时间来独立思考和总结

注意力机制是基础,自注意力机制是其在单一序列上的扩展,而多头注意力则是将自注意力机制进一步细化和强化。

注意力机制是一种让模型能够集中关注输入数据中重要部分的方法。它模仿了人类在处理大量信息时的选择性注意力,允许模型在处理序列数据时动态地关注输入的不同部分。

自注意力机制是注意力机制的一种特殊形式,专注于处理单个序列内部的关系。在自注意力中,序列中的每个元素都会与其他所有元素进行交互,从而捕捉到序列内部的长距离依赖关系。具体来说,自注意力机制会为序列中的每个元素计算一个"权重",这个权重表示当前元素与其他所有元素之间的关联程度。这样做的好处是能够让模型更好地理解序列中元素之间的复杂关系。

多头注意力机制是在自注意力基础上的进一步优化。它通过并行计算多个不同的注意力分布来增强模型的能力。多头注意力的工作原理是将输入序列分成多个较小的"头",每个头独立计算注意力,然后将结果合并。这种方法有以下几个优点:

  1. 扩展了模型专注于不同位置的能力:每个头可以关注序列的不同方面。

  2. 增强了模型捕捉不同类型依赖关系的能力:不同的头可以学习不同类型的关系。

  3. 提高了模型的表达能力:通过在多个子空间中并行计算注意力,模型能够同时捕获和表示更多样化的信息。

  4. 增加了模型的稳定性:多个头的结果被合并,减少了单一注意力可能带来的偏差。

5. 从Transformer到GPT

5.1 Transformer作为基础

Transformer就像是一个革命性的语言处理引擎,它有几个关键特点:

a) 强大的特征提取能力
Transformer能够捕捉语言中的复杂模式和长距离关系。

比喻:想象Transformer是一个超级阅读专家,它不仅能理解每个句子,还能轻松地连接文章开头和结尾的信息。

b) 并行处理能力
Transformer可以同时处理输入的多个部分。

比喻:这就像是有多个人同时阅读一本书的不同章节,然后快速交换信息,大大提高了阅读效率。

c) 灵活的架构设计
Transformer可以根据需要调整和扩展。

比喻:它就像一套高级乐高积木,可以根据不同任务搭建成各种形状。

d) 自监督学习的"游乐场"
Transformer特别适合进行自监督学习。

比喻:想象Transformer是一个智能游乐场,语言就是游戏。模型在这个游乐场中玩各种语言游戏(如猜词、续写故事),通过玩耍自然而然地学会了语言规律。

5.2 预训练的兴起

预训练的核心思想是让模型在大量数据上学习通用知识,然后再针对特定任务进行调整。这个过程有几个关键点:

a) 通用知识学习
模型在大规模、多样化的数据上学习。

比喻:这就像让一个学生在进入大学之前,先在一个巨大的图书馆中自由阅读各种书籍,建立广泛的知识基础。

b) 无监督学习
预训练通常不需要人工标注的数据。

比喻:这就像学生自主阅读,不需要老师时刻在旁指导。

c) 迁移学习
预训练获得的知识可以应用到多个具体任务中。

比喻:就像一个精通多国语言的人,可以很快适应不同国家的生活。

d) 微调过程
预训练后,模型可以针对特定任务进行小规模调整。

比喻:这就像一个全能运动员,在掌握了基本体能后,可以快速适应不同的运动项目。

5.3 Transformer和预训练的结合

Transformer和预训练的结合,创造了一个强大的AI语言处理系统:

  • Transformer提供了高效学习和处理语言的"大脑"
  • 预训练提供了获取广泛知识的方法

比喻:这就像给了AI一个超级大脑(Transformer)和一个无限的图书馆(大规模数据),让它能够自主学习,快速成长,并适应各种语言任务。

这种结合极大地推动了NLP的发展:

  • 模型可以理解更复杂的语言现象
  • 可以更好地处理新的、未见过的任务
  • 大大减少了对标注数据的需求

比喻:这就像培养出了一个博学多才的语言天才,它不仅知识渊博,而且学习能力超强,可以快速适应各种新的语言挑战。

Transformer和预训练的结合,就像是给了AI一个强大的学习系统和丰富的学习资源。这使得AI在语言处理方面有了质的飞跃,能够更好地理解和生成人类语言,为各种NLP应用打开了新的可能性。

  • 随着预训练模型参数的增加,性能呈现出惊人的提升。
  • 这些大模型展现出了惊人的多任务处理能力。
  • 当模型达到一定规模时,会出现一些意想不到的能力。

5.4 从Transformer到GPT

GPT 是 Transformer 架构的一个特定实现和应用:

  • GPT 使用了 Transformer 的解码器部分。
  • GPT 采用了 Transformer 的核心机制,如自注意力、多头注意力等。
  • GPT 通过大规模预训练和任务特定微调,扩展了 Transformer 的应用范围。

GPT 的核心思想是利用大规模无标注文本数据进行预训练,然后在特定任务上进行微调。主要包括:

a) 无监督预训练:在大量文本数据上训练模型预测下一个词,学习语言的generale表示。

b) 有监督微调:在特定任务的有标签数据上进行微调,适应具体任务。

c) 零样本和少样本学习:通过预训练,模型能够在没有或很少特定任务训练数据的情况下执行任务。

GPT主要工作原理如下:

a) 输入处理:

  • 将输入文本转换为 token 序列。
  • 添加位置编码,提供位置信息。

b) 自注意力机制:

  • 计算输入序列中每个 token 与其他 token 的关系。
  • 使用多头注意力机制捕捉不同类型的依赖关系。

c) 前馈神经网络:

  • 对注意力机制的输出进行非线性变换。

d) 输出层:

  • 使用 softmax 函数计算下一个 token 的概率分布。

e) 训练:

  • 在预训练阶段,使用下一个词预测任务进行训练。
  • 在微调阶段,根据特定任务调整模型参数。

GPT 已经经历了多个版本的演进:

  • GPT-1:首次引入 GPT 架构。
  • GPT-2:增加了模型规模,展示了强大的零样本学习能力。
  • GPT-3:进一步扩大规模,展示了惊人的少样本学习能力。
  • GPT-4:最新版本,具有更强的理解和生成能力。

参考

从感知机到Transformer,一文概述深度学习简史:https://www.jiqizhixin.com/articles/2022-05-24-6
图解NLP模型发展:从RNN到Transformer: https://developer.aliyun.com/article/1229038

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;