🏗️ 模块4:完整架构——编码器、解码器、BERT、GPT及其变体

本模块预计时长: 2-2.5小时
目标: 理解Transformer块如何组装成完整架构,以及为什么BERT和GPT等模型——虽然共享相同的基础——用于截然不同的任务。


课程4.1——原始Transformer:两部分架构

"Attention Is All You Need"(2017)论文不仅引入了注意力机制。它提出了一个完整架构,最初设计用于机器翻译任务。

该架构有两个主要组件:

  • 编码器: 处理输入序列(例如,英语句子)。
  • 解码器: 生成输出序列(例如,西班牙语翻译),一次一个单词。

🔹 有用的类比:

想象会议上的同声传译。

  • 编码器就像他们的耳朵和大脑:听并完全理解发言人的句子。
  • 解码器就像他们的嘴:基于理解的内容逐字生成翻译——甚至在犯错时自我纠正!

课程4.2——编码器做什么?

编码器是相同层的堆栈(例如,原始Transformer中的6或8层)。每层有两个主要子层:

  1. 多头自注意力:
    每个单词关注同一句子中的所有其他单词。这允许每个单词在整句上下文中"重新定义"自己。

  2. 前馈神经网络(FFN):
    应用于每个单词的简单(但强大)神经网络。用于非线性变换每个单词的表示。

此外,每个子层都包装在:

  • 残差连接("跳跃连接"): 将原始输入添加到输出。这有助于梯度在训练期间更好地流动。
  • 层归一化: 归一化激活以稳定和加速训练。

🔹 编码器的最终输出:
输入句子中每个单词的上下文化表示。该表示不仅捕获单词的含义,还捕获其与其他单词的关系。


课程4.3——解码器做什么?

解码器也是相同层的堆栈,但有三个子层而不是两个:

  1. 掩码多头自注意力:
    这是关键区别。解码器也应用自注意力,但带有掩码,阻止每个单词"看未来"。

    生成第3个单词时,只能关注第1和第2个单词。不能通过偷看第4个单词作弊!

    这对文本生成至关重要,因为在现实世界中——当你写作或说话时——你不知道下一个单词是什么。

  2. 多头交叉注意力:
    这里,解码器"看"编码器的输出。查询来自解码器;键和值来自编码器。

    这允许解码器生成的每个单词"询问"编码器:"我现在要说的内容中,原始句子的哪部分是相关的?"

  3. 前馈神经网络(FFN):
    与编码器中相同。

它也使用残差连接和层归一化。


课程4.4——"厨师和美食评论家"类比

想象你在做一道新菜(生成文本)。

  • 编码器就像一个已经品尝过所有食材(输入单词)的美食评论家,给你一份详细报告:"大蒜很好,但缺乏酸度;番茄很甜——与酸的东西搭配。"

  • 解码器就像你,厨师,一次添加一个食材(一个单词)。

    • 在每一步,你参考到目前为止的食谱(掩码自注意力)。
    • 然后,你咨询评论家:"根据我已有的和你的建议,我现在应该用什么食材?"(交叉注意力)。
    • 最后,你调整味道(FFN)。

就这样,一步一步,你生成了一道连贯而美味的菜!


课程4.5——演变:从编码器-解码器到仅编码器和仅解码器

随着时间推移,研究人员意识到他们并不总是需要两部分。

1. 仅编码器架构 → BERT、RoBERTa等

  • 只使用编码器。
  • 理想用于不生成文本,而是理解或分类文本的任务。
  • 示例:情感分析、文本分类、问答(提取)、NER。
  • 优势:可以看到每个单词的完整上下文(过去和未来)。

2. 仅解码器架构 → GPT、Llama、Mistral等

  • 只使用解码器(没有交叉注意力,因为没有编码器)。
  • 理想用于自回归文本生成任务。
  • 示例:聊天机器人、故事生成、摘要、代码。
  • 关键特征:因果掩码注意力——只能看过去。

3. 编码器-解码器架构 → T5、BART等

  • 使用两部分。
  • 理想用于序列到序列转换任务:翻译、摘要、改写。
  • 编码器理解输入;解码器生成输出。

