BitNet b1.58在BitNet的基础上做了一些修改。
权重量化。采用absmean的方式将权重约束在
{
−
1
,
0
,
1
}
\{-1,0,1\}
{−1,0,1}中,而BitNet则将权重约束为二值
{
−
1
,
1
}
\{-1,1\}
{−1,1}。具体来说,先使用平均绝对值来缩放权重,然后通过舍入的方式转换为
{
−
1
,
0
,
1
}
\{-1,0,1\}
{−1,0,1}:
W
~
=
RoundClip
(
W
γ
+
ϵ
,
−
1
,
1
)
(9)
\widetilde{W}=\text{RoundClip}(\frac{W}{\gamma+\epsilon},-1,1)\tag{9} \\
W
=RoundClip(γ+ϵW,−1,1)(9)
RoundClip ( x , a , b ) = max ( a , min ( b , round ( x ) ) ) (10) \text{RoundClip}(x,a,b)=\max(a,\min(b,\text{round}(x)))\tag{10} \\ RoundClip(x,a,b)=max(a,min(b,round(x)))(10)
γ = 1 n m ∑ i j ∣ W i j ∣ (11) \gamma=\frac{1}{nm}\sum_{ij}|W_{ij}|\tag{11} \\ γ=nm1ij∑∣Wij∣(11)
激活量化。同BitNet一样,但是对于非线性函数前的激活不再量化至 [ 0 , Q b ] [0,Q_b] [0,Qb],而是都量化至 [ − Q b , Q b ] [-Q_b,Q_b] [−Qb,Qb]。
此外,为了能够方便于开源软件兼容,整体结构采用类似LLaMA的结构。具体来说,使用RMSNorm、SwiGLU、RoPE并移除所有偏置。