模型加载权重的时候发生了什么

当你调用 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 随机化后的结果。