第十一章:大语言模型(LLM)详解

学习目标

  • 理解LLM的预训练任务和训练流程
  • 掌握分词算法(BPE)的基本原理
  • 理解推理采样策略(Greedy、Beam Search、Temperature、Top-k、Top-p)
  • 了解模型压缩技术(量化、蒸馏、剪枝)
  • 能够使用transformers库进行文本生成

前置要求

第十章:Transformer架构(理解Self-Attention、位置编码和Decoder结构)。

大语言模型Transformer架构概念图
图11-1 大语言模型架构:Transformer Decoder层堆叠与下一词预测机制

LLM的工作原理

大语言模型(Large Language Model,LLM)是基于Transformer Decoder架构的大规模预训练模型,通过预测下一个词来生成文本。

LLM工作的5个步骤

1. 接收输入:用户输入文本(如"人工智能的未来是")
2. 分词处理:将文本切分为Token序列
3. 嵌入编码:将Token转换为向量表示,加上位置编码
4. Transformer处理:通过多层Self-Attention和前馈网络处理
5. 预测输出:根据最后一个Token的表示,预测下一个Token的概率分布

预训练任务详解

LLM的预训练通常基于以下两种任务之一:

1. Next Token Prediction(下一个词预测)

这是GPT系列使用的预训练任务。模型看到前面的词,预测下一个词。

示例

输入:"人工智能正在"
目标:预测下一个Token
可能输出:"改变"(概率30%)、"发展"(概率25%)、"进步"(概率15%)...

模型通过在海量文本上反复做这个任务,学会了语言的规律、知识和推理能力。

2. 掩码语言模型(Masked Language Model)

这是BERT使用的预训练任务。随机遮盖输入中的一些词,让模型预测被遮盖的词。

示例

原文:"人工智能正在改变世界"
掩码后:"[MASK]正在[MASK]世界"
目标:预测[MASK]位置的词("人工智能"和"改变")

分词算法

分词(Tokenization)是将文本切分为模型可处理的Token序列的过程。

BPE(Byte Pair Encoding)原理

BPE是最常用的分词算法,核心思想是:从字符开始,反复合并最高频的字符对,逐步构建词表。

BPE简单示例

假设语料中出现很多次 "low"、"lower"、"newest":

初始(字符级别):
l o w   l o w e r   n e w e s t

第1步:e 和 w 最常相邻 → 合并为 ew
l o w   l o w e r   n ew e s t

第2步:n 和 ew 最常相邻 → 合并为 new
l o w   l o w e r   new e s t

第3步:lo 和 w 最常相邻 → 合并为 low
low   low e r   new e s t

最终词表包含:l, o, w, e, r, n, ew, new, lo, low, lowe, lower, ...

推理采样策略

LLM在生成文本时,需要从概率分布中选择下一个Token。不同的采样策略影响输出的多样性和质量。

策略 原理 优点 缺点 适用场景
Greedy(贪心) 每步选概率最高的Token 确定性强,速度快 容易重复,缺乏多样性 翻译、摘要等确定性任务
Beam Search 同时保留多个候选序列 全局最优,质量高 计算量大,输出保守 机器翻译
Temperature 调整概率分布的"尖锐度" 控制输出的随机性 需要调参 通用(低=事实,高=创意)
Top-k 只从概率最高的k个Token中采样 过滤低质量选项 k值固定,不够灵活 对话、故事生成
Top-p(核采样) 从概率累积达到p的最小Token集合中采样 动态调整候选集大小 实现稍复杂 通用,最推荐

采样参数选择建议

编程/数学:temperature=0.1~0.2,top_p=0.9(确定性优先)
一般对话:temperature=0.5~0.7,top_p=0.9(平衡)
创意写作:temperature=0.8~1.0,top_p=0.95(多样性优先)
事实问答:temperature=0,使用Greedy(最准确)

使用transformers库生成文本

from transformers import AutoModelForCausalLM, AutoTokenizer

