跳至内容
返回

学习笔记:一堂课搞懂生成式人工智能的原理

发布于:

生成式 AI 为什么会「会说话」?拆开来看,本质不过是按概率掷骰子的「文字接龙」。这篇笔记整理自一堂生成式人工智能公开课,带你从自回归原理一路看到用 Hugging Face Transformers 动手跑通。

目录导览

  1. 生成式 AI 的本质:自回归文字接龙(Auto-regressive)
  2. 多模态世界:万事万物皆可 Token 化
  3. LLM 核心机制解密:Chat Template、多轮对话与“AI 幻觉”
  4. Hugging Face Transformers 动手实作精粹(LLaMA / Gemma)

1. 生成式 AI 的本质:自回归文字接龙

1.1 什么是语言模型?

语言模型(Language Model, LLM)的核心工作其实就是文字接龙

  • Prompt(输入提示):给模型一个未完成的句子。
  • Token(标记 / 基本单位):模型生成和处理的最小单元。
  • Vocabulary(词表):所有候选 Token 的集合(通常包含数十万个 Token,覆盖多语言、标点与代码符号)。

1.2 概率分布与采样(掷骰子)

输入 Prompt 后,模型输出的并不是固定的一个字,而是词表上所有 Token 的概率分布(Probability Distribution)。模型根据该概率分布进行采样(掷骰子),选出下一个 Token,再将生成的 Token 追加到输入末尾继续生成,直到输出结束符(End-of-Sequence, EOS)。

  • 为什么每次回答略有不同? 因为每一步生成都在按概率分布掷骰子。
  • 文字接龙为什么不简单? 模型需要同时掌握:
    1. 语言知识(语法结构与词汇搭配)。
    2. 世界知识(物理常识、逻辑推理与常识事实,例如标准气压与低气压下水的沸点差异)。

1.3 模型的本质:高维非线性函数

可以将语言模型抽象为一个数学函数 y=f(x)y = f(x)

  • xx 为输入的 Prompt 序列,yy 为输出的概率分布向量。
  • 内部包含数十亿到数千亿级参数(Parameters),通过海量无监督预训练数据、人类标注(SFT)和强化学习反馈(RLHF/DPO)学习优化得到。

2. 多模态世界:万事万物皆可 Token 化

生成式 AI 的定义是让机器学会生成复杂而有结构的物件(由有限种类的基本单位组合成无限可能)。

模态原始单位与挑战现代 Token 化解决方案
文本 (Text)字符/词汇(词表有限,拼接无限)BPE / WordPiece 分词器
图像 (Image)像素接龙太耗资源(如 1024×1024 图需 100 万次像素生成)图像 Encoder(如 VQ-VAE/Patch Tokenizer),将16×1616\times16 区域压为一个 Token
音频 (Audio)采样点接龙开销极大(如 22kHz 音频 1 分钟需 132 万点)音频 Encoder,将约 0.02 秒的声波信号编码为音频 Token
生物分子 (Protein)氨基酸序列排列组合蛋白质残基 Token 化,预测空间折叠与生成

关键洞见:正如黄仁勋在 COMPUTEX 所言,“Everything is a Token”。只要能将数据离散化/表征为 Token 序列,多模态模型就能使用相同的**自回归(Auto-regressive)**机制进行生成!

3. LLM 核心机制解密

3.1 为什么自回归模型能听懂提问并回答?——Chat Template

单纯做文字接龙的模型,可能会顺着用户的问题接着造句或出考题。为了让模型学会以“AI 助手”的角色应答,平台会在底层包裹 Chat Template

<|start_header_id|>system<|end_header_id|>
You are a helpful assistant. Knowledge cutoff: 2023-12. Today: 2025-09-12.
<|start_header_id|>user<|end_header_id|>
世界最高的山是哪座?
<|start_header_id|>assistant<|end_header_id|>

模型看到结尾的 <|start_header_id|>assistant<|end_header_id|> 后,根据自回归规律自然就会接出“答案”!

3.2 为什么会有“AI 幻觉(Hallucination)”?

  • 模型脑中没有实时联网的数据库,它的一切回答本质上都是在“文字接龙梦境”中根据统计概率生成的。
  • 解决路径
    1. 上下文工程(Context Engineering):在 Prompt 中塞入足够且精确的事实依据。
    2. 检索增强生成(RAG):配合搜索引擎或向量检索模块注入背景资料。

3.3 多轮对话的实现原理

模型本身没有跨请求的即时记忆状态。多轮对话的本质是将历史问答记录不断追加并重新传入 Prompt

Inputt=[System Prompt,Round1,Round2,,User Inputt]\text{Input}_t = [\text{System Prompt}, \text{Round}_1, \text{Round}_2, \dots, \text{User Input}_t]

4. Hugging Face Transformers 动手实操

4.1 Tokenizer 编解码与特性观察

  • tokenizer.vocab_size:查看词表容量(LLaMA-3.2 达 128,000 个 Token)。
  • tokenizer.encode() & tokenizer.decode():字符与 Token ID 互转。
  • 特性:前缀是否有空格(如 'good' vs ' good')、字母大小写等都会对应不同的 Token ID。

4.2 控制生成多样性:Top-k 采样

若纯粹按全词表概率掷骰子,容易命中极低概率的“坏 Token”导致模型开始胡言乱语;若只取概率最大(Top-1 / Greedy Search),输出又会过于死板。

  • Top-k 采样:限制每次仅在概率最高的前 kk 个候选 Token 中进行概率再归一化与采样,既保持多样性又保证逻辑连贯。

4.3 官方 Chat Template 与 System Prompt 设定

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B-Instruct")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B-Instruct")

# 构造结构化角色对话
messages = [
    {"role": "system", "content": "你是一个乐于助人的 AI 助手。"},
    {"role": "user", "content": "你好呀,请介绍一下你自己!"}
]

# 自动套用官方 Chat Template 并完成分词编码
inputs = tokenizer.apply_chat_template(messages, return_tensors="pt", add_generation_prompt=True)
outputs = model.generate(inputs, max_new_tokens=100, do_sample=True, top_k=50)
response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True)
  • 利用 tokenizer.apply_chat_template 可以免去手动拼接特殊标签与 encode 的繁琐过程。

4.4 使用 Pipeline 极简封装

借助 Hugging Face 的高阶封装 pipeline("text-generation", ...),可以直接传入 messages 列表一步完成生成,免去底层繁琐的手动处理。

小结

  • 生成式 AI 的本质是自回归文字接龙:每一步都按词表上的概率分布采样,模型本质是一个高维非线性函数。
  • 万事万物皆可 Token 化:文本、图像、音频、蛋白质都能离散成 Token,复用同一套自回归生成机制。
  • 幻觉靠”喂料”缓解:用 Chat Template 结构化对话,再通过上下文工程或 RAG 注入事实依据。

在以下平台分享此文章:

上一篇
学习笔记:DeepSeek-R1 等推理大模型是如何进行“深度思考”(Reasoning)的?