|
Download PLAN.md from forthezero/vAIbe_diffutslator: direct link, hf CLI and curl.
- Browser
- Download file 8.92 kB
-
https://huggingface.co/forthezero/vAIbe_diffutslator/resolve/main/PLAN.md
- Command line
-
hf download hf://forthezero/vAIbe_diffutslator/PLAN.md
-
curl -L -o PLAN.md https://huggingface.co/forthezero/vAIbe_diffutslator/resolve/main/PLAN.md
8.92 kB
| # Diffutslator 实现计划 | |
| 基于扩散模型的中英互译系统 | |
| ## 一、架构概述 | |
| ``` | |
| ┌─────────────────────────────────────────────────────────────────┐ | |
| │ 噪声空间 (共享) │ | |
| │ [L×D] │ | |
| │ ┌─────────────────────────┐ │ | |
| │ │ │ │ | |
| │ 中文扩散 ↗ 语言切换判断器 ↖ 英文扩散 │ | |
| │ (加噪) [分类器] (加噪) │ | |
| │ │ │ │ | |
| │ └─────────────────────────┘ │ | |
| │ ↓ ↓ │ | |
| │ 中文逆扩散 英文逆扩散 │ | |
| │ (去噪) (去噪) │ | |
| │ ↓ ↓ │ | |
| │ ┌────────────┐ ┌────────────┐ │ | |
| │ │ 中文解码器 │ │ 英文解码器 │ │ | |
| │ └────────────┘ └────────────┘ │ | |
| │ ↓ ↓ │ | |
| │ 中文输出 英文输出 │ | |
| └─────────────────────────────────────────────────────────────────┘ | |
| ``` | |
| ### 核心设计决策 | |
| | 问题 | 决策 | 理由 | | |
| |------|------|------| | |
| | 扩散空间 | 词嵌入连续空间 | 实现成熟、CPU友好、训练稳定 | | |
| | 长度处理 | 变长序列 + 长度嵌入 | 扩散可变长,逆扩散收敛到目标长度 | | |
| | 双向切换 | 可学习分类器 | 让模型自己判断何时切换 | | |
| ## 二、模块设计 | |
| ### 2.1 分词器 (tokenizer.py) | |
| **中文分词**:字符级 + BPE | |
| - 字符级处理中文字符 | |
| - BPE处理罕见词和数字 | |
| **英文分词**:BPE | |
| - 使用相同的BPE算法 | |
| - 与中文共享词表大小设置 | |
| **词表**: | |
| - 中文词表:8000 tokens | |
| - 英文词表:8000 tokens | |
| - 特殊token:`<pad>`, `<sos>`, `<eos>`, `<mask>`, `<unk>` | |
| ### 2.2 嵌入层 (embedding.py) | |
| ```python | |
| class LanguageEmbedding: | |
| """语言特定的嵌入层""" | |
| - token_embedding: [vocab_size, d_model] | |
| - position_embedding: [max_len, d_model] | |
| - length_embedding: [max_len, d_model] # 长度编码 | |
| ``` | |
| **参数**: | |
| - `d_model = 256`(CPU环境下适中) | |
| - `max_len = 128`(最大序列长度) | |
| ### 2.3 扩散核心 (diffusion.py) | |
| **前向扩散(加噪)**: | |
| ```python | |
| def forward_diffusion(x_0, t): | |
| """ | |
| x_0: 初始嵌入 [batch, len, d_model] | |
| t: 时间步 [batch] | |
| 返回: x_t, noise | |
| """ | |
| # 线性噪声调度 | |
| alpha_t = 1 - t / T # 简化调度 | |
| noise = randn_like(x_0) | |
| x_t = sqrt(alpha_t) * x_0 + sqrt(1 - alpha_t) * noise | |
| return x_t, noise | |
| ``` | |
| **反向扩散(去噪)**: | |
| ```python | |
| def reverse_diffusion(x_t, t, model): | |
| """ | |
| x_t: 当前噪声状态 | |
| t: 当前时间步 | |
| model: 噪声预测网络 | |
| """ | |
| predicted_noise = model(x_t, t) | |
| x_t_minus_1 = denoise_step(x_t, predicted_noise, t) | |
| return x_t_minus_1 | |
| ``` | |
| **时间调度**: | |
| - 训练时:T = 1000 步 | |
| - 推理时:DDIM加速,可降到 10-50 步 | |
| ### 2.4 噪声预测网络 (model.py) | |
| ```python | |
| class DiffusionTransformer: | |
| """预测噪声的Transformer""" | |
| - 输入: x_t [batch, len, d_model], t [batch] | |
| - 输出: predicted_noise [batch, len, d_model] | |
| 结构: | |
| - 语言特定的输入投影 | |
| - 时间步嵌入 (sinusoidal) | |
| - N层 Transformer blocks | |
| - 语言特定的输出投影 | |
| ``` | |
| **参数**(CPU优化): | |
| - `n_layers = 4` | |
| - `n_heads = 4` | |
| - `d_ff = 512` | |
| - 总参数量:约 2M | |
| ### 2.5 语言切换器 (switcher.py) | |
| ```python | |
| class LanguageSwitcher: | |
| """判断当前噪声更接近哪种语言""" | |
| - 输入: x_t [batch, len, d_model] | |
| - 输出: 语言概率 [batch, 2] # [中文, 英文] | |
| 结构: | |
| - 全局平均池化 | |
| - 2层MLP | |
| - Softmax输出 | |
| ``` | |
| ### 2.6 训练流程 (train.py) | |
| ``` | |
| 训练步骤: | |
| 1. 加载中英平行句对 (zh, en) | |
| 2. 分别嵌入到连续空间 | |
| 3. 随机采样时间步 t | |
| 4. 对中文嵌入做前向扩散到 t 步 → zh_t | |
| 5. 对英文嵌入做前向扩散到 t 步 → en_t | |
| 6. 训练噪声预测网络预测噪声 | |
| 7. 训练切换器判断语言 | |
| 8. 反向传播更新参数 | |
| ``` | |
| **损失函数**: | |
| ```python | |
| L_total = L_noise_zh + L_noise_en + λ * L_switcher | |
| L_noise: 噪声预测MSE损失 | |
| L_switcher: 语言分类交叉熵损失 | |
| ``` | |
| ### 2.7 推理流程 (inference.py) | |
| **中文→英文翻译**: | |
| ``` | |
| 1. 中文输入 → 中文嵌入 | |
| 2. 完整前向扩散到纯噪声 (T步) | |
| 3. 迭代反向扩散: | |
| for t in [T, T-1, ..., 1]: | |
| - 切换器判断当前语言 | |
| - 若判断为中文→用中文去噪 | |
| - 若判断为英文→切换到英文去噪 | |
| - 输出当前步骤状态(可视化) | |
| 4. 最终噪声状态 → 英文解码 → 英文输出 | |
| ``` | |
| **英文→中文翻译**:对称过程 | |
| ## 三、文件结构 | |
| ``` | |
| diffutslator/ | |
| ├── TASK.md # 任务描述 | |
| ├── PLAN.md # 本文件 | |
| ├── config.py # 超参数配置 | |
| ├── tokenizer.py # 分词器 | |
| ├── embedding.py # 嵌入层 | |
| ├── model.py # 扩散模型 | |
| ├── diffusion.py # 扩散过程 | |
| ├── switcher.py # 语言切换器 | |
| ├── dataset.py # 数据集加载 | |
| ├── train.py # 训练脚本 | |
| ├── inference.py # 推理脚本 | |
| ├── main.py # 主入口 | |
| ├── utils.py # 工具函数 | |
| └── checkpoints/ # 模型检查点 | |
| ``` | |
| ## 四、实现步骤 | |
| ### Phase 1: 基础框架(确保可训练) | |
| 1. **配置文件** - 定义所有超参数 | |
| 2. **分词器** - 实现中英文分词 | |
| 3. **数据集** - 加载tatoeba数据 | |
| 4. **嵌入层** - 简单的token嵌入 | |
| 5. **扩散核心** - 前向和反向扩散 | |
| 6. **简单模型** - 基础噪声预测网络 | |
| 7. **训练脚本** - 带进度条的训练循环 | |
| **验证目标**:能在少量数据上跑通训练,loss下降 | |
| ### Phase 2: 完整架构 | |
| 1. **语言切换器** - 实现切换判断 | |
| 2. **变长处理** - 实现长度嵌入 | |
| 3. **完整模型** - 整合所有模块 | |
| 4. **推理脚本** - 可视化扩散过程 | |
| **验证目标**:完整训练流程,能输出翻译结果 | |
| ### Phase 3: 优化加速 | |
| 1. **DDIM采样** - 减少推理步数 | |
| 2. **训练加速** - 混合精度、梯度累积 | |
| 3. **模型调优** - 调整超参数 | |
| **验证目标**:提升训练和推理速度,改善翻译质量 | |
| ## 五、训练策略 | |
| ### 快速验证模式 | |
| ```bash | |
| # 使用tatoeba前1000条数据 | |
| # batch_size=8, epochs=10 | |
| python train.py --quick --samples 1000 | |
| ``` | |
| ### 完整训练模式 | |
| ```bash | |
| # 使用全部数据 | |
| # 支持暂停/继续 | |
| python train.py --full | |
| # Ctrl+C 暂停,自动保存检查点 | |
| # python train.py --resume 继续训练 | |
| ``` | |
| ### 训练输出 | |
| ``` | |
| Epoch 1/10: 100%|████████| 125/125 [02:30<00:00, loss=0.452] | |
| 预计剩余: 22:30 | 速度: 0.5 it/s | |
| 最新检查点: checkpoints/model_epoch1.pt | |
| 按 Ctrl+C 停止训练(自动保存) | |
| ``` | |
| ## 六、推理展示 | |
| ``` | |
| $ python inference.py --zh "你好世界" | |
| 翻译模式: 中文 → 英文 | |
| 输入: 你好世界 | |
| 扩散过程: | |
| Step 1000: [噪声状态 - 切换器: 中文 95%] | |
| Step 900: [噪声状态 - 切换器: 中文 78%] | |
| Step 800: [噪声状态 - 切换器: 中文 52%] | |
| Step 700: [噪声状态 - 切换器: 英文 61%] ← 语言切换! | |
| Step 600: [噪声状态 - 切换器: 英文 89%] | |
| ... | |
| Step 50: [接近完整句子 - 切换器: 英文 99%] | |
| Step 1: [完整句子] | |
| 输出: Hello world | |
| ``` | |
| ## 七、环境适配 | |
| 针对CPU环境的优化: | |
| 1. **小模型**:参数量控制在2-5M | |
| 2. **小批量**:batch_size = 4-16 | |
| 3. **梯度累积**:模拟更大batch | |
| 4. **简单架构**:减少层数和维度 | |
| 5. **内存优化**:及时释放中间变量 | |
| ## 八、预期效果 | |
| | 指标 | 目标 | | |
| |------|------| | |
| | 训练速度 | 1-2 it/s (CPU) | | |
| | 推理速度 | 1-5秒/句 (DDIM 50步) | | |
| | 翻译质量 | 简单句子可理解 | | |
| | 模型大小 | < 50MB | | |
| --- | |
| *计划制定完成,待用户确认后开始实现* | |