首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LLM 基础概念

LLM 基础概念

作者头像
雪飞鸿
发布于 2026-10-20 08:39:48
发布于 2026-10-20 08:39:48
1060
举报
文章被收录于专栏:me的随笔me的随笔

浅入浅出——生成式 AI

AI和 LLM 的关系

代码语言:javascript
复制
人工智能 (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 亿参数)。

蒸馏

减少模型参数

量化

降低大模型的参数精度

稠密模型

每次推理时所有参数都被激活使用。参数量越大,计算量和显存占用成比例上涨。

  • 例子:GPT-3(175B)、Llama 2(70B)、Llama 3(405B)

稀疏模型

每次推理时只激活一部分参数。"稀疏"其实可指几种不同含义:

类型

含义

代表

激活稀疏

每次只激活部分参数

混合专家模型(MoE)

权重稀疏

很多权重为 0(剪枝得到)

剪枝后的模型

稀疏注意力

只计算部分位置的注意力

Longformer、BigBird

混合专家模型

稀疏模型的一种(激活稀疏)。把网络中的某些层拆成多个"专家"(expert),每次处理一个 token 时由门控网络(router)只挑选少数几个专家计算,其余不参与。因此总参数很大,但每次只激活一小部分。

  • 总参数(Total Parameters):模型全部参数加起来
  • 激活参数(Active Parameters):单个 token 实际用到的参数

例:DeepSeek-V3 总参数 671B,但激活参数只有约 37B——用接近小模型的推理成本,获得大模型的能力。 注:每个"专家"内部仍是稠密的小网络,所以可理解为"稀疏激活 + 稠密子网络"。

本机部署

  • Ollama
  • LM Studio
  • Cherry Studio

Token与字符

通常在说模型支持10K的上下文,是指模型一次最大可处理10K个token。token和我们平时使用的字词是不同的,一个token可以是一个单词、一个汉字或者一个词组,甚至一个标点符号。

为什么用"子词"切分?

按单词切:英文变体无穷(run / runs / running),词表会爆炸,生词没法处理;按单字符切:序列太长、效率低、单字符语义弱。所以现代模型用子词(subword)切分——把常见片段合并成 token,既控制词表大小,又能拼出新词。

主流切分算法

算法

原理

使用者

BPE(字节对编码)

反复合并"出现频率最高"的相邻字符对

GPT、DeepSeek、Llama

WordPiece

合并"最能提升模型似然"的对

BERT

Unigram

先建大候选表,再逐步删掉最没用的

T5、部分多语言模型

SentencePiece

工具框架,不依赖空格,对中文/日文友好

Llama、Mistral

词表(Vocabulary)是怎么来的?

词表是训练模型之前预先构建的固定"token ↔ ID"对照表(以 BPE 为例):

  1. 把文本拆成单个字符或字节;
  2. 反复统计并合并"出现频率最高"的相邻片段,产生新 token;
  3. 直到词表达到目标大小(比如 10 万个 token)就停止。

最终保存词表 + 合并规则两样东西,供训练和推理统一使用。

遇到词表里没有的词怎么办?

现代模型靠"逐级降级"解决,几乎没有真正的生词问题:

代码语言:javascript
复制
不常见的整词 → 拆成已知子词 → 拆成单字符 → 拆成 UTF-8 字节(绝对兜底)

字节级分词能把任意字符表示出来(任何字符最终都是字节),所以理论上没有无法表示的输入,代价只是拆得越碎、token 越多。

另外,不同的模型采用的分词(Tokenizer)方式不同,token和字符间对应关系也不同:

代码语言:javascript
复制
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 用量计算 | DeepSeek API Docs

上下文

简单来说,上下文指的是提供给模型的信息(以”输入令牌”的形式),模型随后使用这些信息来预测后续信息(以”输出令牌”的形式)

上下文窗口(Context Window)

模型在单次请求里能处理的 token 总数(输入 + 输出),可以理解为"模型一次对话的短期记忆容量"。

  • 限制的是"输入 + 输出"的总和,不是单独某一边:输入和输出共享同一个预算;
  • 输出通常还有一个更小的独立上限(max_tokens),防止输出占满窗口;
  • 所以真正留给输入的空间 ≈ 窗口大小 − 最大输出 token 数。

达到上限、输出还没结束会怎样?

  • 撞到最大输出上限 → 模型直接停止生成,回复停在半句话;
  • API 返回 finish_reason = "length" 标记,表示"是截断,不是自然说完";
  • 结果是不完整的回复(内容不损坏),而不是错误回复;
  • 解决办法:调大 max_tokens、缩短输入、或让模型"继续"续写。

Cursor – 使用上下文

训练与推理

训练阶段

代码语言:javascript
复制
原始语料
  ↓ ① 分词器(预先建好的词表)
token ID 序列
  ↓ ② 嵌入层查表:每个 ID → 一个向量
向量序列
  ↓ ③ Transformer 层
隐藏状态向量
  ↓ ④ 输出投影层 → logits(长度 = 词表大小)
词表里每个 token 的"分数"
  ↓ ⑤ softmax → 与真实下一个 token 对比 → 算 loss → 反向传播
更新模型参数

推理阶段(用户使用)

代码语言:javascript
复制
用户输入文字
  ↓ ① 用同一套分词器 + 词表 → token ID
  ↓ ② 嵌入层查表 → 向量
  ↓ ③ Transformer 层
  ↓ ④ 输出投影 → logits(覆盖整个词表)
  ↓ ⑤ softmax → 每个 token 的概率
  ↓ ⑥ 采样/选概率最高的 token → 下一个 token
  ↓ ⑦ 把 token 接回去,重复 ②~⑥(自回归)

三个关键点

  1. 词表是预先固定的,不是训练时攒出来的;
  2. 输入端:文本 → 分词器查表成 ID → 嵌入层查表成向量(不是"匹配词表");
  3. 输出端:模型产出一个长度 = 词表大小的 logits,softmax 后采样下一个 token("和词表对齐"发生在这里)。

MCP

参考:一文带你 "看见" MCP 的过程,彻底理解 MCP 的概念

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • AI和 LLM 的关系
  • 大模型
    • 参数量单位
    • 蒸馏
    • 量化
    • 稠密模型
    • 稀疏模型
    • 混合专家模型
  • 本机部署
  • Token与字符
    • 为什么用"子词"切分?
    • 主流切分算法
    • 词表(Vocabulary)是怎么来的?
    • 遇到词表里没有的词怎么办?
  • 上下文
    • 上下文窗口(Context Window)
      • 达到上限、输出还没结束会怎样?
  • 训练与推理
    • 训练阶段
    • 推理阶段(用户使用)
    • 三个关键点
  • MCP
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档