超参数: ,
超参数:
如图所示,是Adam优化器的伪代码。我们详细来看
简单来说,AdamW就是Adam优化器加上L2正则,来限制参数值不可太大,这一点属于机器学习入门知识了。以往的L2正则是直接加在损失函数上,比如这样子:
L
o
s
s
=
L
o
s
s
+
1
2
λ
∑
θ
i
∈
Θ
θ
i
2
Loss = Loss + \frac{1}{2}\lambda\sum_{ heta_i \in \Theta} heta_i ^2
Loss=Loss+21?λθi?∈Θ∑?θi2?
但AdamW稍有不同,如下图所示:
粉色部分,为传统L2正则施加的位置;而AdamW,则将正则加在了绿色位置。至于为何这么做?直接摘录BERT里面的原话看看——
总之就是说,如果直接将L2正则加到loss上去,由于Adam优化器的后序操作,该正则项将会与和产生奇怪的作用。具体怎么交互的就不求甚解了,求导计算一遍应该即可得知。
因而,AdamW选择将L2正则项加在了Adam的和等参数被计算完之后、在与学习率lr相乘之前,所以这也表明了weight_decay和L2正则虽目的一致、公式一致,但用法还是不同,二者有着明显的差别。以BERT中的AdamW代码为例,具体是怎么做的一望便知:
如code,注意BERT这里的 就是当前的learning_rate。而最后两行就涉及的计算。如果我们将AdamW伪代码第12行的公式稍加化简,会发现实际上这一行大概是这样的:
θ
t
=
θ
t
?
1
?
l
r
?
g
r
a
d
θ
?
l
r
?
λ
?
θ
t
?
1
heta_t = heta_{t-1} - lr * grad_ heta - lr * \lambda* heta_{t-1}
θt?=θt?1??lr?gradθ??lr?λ?θt?1?
此处
λ
\lambda
λ就是。再将上述公式最后一项和code最后一行对比,是不是一模一样呢。