归一化 Hadamard、分块结构以及符号和排列的组合,提供了多种重新分配坐标能量的方式。对线性层同时变换激活与权重,可以保持精确算术下的输出。量化却依赖各个坐标的幅值、共享尺度的分组和有限的重建网格:同一个精确内积,换一套坐标计算,可能产生另一种舍入误差。
因此,为一层选择变换时,需要同时给出该层的激活、权重和量化规则。首先要明确误差如何进入输出,再考察量化分组怎样影响误差;有了评价标准,就可以用校准数据比较候选变换,进一步学习变换参数。当正交混合的自由度仍然受限时,通道缩放还可以调节激活与权重之间的幅值分配。
等价的精确计算,为什么产生不同量化误差
从一个线性层确定评价对象
将 M 行输入送入一个具有 K 个输入通道、N 个输出通道的线性层,写为
X 的一行可以是一个语言 token 或图像位置的特征,W 的一行给出一个输出通道的系数。令正交矩阵 满足
,将激活与权重共同参与求和的 K 个通道变换为
这个恒等式确定了比较基准:各个候选 R 对应同一个参考输出 Y。若线性层有偏置,可以在各条路径的乘积后加上相同偏置。量化放在 、
形成之后,接下来要观察编码与重建怎样改变这个乘积。
四维输入的完整计算
取 M=1、K=4、N=2:
原结果是 。
记 为元素取
、满足
的 Hadamard 矩阵,归一化后为
。本例使用四阶 Sylvester 构造:
使用归一化 Sylvester 矩阵 后:
逐个输出核对:
原输入的能量集中在一个通道,变换后分到四个通道;权重的坐标也随之改变。内积保持,来自这两项变化的配对。
量化之后,误差从哪里进入
精确乘法中,两侧的旋转恰好抵消。量化插在旋转与乘法之间,舍入和截断会改变传入乘法的数值;同一个内积于是可以在不同坐标中产生不同的量化误差。
为区别于 Hadamard 矩阵 ,将量化加重建写成
。例如,一个对称均匀量化器用整数
编码:
s 是步长,也称 scale;round 将数值取到最近的整数,clip 将结果限制在表示范围内。本文采用 的对称整数网格作为例子,scale 可按一行或一个小组的最大绝对值除以 7 来选择。
的公式描述编码后重建出的数值,实际实现可以保存整数及 scale,在矩阵乘或输出缩放时使用它们。
继续上面的四维例子,为每行独立选择 scale。输入 用
,可以精确重建。第一行变换后权重
用
,整数码及重建值为:
因此第一个输出变成 。正交改写本身保留了结果,数值舍入改变了结果。旋转的作用需要由量化后的误差来衡量。
令 、
,量化后的乘积可展开为:
这三个项分别来自激活误差、权重误差和两者的交叉作用。它们还分别受到另一侧矩阵的加权,因此激活或权重的重建误差相同,最终输出误差也可能不同。选择变换时,需要评价两侧共同产生的结果。这里的编码误差与实际浮点计算中的舍入误差分别核对。
旋转块与量化组怎样共同影响误差
变换后的坐标确定了,编码还需要为这些数值选择尺度。一个块内共同参加混合的通道,是否也必须共用一个量化尺度?这涉及两个阶段的分组,应当分别定义。
一块变换可以对应多组量化
旋转块长 决定哪些输入一起参加加减。量化组长
决定哪些输出共享一个尺度。二者作用于计算的不同阶段:
例如 、
、
时,旋转分成两个四维块,量化分成四个二维组:
旋转时,每块中的四个数已经共同参与运算;随后把输出切成两组求尺度,并不会撤销前面的混合。在这种整除且边界对齐的安排中,每个旋转块包含 个量化组。推广到
,一行有 16 个旋转块、128 个量化组,每个旋转块对应八个尺度。
用八个数看尺度怎样改变误差
取
两块分别变换后得到
下面固定这个旋转结果,只改变尺度的分组方式。采用对称均匀量化,整数范围为 。对每组
定义
全零组可直接编码成零,尺度按实现约定取一个正数。这个例子中的各组都有非零值,因此不需要额外处理。
若 ,整行共用
,则
前半行的最大值 5 决定了后半行的量化步长;0.1 和 0.2 都被舍入为零。若改成 ,四组的尺度分别是
于是
例如 0.1 位于 这一组,使用步长
,重建为
。两个方案在此例中的总平方误差分别为
更细的分组在这个例子中减少了误差,同时将尺度数量从一个增加到四个。实际系统需要把数值误差、尺度存储、计算开销和低比特算子的分组要求一起考虑。旋转块长与量化组长应分别写入模型配置。
块长、符号和排列共同确定 R,量化组长 G 则确定变换后哪些坐标共享尺度。比较候选 R 时,应先固定量化分组规则;若也希望调整 G,就把 作为一组配置,同时记录尺度数量和算子支持情况。这样可以区分误差变化究竟来自坐标混合,还是来自更多的量化尺度。
用校准数据比较候选变换
把选择标准写成输出误差
校准数据是一小组用于确定量化参数的代表性输入。对某个线性层,可以运行原模型并收集该层实际接收到的激活;这些激活与该层权重一起,构成比较变换所需的数据。对于图像、视频生成模型,输入还应覆盖准备使用的时间步或条件,因为同一层的激活分布可能随条件变化。
将收集到的校准输入组成 ,保持预训练权重 W 固定,先用浮点计算得到参考输出
。对候选正交矩阵
,同时变换激活与权重,再模拟部署时的量化:
这里 和
都包含舍入、截断和按 scale 重建的过程,输出仍可用浮点数表示。因而可以直接比较
与参考输出
。一个便于理解的逐层目标是
表示把矩阵中所有元素的平方相加。这一目标先计算该层的量化输出误差,再对
个输出元素取平均;使用多批校准数据时,还可以对各批误差求平均。
这一目标把前面的三项误差合并到同一个输出中。若使用同一批输入和同一组量化规则,就可以直接比较不同 R 的损失。激活峰值、权重峰值和各自的重建误差仍有助于分析原因,最终选择则应与希望控制的误差对象一致。
三个候选矩阵的完整比较
固定权重与三行校准输入:
取三个候选矩阵:
采用前面的四阶 Sylvester 矩阵,D 固定翻转第四个输入通道的符号。三个候选都保持精确内积。分别变换 X 与 W 后,激活每行、权重每行各用一个 scale,均采用最大绝对值除以 7 的尺度规则和
的整数网格。由此得到:
| 候选变换 | 精确计算的输出均方误差 | 加入量化后的输出均方误差 |
|---|---|---|
| 0 | 1.054561 | |
| 0 | 0.165001 | |
| 0 | 1.054561 |
在这三行输入和指定量化规则下, 的输出误差最小。这个结论只对应当前比较条件;更换权重、输入或尺度分组以后,需要重新计算损失。表中的差异也说明,固定 Hadamard 与增加符号翻转的组合应当作为候选接受评价,变换的名称本身无法决定哪一个误差更小。
有限候选集 上的选择可以写成
实际候选可以来自不同块长、块内矩阵、符号向量或排列。多级结构 也可以固定组合形式,再用数据选择其中的矩阵与排列;这里
为同维正交变换,P 为排列矩阵,行向量依次经过第一次混合、重排和第二次混合。例如,根据异常值所在通道调整块内混合,并把大幅值通道重新分配到不同块。结构规定可执行的运算,校准数据决定在这个范围内采用哪一组参数。
让比较条件与部署条件对应
每个候选都要按同一套量化规则重新生成 scale 和重建值。例如,规则都是“每组最大绝对值除以 7”,具体 scale 随变换后的数值重新计算。如果沿用另一个候选的尺度,比较中就混入了不匹配的量化参数。
对于固定结构的比较,应保持位宽、数值格式、分组方式、裁剪策略和评价数据一致;若部署采用低精度尺度,还应在比较时模拟尺度本身的编码。保留原始坐标 作为候选,可以衡量引入变换在当前配置下带来的变化。
校准完成后,用另外留出的输入检验误差,才能观察所选参数对新输入的适应情况。若准备按时间步或条件使用不同变换,应分别定义各组的校准目标,并让运行时的激活变换与对应的权重准备方式匹配。多组参数所增加的存储和执行成本,也属于选择条件。
有限候选集易于比较,但其覆盖范围由事先列出的结构和参数决定。若希望根据误差连续调整混合系数,就需要把 R 写成可优化参数的函数。
从选择候选到学习正交变换
将变换写成 ,其中
表示待优化参数,就可以沿用校准损失
来调整它:
损失怎样传到变换参数
参数变化沿下面的路径影响损失:
在精确运算中,去掉量化后总有 。因此,学习过程关心的是舍入、截断以后出现的差别。仅优化浮点线性层的重建误差,无法在这些等价的正交矩阵之间作出有效选择。采用梯度法时,还要为舍入操作指定反向传播的近似规则;具体的校准算法会规定该规则以及更新方式。
上述损失用于解释单层的计算关系。完整模型还可以用最终任务损失来选择旋转。例如,SpinQuant 第 3.2 节 使用含量化操作的模型在校准集上的任务损失,并保持预训练权重参数固定。此时,待优化旋转通过许多层的量化结果,最终影响模型输出。
直接学习一个稠密正交矩阵
损失函数规定了选择标准,参数化方式则规定能够选择哪些矩阵。最直接的做法是保存并更新整张矩阵,同时维持正交约束。一个 矩阵有
个存储位置,但正交矩阵的各个元素受到行向量长度与两两内积的共同约束:
前一类条件保证每行长度为 1,后一类保证不同的行互相垂直。局部独立的约束共有 个,所以连续自由度为
例如,二维平面旋转由一个角度确定;四维正交矩阵有 6 个连续自由度。若直接保存并更新整张矩阵,仍需 个数。更新算法还必须维持正交条件,否则前面的等价公式就失去了依据。
SpinQuant 用保持正交性的 Cayley 更新优化部分旋转,并区分可以并入权重的变换与需要在线执行的变换。这里需要分别核算校准时的参数量和推理时的额外计算量。具体变换能否并入权重,取决于它在模型中的位置以及相邻运算的性质。
若一个稠密矩阵可以提前乘入权重,部署时使用的是变换后的权重。若必须在运行时显式计算 ,普通稠密乘法每个输入向量需要
次算术操作。后一种位置更适合考虑带有快速算法的结构化矩阵。
用二维旋转组成可学习蝶形
为了减少需要保存和调整的参数,可以将候选矩阵限制为若干小正交因子的乘积。最小的非平凡因子只作用于两个通道,并由一个角度确定。定义
本文采用行向量右乘,因此一对输入的具体计算是
角度控制两个通道混合的比例。 时保持原值;
时,输出为
。每一对通道都可以拥有自己的角度。
从二维旋转到一整层矩阵
下面采用 、
的一种蝶形构造,通道编号从 0 开始。每层
都是
矩阵,包含
个互不重叠的二维旋转。 构造时,先将矩阵元素全部置零,再选定各对通道。对于一对
,把
按照行列顺序
填到第 p、q 行与第 p、q 列的交叉位置。这样,只有这一对通道互相参与计算;一层中的全部通道对合起来覆盖 K 个位置。
先取 。第一层配对
、
,分别使用角度
,于是
两个二维旋转沿对角线排列,各自混合两个相邻通道。第二层改为配对 、
,分别使用角度
,得到
其中,第 0、2 行与第 0、2 列交叉处的子矩阵是 ,第 1、3 行与第 1、3 列交叉处的子矩阵是
。两个旋转仍然互不重叠,只是参与同一旋转的通道在原始编号中相隔一个位置。
在行向量右乘约定下,整体计算为
因此先执行第一层,再执行第二层。第一层分别处理原通道 和
,第二层让这两组的输出继续参与混合。四个角度可以独立设置,也可以作为校准损失中的待优化参数。
以四维输入 为例,四个角度都取
:
| 步骤 | 本层读取的通道对 | 四个输出分量 |
|---|---|---|
| 输入 | — | |
| 第一层 | ||
| 第二层 |
第二层的第一对读到 ,产生
,写回位置 0 和 2;另一对读到
,产生
,写回位置 1 和 3。这样就能逐项得到表中的结果。输入和最终输出的平方和都为 1。
每层的配对规则与最后一层的形式
推广到 ,第
层取配对距离
将 K 个通道按长度 分组,每组前半部分与后半部分的对应位置两两配对。若 t 表示组号、j 表示半组内的位置,则
本层共有 对通道。用
为这些通道对编号,第 r 对使用自己的角度
。例如
时,共有三层:
| 层 | 配对距离 | 本层的通道对 |
|---|---|---|
| 1 | ||
| 2 | ||
| 4 |
第一层的一般形式就是相邻二维旋转组成的块对角矩阵:
当 时,第二层在每四个通道内部,采用上面四维
的结构;不同四通道组分别使用自己的两个角度。后续层依次扩大配对距离,每层中的一对通道都读取上一层的两个输出,再将旋转结果写回原来的两个位置。
最后一层的距离为 ,通道对为
。令
二者都是 的对角矩阵。按前后两半通道划分行列,最后一层可以明确写成
例如,将进入这一层的行向量记为 ,u、v 各含
个分量,则
由于 均为对角矩阵,第 j 个位置只与另一半的第 j 个位置配对。
时,
,这个形式展开后就是前面的四维
。
为什么每一层及其乘积都正交
每个二维旋转满足 ,因此同一对通道对应的两行长度均为 1、内积为零。不同通道对对应的行使用互不重叠的列,它们之间的内积也为零。整层矩阵由此满足
最后一层还可以直接用分块乘法核对。对角矩阵 互相可交换,且每个对角位置满足
,所以
将 m 层按执行顺序相乘,得到
当 时,
,正交性已经由单层的结论给出。当
时,利用转置会反转各因子的顺序,可以逐层展开:
因子从中间开始逐层抵消。各层即使采用不同角度,结论仍然成立。学习过程只需更新角度,并由它们生成对应的正弦、余弦系数,就能在精确运算中保持正交性;浮点实现中会有相应的数值舍入误差。
每层有 个角度,总计
个角度。实际执行时,按配对规则逐对更新即可,显式的
矩阵用于说明和核对计算关系。每层处理
对数据,应用整套变换的算术成本为
。这种逐层改变配对关系的计算图称为蝶形结构。ButterflyQuant 第 3.2 节 将这类可学习结构用于量化变换。
蝶形结构、Hadamard 与一般正交矩阵的关系
上面的角度可以连续调整,因而需要区分分层结构与固定的 Hadamard 系数。蝶形描述的是分层计算结构,Hadamard 还规定了具体系数。对于二维情形,两者的精确关系为
因此,使用这里定义的 时,还要对第二个输出取反,才能得到标准 Hadamard 的“和、差”顺序。这个符号因子也解释了
的行列式为
,而
的行列式为
。构造多层 Hadamard 蝶形时,应把对应符号规则一并写入每层操作。
当各个角度可以学习时,计算图保留了快速的分层结构,最终矩阵的元素则可以具有不同绝对值。每层因子稀疏,乘积 可以是稠密矩阵。四维的两层蝶形只有 4 个角度,而一般四维正交矩阵有 6 个连续自由度;这个比较表明,固定层数与固定配对模式限制了可表示的矩阵范围。
随机角度还需配合具体的采样分布才能定义随机矩阵族。正交性只保证长度与内积保持,Haar 分布还要求整个正交群上的分布具有旋转不变性。学习蝶形时,最终参数由校准数据决定,可以直接用校准误差与在线成本评价这一选择。
用缩放扩展正交变换的选择范围
学习正交矩阵可以改变坐标方向,但仍保持每个向量的长度。如果某些激活通道的幅值显著大于对应权重通道,还可以在混合之前重新分配两侧的幅值。通道缩放提供了这一自由度:把激活的某个通道缩小,同时把权重的对应通道放大,便有机会继续保持内积。这个配对是否成立、随后怎样与旋转组合,可以先用两个数核对。
先看一个仅有缩放的内积
取一个输入行向量和一个权重行向量:
选择正对角矩阵
将输入第一通道除以 4,同时将权重第一通道乘以 4:
新的内积为 。原来输入的最大绝对值为 8,缩放后为 2;权重的最大绝对值则由 2 增大到 4。这个过程把第一通道的一部分幅值压力从激活转移到了权重。
量化时,这一转移会同时影响两侧的 scale、舍入和截断。选择 时需要考察激活与权重共同产生的输出误差。只观察激活最大值的下降,还不足以评价该选择。
缩放后再旋转,完整的配对是什么
对一般线性层,设
激活与权重分别采用
按矩阵乘法从左到右理解,每个输入通道先除以 ,每个权重输入通道先乘以
,然后两者使用同一个
。验证时,先把权重一侧的转置完整展开:
其中, 来自对角结构,
来自正交性。各因子按相邻次序消去,得到原来的输出。
把前面的二维例子继续右乘 :
于是
这个例子包含三套坐标下的同一个内积:原始坐标、缩放后的坐标以及缩放再旋转后的坐标。加入量化以后,计算的是 ,输出差异来自各套坐标中的量化误差。
操作顺序为什么必须写清楚
“先缩放,再旋转”把某个原始通道的数值先调节,然后混入多个新通道;“先旋转,再缩放”调节的是混合以后的通道。两种操作一般产生不同结果。仍用上面的 和
:
因此,工程实现中的调用次序必须与公式一致。预先变换权重时也要使用同一套约定。能够折叠进权重的因子、必须在线执行的因子,以及量化发生在什么位置,都可以由完整乘积逐项确定。
从正交旋转推广到一般可逆变换
缩放与旋转的组合本身就是一个可逆矩阵。记 ,则
由此可以得到更一般的配对规则:对任意可逆 ,令激活右乘
,权重右乘
,就有
正交矩阵满足 ,因此两侧可以使用同一个矩阵。一般可逆矩阵则按逆转置关系配对,激活与权重使用的变换通常不同。
FlatQuant 第 3.1 节 在更大的可逆变换空间中学习量化前变换,并采用两个较小矩阵的 Kronecker 积降低参数存储与执行成本。论文将这一类方法称为仿射变换;上面的公式讨论其中通过可逆矩阵实现的线性部分。若将 写为
,其中
、
且
,可以把一行输入逐行排成
的数组 Z,计算
后再逐行展开。这一分解同样适用于学习得到的一般可逆因子。
一般可逆变换扩大了选择范围,也可能把某些方向放大、把另一些方向压缩。它的条件数衡量最大与最小长度放大倍数之比;该比值越大,逆变换对数值误差就可能越敏感。比较固定 Hadamard、可学习正交变换和一般可逆变换时,需要同时考察量化输出误差、校准代价、数值稳定性,以及在线乘法的实际成本。
选择这些参数时,仍然以量化后的输出为评价对象。对缩放与旋转的组合,可以写成
这个目标与正交变换的校准目标采用相同的输出比较方式,只是增加了正对角矩阵 S 的自由度。优化时保持 和
,并按实际量化规则重算两侧的重建值,就能评价幅值调节与坐标混合共同带来的变化。
用完整程序核对量化误差与候选选择
下面的程序只依赖 NumPy,可以独立运行。它保留显式矩阵,使坐标变换、量化重建和输出误差能够逐项对应正文。quant_group 沿最后一个维度分组,每组独立选择最大绝对值尺度;这里返回的是重建值,便于直接计算误差。
程序依次核对四维线性层的量化输出、量化组长的影响、三个候选的校准损失、可学习正交因子的组合,以及缩放与旋转的配对。学习部分核对参数化和正交关系;实际梯度更新需要另外定义量化算子的反向近似。
预期输出:
这些结果核对了小矩阵的量化误差、候选比较和参数化关系。模型准确率与生成质量,需要在对应模型和独立评价数据上测量。
参考资料
DuQuant:数据相关的块内旋转、通道重排与多级组合。
SpinQuant:正交约束下的旋转学习,以及任务损失与变换参数的联系。
FlatQuant:一般可逆变换、Kronecker 参数化与量化校准。
TR-DQ:扩散模型中的时间步相关重排与旋转。
ButterflyQuant:可学习的结构化蝶形变换。
热门文章
近 30 天 · 按去重阅读访问排序
还没有公开留言。欢迎留下第一个问题或复现记录。