minimind/course/notes/08_model_architecture_notes.md

2.3 KiB
Raw Blame History

第8节:MiniMindForCausalLM 模型结构

模型类核心机制笔记


📚 本节目录

  1. _tied_weights_keys 和 weight = weight 是否重复?
  2. self.post_init() 是干什么的?
  3. 超短记忆版

1. _tied_weights_keys 和 weight = weight 是否重复?

结论:不是重复,而是"真实共享 + 框架声明"两层机制

(1) 真正起作用的是这一句(PyTorch 层)

self.model.embed_tokens.weight = self.lm_head.weight

作用:

  • 两个参数指向同一块内存
  • 真正实现"权重共享"
  • forward + backward 都共享梯度

本质:计算图层面的绑定(真实共享)

(2) _tied_weights_keys(HF 框架层)

_tied_weights_keys = {"lm_head.weight": "model.embed_tokens.weight"}

作用:告诉 HuggingFace 这两个权重是 tied 的

用于:

  • save_pretrained(避免重复存储)
  • from_pretrained(恢复绑定关系)
  • state_dict 管理

总结

层级 代码 作用
PyTorch 层 weight = weight 真的共享参数
HF 框架层 _tied_weights_keys 框架识别共享关系(存储/加载)

2. self.post_init() 是干什么的?

一句话版本:模型构建完成后的"框架统一初始化 + 校验 + 补全步骤"

它主要做 4 件事:

序号 作用 说明
(1) 权重初始化收尾 Linear / Embedding 初始化补全,_init_weights() 可能在这里被调用
(2) 检查/补齐 weight tying 确认 embedding 和 lm_head 是否真的 tied,没绑定可能自动修复
(3) dtype / device 统一 float32 / float16 对齐,meta tensor 修正,device consistency
(4) config 驱动初始化逻辑 initializer_range、tie_word_embeddings 等配置

一句话总结

post_init() = HF 在模型构建结束后做的"最后一次统一初始化 + 校验 + 修正"


超短记忆版(考试/面试级)

tied weights

  • weight = weight → 真正共享参数(计算图层)
  • _tied_weights_keys → 框架识别共享关系(存储/加载层)

post_init

  • 模型构建完成后的统一收尾步骤:初始化 + 校验 + 修正 + tie 检查