12 KiB
12 KiB
实验记录模版 - 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构建] 决策推理过程
关键决策点:
-
融合机制选择
- 选项:
门控MLP vs 交叉注意力 vs 直接拼接 - 选择:
交叉注意力(nn.MultiheadAttention) - 理由:
更好的记忆选择性和上下文感知能力
- 选项:
-
注意力头数设定
- 选项:
4头 vs 8头 vs 16头 - 选择:
8头(64维/头) - 理由:
平衡表达能力和计算效率,与主模型32头保持合理比例
- 选项:
-
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构建] 关键代码片段
核心修改:
# 新的交叉注意力融合机制
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稍高
# 交叉注意力融合函数
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 摘要:
修改: model/model_memory.py
+37, -20 行
- 删除: GatedMemoryFusion原门控MLP实现(约20行)
+ 增加: 交叉注意力实现(约37行)
- 替换: 融合机制全部重写
📋 实验基本信息
🧑🔬 [人类填写] 实验目标
基于实验: experiment_1.4.7
实验目的:
研究假设:
预期结果:
实验重点:
🤖 [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 |
| num_processes | 1 |
|
| mixed_precision | bf16 |
|
| 监控 | use_swanlab | true |
| swanlab_project | MiniMind-Experiment-1.4.8 |
|
| 性能 | use_flash_attn | true |
| memory_monitor_interval | 100 |
🚀 执行记录
🤖 [AI构建] 开始执行
- 开始时间:
[START_TIME] - 命令行:
[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完成] 实验发现
主要发现:
[FINDING_1][FINDING_2][FINDING_3]
异常情况:
[ANOMALY_1][ANOMALY_2]
性能瓶颈:
[BOTTLENECK_1][BOTTLENECK_2]
✅ [AI完成] 问题诊断
已知问题:
-
问题:
[PROBLEM_1]- 表现:
[SYMPTOM_1] - 可能原因:
[CAUSE_1] - 建议方案:
[SOLUTION_1]
- 表现:
-
问题:
[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完成] 实验环境
# 实验环境信息
[ENVIRONMENT_SNAPSHOT]
实验完成时间: [COMPLETION_TIME]
审核状态: 🔄 待审核 | ✅ 已审核 | ❌ 需修改
Git提交: 🔄 待提交 | ✅ 已提交 ([COMMIT_HASH])