ShuffleNet中get_parameters与直接传入model.parameters给优化器的区别
两种参数传入优化器的核心区别
- 权重衰减的生效规则完全不同
直接传入model.parameters()时,优化器配置的全局weight_decay参数会统一作用于模型的所有可训练参数。
使用get_parameters函数处理后,参数被拆分为两个独立的参数组,各自使用不同的权重衰减规则:权重衰减组:仅包含参数名含
weight且张量维度大于1的参数,对应卷积层、全连接层的二维权重矩阵,这类参数会继承优化器的全局权重衰减设置
无权重衰减组:包含其余所有参数,包括所有层的偏置bias、BatchNorm/LayerNorm等归一化层的一维缩放系数weight和偏移系数bias,这类参数被强制设置weight_decay=0,无论优化器全局如何配置,都不会施加L2正则 - 训练效果存在差异
这种参数拆分是CV领域训练的通用最优实践:不对偏置、归一化层参数施加L2正则,可以避免这类位置敏感的参数被过度约束,通常能小幅提升模型的拟合能力与泛化精度。如果直接传入所有参数且设置了全局权重衰减,上述参数会被同步正则,反而可能拖累模型最终效果。 - 超参数调整的灵活性不同
拆分参数组后,可以随时单独对两类参数配置不同的学习率、动量等超参数,不需要额外做参数筛选;直接传入model.parameters()只能对所有参数统一设置超参数,要实现自定义分组需要额外编码处理。
内容的提问来源于stack exchange,提问作者Nikoo_Ebrahimi
相关产品推荐
相关产品推荐

