LLM_Intro
LLM 笔记:从 Token 到 Embedding
一、 术语定义与层级关系
在 LLM 的处理流程中,文本经历了一个从离散符号到高维连续向量的转化过程:
- Raw Text: 原始文本(字符串)。
- Token: 文本切分后的最小单位(整数 ID)。
- Vector (Embedding): Token 在高维空间中的数学表示(浮点数数组)。
二、 Tokenization(分词阶段)
本质:将原始字符串转换为模型可识别的离散整数索引 (Integer IDs)。一种基于统计规律的“查字典”过程。 Size: [Batch_Size, Sequence_Length] (数据类型: int64)
训练方法:BPE (Byte Pair Encoding)
- 目标:在有限的词表大小(Vocab Size)下,实现最高效的编码。
- 过程:从字符级开始,统计语料库中相邻单位的出现频率,不断合并高频组合(如
t+h->th),直到词表达到预设规模。 - 输出:一个静态的 Vocabulary (词表)。
三、 Embedding
本质:一个可学习的权重矩阵,为 Token 注入“语义”。
1. 网络结构:查找表 (Lookup Table)
在 PyTorch 中通过 nn.Embedding(Vocab_Size, Hidden_Size) 实现。
- 输入矩阵 $W$: 大小为 $[V, N]$($V$=词表大小,$N$=维度)。
- 操作:输入一个整数 ID,直接从矩阵 $W$ 中提取对应的第 $i$ 行向量。
2. 训练机制:反向传播 (Backpropagation)
- 随机初始化:训练初期,向量数值是随机的。
- 任务驱动:通过“预测下一个词”或“完形填空”任务计算 Loss。
- 梯度更新:误差回传至 $W$,调整向量坐标,使得语义相近的词在空间中距离更近。
3. 训练范式
从零开始训练 (Pre-training)
GPT、Llama 这种大模型在预训练阶段做的事。
-
做法: Embedding 随整个模型一起随机初始化。
-
特点: 耗费巨大算力。随着数万亿个 Token 的输入,Embedding 矩阵逐渐自动学到了语义
Word2Vec
理解如何通过双矩阵架构训练出高质量的词向量。
训练流程
- Input: 上下文词的 One-hot 编码。
- Architecture:
- $W$ (Input Matrix): 提取上下文词的向量并取平均。
- $W’$ (Output Matrix): 将隐藏层向量映射回词表大小,做分类预测。
- Loss: Cross Entropy (交叉熵)。通过比较预测概率与真实词(Target)的差异来产生梯度。
四、 伪代码
```python import torch import torch.nn as nn
class SimpleWord2Vec(nn.Module): def init(self, vocab_size, embedding_dim): super().init() # 矩阵 W: 将 ID 映射为向量 self.w_input = nn.Embedding(vocab_size, embedding_dim)
# 矩阵 W': 将向量映射回词表大小进行预测
self.w_output = nn.Linear(embedding_dim, vocab_size, bias=False)
def forward(self, context_ids):
# 1. 查表得到向量 (利用 W)
hidden = self.w_input(context_ids).mean(dim=1)
# 2. 线性映射做分类 (利用 W')
output = self.w_output(hidden)
return output
实例化模型
model = SimpleWord2Vec(vocab_size=50000, embedding_dim=300)
训练时,优化器会同时更新 model.w_input.weight 和 model.w_output.weight
Enjoy Reading This Article?
Here are some more articles you might like to read next: