- # why
- # what
- 大语言模型在训练之前需要做的一些准备工作以及[[超参数]]的设定。
- # how
- 搜集数据
- 数据通常来自大规模互联网文本数据(维基百科、网页、书籍、社交媒体、新闻、电子书等)
- 进行清洗,参考[[FineWeb]]
- 爬虫抓取
- 删除网页的`html`标签,只留纯文本
- 删除重复数据
- 移除个人身份信息等
- 数据量:15 万亿 token,44TB 储存空间
- gpt-3.5最终有 1750亿个权重,与训练数据 token 数量相当,这里面有什么联系?[[预测即压缩压缩即智能,智能即具备理解力]]
- 举例子
- |GPT-3 dataset 数据集 | token | 采样比例 |
| ----------- | ----- | ---- |
| CommonCrawl | 410b | 60% |
| WebText2 | 19b | 22% |
| Books1 | 12b | 8% |
| Books2 | 55b | 8% |
| Wikipedia | 3b | 3% |
- | LLaMA dataset 数据集 | sampling prop. 采样比例 | Epochs 训练次数 | Disk size |
| ------------- | ------------------- | ----------- | --------- |
| CommonCrawl | 67.0% | 1.10 | 3.3TB |
| C4 | 15.0% | 1.06 | 783GB |
| Github | 4.5% | 0.64 | 328GB |
| Wikipedia | 4.5% | 2.45 | 83GB |
| Books | 4.5% | 2.23 | 85GB |
| ArXiv | 2.5% | 1.06 | 92GB |
| StackExchange | 2.0% | 1.03 | 78GB |
- [[tokenization]]词元化
- 将互联网上的自然语言数据通过编码方式(如 BPE 编码),转换为一系列的「整数序列」,这个过程叫做词元化。
- 每个token有固定的、唯一的Token ID
- 这些 token ID 组成了模型的[[词汇表]]
- GPT-3 词汇表:50257
- 在预训练**开始前**:
- 创建一个 token Embedding矩阵(随机初始化权重),形状为:(50257, 12288),每个token ID对应矩阵中**固定的一列**。
- 创建一个 position Embedding矩阵(随机初始化权重),形状为:(2048, 12288),每个[[batch size|批次]]数据的长度对应矩阵中**固定的一列**。
- |超参数|||
|--|--|--|
|词汇表| 50257|每个 token 都是一个独立的 token ID|
| 上下文窗口| 2048|模型的工作记忆,超出这个范围的会被忘记。理论上可以无限长,限制是考虑了训练成本后的方案。|
| 训练 token|3000 亿|从互联网是抓取的数据,经过词元化后的 token 数量。|
|维度 dimension|12288|"feature" or "dimension" or "embedding size", one of the several "hyperparameters" of the model |
- ### 输入训练数据至 Embedding
- ```
Token ID: 0 → "<PAD>"
Token ID: 1 → "Hello"
Token ID: 2 → "World"
...
Token ID: 50256 → "<END>"`
```
- 模型根据这些ID到Embedding矩阵的对应行,**直接找到并取出Token的Embedding向量**。
- 模型根据这些token所在的位置(比如第1个、第2个位置…)再到Position Embedding矩阵中找到位置向量。
- 将两个向量相加获得最终的输入Embedding,送入Transformer模型训练。
- | Token ID | token Embedding向量 | position Embedding向量 | imput embedding |
| ----------- | ----------------------- | ----------------------- | -------------------------------------- |
| 0 ("<PAD>") | 第一列随机权重 `[随机值, 随机值, …]` | 第一列随机权重 `[随机值, 随机值, …]` | token Embedding向量+position Embedding向量 |
| 1 ("Hello") | 第二列随机权重 `[随机值, 随机值, …]` | 第一列随机权重 `[随机值, 随机值, …]` | token Embedding向量+position Embedding向量 |
| 2 ("World") | 第三列随机权重 `[随机值, 随机值, …]` | 第一列随机权重 `[随机值, 随机值, …]` | token Embedding向量+position Embedding向量 |
| … | …… | | |
- # how good
- # Ref.