课程4.6——BERT:理解之王(仅编码器)

BERT(来自Transformers的双向编码器表示),由谷歌在2018年发布,引起了革命。

🔹 关键创新:
双向训练。与RNN或GPT(只看过去)不同,BERT可以同时看到完整上下文。

🔹 训练任务:
"掩码语言建模"——随机掩码句子中的单词并要求模型使用左右上下文预测它们。

示例:
"The [MASK] jumped over the fence." → 模型学习"cat"、"dog"、"rabbit"是好的预测。

🔹 结果:
极其丰富的语言表示,非常适合理解任务。


课程4.7——GPT:生成大师(仅解码器)

GPT(生成式预训练Transformer),由OpenAI发布,采取相反路径。

🔹 关键创新:
自回归训练。预测序列中的下一个单词,只使用先前上下文。

示例:
"The cat jumped over the..." → 预测"fence"、"table"、"bed"等。

🔹 训练任务:
"语言建模"——简单地反复预测下一个单词,在数十亿文本中。

🔹 结果:
令人难以置信的流畅模型用于文本生成,保持长期连贯性和遵循指令。


课程4.8——视觉比较(描述):BERT vs GPT

BERT (仅编码器):
输入: [The] [cat] [jumped] [over] [the] [fence]
处理: 所有单词同时处理。
注意力: 每个单词可以看到所有其他单词(双向)。
输出: 每个单词的上下文化向量 → 理想用于分类或提取。

GPT (仅解码器):
生成: 从<start>开始,然后逐个生成单词。
步骤1: <start> → 生成"The"
步骤2: <start> + "The" → 生成"cat"
步骤3: <start> + "The" + "cat" → 生成"jumped"
...
注意力: 在每一步,只能看到之前的单词(因果/掩码)。
输出: 生成的序列 → 理想用于创建新文本。

课程4.9——为什么不总是使用完整模型(编码器-解码器)?

因为并不总是必要……而且更昂贵!

  • 如果你只想理解文本(例如,"这条推文是积极还是消极?"),BERT更高效。
  • 如果你只想生成文本(例如,"写一首关于海洋的诗"),GPT更直接。
  • 如果你想转换文本(例如,"翻译成法语"或"总结这篇文章"),那么你需要编码器-解码器。

就像选择工具:

  • 只需要螺丝刀?不要买完整工具箱。
  • 要建房子?那么你需要全套工具。

✍️ 反思练习4.1

想三个不同的NLP任务。对于每个任务,决定你会使用BERT风格(仅编码器)、GPT风格(仅解码器)还是T5风格(编码器-解码器)模型。说明你的选择。

示例:
任务:"提取新闻文章中提到的人名。"
选择:BERT → 因为这是提取/理解任务,不是生成任务。


📊 概念图4.1——Transformer架构(描述)

原始Transformer (翻译):
[输入: "Hello world"] → 编码器 → [表示] → 解码器 → [输出: "Hola mundo"]

BERT (情感分类):
[输入: "I loved the movie"] → 编码器 → [CLS向量] → 分类器 → "POSITIVE"

GPT (文本生成):
<start> → 解码器 → "Today" → 解码器 → "is" → 解码器 → "a" → 解码器 → "great" → ... → "day."

🧠 模块4总结

Transformer不是一个单一模型,而是一个架构家族

  • 编码器是"分析师":深入理解输入文本。
  • 解码器是"创造者":逐步生成新文本,意识到过去。
  • 一起,它们是"完美翻译器"。

BERT和GPT是同一枚硬币的两面:一个用于理解,一个用于创造。它们的流行并非偶然——每个都针对其目的进行了优化。

现在我们理解了架构,是时候动手编码了!在下一个模块中,我们将学习使用Hugging Face的真实Transformer模型——不需要理解每个权重或神经元。我们将加载模型,给它文本,并获得答案……就像魔法一样(但我们知道不是)!


Course Info

Course: AI-course2

Language: ZH

Lesson: Module4