共计 1388 个字符,预计需要花费 4 分钟才能阅读完成。
引言:隐私计算的刚性需求
在医疗影像分析和金融风控等场景中,数据隐私与模型效用的矛盾日益突出。例如医院希望使用第三方 AI 服务分析患者 CT 扫描时,传统方法需上传原始数据,这直接违反 GDPR 等隐私法规。Paillier 加密虽支持加法同态,但无法处理神经网络中的非线性激活;TFHE 可实现任意计算,但单次推理耗时高达数小时。CKKS 方案凭借以下优势成为折中选择:

- 支持浮点数近似计算,误差可控($\left| \Delta \right| < 2^{-10}$)
- 利用 SIMD 特性批量处理数据,吞吐量提升 $10^3$ 倍
- 实现乘加运算同态,满足神经网络核心操作需求
CKKS 与神经网络的计算图适配
矩阵乘法的 SIMD 编码
CKKS 的向量化特性要求将权重矩阵 $W \in \mathbb{R}^{m\times n}$ 和输入向量 $\vec{x}$ 按特定规则打包。实践中采用对角线编码(Diagonal Encoding)优化矩阵乘法:
- 将 $W$ 的每行循环移位生成 $m$ 个对角矩阵 $D_i$
- 用 SIMD 并行计算 $\vec{y}_i = D_i \cdot \vec{x}$
- 通过旋转求和得到最终结果 $\vec{y} = \sum_{i=1}^m \vec{y}_i$
此方法将计算复杂度从 $O(mn)$ 降至 $O(m)$ 次旋转操作。
激活函数的多项式逼近
由于 CKKS 不支持比较运算,需用多项式 $P(x)$ 近似 ReLU 等非线性函数。实验表明:
- 3 次多项式在 $[-5,5]$ 区间实现 $R^2>0.99$ 的拟合度
- 分段多项式(如 $S_1(x)=0.01x, S_2(x)=0.5x+0.25$)可降低最高次数
SEAL 库实现示例
// SEAL 3.7.2 卷积层密文计算
void encrypted_conv(Ciphertext &input, const vector<Plaintext> &filters,
Evaluator &eval, GaloisKeys &gal_keys) {
Ciphertext result;
for (const auto &filter : filters) {
Ciphertext tmp;
eval.multiply(input, filter, tmp); // 密文 - 明文乘法
eval.relinearize(tmp, gal_keys); // 重线性化降噪
eval.rescale_to_next(tmp); // 模切换保持精度
eval.add_inplace(result, tmp); // 累加结果
}
// 噪声预算检查(建议保持在 30bit 以上)cout << "Noise budget:" << decryptor.invariant_noise_budget(result) << "bits";
}
精度 - 速度权衡实验
在 Intel Xeon 6248R(2.5GHz)测试 ResNet-18 的加密推理:
| 多项式次数 | 模型精度 | 推理耗时 (倍) |
|---|---|---|
| 1 | 72.3% | 3.1x |
| 3 | 89.7% | 4.8x |
| 5 | 91.2% | 6.7x |
避坑指南
密文 slot 利用率优化
- 对 FC 层输入补零至 $2^n$ 长度
- 卷积层采用通道交织打包策略
模切换时机选择
- 在乘法后立即执行 rescale
- 避免连续乘法超过 3 次不降模
国产化芯片适配
- 海光 Hygon 需关闭 AVX-512 指令集
- 昇腾 NPU 需定制 CKKS 内核
开放性问题
当前加密推理开销仍比明文高 1 - 2 个数量级,未来可探索:
1. 模型蒸馏降低参数规模
2. 混合精度加密(关键层用 TFHE)
3. 专用硬件加速器设计
正文完
发表至: 未分类
近两天内
