当你调用 GPNRoFormerForMaskedLM.from_pretrained(...) 时,程序的执行顺序是:
执行 init:
你的 self.adapter 被创建。
权重被手动设为 1.0 和 0.0。
执行 self.post_init():
这会调用 self.init_weights(),它会遍历模型的所有子模块。
风险点:如果你基类中的 _init_weights 方法对所有 nn.Linear 都有通用的初始化逻辑(比如正态分布或 Xavier 初始化),那么它会覆盖掉你在 init 里刚写好的 1.0。
加载 Checkpoint 文件:
如果 checkpoint 文件夹里包含 adapter 的权重(比如你训练过一次后保存的模型),那么它会完美覆盖之前的任何值。
如果 checkpoint 里不包含 adapter(比如你在加载官方预训练模型),那么 adapter 就会保留第 2 步 post_init 随机化后的结果。
