详细摘要 摘要

生成:2025-05-15 22:40

摘要详情

音频文件
Stanford CS224N NLP with Deep Learning | 2023 | Lecture 9 - Pretraining
摘要类型
详细摘要
LLM 提供商
openai
LLM 模型
gemini-2.5-pro-exp-03-25
已创建
2025-05-15 22:40:22

概览/核心摘要 (Executive Summary)

本讲座深入探讨了自然语言处理(NLP)中“预训练”的核心概念、方法及其对现代NLP发展的革命性影响。首先,讲座阐述了子词建模(Subword Modeling)的必要性,以解决传统词汇表在处理未登录词(UNK)、词形变化和新词方面的局限性,特别是针对形态丰富的语言。通过将词汇切分为更小的、有意义的子词单元,模型能够更好地泛化并处理词汇的多样性。

讲座的核心在于模型预训练,其动机源于词嵌入(如Word2Vec)的成功,但旨在将预训练的范围从词嵌入扩展到整个模型参数。预训练的核心思想是通过重构输入来学习语言的深层结构和知识。具体方法包括:1) 解码器(Decoder-only)架构,通常采用标准语言建模(预测下一个词),如GPT系列;2) 编码器(Encoder-only)架构,采用双向上下文,通过掩码语言建模(Masked Language Modeling, MLM)预测被遮盖的词,如BERT;3) 编码器-解码器(Encoder-Decoder)架构,结合两者优势,常用于序列到序列任务,如T5模型采用的跨度损坏(Span Corruption)方法。

讲座强调,预训练模型(如BERT, GPT系列, T5)通过在海量无标签文本上学习,能够掌握语法、语义、常识知识甚至一定的推理能力。这些预训练好的模型随后可以通过微调(Fine-tuning)在特定下游任务上(如情感分析、机器翻译)以少量标注数据达到优异性能,显著优于从零开始训练。近年来,超大规模预训练模型(如GPT-3)展现出上下文学习(In-context Learning)思维链(Chain-of-Thought)提示等惊人的涌现能力,无需微调即可执行复杂任务。尽管预训练带来了巨大进步,但也面临挑战,如模型可能学习并放大训练数据中的偏见,以及其工作机制的完全理解仍是开放性研究问题。

