MiniMind — 学习进度总结
AIMiniMind
2026-03-25 · 全文 … 字
📋 MiniMind 学习进度总结
学习者背景
- Apple M5 MacBook Pro(32GB),无 NVIDIA GPU,使用 PyTorch MPS 后端
- Python 初学,PyTorch 零经验,深度学习零基础
- 目标:理解原理、二次开发
已完成:阶段 1 —— 环境搭建与快速体验
- 克隆项目、创建虚拟环境、安装依赖
- 下载预训练权重,运行
eval_llm.py 对话测试
- 确认 MPS 后端可用
已完成:阶段 2(进行中)—— 模型架构
- MiniMind 采用 Decoder-Only 架构(同 GPT、LLaMA)
- 核心流程:Embedding → N 层 Decoder Block → RMSNorm → Linear 输出
- 每个 Decoder Block:RMSNorm → Attention → 残差连接 → RMSNorm → FFN → 残差连接
- MiniMind 默认配置:
hidden_size=512, num_heads=8, num_kv_heads=2, num_layers=8
2.2 RMSNorm
- 只用均方根做归一化,省去均值计算,比 LayerNorm 更快
- 公式:
x_norm = x / RMS(x) * γ,其中 RMS(x) = sqrt(mean(x²) + ε)
- γ 是可学习的缩放参数,ε 防止除零
2.3 RoPE(旋转位置编码)
- 通过旋转向量的角度来编码位置信息
- 核心性质:两个 Token 的点积只取决于它们的相对距离
- 把向量两两分组,每组在二维平面上按位置旋转不同角度
- 低维组旋转快(捕捉局部关系),高维组旋转慢(捕捉远距离关系)
- 用复数乘法高效实现旋转,直接作用在 Q 和 K 上
2.4 SwiGLU 激活函数(FFN)
- FFN 是 Attention 之后的逐位置特征变换,负责”深度加工”信息
- SwiGLU = Swish 激活 + 门控机制(GLU),两条路径相乘
- 三个线性层:gate 路径(Swish 激活)× up 路径,再经 down 投影回原始维度
- 隐藏层维度通常是输入维度的数倍(MiniMind 中由
intermediate_size 控制)
2.5 Self-Attention
- 每个 Token 通过 Q/K/V 三个角色与其他 Token 交互
- Q = “我在找什么”,K = “我能提供什么”,V = “我的实际内容”
- 公式:
Attention(Q,K,V) = softmax(Q·K^T / √d_k) · V
- 除以 √d_k 防止点积过大导致 softmax 饱和、梯度消失
2.6 Causal Mask
- 自回归生成要求每个 Token 只能看到它之前的 Token,不能偷看未来
- 用上三角矩阵将未来位置的注意力分数设为 -∞,softmax 后变为 0
- MiniMind 实现:
torch.triu(full(-inf), diagonal=1) 加到 scores 上
⏭️ 下一步应继续学习
- Multi-Head Attention →
- GQA →
- KV-Cache →
- MoE →
- 更多…