# 加载模型和分词器
model_name = "gpt2"  # 可替换为 "meta-llama/Llama-2-7b-hf" 等
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 编码输入文本
prompt = "人工智能的未来发展方向包括"
input_ids = tokenizer.encode(prompt, return_tensors="pt")

# 生成文本(使用不同的采样策略)
# 方式1:贪心搜索(确定性输出)
output_greedy = model.generate(input_ids, max_new_tokens=50, do_sample=False)
print("Greedy:", tokenizer.decode(output_greedy[0], skip_special_tokens=True))

# 方式2:带温度的采样(创造性输出)
output_temp = model.generate(
    input_ids,
    max_new_tokens=50,
    do_sample=True,
    temperature=0.8,
    top_p=0.9
)
print("Temperature:", tokenizer.decode(output_temp[0], skip_special_tokens=True))

# 方式3:Top-k采样
output_topp = model.generate(
    input_ids,
    max_new_tokens=50,
    do_sample=True,
    top_k=50,
    top_p=0.95
)
print("Top-k+p:", tokenizer.decode(output_topp[0], skip_special_tokens=True))

模型压缩技术

为了在资源有限的设备上运行大模型,需要使用模型压缩技术:

技术 原理 效果 代价
量化(Quantization) 降低参数精度(FP16→INT8→INT4) 显存减少50%-75% 精度略有下降
知识蒸馏(Distillation) 用大模型教小模型 小模型获得接近大模型的效果 需要训练过程
剪枝(Pruning) 删除不重要的参数或层 减少模型大小和计算量 可能影响性能
LoRA(低秩适配) 只训练少量额外参数 微调成本大幅降低 推理时需要合并参数

实用建议

本地运行大模型
• 7B模型 + INT4量化 ≈ 4GB显存(RTX 3060可运行)
• 13B模型 + INT4量化 ≈ 8GB显存(RTX 4070可运行)
• 推荐工具:llama.cpp、Ollama、vLLM
• 量化方法:GPTQ、AWQ、GGUF

推荐视频

如果你觉得文字讲解不够直观,推荐观看以下视频:

生成式AI导论 2025版

作者:李宏毅

为什么推荐:最新的大语言模型科普

点击观看

本章小结

  1. LLM基于Transformer Decoder架构,通过Next Token Prediction预训练任务在海量文本上学习语言规律和知识。
  2. BPE分词算法从字符级别开始,通过反复合并高频字符对构建词表,平衡了词表大小和语义完整性。
  3. 推理采样策略决定了生成文本的多样性和质量:Greedy确定性最强,Temperature和Top-p提供灵活的随机性控制。
  4. 模型压缩技术(量化、蒸馏、剪枝、LoRA)使大模型能在资源有限的设备上运行,是AI落地应用的关键。
  5. Hugging Face的transformers库提供了便捷的API来加载预训练模型、进行文本生成和模型微调。

练习题

  1. GPT系列模型使用的预训练任务是什么?

    A. 掩码语言模型(MLM)
    B. Next Token Prediction(下一个词预测)
    C. 图像分类
    D. 聚类分析

    答案:B。GPT系列使用Next Token Prediction作为预训练任务,即根据前面的词预测下一个词。

  2. 如果需要生成创意性强的文本,应该怎样设置采样参数?

    A. temperature=0.1, do_sample=False
    B. temperature=0.9, top_p=0.95, do_sample=True
    C. temperature=0, top_k=1
    D. 不使用任何采样策略

    答案:B。较高的temperature(0.8-1.0)和较高的top_p(0.95)会增加输出的多样性和创造性。

  3. BPE分词算法的核心思想是什么?

    A. 随机将文本切分为固定长度的片段
    B. 从字符开始,反复合并最高频的字符对来构建词表
    C. 使用词典匹配,遇到未知词就跳过
    D. 将每个汉字作为一个Token

    答案:B。BPE(Byte Pair Encoding)从字符级别开始,通过迭代合并语料中最高频的相邻字符对来构建子词词表。