Minimind/experiment/EXPERIMENT_1_4_8.md
2025-08-20 13:46:42 +08:00

378 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 实验记录模版 - 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]`)