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

12 KiB
Raw Blame History

实验记录模版 - 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构建] 关键代码片段

核心修改:

# 新的交叉注意力融合机制
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完成] 实验发现

主要发现:

  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完成] 实验环境

# 实验环境信息
[ENVIRONMENT_SNAPSHOT]

实验完成时间: [COMPLETION_TIME]
审核状态: 🔄 待审核 | 已审核 | 需修改
Git提交: 🔄 待提交 | 已提交 ([COMMIT_HASH])