Minimind/experiment/EXPERIMENT_1_4_8.md

378 lines
12 KiB
Markdown
Raw Normal View History

2025-08-20 13:46:42 +08:00
# 实验记录模版 - Experiment 1.4.8
> **🎯 使用说明**:
> - 🧑‍🔬 **[人类填写]** - 实验开始前由人类研究者填写
> - 🤖 **[AI构建]** - 实验构建过程中由AI自动填写
> - ✅ **[AI完成]** - 实验完成后由AI分析填写
---
## 🧠 AI思考过程
### 🤖 **[AI构建]** 实验设计思路
**问题分析**:
```
基于实验1.4.7的分析发现:
- 当前问题: 尽管文本初始化和冻结机制实现了5.5%的Loss改善但生成连贯性问题仍未根本解决
- 关键挑战: 门控MLP记忆融合机制表达能力有限需要更精准的记忆选择和上下文融合
- 解决思路: 升级GatedMemoryFusion为多头交叉注意力机制利用注意力机制提升记忆交互精度
```
**参数选择逻辑**:
```
基于交叉注意力机制设计:
- 模型架构选择: 保持model_memory主体不变仅升级GatedMemoryFusion为交叉注意力
- 超参数设定: 8头注意力(512/8=64维/头)注意力dropout=0.1融合dropout=0.15
- 数据配置: 沿用1.4.7的文本初始化和冻结机制确保对比公平性
```
**预期影响评估**:
```
交叉注意力机制的影响:
- 性能预期: 推理Loss < 2.47优于1.4.7的2.47生成连贯性显著提升记忆选择更精准
- 资源需求: GPU内存略微增加(~1-2GB),训练时间基本不变
- 潜在风险: 过度复杂化可能导致过拟合,需监控注意力分布
```
### 🤖 **[AI构建]** 决策推理过程
**关键决策点**:
1. **融合机制选择**
- 选项: `门控MLP vs 交叉注意力 vs 直接拼接`
- 选择: `交叉注意力(nn.MultiheadAttention)`
- 理由: `更好的记忆选择性和上下文感知能力`
2. **注意力头数设定**
- 选项: `4头 vs 8头 vs 16头`
- 选择: `8头(64维/头)`
- 理由: `平衡表达能力和计算效率与主模型32头保持合理比例`
3. **Dropout策略设计**
- 选项: `统一dropout vs 分层dropout vs 没有dropout`
- 选择: `分层dropout(注意力0.1+融合0.15)`
- 理由: `防止注意力过度集中,提高模型鲁棒性`
**权衡考量**:
```
交叉注意力机制的权衡:
- 性能 vs 资源: 增加计算成本但提升记忆选择精度,性能提升优先
- 稳定性 vs 速度: 交叉注意力更稳定但计算量略增,选择稳定性
- 创新性 vs 风险: 渐进式改进降低风险,仅修改融合层保持兼容性
```
---
## 📝 Git变更记录
### 🤖 **[AI构建]** 代码修改概述
**变更概览**:
- 修改文件数: `1`
- 新增代码行: `+37`
- 删除代码行: `-20`
- 修改类型: `架构重构` (门控MLP→交叉注意力)
### 🤖 **[AI构建]** 详细变更列表
| 文件路径 | 修改类型 | 修改原因 | 关键变更 |
|---------|----------|---------|----------|
| `model/model_memory.py` | `架构重构` | `提升记忆融合机制` | `GatedMemoryFusion类完全重写为交叉注意力` |
| `run_file/experiment_1_4_8.sh` | `新增` | `实验脚本创建` | `基于1.4.7调整实验描述和检查项` |
| `experiment/EXPERIMENT_1_4_8.md` | `新增` | `实验记录` | `填写AI构建部分和实验信息` |
### 🤖 **[AI构建]** 关键代码片段
**核心修改**:
```python
# 新的交叉注意力融合机制
class GatedMemoryFusion(nn.Module):
def __init__(self, config: LMConfig):
super().__init__()
self.dim = config.dim
self.num_heads = 8
self.head_dim = self.dim // self.num_heads
# 交叉注意力层
self.cross_attention = nn.MultiheadAttention(
embed_dim=self.dim,
num_heads=self.num_heads,
dropout=0.1, # 注意力Dropout
batch_first=True
)
# 层标准化和Dropout
self.layer_norm = nn.LayerNorm(self.dim)
self.dropout = nn.Dropout(0.15) # 比普通Dropout稍高
```
```python
# 交叉注意力融合函数
def forward(self, h_attn, selected_memories, memory_scores, training=True):
# 将记忆和h_attn合并作为key/value
memory_reshaped = selected_memories.view(batch_size, seq_len * num_selected, self.dim)
memory_reshaped = torch.cat([h_attn, memory_reshaped], dim=1)
# 交叉注意力
attn_output, attention_weights = self.cross_attention(
query=h_attn,
key=memory_reshaped,
value=memory_reshaped
)
# 残差连接和层标准化
output = self.layer_norm(h_attn + self.dropout(attn_output))
return output
```
### 🤖 **[AI构建]** 版本对比
**与上一版本差异**:
- **功能变化**: `记忆融合机制从MLP改为交叉注意力`
- **性能影响**: `预期提升记忆选择精度,计算成本略增`
- **兼容性**: `与1.4.7数据格式完全兼容,仅修改融合层,保留文本初始化和冻结机制`
- **依赖变更**: `无新依赖使用PyTorch原生nn.MultiheadAttention`
**Git Diff 摘要**:
```bash
修改: model/model_memory.py
+37, -20 行
- 删除: GatedMemoryFusion原门控MLP实现(约20行)
+ 增加: 交叉注意力实现(约37行)
- 替换: 融合机制全部重写
```
---
## 📋 实验基本信息
### 🧑‍🔬 **[人类填写]** 实验目标
**基于实验**: `experiment_1.4.7`
<!-- 上一版实验编号,如 experiment_1.4.0,如果是全新实验则填 None -->
**实验目的**:
<!-- 描述本次实验要解决的问题或验证的假设 -->
**研究假设**:
<!-- 明确的可验证假设 -->
**预期结果**:
<!-- 期望达到的效果或指标 -->
**实验重点**:
<!-- 本次实验的核心关注点 -->
### 🤖 **[AI构建]** 实验信息
**实验编号**: `experiment_1.4.8`
**创建时间**: `2024-08-20`
**实验脚本**: `run_file/experiment_1_4_8.sh`
**输出目录**: `out/experiment_1_4_8`
**实验环境**: `CUDA 12.1 + PyTorch 2.0 + RTX 4090`
---
## ⚙️ 配置参数
### 🤖 **[AI构建]** 模型配置
| 参数类别 | 参数名 | 值 | 说明 |
|---------|--------|----|----- |
| **模型架构** | dim | `512` | 模型维度 |
| | n_layers | `8` | Transformer层数 |
| | n_heads | `32` | 注意力头数 |
| | max_seq_len | `512` | 最大序列长度 |
| | model_type | `model_memory` | 模型类型 (交叉注意力记忆模型) |
| **知识库** | knowledge_num | `1048576` | 知识条目数量 (1M entries) |
| | knowledge_length | `8` | 单条知识长度 (token数) |
| | use_moe | `false` | 是否使用专家混合 |
| **融合机制** | fusion_heads | `8` | 交叉注意力头数 |
| | attention_dropout | `0.1` | 注意力Dropout |
| | fusion_dropout | `0.15` | 融合Dropout |
### 🤖 **[AI构建]** 训练配置
| 参数类别 | 参数名 | 值 | 说明 |
|---------|--------|----|----- |
| **训练设置** | epochs | `3` | 训练轮次 |
| | batch_size | `48` | 批次大小 |
| | accumulation_steps | `12` | 梯度累积步数 |
| | learning_rate | `2e-4` | 学习率 |
| | dtype | `bfloat16` | 数据类型 |
| | grad_clip | `1.0` | 梯度裁剪 |
| | balance_loss_coef | `0.1` | 平衡损失系数 |
| **数据路径** | data_path | `/home/pci/ycz/Code/Minimind/dataset/stable/merged_pretrain.jsonl` | 训练数据路径 |
| | database_init_path | `/home/pci/ycz/Code/Minimind/dataset/stable/sentence_trex_data.json` | 知识库初始化路径 |
| | cluster_cache_path | `None` | 聚类缓存路径 (禁用) |
### 🤖 **[AI构建]** 硬件配置
| 配置项 | 值 | 说明 |
|-------|----|----- |
| **GPU设置** | CUDA_VISIBLE_DEVICES | `0` | 使用的GPU (单卡RTX 4090) |
| | num_processes | `1` | 进程数 |
| | mixed_precision | `bf16` | 混合精度 |
| **监控** | use_swanlab | `true` | 是否使用SwanLab |
| | swanlab_project | `MiniMind-Experiment-1.4.8` | SwanLab项目名 |
| **性能** | use_flash_attn | `true` | 使用Flash Attention |
| | memory_monitor_interval | `100` | 内存监控间隔 |
---
## 🚀 执行记录
### 🤖 **[AI构建]** 开始执行
- **开始时间**: `[START_TIME]`
- **命令行**:
```bash
[COMMAND_LINE]
```
### 🤖 **[AI构建]** 训练进度
| 阶段 | 开始时间 | 结束时间 | 状态 | 备注 |
|-----|---------|---------|------|-----|
| 环境初始化 | `[INIT_START]` | `[INIT_END]` | `[INIT_STATUS]` | `[INIT_NOTES]` |
| 数据加载 | `[DATA_START]` | `[DATA_END]` | `[DATA_STATUS]` | `[DATA_NOTES]` |
| 模型初始化 | `[MODEL_START]` | `[MODEL_END]` | `[MODEL_STATUS]` | `[MODEL_NOTES]` |
| 训练执行 | `[TRAIN_START]` | `[TRAIN_END]` | `[TRAIN_STATUS]` | `[TRAIN_NOTES]` |
### 🤖 **[AI构建]** 错误日志
```
[ERROR_LOGS]
```
---
## 📊 训练结果
### ✅ **[AI完成]** 关键指标
| 指标 | 最终值 | 最佳值 | 达到轮次 | 目标值 | 是否达标 |
|-----|--------|--------|---------|--------|----------|
| **Loss** | `[FINAL_LOSS]` | `[BEST_LOSS]` | `[BEST_LOSS_EPOCH]` | `[TARGET_LOSS]` | `[LOSS_ACHIEVED]` |
| **困惑度** | `[FINAL_PPL]` | `[BEST_PPL]` | `[BEST_PPL_EPOCH]` | `[TARGET_PPL]` | `[PPL_ACHIEVED]` |
| **学习率** | `[FINAL_LR]` | - | - | - | - |
| **GPU内存** | `[FINAL_GPU_MEM]` | `[PEAK_GPU_MEM]` | - | - | `[GPU_WITHIN_LIMIT]` |
### ✅ **[AI完成]** 训练曲线分析
**Loss收敛情况**:
```
[LOSS_CONVERGENCE_ANALYSIS]
```
**内存使用分析**:
```
[MEMORY_USAGE_ANALYSIS]
```
**训练稳定性**:
```
[TRAINING_STABILITY_ANALYSIS]
```
### ✅ **[AI完成]** 模型质量评估
**文本生成样例** (前10个token):
```
[TEXT_GENERATION_SAMPLES]
```
**生成质量评估**:
- 连贯性: `[COHERENCE_SCORE]`
- 流畅度: `[FLUENCY_SCORE]`
- 多样性: `[DIVERSITY_SCORE]`
### ✅ **[AI完成]** 与基线对比
| 模型 | Loss | 困惑度 | 生成质量 | 训练时间 | GPU内存 |
|------|------|--------|---------|---------|---------|
| **本实验** | `[CURRENT_LOSS]` | `[CURRENT_PPL]` | `[CURRENT_QUALITY]` | `[CURRENT_TIME]` | `[CURRENT_MEM]` |
| **model_original** | `[BASELINE_LOSS]` | `[BASELINE_PPL]` | `[BASELINE_QUALITY]` | `[BASELINE_TIME]` | `[BASELINE_MEM]` |
| **提升比例** | `[LOSS_IMPROVEMENT]` | `[PPL_IMPROVEMENT]` | `[QUALITY_IMPROVEMENT]` | `[TIME_CHANGE]` | `[MEM_CHANGE]` |
---
## 📈 深度分析
### ✅ **[AI完成]** 实验发现
**主要发现**:
1. `[FINDING_1]`
2. `[FINDING_2]`
3. `[FINDING_3]`
**异常情况**:
- `[ANOMALY_1]`
- `[ANOMALY_2]`
**性能瓶颈**:
- `[BOTTLENECK_1]`
- `[BOTTLENECK_2]`
### ✅ **[AI完成]** 问题诊断
**已知问题**:
1. **问题**: `[PROBLEM_1]`
- **表现**: `[SYMPTOM_1]`
- **可能原因**: `[CAUSE_1]`
- **建议方案**: `[SOLUTION_1]`
2. **问题**: `[PROBLEM_2]`
- **表现**: `[SYMPTOM_2]`
- **可能原因**: `[CAUSE_2]`
- **建议方案**: `[SOLUTION_2]`
### ✅ **[AI完成]** 改进建议
**短期优化** (下个实验):
- `[SHORT_TERM_1]`
- `[SHORT_TERM_2]`
**中期改进** (未来3-5个实验):
- `[MEDIUM_TERM_1]`
- `[MEDIUM_TERM_2]`
**长期研究方向**:
- `[LONG_TERM_1]`
- `[LONG_TERM_2]`
---
## 🎯 实验结论
### ✅ **[AI完成]** 假设验证
| 假设 | 验证结果 | 支撑证据 | 置信度 |
|-----|----------|---------|--------|
| `[HYPOTHESIS_1]` | `[RESULT_1]` | `[EVIDENCE_1]` | `[CONFIDENCE_1]` |
| `[HYPOTHESIS_2]` | `[RESULT_2]` | `[EVIDENCE_2]` | `[CONFIDENCE_2]` |
### ✅ **[AI完成]** 实验评价
**目标达成情况**: `[GOAL_ACHIEVEMENT]` / 10
**实验成功度**: `[SUCCESS_RATE]` / 10
**数据可信度**: `[DATA_RELIABILITY]` / 10
**总体结论**:
```
[OVERALL_CONCLUSION]
```
**关键收获**:
- `[KEY_LEARNING_1]`
- `[KEY_LEARNING_2]`
- `[KEY_LEARNING_3]`
### ✅ **[AI完成]** 后续行动
**立即行动**:
- [ ] `[IMMEDIATE_ACTION_1]`
- [ ] `[IMMEDIATE_ACTION_2]`
**下个实验计划**:
- 实验编号: `experiment_[NEXT_VERSION]`
- 主要改动: `[NEXT_EXPERIMENT_CHANGES]`
- 预期改进: `[NEXT_EXPERIMENT_EXPECTATIONS]`
---
## 📁 文件清单
### ✅ **[AI完成]** 生成文件
- 实验脚本: `run_file/experiment_[VERSION].sh`
- 模型检查点: `out/experiment_[VERSION]/checkpoint_*.pt`
- 训练日志: `out/experiment_[VERSION]/train.log`
- SwanLab链接: `[SWANLAB_URL]`
### ✅ **[AI完成]** 实验环境
```bash
# 实验环境信息
[ENVIRONMENT_SNAPSHOT]
```
---
**实验完成时间**: `[COMPLETION_TIME]`
**审核状态**: 🔄 待审核 | ✅ 已审核 | ❌ 需修改
**Git提交**: 🔄 待提交 | ✅ 已提交 (`[COMMIT_HASH]`)