子词建模 (Subword Modeling)

  • 问题背景:
    • 传统模型依赖固定词汇表 (finite vocabulary),遇到训练集中未出现的词 (e.g., "tasty"的拼写错误 "Leon", 新造词 "transformerify") 时,通常将其映射为统一的未知词符号 (UNK token),导致信息损失。
    • 对于词形变化丰富的语言 (e.g., 斯瓦希里语动词有超过300种变形),为每种变形创建独立词向量既不高效也不合理,因为它们共享核心语义。
  • 解决方案: 子词建模不试图定义所有“词”,而是将词分解为已知的子词序列。
    • 算法思路:
      1. 从所有单个字符开始作为初始词汇表。
      2. 迭代地找出语料中频繁共现的相邻字符对或子词对,将其合并为一个新的子词单元加入词汇表。
      3. 重复此过程,直到达到预设的词汇表大小。
    • 效果:
      • 常见词(如 "hat", "learn")本身可以作为子词单元。
      • 不常见或复杂的词(如 "tasty")可能被分解为多个子词 ("taa", "##sty",“##”表示不加空格连接前一个子词)。
      • 新词或派生词(如 "transformerify")可以被分解为 "transformer" 和 "##ify"。
    • 优势:
      • 有效处理未登录词问题,几乎所有词都可以被表示。
      • 更好地捕捉词的内部结构和形态学信息。
      • 模型输入变为子词序列,每个子词有其独立的嵌入。
    • 应用: 该技术最初为机器翻译开发,现已广泛应用于几乎所有现代语言模型。
    • 处理方式: 对于由多个子词组成的词,在模型处理时,每个子词作为序列中的一个独立单元输入(如RNN或Transformer的每个时间步)。若需该词的整体表示,可对各子词的上下文表示进行平均或取最后一个子词的表示。
    • 标点符号: 标点符号通常也包含在字符集中,并可能形成独立的子词单元 (e.g., "...")。模型处理文本时,尽可能保持原始文本的样貌,减少预处理。

预训练的动机与核心思想

  • 从词嵌入到模型预训练:
    • 早期方法(如Word2Vec)基于“词的含义由其上下文决定”(Distributional Hypothesis: "You shall know a word by the company it keeps")的思想,预训练词嵌入。
    • 然而,Word2Vec为每个词(如 "record")生成单一的静态向量,无法区分其在不同上下文中的多义性(名词 "记录" vs. 动词 "录制")。
    • 核心转变: 预训练整个模型(包括词嵌入层和其上的大型网络如Transformer或LSTM),而不仅仅是词嵌入。
    • 目标: 让模型学习更丰富的语言知识,这些知识可用于下游任务,从而减少对下游任务标注数据的依赖。
  • 预训练的核心机制:重构输入 (Reconstructing the Input)
    • 基本假设: 通过让神经网络完成“掩盖部分输入并重构原始输入”的任务,网络必须学习大量关于语言和世界知识才能做好。
    • 这是一种自监督学习:从无标签文本中自动创建(输入,标签)对。
    • 示例与学习内容:
      • "Stanford University is located in [MASK]." -> 预测 "Palo Alto"。可学习地理知识。
      • "I put [MASK] fork down on the table." -> 预测 "the" 或 "a"。可学习句法知识(冠词使用)。
      • "The woman walked across the street checking for traffic over [MASK] shoulder." -> 预测 "her"。可学习共指消解。
      • "I went to the ocean to see the fish, turtles, seals and [MASK]." -> 预测同类海洋生物。可学习语义类别。
      • "Overall, the value I got from the two hours watching it was the sum total of the popcorn and drink. The movie was [MASK]." -> 预测 "bad"。可学习情感倾向。
      • "Iroh went to the kitchen to make some tea. Standing next to Iroh, Zuko pondered his destiny. Zuko left the [MASK]." -> 预测 "kitchen"。可学习简单的物理世界交互和位置追踪。
      • 预测斐波那契数列的下一项:"1, 1, 2, 3, 5, 8, 13, 21, [MASK]" -> 预测 "34"。可学习序列模式。

预训练-微调范式 (Pretraining-Finetuning Paradigm)

  • 两阶段过程:
    1. 预训练 (Pretraining):
      • 使用大量无标签文本数据。
      • 通过自监督任务(如语言建模)训练一个大型神经网络模型。
      • 目标是学习通用的语言表示和世界知识。
      • 得到的模型参数 (θ_hat) 作为下一阶段的初始值。
    2. 微调 (Finetuning):
      • 使用特定下游任务的少量有标签数据 (e.g., 情感分析、机器翻译)。
      • 以预训练得到的参数 θ_hat 为起点,继续在特定任务数据上进行梯度下降训练模型。
      • 使模型适应特定任务的需求。
  • 为何有效:
    • 预训练提供了良好的参数初始化,使得模型在微调时能更快收敛到更好的解。
    • 将学习语言通用知识的负担从有限的标注数据转移到海量的无标注文本上。
    • 无标签文本数据量远大于有标签数据(可能相差万亿词 vs. 百万词级别)。
    • 预训练于多样化文本有助于模型获得更好的泛化能力,适应训练数据中未见过的新模式。
    • 即使有大量特定任务的标注数据,预训练通常仍有益。一种进阶做法是三阶段训练:通用预训练 -> 领域自适应预训练(在目标任务的无标签数据上继续预训练)-> 任务微调。

模型预训练的三种主要架构

讲座根据Transformer的三种主要架构(编码器、解码器、编码器-解码器)分别介绍了其预训练方法。

1. 编码器 (Encoders) - 如BERT

  • 特点: 能够处理输入的双向上下文信息。
  • 预训练挑战: 不能直接使用标准语言建模(从左到右预测下一个词),因为双向性使其能“看到”未来词,任务变得平凡。
  • 解决方案:掩码语言建模 (Masked Language Modeling - MLM)
    • 核心思想: 随机遮盖(mask out)输入序列中的一部分词,然后让模型预测这些被遮盖的词。
    • 模型学习的是 P(真实文档 X | 被损坏的文档 X_tilde)。
    • 损失函数仅计算被遮盖词的预测。
  • BERT (Bidirectional Encoder Representations from Transformers):
    • 其输入表示由词嵌入(Token Embeddings)、位置嵌入(Position Embeddings)和片段嵌入(Segment Embeddings)相加构成。
    • MLM细节:
      • 随机选择15%的子词进行处理。
      • 对于选中的子词:
        • 80%的概率替换为特殊 "[MASK]" 标记。
        • 10%的概率替换为词汇表中随机的其他词。
        • 10%的概率保持原词不变。
      • 目的: 迫使模型不仅学习被遮盖词的上下文表示,也学习所有词的良好上下文表示,因为模型不知道哪些词会被要求预测,或哪些词可能被错误替换。
    • 下一句预测 (Next Sentence Prediction - NSP) [原文提及但后续研究表明并非必要]:
      • 输入句子对 (A, B),判断句子B是否是句子A在原文中的下一句。
      • 通过在输入前加入特殊标记 [CLS],并基于其最终表示进行二分类。
      • 目的:让模型学习句子间的关系,认为对某些下游任务(如问答、自然语言推断)有益。
      • 后续发现: RoBERTa等研究表明NSP任务可能不是必需的,甚至可能有害(如将有效上下文长度减半)。模型在该任务上表现也并不好。
    • 影响: BERT的出现是NLP领域的“巨变 (sea change)”,通过预训练+微调的方式,在多项NLP任务上大幅超越了之前为各任务精心设计的模型。
    • BERT模型规模:
      • BERT-Base: 1.1亿参数
      • BERT-Large: 3.4亿参数
      • 训练数据量级:讲者在讲座中对其具体数量表示不确定,提及最初估计的数亿词(如8亿词)可能不准确,最终描述为“远少于十亿词但仍相当可观”的量级。
    • BERT的局限性: 虽然擅长理解和填空,但不自然适用于文本生成任务。
  • BERT的改进与扩展:
    • RoBERTa: 证明了NSP非必要,并指出BERT训练不足(应使用更多数据、更长训练时间)。是BERT的直接替代品。
    • Span Masking (如SpanBERT): 遮盖连续的子词片段(span)而非单个随机子词,这被认为是一个更难的任务,能带来更好的性能,因为单个子词的预测可能过于简单。
  • 参数高效微调 (Parameter-Efficient Fine-tuning / Lightweight Fine-tuning):
    • 动机: 微调所有参数可能导致模型偏离预训练学到的良好泛化区域,且成本较高。
    • 方法: 冻结大部分预训练参数,只微调一小部分参数或添加少量新参数。
      • Prefix Tuning / Prompt Tuning: 冻结整个预训练模型,在输入序列前添加一些可训练的“伪词向量”(virtual token embeddings),只训练这些伪词向量。
      • LoRA (Low-Rank Adaptation): 冻结预训练权重矩阵W,学习一个低秩的差异矩阵 ΔW (表示为两个小矩阵的乘积 A*B),实际使用的权重为 W + ΔW。只训练A和B。

2. 编码器-解码器 (Encoder-Decoders) - 如T5

  • 特点: 编码器处理输入序列(双向上下文),解码器生成输出序列(单向上下文)。天然适用于序列到序列任务。
  • 预训练方法:
    • 语言建模式: 将长文本切分为两半,编码器处理前半部分,解码器生成后半部分。
    • 跨度损坏 (Span Corruption) - T5模型采用:
      • 核心思想: 在输入文本中随机选择一些连续片段(spans),用单一的特殊掩码标记(如 <MASK_TOKEN_1>, <MASK_TOKEN_2>)替换它们。
      • 解码器的任务是依次生成这些特殊掩码标记,然后是被替换掉的原始文本片段。
      • 例如,输入:"Thank you [MASK_TOKEN_1] me to your party [MASK_TOKEN_2] week."
      • 输出:"[MASK_TOKEN_1] for inviting [MASK_TOKEN_2] last."
      • 优势: 结合了BERT式掩码的思想(允许双向上下文理解输入)和生成式任务的特点。
  • T5 (Text-to-Text Transfer Transformer):
    • 将所有NLP任务都统一为“文本到文本”的格式。
    • 通过跨度损坏进行预训练。
    • 有趣发现: 经过预训练和少量问答样本微调后,T5模型能回答其在微调阶段未见过的、但可能在预训练海量文本中间接学到的事实性问题(开放域问答),表现出从参数中“隐式检索”知识的能力。但生成的答案虽然流畅,却常常是错误的。

3. 解码器 (Decoders) - 如GPT系列

  • 特点: 只能处理从左到右的单向上下文信息。
  • 预训练方法: 标准语言建模 (Standard Language Modeling,常采用teacher forcing机制)
    • 给定前面的词序列,预测下一个词。
    • 训练目标是最大化序列的联合概率 P(w_t | w_1, ..., w_{t-1})。
  • GPT (Generative Pre-trained Transformer) 系列:
    • GPT (初代): 1.17亿参数。证明了大规模解码器模型在语言建模预训练后,通过微调能在多种下游任务(如自然语言推断、问答、文本相似度、分类)上取得良好效果。
    • GPT-2: 参数量增至15亿。更关注生成能力,能够生成在当时看来非常连贯的长文本。训练数据量更大 (约90亿词)。
    • GPT-3: 参数量剧增至1750亿,训练数据达3000亿词。
      • 上下文学习 (In-Context Learning / Few-shot Learning): GPT-3展现出的核心能力。无需更新模型权重(即无需微调),仅通过在输入提示(prompt)中给出少量任务示例(demonstrations),模型就能理解任务模式并推广到新的输入上。
        • 例如,给出 "thanks -> merci", "hello -> bonjour",然后问 "water -> ?",模型能输出 "eau"。
        • 这表明模型从海量数据中学习到了某种高度抽象的模式匹配和任务泛化能力。其具体机制仍是研究热点,可能与训练数据中包含大量类似模式的文本有关,也可能存在更通用的学习能力。
      • 涌现能力 (Emergent Abilities): 指那些在小模型上不明显或不存在,但在模型规模达到一定程度后突然出现的新能力。上下文学习是典型例子。
  • 解码器模型的应用: 天然适用于文本生成任务。许多当前最大、最强的模型都是解码器架构。原因尚不完全清楚,可能因其结构相对简单,参数可以集中在一个大网络中。

超大模型与高级概念

  • 模型规模与性能:
    • 普遍趋势:模型越大,数据越多,性能越好。
    • Chinchilla Scaling Laws: DeepMind的研究(如Chinchilla模型)指出,对于给定的计算预算,之前的一些模型(如GPT-3)可能参数量过大,而训练数据量相对不足。Chinchilla模型参数量小于GPT-3(约700亿 vs 1750亿),但在更多数据上训练后,性能优于GPT-3。这揭示了模型大小和训练数据量之间的最佳权衡关系。
  • 思维链提示 (Chain-of-Thought Prompting - CoT):
    • 标准提示: 直接给出问题,期望模型输出答案。
    • CoT提示: 在给模型的示例(demonstrations)中,不仅给出问题和最终答案,还展示一步步推导出答案的思考过程/中间步骤。
    • 当模型处理新问题时,它会先尝试生成类似的思考步骤,然后再给出最终答案。
    • 效果: 显著提高大型语言模型在复杂推理任务(如数学应用题、常识推理)上的表现。
    • 原因推测: 生成中间步骤相当于为模型提供了“草稿纸”,增加了解决问题所需的计算量,将复杂问题分解为更简单的子问题。这同样是一种涌现能力,在较小模型上效果不明显。

预训练教会了模型什么?

  • 多方面的知识和能力:
    • 事实性知识/常识 (Trivia)
    • 句法结构 (Syntax)
    • 共指关系 (Coreference)
    • 词汇语义 (Lexical Semantics)
    • 情感倾向 (Sentiment)
    • 一定程度的推理能力 (Reasoning) - 尤其在CoT等技术的加持下。
    • 模式识别与泛化 (Pattern Matching and Generalization) - 如上下文学习所示。
    • 编程能力 (Programming) - 将代码视为一种语言进行预训练(如GitHub Copilot)。
  • 潜在问题与挑战:
    • 偏见放大 (Bias Amplification): 模型会学习并可能放大训练数据中存在的社会偏见(如种族、性别歧视)。
    • 可靠性与可信度: 模型可能生成看似合理但实际上错误或无意义的内容("hallucinations"),且难以判断其能力的边界和失效场景。
    • 可解释性: 超大模型的工作机制如“黑箱”,难以完全理解其内部决策过程。
  • 研究意义: 这些预训练模型不仅是工具,也成为研究对象,用以探索学习、智能和语言的本质。

结论与展望

预训练技术,特别是基于Transformer架构的大型语言模型,已经深刻改变了自然语言处理领域。从早期的词嵌入到BERT、GPT系列等全模型预训练,再到超大模型展现出的上下文学习和思维链等惊人能力,NLP的能力边界被不断拓宽。尽管取得了巨大成功,但如何有效利用计算资源、缓解模型偏见、增强模型可解释性和可靠性,以及探索更通用的学习机制,仍是未来重要的研究方向。预训练模型在多大程度上真正“理解”语言和世界,以及它们如何泛化到未见过的任务和模式,是持续探索的核心问题。