Fast R-CNN论文中per-layer learning rate的含义与使用问题咨询
问题解答
1. per-layer learning rate与layer-specific learning rate的关系及生效逻辑
- 二者是同一概念,都是指给不同参数组分配差异化的学习率规则。需要注意的是Fast R-CNN论文中提到的
per-layer learning rate指的是学习率缩放系数,并非参数实际生效的学习率。 - 二者同时生效的规则很简单:参数实际使用的学习率 = 全局学习率 × 该参数对应的per-layer缩放系数。
对应论文的设定:- 所有权重参数的实际学习率 = 0.001 × 1 = 0.001
- 所有偏置参数的实际学习率 = 0.001 × 2 = 0.002
补充说明:论文里的per-layer并不是指不同层设置不同缩放系数,而是指同一层内权重、偏置两类参数分别使用固定的缩放系数,所有层的权重缩放系数都是1,所有层的偏置缩放系数都是2。
2. 给出的PyTorch实现是否符合论文设定
该实现不符合论文设定,问题出在两点:
- 实现逻辑是按层分配不同学习率,没有区分同一层内权重和偏置的差异化学习率要求,和论文的规则完全不匹配。
- 实现中第二个参数组设置的
lr=1是参数实际生效的学习率,和论文里的per-layer缩放系数概念混淆,如果搭配全局学习率1e-3使用,该组参数的实际学习率是1,远高于论文要求的0.002,会导致训练异常。
符合论文设定的正确实现示例:
# 拆分所有参数为权重、偏置两组 param_groups = [ # 权重组不单独设置lr,使用全局学习率,对应缩放系数1 {"params": [p for name, p in model.named_parameters() if "weight" in name]}, # 偏置组单独设置lr为0.002,对应缩放系数2 {"params": [p for name, p in model.named_parameters() if "bias" in name], "lr": 0.002} ] # 全局学习率设置为0.001 optimizer = optim.SGD(param_groups, lr=1e-3, momentum=0.9)
内容的提问来源于stack exchange,提问作者justin_sakong
相关产品推荐
相关产品推荐

