参考文献:
- [书籍] Trefethen L N. Approximation Theory and Approximation Practice, Extended Edition[M]. Society for Industrial and Applied Mathematics, 2019.
- [PS73] Paterson M S, Stockmeyer L J. On the number of nonscalar multiplications necessary to evaluate polynomials[J]. SIAM Journal on Computing, 1973, 2(1): 60-66.
- [CHKKS18] Cheon J H, Han K, Kim A, et al. Bootstrapping for approximate homomorphic encryption[C]//Advances in Cryptology–EUROCRYPT 2018: 37th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Tel Aviv, Israel, April 29-May 3, 2018 Proceedings, Part I 37. Springer International Publishing, 2018: 360-384.
- [CCS19] Chen H, Chillotti I, Song Y. Improved bootstrapping for approximate homomorphic encryption[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Cham: Springer International Publishing, 2019: 34-54.
- [HK20] Han K, Ki D. Better bootstrapping for approximate homomorphic encryption[C]//Cryptographers’ Track at the RSA Conference. Cham: Springer International Publishing, 2020: 364-390.
- 从拉格朗日插值谈到牛顿均差插值、切比雪夫插值
- 龙格现象 (Runge Phenomenon)
- Chebyshev Interpolation (maa.org)
- 切比雪夫多项式、节点与插值 (gitee.io)
Interpolations
插值任务:
-
已知函数 f : D → R f:D \to R f:D→R 的若干相异数据点 ( x i , y i ) , i = 0 , 1 , 2 , ⋯ , n (x_i,y_i),i=0,1,2,\cdots,n (xi,yi),i=0,1,2,⋯,n,共有 n + 1 n+1 n+1 个点
-
计算某个 n n n 次多项式 P ( x ) ∈ F [ x ] P(x) \in \mathbb F[x] P(x)∈F[x],使得误差 R n ( x ) = f ( x ) − P ( x ) R_n(x)=f(x)-P(x) Rn(x)=f(x)−P(x) 尽可能的小
我们定义多项式
w
k
(
x
)
w_{k}(x)
wk(x),
w
0
=
1
,
w
k
(
x
)
=
∏
i
=
0
k
−
1
(
x
−
x
j
)
,
k
=
1
,
2
,
⋯
,
n
+
1
w_0=1,\,\, w_{k}(x)=\prod_{i=0}^{k-1}(x-x_j), k=1,2,\cdots,n+1
w0=1,wk(x)=i=0∏k−1(x−xj),k=1,2,⋯,n+1
插值多项式的次数不是越高越好,会出现 “龙格现象”:插值区间边缘的误差极大。
Lagrange
基函数:
B
i
(
x
)
=
∏
j
≠
i
(
x
−
x
j
)
⋅
(
x
i
−
x
j
)
−
1
,
∀
i
=
0
,
1
,
⋯
,
n
B_i(x) = \prod_{j \neq i} (x-x_j)\cdot(x_i-x_j)^{-1},\,\, \forall i=0,1,\cdots,n
Bi(x)=j=i∏(x−xj)⋅(xi−xj)−1,∀i=0,1,⋯,n
插值结果:
P
n
(
x
)
=
∑
i
=
0
n
y
i
⋅
B
i
(
x
)
P_n(x) = \sum_{i=0}^n y_i \cdot B_i(x)
Pn(x)=i=0∑nyi⋅Bi(x)
易知
f
(
x
i
)
=
P
n
(
x
i
)
,
∀
x
i
f(x_i)=P_n(x_i), \forall x_i
f(xi)=Pn(xi),∀xi,它恰好穿过了
n
+
1
n+1
n+1 个数据点。
插值余项:
R
n
(
x
)
=
f
(
x
)
−
P
n
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
⋅
w
n
+
1
(
x
)
,
∃
ξ
∈
D
R_n(x) = f(x)-P_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\cdot w_{n+1}(x),\exist \xi \in D
Rn(x)=f(x)−Pn(x)=(n+1)!f(n+1)(ξ)⋅wn+1(x),∃ξ∈D
缺点:每当数据点增减,基函数
B
i
(
x
)
B_i(x)
Bi(x) 都会变化,因此
P
(
x
)
P(x)
P(x) 需要完全重新计算;容易出现龙格现象。
Newton
差商(均差)多项式,
f
[
x
i
]
=
y
i
f
[
x
i
,
x
j
]
=
(
f
[
x
i
]
−
f
[
x
j
]
)
⋅
(
x
i
−
x
j
)
−
1
f
[
x
i
,
x
j
,
x
k
]
=
(
f
[
x
i
,
x
j
]
−
f
[
x
j
,
x
k
]
)
⋅
(
x
i
−
x
k
)
−
1
⋯
f
[
x
i
,
x
j
,
⋯
,
x
p
,
x
q
]
=
(
f
[
x
i
,
x
j
,
⋯
,
x
p
]
−
f
[
x
j
,
⋯
,
x
p
,
x
q
]
)
⋅
(
x
i
−
x
q
)
−
1
\begin{aligned} f[x_i] &= y_i\\ f[x_i,x_j] &= (f[x_i]-f[x_j]) \cdot (x_i-x_j)^{-1}\\ f[x_i,x_j,x_k] &= (f[x_i,x_j] - f[x_j,x_k]) \cdot (x_i-x_k)^{-1}\\ &\cdots\\ f[x_i,x_j,\cdots,x_p,x_q] &= (f[x_i,x_j,\cdots,x_p] - f[x_j,\cdots,x_p,x_q]) \cdot (x_i-x_q)^{-1} \end{aligned}
f[xi]f[xi,xj]f[xi,xj,xk]f[xi,xj,⋯,xp,xq]=yi=(f[xi]−f[xj])⋅(xi−xj)−1=(f[xi,xj]−f[xj,xk])⋅(xi−xk)−1⋯=(f[xi,xj,⋯,xp]−f[xj,⋯,xp,xq])⋅(xi−xq)−1
基函数:
B
i
(
x
)
=
w
i
(
x
)
,
∀
i
=
0
,
1
,
⋯
,
n
B_i(x) = w_i(x),\,\, \forall i=0,1,\cdots,n
Bi(x)=wi(x),∀i=0,1,⋯,n
插值结果:
P
n
(
x
)
=
∑
i
=
0
n
f
[
x
0
,
⋯
,
x
i
]
⋅
B
i
(
x
)
P_n(x) = \sum_{i=0}^{n} f[x_0,\cdots,x_i] \cdot B_i(x)
Pn(x)=i=0∑nf[x0,⋯,xi]⋅Bi(x)
易知
f
(
x
i
)
=
P
n
(
x
i
)
,
∀
x
i
f(x_i)=P_n(x_i), \forall x_i
f(xi)=Pn(xi),∀xi,它恰好穿过了
n
+
1
n+1
n+1 个数据点。
插值余项:
R
n
(
x
)
=
f
[
x
0
,
⋯
,
x
n
]
⋅
w
n
+
1
(
x
)
=
f
(
n
+
1
)
(
ξ
)
(
n
+
1
)
!
⋅
w
n
+
1
(
x
)
,
∃
ξ
∈
D
R_n(x) = f[x_0,\cdots,x_n] \cdot w_{n+1}(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\cdot w_{n+1}(x),\exist \xi \in D
Rn(x)=f[x0,⋯,xn]⋅wn+1(x)=(n+1)!f(n+1)(ξ)⋅wn+1(x),∃ξ∈D
优点:增删数据点的时候,系数(均差)不需要全部重新计算
缺点:依旧容易出现龙格现象
Chebyshev
请读者注意,此部分内容来自多个网页信源,并且它们给出的公式并不统一(看晕了,迷惑)。此部分的某些公式可能是错误的。
局限在区间
[
−
1
,
1
]
[-1,1]
[−1,1] 上(区间总是可以缩放的),切比雪夫多项式:
T
0
(
x
)
=
1
T
1
(
x
)
=
x
T
2
(
X
)
=
2
x
2
−
1
⋯
T
n
(
x
)
=
2
x
⋅
g
n
(
x
)
−
g
n
−
1
(
x
)
\begin{aligned} T_0(x) &= 1\\ T_1(x) &= x\\ T_2(X) &= 2x^2-1\\ &\cdots\\ T_{n}(x) &= 2x\cdot g_n(x) - g_{n-1}(x) \end{aligned}
T0(x)T1(x)T2(X)Tn(x)=1=x=2x2−1⋯=2x⋅gn(x)−gn−1(x)
可以证明,
T
n
(
x
)
T_n(x)
Tn(x) 满足:
- 存在 n n n 个单根(称为 Chebyshev roots), x k = cos ( 2 k − 1 2 n π ) , k = 1 , 2 , ⋯ , n x_k=\cos(\frac{2k-1}{2n}\pi), k=1,2,\cdots,n xk=cos(2n2k−1π),k=1,2,⋯,n
- 存在 n + 1 n+1 n+1 个极值点(称为 Chebyshev points), x k = cos ( k n π ) , k = 0 , 1 , ⋯ , n x_k=\cos(\frac{k}{n}\pi), k=0,1,\cdots,n xk=cos(nkπ),k=0,1,⋯,n,满足 T n ( x k ) = ( − 1 ) k T_n(x_k)=(-1)^k Tn(xk)=(−1)k
另外它们是正交的,可以作为基函数,
∫
−
1
1
T
i
(
x
)
T
j
(
x
)
d
x
1
−
x
2
=
{
0
,
i
≠
j
π
,
i
=
j
=
0
π
2
,
i
=
j
>
0
\int_{-1}^{1} T_i(x)T_j(x)\frac{\mathrm dx}{\sqrt{1-x^2}} = \left\{\begin{aligned} 0,&& i \neq j\\ \pi,&& i=j=0\\ \frac{\pi}{2}, && i=j>0 \end{aligned}\right.
∫−11Ti(x)Tj(x)1−x2dx=⎩
⎨
⎧0,π,2π,i=ji=j=0i=j>0
区间
[
−
1
,
1
]
[-1,1]
[−1,1] 上的 Lipschitz continuous 函数
f
f
f(满足
∣
f
(
x
)
−
f
(
y
)
∣
≤
κ
⋅
∣
x
−
y
∣
,
∀
x
,
y
∈
[
−
1
,
1
]
|f(x)-f(y)| \le \kappa \cdot|x-y|,\forall x,y \in [-1,1]
∣f(x)−f(y)∣≤κ⋅∣x−y∣,∀x,y∈[−1,1]),总是存在唯一的的多项式
P
n
(
x
)
,
deg
P
n
≤
n
P_n(x), \deg P_n\le n
Pn(x),degPn≤n(称为 Chebyshev Interpolant),对于 Chebyshev points
{
x
j
}
\{x_j\}
{xj} 总满足
P
n
(
x
j
)
=
f
(
x
j
)
P_n(x_j)=f(x_j)
Pn(xj)=f(xj),
- 可以先通过 Chebyshev points 选点 x j ∈ [ − 1 , 1 ] x_j \in [-1,1] xj∈[−1,1],求出 y j = f ( x j ) y_j=f(x_j) yj=f(xj) 之后,使用 Lagrange/Newton 插值
- 对于一般的区间 D D D,缩放到 [ − 1 , 1 ] [-1,1] [−1,1] 上选点 x j x_j xj,然后回到 x j ′ ∈ D x_j' \in D xj′∈D 上,计算 y j = f ( x j ′ ) y_j=f(x_j') yj=f(xj′) 并插值
一般来说,等距点的插值性质很差,但是 Chebyshev points(视为单位圆上等距的单位根)的插值效果相当好,每个点到其他所有点的平均距离都接近 1 / 2 1/2 1/2,这些点使得余项 R n ( x ) R_n(x) Rn(x) 最小化。切比雪夫插值可以抑制龙格现象。
插值结果
P
n
(
x
)
P_n(x)
Pn(x) 可以写成以
T
i
(
x
)
T_i(x)
Ti(x) 为基函数的形式:
P
n
(
x
)
=
∑
i
=
0
n
c
i
⋅
T
i
(
x
)
P_n(x) = \sum_{i=0}^{n} c_i \cdot T_i(x)
Pn(x)=i=0∑nci⋅Ti(x)
问题是,先计算 Lagrange/Newton 插值,然后再把系数转换为上述的系数,应该会有很大的数值误差。怎么直接计算这些
c
i
c_i
ci 系数呢?
切比雪夫级数(Chebyshev series):任意的区间
[
−
1
,
1
]
[-1,1]
[−1,1] 上的 Lipschitz continuous 函数
f
f
f,总可以唯一地表示为如下形式
f
(
x
)
=
∑
i
=
0
∞
a
i
⋅
T
i
(
x
)
f(x) = \sum_{i=0}^{\infty} a_i \cdot T_i(x)
f(x)=i=0∑∞ai⋅Ti(x)
这个级数绝对收敛、一致收敛(absolutely and uniformly convergent),其中的系数计算公式为:
a
0
=
1
π
∫
−
1
1
f
(
x
)
1
−
x
2
d
x
a
i
=
2
π
∫
−
1
1
f
(
x
)
T
i
(
x
)
1
−
x
2
d
x
,
∀
i
=
1
,
⋯
,
n
\begin{aligned} a_0 &= \frac{1}{\pi} \int_{-1}^{1} \frac{f(x)}{\sqrt{1-x^2}} \mathrm{d} x\\ a_i &= \frac{2}{\pi} \int_{-1}^{1} \frac{f(x)T_i(x)}{\sqrt{1-x^2}} \mathrm{d} x, \forall i = 1,\cdots,n \end{aligned}
a0ai=π1∫−111−x2f(x)dx=π2∫−111−x2f(x)Ti(x)dx,∀i=1,⋯,n
上述级数的截断/投影(truncation or projection),
f
n
(
x
)
=
∑
i
=
0
n
a
i
⋅
T
i
(
x
)
f_n(x) = \sum_{i=0}^{n} a_i \cdot T_i(x)
fn(x)=i=0∑nai⋅Ti(x)
插值多项式
P
n
(
x
)
P_n(x)
Pn(x) 是级数投影
f
n
(
x
)
f_n(x)
fn(x) 的良好近似,并且
P
n
(
x
)
P_n(x)
Pn(x) 不需要计算积分,实现简单。它们的系数关系是:
c
0
=
a
0
+
a
2
n
+
a
4
n
+
⋯
c
n
=
a
n
+
a
3
n
+
a
5
n
+
⋯
c
k
=
a
k
+
(
a
2
n
+
k
+
a
4
n
+
k
+
⋯
)
+
(
a
2
n
−
k
+
a
4
n
−
k
+
⋯
)
,
∀
1
≤
k
≤
n
−
1
\begin{aligned} c_0 &= a_0+a_{2n}+a_{4n}+\cdots\\ c_n &= a_n+a_{3n}+a_{5n}+\cdots\\ c_k &= a_k+(a_{2n+k}+a_{4n+k}+\cdots)+(a_{2n-k}+a_{4n-k}+\cdots),\forall 1\le k\le n-1 \end{aligned}
c0cnck=a0+a2n+a4n+⋯=an+a3n+a5n+⋯=ak+(a2n+k+a4n+k+⋯)+(a2n−k+a4n−k+⋯),∀1≤k≤n−1
因此切比雪夫插值
P
n
(
x
)
P_n(x)
Pn(x) 的系数,可以视为切比雪夫级数
f
f
f 的系数重新分配。两种近似方法
P
n
(
x
)
P_n(x)
Pn(x) 和
f
n
(
x
)
f_n(x)
fn(x),二者的精度差距一般在因子
2
2
2 以内。
对于离散情况,关于 Chebyshev points 也存在正交性:
∑
k
=
0
n
T
i
(
x
k
)
T
j
(
x
k
)
=
{
0
,
i
≠
j
n
+
1
,
i
=
j
=
0
n
+
1
2
,
0
<
i
=
j
\sum_{k=0}^{n} T_i(x_k)T_j(x_k) = \left\{\begin{aligned} 0,&& i \neq j\\ n+1,&& i=j=0\\ \frac{n+1}{2}, && 0<i=j \end{aligned}\right.
k=0∑nTi(xk)Tj(xk)=⎩
⎨
⎧0,n+1,2n+1,i=ji=j=00<i=j
根据上述的正交性,我们采样 Chebyshev points 数据点
(
x
k
,
y
k
=
f
(
x
k
)
)
(x_k,y_k=f(x_k))
(xk,yk=f(xk)),计算系数:
c
0
=
1
n
+
1
∑
k
=
0
n
y
k
c
i
=
2
n
+
1
∑
k
=
0
n
y
k
T
i
(
x
k
)
,
∀
i
=
1
,
⋯
,
n
\begin{aligned} c_0 &= \frac{1}{n+1} \sum_{k=0}^{n} y_k\\ c_i &= \frac{2}{n+1} \sum_{k=0}^{n} y_k T_i(x_k), \forall i = 1,\cdots,n \end{aligned}
c0ci=n+11k=0∑nyk=n+12k=0∑nykTi(xk),∀i=1,⋯,n
从而直接得到
P
n
(
x
)
P_n(x)
Pn(x) 在基函数
T
i
(
x
)
T_i(x)
Ti(x) 下的表示。
CHKKS18
[CHKKS18] 使用 sin 近似 mod q,定义:
S
(
t
)
:
=
q
2
π
sin
(
2
π
q
t
)
S(t) := \frac{q}{2\pi}\sin\left(\frac{2\pi}{q}t\right)
S(t):=2πqsin(q2πt)
对于 CKKS 解密函数
[
b
−
⟨
a
,
s
⟩
]
q
=
m
+
e
[b-\langle a,s\rangle]_q=m+e
[b−⟨a,s⟩]q=m+e,因为消息规模远小于密文模数
m
≪
q
m \ll q
m≪q,因此这里的 mod 运算可以用 sin 较好地近似。其中的
b
−
⟨
a
,
s
⟩
=
m
+
e
+
q
I
∈
Z
b-\langle a,s\rangle=m+e+qI \in \mathbb Z
b−⟨a,s⟩=m+e+qI∈Z 是范围有界的整数。
给定 t = q I + m t=qI+m t=qI+m,并且满足 ∣ I ∣ < K |I| < K ∣I∣<K 和 m ≪ q m \ll q m≪q,那么 [ t ] q ≈ S ( t ) [t]_q \approx S(t) [t]q≈S(t)
然后使用 exp 计算 sin,定义:
E
(
t
)
:
=
q
2
π
exp
(
2
π
i
q
t
)
E(t) := \frac{q}{2\pi}\exp\left(\frac{2\pi i}{q}t\right)
E(t):=2πqexp(q2πit)
易知
S
(
t
)
=
E
(
t
)
−
E
(
−
t
)
2
S(t)=\frac{E(t)-E(-t)}{2}
S(t)=2E(t)−E(−t)
最后使用 Talor 近似 exp,
P
(
x
)
:
=
∑
k
=
0
n
(
i
x
)
k
k
!
P(x) := \sum_{k=0}^{n} \frac{(ix)^k}{k!}
P(x):=k=0∑nk!(ix)k
它的误差为
∣
exp
(
i
x
)
−
P
(
x
)
∣
≤
∣
x
∣
n
+
1
(
n
+
1
)
!
|\exp(ix) - P(x)| \le \frac{|x|^{n+1}}{(n+1)!}
∣exp(ix)−P(x)∣≤(n+1)!∣x∣n+1,其中
x
=
2
π
t
/
q
x=2\pi t/q
x=2πt/q,因此如果比率
[
t
]
q
/
q
[t]_q/q
[t]q/q 越小,那么只需要更低的多项式次数
n
n
n,就可以使近似误差足够低。
[HK20] 中说 [CHKKS18] 为了高效计算(我没找到),将 Taylor 近似多项式仅定义在接近原点的较小 domain 上(从而度数较低),然后计算 t ′ = t / 2 p , p ∈ Z + t'=t/2^p, p\in \mathbb Z^+ t′=t/2p,p∈Z+ 使得它足够接近原点,最后使用二倍角公式根据 S ( t ′ ) S(t') S(t′) 计算出 S ( t = 2 p ⋅ t ′ ) S(t=2^p \cdot t') S(t=2p⋅t′)
CCS19
我们可以发现,Taylor 多项式的系数是超指数级下降的,因此对于较大的度数,不得不使用极高精度的浮点数,否则将会导致较高的数值误差(注意区分:近似误差、数值误差)
[CCS19] 转而使用切比雪夫插值,形如
P
n
(
x
)
=
∑
k
=
0
n
c
k
T
k
(
x
)
P_n(x) = \sum_{k=0}^{n} c_k T_k(x)
Pn(x)=k=0∑nckTk(x)
对于
[
−
1
,
1
]
[-1,1]
[−1,1] 上 Lipschitz continuous 函数
f
f
f,存在唯一的
P
n
(
x
)
P_n(x)
Pn(x) 满足
P
n
(
x
j
)
=
f
(
x
j
)
P_n(x_j)=f(x_j)
Pn(xj)=f(xj),其中
x
j
=
cos
(
j
π
/
n
)
,
0
≤
j
≤
n
x_j=\cos(j\pi/n),0\le j\le n
xj=cos(jπ/n),0≤j≤n
假设
P
n
∗
(
x
)
P_n^*(x)
Pn∗(x) 是最小化最大(minimax)多项式,它最小化了
∥
f
−
P
n
∗
∥
∞
\|f-P_n^*\|_\infty
∥f−Pn∗∥∞ 范数。可以证明
P
n
(
x
)
P_n(x)
Pn(x) 仅仅是对数损失,
∥
f
−
P
n
∥
∞
≤
(
2
π
log
n
+
2
)
⋅
∥
f
−
P
n
∗
∥
∞
\|f-P_n\|_\infty \le \left( \frac{2}{\pi}\log n + 2 \right) \cdot\|f-P_n^*\|_\infty
∥f−Pn∥∞≤(π2logn+2)⋅∥f−Pn∗∥∞
为了近似
S
(
t
)
:
=
q
2
π
sin
(
2
π
q
t
)
S(t) := \frac{q}{2\pi}\sin\left(\frac{2\pi}{q}t\right)
S(t):=2πqsin(q2πt),其中
t
∈
[
−
K
q
,
K
q
]
t \in [-Kq,Kq]
t∈[−Kq,Kq],将它缩放到区间
[
−
1
,
1
]
[-1,1]
[−1,1] 上,
g
(
x
)
:
=
1
2
π
sin
(
2
π
K
x
)
,
x
∈
[
−
1
,
1
]
g(x) := \frac{1}{2\pi}\sin(2\pi Kx),\,\, x \in [-1,1]
g(x):=2π1sin(2πKx),x∈[−1,1]
然后使用切比雪夫插值,得到
g
(
x
)
g(x)
g(x) 对应的多项式
P
n
(
x
)
=
∑
k
=
0
n
c
k
T
k
(
x
)
P_n(x) = \sum_{k=0}^{n} c_k T_k(x)
Pn(x)=∑k=0nckTk(x)
对比 Taylor 近似,Chebyshev 近似的多项式度数要小得多,因此数值误差更小。为了计算 P n ( x ) P_n(x) Pn(x),可以先将系数 c k c_k ck 转化为 Power Basis { x k } \{x^k\} {xk} 下的系数 c k ′ c_k' ck′,然后使用 [PS73] 的单变元多项式求值算法。然而,这个转换矩阵是病态的(ill-conditioned),导致较大的数值误差。如果利用 T k ( x ) T_k(x) Tk(x) 的迭代关系,对它们依次求值,最终使用 c k c_k ck 组合求值结果,那么计算复杂度是 O ( n ) O(n) O(n) 次非标量乘法,尤其是同态运算下(非标量乘法的开销很大)这是不可接受的。
[CCS19] 修改了 [PS73] 的算法,将其中 Power Basis 替换为 Chebyshev Basis,并设计了直接在 Chebyshev Basis 下执行的长除法。整体流程完全就是 PS 原始算法,只是其中的具体运算从基 { x k } \{x^k\} {xk} 替换到基 { T k ( x } \{T_k(x\} {Tk(x},复杂度为 2 n + O ( log n ) \sqrt{2n}+O(\log n) 2n+O(logn) 次非标量乘法。
HK20
[HK20] 观察到仅当 m : = [ t ] q ≪ q m:=[t]_q \ll q m:=[t]q≪q 时,才有 [ t ] q ≈ E ( t ) [t]_q \approx E(t) [t]q≈E(t),因此只需使用 p ( t ) p(t) p(t) 拟合 E ( t ) E(t) E(t) 的部分 domain 即可。而在 [CHKKS18] 和 [CCS19] 中使用的都是全域 [ − 1 , 1 ] [-1,1] [−1,1] 上的拟合,导致多项式次数较高。
通过缩放平移,将
sin
(
2
π
q
t
)
\sin(\frac{2\pi}{q}t)
sin(q2πt) 变换为
cos
(
2
π
t
)
\cos(2\pi t)
cos(2πt),输入的区间是:
t
∈
⋃
i
=
−
k
+
1
K
−
1
I
i
,
I
i
:
=
[
i
−
1
4
−
ϵ
,
i
−
1
4
+
ϵ
]
t \in \bigcup_{i=-k+1}^{K-1} I_i,\,\, I_i:=[i-\frac{1}{4}-\epsilon,\, i-\frac{1}{4}+\epsilon]
t∈i=−k+1⋃K−1Ii,Ii:=[i−41−ϵ,i−41+ϵ]
其中的
ϵ
\epsilon
ϵ 是
[
t
]
q
/
q
[t]_q/q
[t]q/q 的上界(足够小,使得
S
(
t
)
S(t)
S(t) 足够近似
[
t
]
q
[t]_q
[t]q)
对于区间
[
a
,
b
]
[a,b]
[a,b],采取 Chebyshev method 选取如下的插值点(是 Chebyshev root 而非 Chebyshev point),
t
j
=
b
+
a
2
+
b
−
a
2
cos
(
2
j
−
1
2
n
+
2
π
)
,
1
≤
j
≤
n
+
1
t_j = \frac{b+a}{2} + \frac{b-a}{2} \cos\left( \frac{2j-1}{2n+2}\pi \right),\,\, 1 \le j \le n+1
tj=2b+a+2b−acos(2n+22j−1π),1≤j≤n+1
注意到
cos
(
2
π
t
)
\cos(2\pi t)
cos(2πt) 的区间是间断的,[HK20] 对于各个小区间
I
i
I_i
Ii 分别采样
d
i
d_i
di 个插值点(而非
[
−
K
,
K
]
[-K,K]
[−K,K] 的全域),
{
t
i
j
∈
I
i
:
−
K
<
i
<
K
,
1
≤
j
≤
d
i
}
\{t_{ij} \in I_i: -K<i<K,1\le j \le d_i\}
{tij∈Ii:−K<i<K,1≤j≤di}
使用它们插值出的
P
n
(
t
)
,
n
=
∑
i
d
i
−
1
P_n(t), n=\sum_i d_i-1
Pn(t),n=∑idi−1 的余项规模为
∥
cos
(
2
π
t
)
−
P
n
(
t
)
∥
≤
(
2
π
)
n
+
1
(
n
+
1
)
!
⋅
max
{
M
−
K
+
1
,
⋯
,
M
K
−
1
}
\|\cos(2\pi t) - P_n(t)\| \le \frac{(2\pi)^{n+1}}{(n+1)!} \cdot \max\{M_{-K+1},\cdots,M_{K-1}\}
∥cos(2πt)−Pn(t)∥≤(n+1)!(2π)n+1⋅max{M−K+1,⋯,MK−1}
其中
M
i
=
max
t
∈
I
i
∥
w
(
t
)
∥
M_i=\max_{t \in I_i}\|w(t)\|
Mi=maxt∈Ii∥w(t)∥,
w
(
t
)
=
∏
i
,
j
(
t
−
t
i
j
)
w(t)=\prod_{i,j} (t-t_{ij})
w(t)=∏i,j(t−tij)
为了确定合适的 d i d_i di,[HK20] 初始设置 d i = 1 d_i=1 di=1,然后迭代计算 M i M_i Mi,然后找出值 M i M_i Mi 最大的那个区间 I i ∗ I_{i^*} Ii∗,设置 d i ∗ = d i ∗ + 1 d_{i^*}=d_{i^*}+1 di∗=di∗+1 重新在 I i ∗ I_{i^*} Ii∗ 中采样。迭代此过程,直到余项的规模小于预设的误差上界,得到采样策略 { d i } \{d_i\} {di},最终插值出 P n ( t ) P_n(t) Pn(t)
因为插值点集中在各个 I i I_i Ii 里,所以近似误差降低的很快,所需的多项式度数比 [CCS19] 的切比雪夫插值更低。
为了同态计算 P n ( t ) P_n(t) Pn(t),如果表示为 Power Basis P n ( t ) = ∑ i p i t i P_n(t) = \sum_i p_i t^i Pn(t)=∑ipiti,由于某些极小的系数 p i p_i pi 是不稳定的数值,导致数值误差很大,并且如何用 CKKS 加密它们也是个问题。[HK20] 也采用了 Chebyshev Basis P n ( t ) = ∑ i c i T i ( t ) P_n(t) = \sum_i c_i T_i(t) Pn(t)=∑iciTi(t),区间扩张到 t ∈ [ − K , K ] t\in [-K,K] t∈[−K,K],定义基函数 { T ~ i ( t ) : = T i ( t / K ) } \{\tilde T_i(t):=T_i(t/K)\} {T~i(t):=Ti(t/K)}。由于 ∣ T ~ i ( t ) ∣ ≤ 1 , ∀ ∣ t ∣ < K |\tilde T_i(t)| \le 1,\forall |t|<K ∣T~i(t)∣≤1,∀∣t∣<K 的范数很小,从而 P n ( t ) = ∑ i c i ⋅ T ~ i ( t ) P_n(t)=\sum_i c_i \cdot \tilde T_i(t) Pn(t)=∑ici⋅T~i(t) 对于系数 c i c_i ci 的误差不敏感,甚至对于极小的 c i c_i ci 可以简单忽略。
[HK20] 也没有采用 [PS73] 求值算法,而是使用 BSGS 来求值,
BSGS 算法的复杂度为 2 2 n + 1 / 2 ⋅ log n + O ( 1 ) 2\sqrt{2n}+1/2 \cdot \log n+O(1) 22n+1/2⋅logn+O(1) 次非标量乘法,而 [CCS19] 使用的 PS 算法变体的复杂度为 2 n + log n + O ( 1 ) \sqrt{2n}+\log n+O(1) 2n+logn+O(1) 次非标量乘法。虽然渐进复杂度 PS 算法更好,但是因为使用的插值多项式度数较小,导致 log n \log n logn 项的占比较高,实际中反而不如 BSGS 快。
此外,[HK20] 还结合了 [CHKKS18] 的二倍角技术,将 t t t 缩放为 t ′ = t / 2 r t'=t/2^r t′=t/2r,然后在区间 I i ′ = I i / 2 r I_i'=I_i/2^r Ii′=Ii/2r 上近似 cos ( 2 π t ′ ) \cos(2\pi t') cos(2πt′)。最终,将近似多项式的度数从 [CCS19] 的 119 119 119,降低到了仅为 30 30 30,自举速度大幅提高。