标题:GPT-2权重复现踩坑
我一直在死磕OpenAI的GPT-2权重复现,结果跑出来的指标始终比原版差一截。训练曲线、超参数、数据预处理都对了好几遍,愣是没找到差距在哪。直到我把checkpoint逐层dump出来,对比原版权重,才发现一个让人抓狂的bug——位置编码的初始化方式藏了个陷阱。
下一篇
GPT-5.6让OpenAI七月收入碾压整个Q2,凭什么? →
OpenAI官方用的是nn.Embedding的默认初始化(均匀分布[-1, 1]),而我的实现里手写了一个nn.Parameter并用xavier初始化。光看理论两者差异不大,但在长序列上,这个微小偏差被自注意力放大,导致收敛方向和速度都偏了。排查过程其实挺枯燥:先画了层输出分布,发现attention logits方差比官方大15%,再往回推到embedding层才定位到。修复后重新训练30k步,验证loss直接对齐官方曲线。
如果你也在复现GPT-2或者做权重迁移,建议直接dump官方权重做初始化校验,别信自己手写的参数设定。特别检查embedding和layer norm的初始化范围,这两个地方最容易隐藏bug。
这次经历让我对“复现”这件事更警觉了:很多时候不是算法设计的问题,而是实现细节里的小偏差累积变大。建议在训练第一个epoch后就让采样输出跟官方做对比,越早发现越省时间。