浮点 LLL 的精度与正确性 在格基约化与 LLL 算法 的二维例子中,第一步算出 μ 2 , 1 = 8 / 5 \mu_{2,1}=8/5 μ 2 , 1 = 8/5 ,取最近整数 q = 2 q=2 q = 2 ,把第二列更新为 b 2 − 2 b 1 b_2-2b_1 b 2 − 2 b 1 。这一步可以分开执行:用浮点数估计 μ 2 , 1 \mu_{2,1} μ 2 , 1 ,选定整数 q q q ,再用精确整数运算更新基。
这种分工有一个重要后果。即使 q q q 选错,减去整数倍的另一列仍是幺模换基,输出仍生成原格。但更新后的投影系数是 μ 2 , 1 − q \mu_{2,1}-q μ 2 , 1 − q ,它可能落在 [ − 1 / 2 , 1 / 2 ] [-1/2,1/2] [ − 1/2 , 1/2 ] 之外。保持原格取决于怎样执行换基,达到约化条件还取决于怎样选择换基。
取整和交换各有一条判定边界
先沿用上一篇的严格尺寸条件 ∣ μ i , j ∣ ≤ 1 / 2 |\mu_{i,j}|\le 1/2 ∣ μ i , j ∣ ≤ 1/2 。尺寸约化要判断 μ i , j \mu_{i,j} μ i , j 最接近哪个整数,相邻两个选择的分界在半整数处。例如 8 / 5 = 1.6 8/5=1.6 8/5 = 1.6 距离最近的分界 1.5 1.5 1.5 有 0.1 0.1 0.1 。只要近似值的绝对误差严格小于 0.1 0.1 0.1 ,这一步仍会取到 q = 2 q=2 q = 2 。
交换则取决于另一个量。沿用前缀正交投影 π k − 1 \pi_{k-1} π k − 1 ,记 g i = ∥ b i ∗ ∥ 2 g_i=\|b_i^*\|_2 g i = ∥ b i ∗ ∥ 2 。将 Lovász 条件的右侧减去左侧,定义
Δ k = ∥ π k − 1 ( b k ) ∥ 2 2 − δ ∥ π k − 1 ( b k − 1 ) ∥ 2 2 = g k 2 + μ k , k − 1 2 g k − 1 2 − δ g k − 1 2 . \begin{aligned}
\Delta_k
&=\|\pi_{k-1}(b_k)\|_2^2-\delta\|\pi_{k-1}(b_{k-1})\|_2^2\\
&=g_k^2+\mu_{k,k-1}^2g_{k-1}^2-\delta g_{k-1}^2.
\end{aligned} Δ k = ∥ π k − 1 ( b k ) ∥ 2 2 − δ ∥ π k − 1 ( b k − 1 ) ∥ 2 2 = g k 2 + μ k , k − 1 2 g k − 1 2 − δ g k − 1 2 .
当 Δ k < 0 \Delta_k<0 Δ k < 0 时交换,当 Δ k ≥ 0 \Delta_k\ge 0 Δ k ≥ 0 时通过检查。上一篇图 1 中,π 1 \pi_1 π 1 是恒等映射,尺寸约化后的两列是 ( 2 , 1 ) T (2,1)^T ( 2 , 1 ) T 和 ( − 1 , 0 ) T (-1,0)^T ( − 1 , 0 ) T ,所以 Δ 2 = 1 − 15 / 4 = − 11 / 4 \Delta_2=1-15/4=-11/4 Δ 2 = 1 − 15/4 = − 11/4 。端点落在圆内,差值为负,两种表述给出同一个决定。
这个符号也关系到终止性。若交换相邻两列,上一篇的势函数公式给出
Φ ( B ′ ) Φ ( B ) = ∥ π k − 1 ( b k ) ∥ 2 2 g k − 1 2 = δ + Δ k g k − 1 2 . \frac{\Phi(B')}{\Phi(B)}
=\frac{\|\pi_{k-1}(b_k)\|_2^2}{g_{k-1}^2}
=\delta+\frac{\Delta_k}{g_{k-1}^2}. Φ ( B ) Φ ( B ′ ) = g k − 1 2 ∥ π k − 1 ( b k ) ∥ 2 2 = δ + g k − 1 2 Δ k .
因此,真实的 Δ k < 0 \Delta_k<0 Δ k < 0 才保证这次交换把势函数降到原来的 δ \delta δ 倍以下。错过一次应做的交换,可能让程序过早接受当前基。做了一次不满足该判据的交换,则失去了精确 LLL 证明所用的下降保证 [1, sec. 3.1 ]。
在同一张平面图上制造两次误判
固定第一列 b 1 = ( 1000 , 0 ) T b_1=(1000,0)^T b 1 = ( 1000 , 0 ) T ,令第二列为 p = ( x , y ) T p=(x,y)^T p = ( x , y ) T ,仍取 δ = 3 / 4 \delta=3/4 δ = 3/4 。这时 μ 2 , 1 = x / 1000 \mu_{2,1}=x/1000 μ 2 , 1 = x /1000 ,尺寸约化条带的边界是 x = ± 500 x=\pm500 x = ± 500 ,Lovász 圆的半径平方是 750000 750000 750000 。下面有意将判定量先四舍五入到两位小数,再作决定,以便直接看见误差的影响。
在条带边缘。 取 p = ( 499 , 1 ) T p=(499,1)^T p = ( 499 , 1 ) T 或 p = ( 501 , 1 ) T p=(501,1)^T p = ( 501 , 1 ) T ,精确投影系数分别为 0.499 0.499 0.499 和 0.501 0.501 0.501 。前者应取 q = 0 q=0 q = 0 ,后者应取 q = 1 q=1 q = 1 。两者舍入后都变成 0.50 0.50 0.50 。若统一取 q = 0 q=0 q = 0 ,第二个输入的系数仍是 0.501 0.501 0.501 。若统一取 q = 1 q=1 q = 1 ,第一个输入的系数变成 − 0.501 -0.501 − 0.501 。无论怎样处理这个表面上的平局,总有一个输入未完成严格尺寸约化,而两次整数操作都保持原格。
在圆周附近。 取 p = ( 0 , 866 ) T p=(0,866)^T p = ( 0 , 866 ) T ,它已经在条带内。检查平方长度之比,有
∥ p ∥ 2 2 ∥ b 1 ∥ 2 2 = 866 2 1000 2 = 0.749956 < 0.75. \frac{\|p\|_2^2}{\|b_1\|_2^2}
=\frac{866^2}{1000^2}
=0.749956<0.75. ∥ b 1 ∥ 2 2 ∥ p ∥ 2 2 = 100 0 2 86 6 2 = 0.749956 < 0.75.
端点在圆内,应当交换。若先将比值舍入为 0.75 0.75 0.75 ,程序就会按等号接受当前基。这个例子说明,判定需要的精度取决于真实值离边界有多远 。
为什么不大的整数也会丢失投影高度
工作精度指浮点数保留的有效位数。把整组基乘同一个 2 k 2^k 2 k ,整数条目会变长,但 μ i , j \mu_{i,j} μ i , j 和 Lovász 判据中的长度比保持不变。反过来,两列几乎平行时,即使整数条目不大,第二列在第一列正交补上的高度也可能很小。
取整数 N ≥ 2 N\ge 2 N ≥ 2 ,令 b 1 = ( N , 1 ) T b_1=(N,1)^T b 1 = ( N , 1 ) T 、b 2 = ( N + 1 , 1 ) T b_2=(N+1,1)^T b 2 = ( N + 1 , 1 ) T 。两列围成的平行四边形面积为 1 1 1 。以第一列为底,第二个正交高度的平方为
s = g 2 2 = 1 N 2 + 1 . s=g_2^2=\frac{1}{N^2+1}. s = g 2 2 = N 2 + 1 1 .
记 G = B T B G=B^TB G = B T B 。若从 Gram 矩阵计算同一个量,先算 T = G 12 2 / G 11 T=G_{12}^2/G_{11} T = G 12 2 / G 11 ,再算 s = G 22 − T s=G_{22}-T s = G 22 − T 。这里
G 11 = N 2 + 1 , G 12 = N ( N + 1 ) + 1 , G 22 = ( N + 1 ) 2 + 1. G_{11}=N^2+1,\qquad G_{12}=N(N+1)+1,\qquad G_{22}=(N+1)^2+1. G 11 = N 2 + 1 , G 12 = N ( N + 1 ) + 1 , G 22 = ( N + 1 ) 2 + 1.
相减的两项都是 N 2 N^2 N 2 量级,留下的差只有 N − 2 N^{-2} N − 2 量级。究竟会损失多少位,可以沿着这两步运算计算。
设二进制有效精度为 w w w 位(含首位),采用就近舍入,单位舍入误差为 u = 2 − w u=2^{-w} u = 2 − w 。先假定三个 Gram 元素均已精确读入,运算无上溢或下溢。在这个模型中,每次乘法、除法或减法的计算结果可写成精确结果乘以 1 + e 1+e 1 + e ,其中 ∣ e ∣ ≤ u |e|\le u ∣ e ∣ ≤ u [2, sec. 2 ]。计算 T T T 要做一次乘法和一次除法,所以
T ^ = T ( 1 + θ ) , ∣ θ ∣ ≤ ( 1 + u ) 2 − 1 = 2 u + u 2 . \widehat T=T(1+\theta),\qquad |\theta|\le (1+u)^2-1=2u+u^2. T = T ( 1 + θ ) , ∣ θ ∣ ≤ ( 1 + u ) 2 − 1 = 2 u + u 2 .
于是最后一次相减在舍入前已经变成 G 22 − T ^ = s − T θ G_{22}-\widehat T=s-T\theta G 22 − T = s − T θ 。再计入这次减法自身的舍入,得到
∣ s ^ − s ∣ s ≤ u + ( 1 + u ) ( 2 u + u 2 ) T s . \frac{|\widehat s-s|}{s}
\le u+(1+u)(2u+u^2)\frac{T}{s}. s ∣ s − s ∣ ≤ u + ( 1 + u ) ( 2 u + u 2 ) s T .
关键是式中的 T / s T/s T / s 。本例恰有 s = 1 / G 11 s=1/G_{11} s = 1/ G 11 ,所以 T / s = G 12 2 T/s=G_{12}^2 T / s = G 12 2 ,随 N N N 按 N 4 N^4 N 4 的量级增长。乘除步骤带来的绝对误差至多为 O ( u N 2 ) O(uN^2) O ( u N 2 ) ,换算成小差值 s s s 的相对误差,上界就成为 O ( u N 4 ) O(uN^4) O ( u N 4 ) 。要由这个界保证相对误差至多为 2 − t 2^{-t} 2 − t ,取 w = 4 log 2 N + t + O ( 1 ) w=4\log_2 N+t+O(1) w = 4 log 2 N + t + O ( 1 ) 位足够,其中加法常数取足。对这条求值公式,N N N 每翻一倍,维持同一误差保证大约多需 4 位。这是充分精度的估计,具体输入的舍入误差可以更小。
from fractions import Fraction
N = 2 ** 14
g11 = N*N + 1
g12 = N*(N + 1 ) + 1
g22 = (N + 1 )** 2 + 1
exact = g22 - Fraction(g12*g12 , g11)
a , b , c = map( float , (g11 , g12 , g22))
term = b*b/a
print(exact , term == c , c - term) # 1/268435457 True 0.0
双精度有 53 53 53 位有效精度。此时 u N 4 = 8 uN^4=8 u N 4 = 8 ,上述界已经无法保证小的相对误差。三个 Gram 元素本身都能精确表示,但乘除所得的 term 已经舍入到与 c 相同的浮点数。最后的减法准确地返回了零,而真实的 s > 0 s>0 s > 0 ,实际相对误差为 1 1 1 。如果改在整数上先求 G 11 G 22 − G 12 2 = 1 G_{11}G_{22}-G_{12}^2=1 G 11 G 22 − G 12 2 = 1 ,再除以 G 11 G_{11} G 11 ,两大数抵消时那一个单位的差就保留下来了。
L² 与 H-LLL 怎样保证输出
L² 保留精确的 Gram 矩阵。 Nguyen 和 Stehlé 随整数换基更新 G = B T B G=B^TB G = B T B ,从精确内积出发,用浮点 Cholesky 型递推得到 GSO 近似。处理当前列时,可以先减去一组较早列的整数倍,再依据更新后的精确数据重算近似系数,逐次完成尺寸约化。这样,大系数的整数部分可以分几次消去 [2, secs. 3.2–3.3 ]。
其保证有明确的参数范围。固定 1 / 4 < δ < 1 1/4<\delta<1 1/4 < δ < 1 和 1 / 2 < η < δ 1/2<\eta<\sqrt{\delta} 1/2 < η < δ ,在论文的算术模型中,选择随格秩线性增长的足够工作精度,L² 会在多项式时间内输出满足 Lovász 条件及 ∣ μ i , j ∣ ≤ η |\mu_{i,j}|\le\eta ∣ μ i , j ∣ ≤ η 的基。这里 η − 1 / 2 \eta-1/2 η − 1/2 给浮点判定留出了余量。例如,0.501 0.501 0.501 满足 η = 0.51 \eta=0.51 η = 0.51 的尺寸界,却超出了上一篇的严格尺寸界。沿用上一篇的长度推导时,相邻高度界也相应变为 g k 2 ≥ ( δ − η 2 ) g k − 1 2 g_k^2\ge(\delta-\eta^2)g_{k-1}^2 g k 2 ≥ ( δ − η 2 ) g k − 1 2 [2, secs. 2.2, 3.4 ]。
H-LLL 直接对基做 Householder QR。 写 B = Q R B=QR B = QR ,取 R R R 的对角元为正,则 R j j = g j R_{jj}=g_j R j j = g j ,且对 j < i j<i j < i 有 R j i = g j μ i , j R_{ji}=g_j\mu_{i,j} R j i = g j μ i , j 。算法用 Householder 反射计算 R R R 的近似,再对原整数基执行列操作。其误差分析允许非对角元的误差还与当前列的尺度有关,论文相应采用弱尺寸条件
∣ R j i ∣ ≤ η R j j + θ R i i , j < i . |R_{ji}|\le\eta R_{jj}+\theta R_{ii},\qquad j<i. ∣ R j i ∣ ≤ η R j j + θ R ii , j < i .
在论文规定的参数与精度下,算法输出满足这条弱尺寸条件和 Lovász 条件的原格基。比较两种算法的输出时,要连同 η \eta η 、θ \theta θ 和所检验的不等式一起比较 [3, secs. 2, 4 ]。
什么时候提高精度,怎样检查结果
对小规模实现,可以把“这一步能否相信”写成区间判断。假设已有可靠的误差上界,能够保证真实值落在所算区间内。
取整。 若 μ i , j \mu_{i,j} μ i , j 的整个区间落在 ( q − 1 / 2 , q + 1 / 2 ) (q-1/2,q+1/2) ( q − 1/2 , q + 1/2 ) 内,就采用整数 q q q 。若区间碰到半整数边界,就提高精度或用精确分数复核。真实值恰为半整数时,按约定选择任一最近整数。
交换。 若 Δ k \Delta_k Δ k 区间的上端点小于 0 0 0 ,就交换。若下端点大于等于 0 0 0 ,就接受。其余情况应重算。恰好等于 0 0 0 时,精确 Lovász 条件成立。
最后把两个问题分别验算。先用精确整数检查 U ∈ Z n × n U\in\mathbb Z^{n\times n} U ∈ Z n × n 、∣ det U ∣ = 1 |\det U|=1 ∣ det U ∣ = 1 和 B o u t = B i n U B_{\rm out}=B_{\rm in}U B out = B in U ,验证输出生成原格。再从 B o u t B_{\rm out} B out 独立重算 GSO,按任务要求检查全部尺寸条件和每个相邻位置的 Lovász 条件。若要求上一篇的严格 LLL,就用 1 / 2 1/2 1/2 作为尺寸阈值。这样即使浮点程序走出了与手算不同的换基路径,也能直接判断它交出的基是否合格。
参考文献
1. Daniele Micciancio. Basis reduction . 2017. 原文 .
2. Phong Q. Nguyen and Damien Stehlé. An LLL algorithm with quadratic complexity . SIAM Journal on Computing. 2009. DOI .
3. Ivan Morel, Damien Stehlé, and Gilles Villard. H-LLL: Using Householder inside LLL . Proceedings of the 2009 international symposium on symbolic and algebraic computation. 2009. DOI .