人工智能 (AI)
└── 机器学习 (ML)
├── 传统机器学习 (决策树、SVM等)
└── 深度学习 (DL)
└── 神经网络 (NN)
├── 卷积神经网络 (CNN)
└── Transformer
└── 大语言模型 (LLM)严格来说是基础模型:参数多、训练数据量大
参数量(parameter count)用英文数字缩写表示数量级:
缩写 | 英文 | 数值 | 中文 |
|---|---|---|---|
M | Million | 10⁶ | 百万 |
B | Billion | 10⁹ | 十亿 |
T | Trillion | 10¹² | 万亿 |
换算:1 T = 1000 B。例如 GPT-3 为 175 B(约 1750 亿参数),DeepSeek-V3 为 671 B(约 6710 亿参数)。
减少模型参数
降低大模型的参数精度
每次推理时所有参数都被激活使用。参数量越大,计算量和显存占用成比例上涨。
每次推理时只激活一部分参数。"稀疏"其实可指几种不同含义:
类型 | 含义 | 代表 |
|---|---|---|
激活稀疏 | 每次只激活部分参数 | 混合专家模型(MoE) |
权重稀疏 | 很多权重为 0(剪枝得到) | 剪枝后的模型 |
稀疏注意力 | 只计算部分位置的注意力 | Longformer、BigBird |
稀疏模型的一种(激活稀疏)。把网络中的某些层拆成多个"专家"(expert),每次处理一个 token 时由门控网络(router)只挑选少数几个专家计算,其余不参与。因此总参数很大,但每次只激活一小部分。
例:DeepSeek-V3 总参数 671B,但激活参数只有约 37B——用接近小模型的推理成本,获得大模型的能力。 注:每个"专家"内部仍是稠密的小网络,所以可理解为"稀疏激活 + 稠密子网络"。
通常在说模型支持10K的上下文,是指模型一次最大可处理10K个token。token和我们平时使用的字词是不同的,一个token可以是一个单词、一个汉字或者一个词组,甚至一个标点符号。
按单词切:英文变体无穷(run / runs / running),词表会爆炸,生词没法处理;按单字符切:序列太长、效率低、单字符语义弱。所以现代模型用子词(subword)切分——把常见片段合并成 token,既控制词表大小,又能拼出新词。
算法 | 原理 | 使用者 |
|---|---|---|
BPE(字节对编码) | 反复合并"出现频率最高"的相邻字符对 | GPT、DeepSeek、Llama |
WordPiece | 合并"最能提升模型似然"的对 | BERT |
Unigram | 先建大候选表,再逐步删掉最没用的 | T5、部分多语言模型 |
SentencePiece | 工具框架,不依赖空格,对中文/日文友好 | Llama、Mistral |
词表是训练模型之前预先构建的固定"token ↔ ID"对照表(以 BPE 为例):
最终保存词表 + 合并规则两样东西,供训练和推理统一使用。
现代模型靠"逐级降级"解决,几乎没有真正的生词问题:
不常见的整词 → 拆成已知子词 → 拆成单字符 → 拆成 UTF-8 字节(绝对兜底)字节级分词能把任意字符表示出来(任何字符最终都是字节),所以理论上没有无法表示的输入,代价只是拆得越碎、token 越多。
另外,不同的模型采用的分词(Tokenizer)方式不同,token和字符间对应关系也不同:
import transformers
chat_tokenizer_dir = "./"
tokenizer = transformers.AutoTokenizer.from_pretrained(
chat_tokenizer_dir, trust_remote_code=True
)
token_ids = tokenizer.encode("大模型是未来的趋势")
for tid in token_ids:
print(tid, tokenizer.decode([tid]))也可以在这里在线体验分词。
简单来说,上下文指的是提供给模型的信息(以”输入令牌”的形式),模型随后使用这些信息来预测后续信息(以”输出令牌”的形式)
模型在单次请求里能处理的 token 总数(输入 + 输出),可以理解为"模型一次对话的短期记忆容量"。
max_tokens),防止输出占满窗口;
finish_reason = "length" 标记,表示"是截断,不是自然说完";
max_tokens、缩短输入、或让模型"继续"续写。
原始语料
↓ ① 分词器(预先建好的词表)
token ID 序列
↓ ② 嵌入层查表:每个 ID → 一个向量
向量序列
↓ ③ Transformer 层
隐藏状态向量
↓ ④ 输出投影层 → logits(长度 = 词表大小)
词表里每个 token 的"分数"
↓ ⑤ softmax → 与真实下一个 token 对比 → 算 loss → 反向传播
更新模型参数用户输入文字
↓ ① 用同一套分词器 + 词表 → token ID
↓ ② 嵌入层查表 → 向量
↓ ③ Transformer 层
↓ ④ 输出投影 → logits(覆盖整个词表)
↓ ⑤ softmax → 每个 token 的概率
↓ ⑥ 采样/选概率最高的 token → 下一个 token
↓ ⑦ 把 token 接回去,重复 ②~⑥(自回归)