最近在看其他量化训练的一些代码、论文等,不经意间注意到有人建议要关注weight decay值的设置,建议设置为1e-4, 不要设置为1e-5这么小,当然,这个值最好还是在当下的训练任务上调一调。
因为weight-decay 可以使参数尽可能地小,尽可能地紧凑,那这样权重的数值就不太可能出现若干个极端数值(偏离权重均值过大或过小)导致数值区间过大,这样求得的scale=(b-a)/255 会偏大,导致的结果就是大量数值较为接近的浮点数被量化到同一个数,严重损失了精度。
关于weight-decay 需要和L2正则做个区分:参考《DECOUPLED WEIGHT DECAY REGULARIZATION》,论文连接如下:
https://arxiv.org/pdf/1711.05101.pdfarxiv.org
weight-decay 的原始定义如下:
概念的含义为:在与梯度做运算时,当前权重先减去一定比例的大小。
L2正则化的定义如下:
概念的含义为: 在损失函数增加一项权重的L2约束。
可以看出两个的定义完全不同,但是在SGD中,当满足特定条件时,这两者又是等价的,参考论文中的证明:
训练框架中往往没有实现真正的weight-decay,只是在SGD中碰巧等同了,因此才发展出论文中提到的AdamW, SGDW.
各个框架是否做了修正,还需要细看,在量化训练中,可以把两种优化方式都试试。
关于量化训练的一个小tip: weight-decay - magic的文章 - 知乎 https://zhuanlan.zhihu.com/p/157220390