激活函数:百川2使用SwiGLU作为激活函数。SwiGLU是当下一些LLMs(PALM,LLaMA等)倾向选择的一种激活函数。由于SwiGLU相当于两个线性变换(其中一个加了Swi函数)的乘积,前馈层SwiFFN包含了三个参数矩阵
(
S
w
i
s
h
(
x
W
1
)
×
x
V
)
W
2
(Swish(xW_1)\times xV) W_2
(Swish(xW1)×xV)W2,为了保持相同的计算量,我们将隐藏层的尺寸从4倍隐藏层大小缩减到8/3倍隐藏层大小(缩减到原来的2/3,这样三个参数的计算量为2/3*3=2,基本和原来2个矩阵的计算量持平),再近似到128的倍数。
Optimization:文章采用AdamW为优化器
NormHead:文章做了数值实验发现通过使用NormHead,即正则output层(heads),训练动态过程可以更加稳定,此外文章发现语义信息主要由cosine相似度
<
a
,
b
>
∥
a
∥
2
∥
b
∥
2
\frac {}{\Vert a\Vert_2 \Vert b\Vert_2}
∥a∥2∥b∥2<a,b>进行度量,但线性层是通过计算点积
<
a
,
b
>
<a,b>进行计算的,两者之间相差了
a
,
b
a, b
a,b的L2范数,从而通过对输出层进行L2正则,我们可以有效地减轻L2距离对语义信息的影响。
Max-z loss:文章发现训练过程中,LLMs的logits可能变得非常大,而softmax很容易被这些非常大的logits所影响。为此,一些研究选择采用惩罚项来对太大的logits进行惩罚,比如repetition penalty,但这样可能会扭曲最后生成的概率。文章类似PALM,增加一项max-z loss来对logits进行正则:
L
m
a
x
−
z
=
2
e
−
4
∗
z
2
\mathcal{L}_{max-z} = 2e^{-4} * z^2
Lmax−z=2e−4∗z2,其中
z
z
z表示logits的最大值,即logits最大值越大,损失
L
=
L
0
+
L
m
a
x
−
z
\mathcal{L} = \mathcal{L_0} + \mathcal{L}_{max-z}
L=L0+Lmax−z越大,从而起到对太大的logits的惩罚作用