RepQ-ViT
中提到了
l
o
g
2
log 2
log2量化和
l
o
g
2
log \sqrt{2}
log2量化,找来看下公式
1. FQ-ViT 部分
Log2 量化公式翻译自:
Fq-vit: Post-training quantization for fully quantized vision transformer
介绍模型量化基本概念. 假定量化位宽 b b b, 量化器 Q ( X ∣ b ) \textrm{Q}(\textrm{X}|b) Q(X∣b) 能被形式化一个函数, 能将一个浮点数 X ∈ R \textrm{X}\in \mathbb{R} X∈R 映射为最近的 quantization bin:
(quantization bin 我自己一般翻译为量化值, 诸君自己看怎么翻译)
Q
(
X
∣
b
)
:
R
→
q
,
\begin{equation} \textrm{Q}(\textrm{X}|b): \mathbb{R} \rightarrow \textrm{q}, \end{equation}
Q(X∣b):R→q,
q
=
{
{
−
2
b
−
1
,
⋯
,
2
b
−
1
−
1
}
S
i
g
n
e
d
,
{
0
,
1
⋯
,
2
b
−
1
}
U
n
s
i
g
n
e
d
.
\begin{equation} \textrm{q}= \left\{\begin{aligned} & \{-\textrm{2}^{b-1},\cdots ,\textrm{2}^{b-1}-\textrm{1}\} & Signed, \\ & \{\textrm{0}, \textrm{1} \cdots ,\textrm{2}^{b}-\textrm{1}\} & Unsigned. \end{aligned}\right. \end{equation}
q={{−2b−1,⋯,2b−1−1}{0,1⋯,2b−1}Signed,Unsigned.
已有的文献存在许多量化器
Q
(
X
∣
b
)
\textrm{Q}(\textrm{X}|b)
Q(X∣b), 比如均匀量化1和 log2量化2
均匀量化 量化器
Q
(
X
∣
b
)
\textrm{Q}(\textrm{X}|b)
Q(X∣b) 定义为:
Q
(
X
∣
b
)
=
clip
(
⌊
X
s
⌉
+
z
p
,
0
,
2
b
−
1
)
,
\begin{equation} \textrm{Q}(\textrm{X}|b)=\operatorname{clip}(\lfloor\frac{\textrm{X}}{s}\rceil+zp, \textrm{0}, \textrm{2}^{b}-\textrm{1}), \end{equation}
Q(X∣b)=clip(⌊sX⌉+zp,0,2b−1),
其中
s
s
s~(scale, 量化缩放系数) 和
z
p
zp
zp~(zero-point, 量化零点) 由
X
\textrm{X}
X 的上下界
l
l
l 和
u
u
u决定, 通常是其最大最小值:
l = min ( X ) , u = max ( X ) , s = u − l 2 b − 1 , z p = clip ( ⌊ − l s ⌉ , 0 , 2 b − 1 ) . \begin{align} l= & \min(\textrm{X}), u=\max(\textrm{X}), \\ s= & \frac{u-l}{\textrm{2}^b-\textrm{1}},zp=\operatorname{clip}(\lfloor-\frac{l}{s}\rceil, \textrm{0}, \textrm{2}^{b}-\textrm{1}). \end{align} l=s=min(X),u=max(X),2b−1u−l,zp=clip(⌊−sl⌉,0,2b−1).
Log2 量化 将量化过程从线性转换为指数.
量化器
Q
(
X
∣
b
)
\textrm{Q}(\textrm{X}|b)
Q(X∣b) 定义为:
Q
(
X
∣
b
)
=
sign
(
X
)
⋅
clip
(
⌊
−
log
2
∣
X
∣
max
(
∣
X
∣
)
⌉
,
0
,
2
b
−
1
−
1
)
.
\begin{equation} \textrm{Q}(\textrm{X}|b)=\operatorname{sign}(\textrm{X})\cdot \operatorname{clip}(\lfloor -\log_\textrm{2}\frac{|\textrm{X}|}{\max(|\textrm{X}|)}\rceil, \textrm{0},\textrm{2}^{b-1}-\textrm{1}). \end{equation}
Q(X∣b)=sign(X)⋅clip(⌊−log2max(∣X∣)∣X∣⌉,0,2b−1−1).
在本文中, 为了实现完全量化的视觉变压器, 我们量化了所有模块, 包括Conv、Linear、MatMul、LayerNorm、Softmax等
2. RepQ-ViT 部分
均匀量化器是硬件支持良好的最流行的选择之一,其定义如下:
Quant
:
x
(
Z
)
=
clip
(
⌊
x
s
⌉
+
z
,
0
,
2
b
−
1
)
DeQuant
:
x
^
=
s
(
x
(
Z
)
−
z
)
≈
x
\begin{align} \text{Quant} & : \bm{x}^{(\mathbb{Z})} = \text{clip}\left(\left\lfloor \frac{\bm{x}}{s} \right\rceil+z, 0, 2^b-1 \right) \\ \text{DeQuant} & : \hat{\bm{x}} = s\left(\bm{x}^{(\mathbb{Z})}-z\right) \approx \bm{x} \end{align}
QuantDeQuant:x(Z)=clip(⌊sx⌉+z,0,2b−1):x^=s(x(Z)−z)≈x
其中
x
\bm{x}
x和
x
(
Z
)
\bm{x}^{(\mathbb{Z})}
x(Z)分别是浮点和量化值,
⌊
⋅
⌉
\left\lfloor\cdot\right\rceil
⌊⋅⌉表示四舍五入函数,
b
∈
N
b \in \mathbb{N}
b∈N是量化位宽。
反量化值 x ^ \hat{\bm{x}} x^近似地恢复了 x \bm{x} x。
重要的是, s ∈ R + s\in \mathbb{R}^+ s∈R+是量化缩放比, z ∈ Z z \in \mathbb{Z} z∈Z是零点,两者由 x \bm{x} x的下限和上限确定,如下所示:
s = max ( x ) − min ( x ) 2 b − 1 , z = ⌊ − min ( x ) s ⌉ \begin{equation} s = \frac{\max(\bm{x})-\min(\bm{x})}{2^b-1}, \quad z = \left\lfloor-\frac{\min(\bm{x})}{s} \right\rceil \end{equation} s=2b−1max(x)−min(x),z=⌊−smin(x)⌉
l
o
g
2
log2
log2量化器是另一种常见且面向硬件的选择。由于它仅在本文中应用于后Softmax激活,我们只考虑正值的量化,如下所示:
Quant
:
x
(
Z
)
=
clip
(
⌊
−
log
2
x
s
⌉
,
0
,
2
b
−
1
)
DeQuant
:
x
^
=
s
⋅
2
−
x
(
Z
)
≈
x
\begin{align} \text{Quant} & : \bm{x}^{(\mathbb{Z})} = \text{clip}\left(\left\lfloor -\log_2 \frac{\bm{x}}{s} \right\rceil, 0, 2^b-1 \right) \\ \text{DeQuant} & : \hat{\bm{x}} = s\cdot 2^{-\bm{x}^{(\mathbb{Z})}} \approx \bm{x} \end{align}
QuantDeQuant:x(Z)=clip(⌊−log2sx⌉,0,2b−1):x^=s⋅2−x(Z)≈x
其中log2函数和基于2的幂函数都可以使用快速而高效的位移操作来实现34
Quantization and training of neural networks for efficient integer-arithmetic-only inference ↩︎
A deep look into logarithmic quantization of model parameters in neural networks ↩︎
Lognet: Energy-efficient neural networks using logarithmic computation ↩︎
Fq-vit: Post-training quantization for fully quantized vision transformer ↩︎