Source: CryptoNets: Applying Neural Networks to Encrypted Data with High Throughput and Accuracy, ICML 2016
将同态加密应用于神经网络推理的早期工作。
本文使用的是 Bos et al. 2013. 的 HE 方案,是一个 leveled HE 方案,支持加法和乘法操作,但要求事先知道应用于数据的算术电路的复杂性(即加密数据上计算的多项式函数的最大度是有限的)。
该加密方案不支持浮点数,本文使用 scaling 的方式来转换为整数。
max-pooling 是 non-polynomial 的,不能直接计算,本文用
sigmoid 和 ReLU 激活也是非多项式的,本文用
- 训练阶段最后分类层还是需要 sigmoid 函数的,因为要去计算 loss;但是由于其时单调的,预测阶段只需要最大值 index,sigmoid 直接拆掉就可以
数据加密:
$$
c = [\lfloor q/t \rfloor m+e+hs]_q
$$
其中
我们将
数据解密:
$$
m=[\lfloor \frac{t}{q} fc \rceil]_t
$$
其中
计算是在云端进行的,其并不需要对参数 w 做完整的加密操作,即可完成加法和乘法运算: $$ Enc(w) = \lfloor q/t \rfloor w,~~~~~c+w=\lfloor q/t \rfloor (m+w)+e+hs \ Enc(w) = w,~~~~~cw=\lfloor q/t \rfloor (mw)+e'+hs'. $$ 这里就可以理解前面 intro 里写的:
加密算法涉及 mod t 操作,要关注计算过程中数值 size 的增长,确保 reduction modulo t 不会发生
即由于在解密时实际上最后还要做 mod t 操作,如果 c+w、cw 的数值超过了,就会发生所谓“reduction modulo”的情况,导致结果偏差。
这一点实际上是由于神经网络计算和 HE 的 atomic 构造不匹配导致的:神经网络计算涉及的是 real numbers,但 HE 使用的是 ring 里的 polynomials
文章里利用 Chinese Remainder Theorem,CRT 做了两个优化:1. 编码较大数值(将一个大数分解成多个小数,这些小数并行处理,并在最后连接在一起) 2. SIMD 并行计算(取多个标量连接在一起,形成单个多项式。这个多项式被作为一个单元处理,只有在完成计算后,它才会被分解成其组成部分)