一.一句人类语言,到底是怎么变成神经网络能够处理的数字的?
我喜欢学习人工智能
↓
Tokenizer
↓
Token IDs
↓
Embedding
↓
向量矩阵
↓
Transformer
神经网络为什么不能直接处理文字?
因为神经网络进行计算的基础是数字和向量,而“我”“喜欢”“学习”这些文字本身不是可以直接进行矩阵运算的数值表示,必须把文字转换成数字,这就是tokenizer的工作。
什么是token
Token 是模型处理文本时使用的基本文本单位,它不一定等于一个字,也不一定等于一个单词。Token 是 Tokenizer 根据词表和切分规则产生的模型输入单位。
二.GPT —— 一个 Token 到底是怎么生成出来的?
GPT 到底是什么?
使用 Decoder-only Transformer 架构进行自回归语言建模的模型
GPT
│
├── Transformer
│
├── Decoder-only
│
└── 自回归语言模型(根据已经出现的token,一个一个预测后面的token)
输入
↓
预测下一个 Token
↓
把预测结果加入输入
↓
再次预测
↓
重复
GPT是怎么预测的?
文本
↓
Tokenization
↓
Embedding
↓
Position
↓
Transformer
↓
Logits
↓
Softmax
↓
概率
Tokenization:
文本
↓
切成 Token
↓
每个 Token 映射成一个 ID
举个例子吧:
假设有文本“我喜欢吃”
GPT并不是直接理解,而是把文本拆成Token,我–token1,喜欢–token2,吃–token3,
Embedding:
文本
↓
Tokenizer
↓
[101,205,308]
↓
Embedding
↓
[[0.2,...],
[0.7,...],
[0.1,...]]
token本身只是一个id,这些id本身没有语义,所以需要Embedding把token id转换成向量,Embedding 的作用是把离散的 Token ID 映射成连续的高维向量,使模型能够通过向量空间表示和学习 Token 的特征。它本质上是一个矩阵。
- 把离散token转成向量
- 让模型可以进行数学运算
- 通过训练学习token的表示
那这些向量是谁设计出来的?
不是人工设计的,而是在模型训练过程中通过反向传播不断学习出来的,它会在训练过程中不断发生变化。
position:
例子:
我
↓
向量 + 位置1
喜欢
↓
向量 + 位置2
吃
↓
向量 + 位置3
![![[Pasted image 20260830111446.png]]](https://i-blog.csdnimg.cn/direct/24f2b48700614d01b706cfd7a46d130a.png)
transformer的输出就是Eembedding + position
transformer:
负责向量之间的关系
我 喜欢 吃
加入多个transformer block,每一层:
Input
↓
Self-Attention
↓
Residual + Norm
↓
FFN
↓
Residual + Norm
↓
Output
这里Self-Attention 会让不同 Token 之间互相交流,模型通过attention学习当前这个位置应该参考哪些上下文。
logits
transformer最后一层会得到一个向量,然后经过linear层,得到logits
softmax
将logits转换成概率,得到概率尽可能大的token,这里不一定选最大的概率,而是使用sampling从概率分布中进行采样。
“我喜欢吃”
↓
Tokenization
↓
Token IDs
↓
Embedding
↓
Position Information
↓
Transformer
↓
Hidden Representation
↓
Linear
↓
Logits
↓
Softmax
↓
Probability
↓
Sampling / Selection
↓
“苹果”
“我喜欢吃苹果”
↓
Tokenizer
↓
[101, 205, 308, 512]
↓
Embedding
↓
四个向量
↓
加入位置信息
↓
Transformer
↓
预测下一个 Token
深入讲解token
1.为什么不直接一个字一个token?
因为这样会导致词表过大、序列过长,或者无法很好地处理新词和陌生词。如果一个字符一个token就会序列变得非常长,而 Transformer 的 Attention 对序列长度非常敏感,不能太长,也不能太短。
2.Subword Tokenization
把文本拆成比较有意义,同时又能复用的子词单位,在完整单词和单个字符中找到一个平衡。
3.BPE
BPE(Byte Pair Encoding)是一种通过不断合并高频符号对,逐渐建立子词词表的 Tokenization 方法,核心思想,经常出现在一起的东西,就把它们合并起来。类似于前缀和的思想
4.token数量为什么这么重要?
Tokenization 的效率会直接影响模型的上下文容量和计算成本,不同的tokenizer返回的token数量不同,tokenizer会影响同样的上下文能装多少内容。中文和英文的token数量可能不同,因为 Tokenizer 并不是简单按照“一个字/一个单词”固定切分,而是根据具体词表和编码方式进行切分。词表大小、Token 数量、文本覆盖能力之间需要一个平衡。
5.训练好的 Tokenizer 和 GPT 训练是什么关系?
Tokenizer训练
↓
建立词表和切分规则
↓
GPT训练
↓
使用Tokenizer把文本变成Token
↓
训练Transformer
训练 vs 推理
| 训练 | 推理/生成 | ||
|---|---|---|---|
| 是否有真实答案 | ✅ | ❌ | |
| 是否计算 Loss | ✅ | 通常不需要 | |
| 是否反向传播 | ✅ | ❌ | |
| 是否更新参数 | ✅ | ❌ | |
| 是否自回归生成 | 不需要逐 Token 生成 | ✅ | |
| 是否可以高度并行 | ✅ | 受到自回归限制 |
整个LLM输入流程
人类语言
↓
Tokenizer
↓
Token IDs
↓
Embedding
↓
Position 信息
↓
Transformer
↓
Hidden State
↓
Linear
↓
Logits
↓
Softmax
↓
Next Token

464

被折叠的 条评论
为什么被折叠?



