DiNN学习笔记1-理论部分

背景知识

机器学习即服务

机器学习即服务 (Machine Learning as a Service, MLaaS) 可以简单理解为:一系列将机器学习工具作为云计算服务的一部分的服务。 MLaaS 帮助客户从机器学习中获益,却不用承担建立机器学习模型所需的成本、时间和风险。服务商提供预测分析、深度学习、api、数据可视化、自然语言处理等服务;计算由服务商的数据中心处理完成。

MLaaS

以图中的 MLaaS 模型为例,服务商训练一个可用的模型,客户端将其需要进行预测的数据 x x x 提供给服务商,服务商将其输入机器学习模型 (如神经网络) 后将结果 M ( x ) M(x) M(x) 返回给用户端。可以看出该方案存在的一个问题:用户端的数据 x x x 会泄露给服务商。在用户端的数据 x x x 为敏感数据,而服务商不一定可信的情况下,用户端可能不希望自己的数据暴露在服务器端。

MLaaS 中的全同态加密

一个解决方案为全同态加密:

MLaaS+FHE

用户将自己的数据加密后上传云服务器,云服务器在加密的数据上进行运算,得到运算结果后返回给用户端,用户端解密后得到所需的结果 M ( x ) M(x) M(x) 。这类方案在保护用户隐私的同时也达到了运算的目的,然而效率却不敢恭维。因此 Pascal Paillier 等人设计了 fhe-DiNN —— 一种基于全同态加密的神经网络预测方案,旨在尽可能快速地同态评估用户输入的数据。

神经网络

异常熟悉的模型,不赘述:

神经网络

将隐藏层中的每个神经元进行放大:

神经元1

可见全同态加密只要能够运算 y = f ( ∑ i w i x i ) y = f(\sum_{i} w_i x_i) y=f(iwixi) 就能完成密文数据下的神经网络预测。

Fhe-DiNN 中的默认设定

Fhe-DiNN 中有一些默认的设定:

  1. 模型是在明文上已经训练好的 (本论文实验中是由 python 训练的) 明文模型,输入的数据为加密数据,输出的结果为加密的神经网络输出结果。
  2. Fhe-DiNN 旨在尽可能地提升评估的效率,因此会在准确率上有一定的损失。
  3. Fhe-DiNN 只在图像识别中进行了示范,但其实本文提出的是一个泛化的模型,在其他机器学习领域也同样适用。实验中使用的数据集为 MNIST 手写数据集。

Fhe-DiNN 方案

神经元中的计算

为了计算神经元的输出 y = f ( ∑ i w i x i ) y = f(\sum_{i} w_i x_i) y=f(iwixi) ,首先需要计算激活函数中的累加结果 (Multisum) :

∑ i w i x i \sum_{i} w_i x_i iwixi

给定权重 w i w_i wi 和加密的输入 E n c ( x i ) Enc(x_i) Enc(xi) ,计算他们的乘积与和:

∑ i w i ⋅ E n c ( x i ) \sum_{i} w_i \sdot Enc(x_i) iwiEnc(xi)

注意到为了保证正确性,需要权重为整数 : w i ∈ Z w_i \in \mathbb{Z} wiZ 。如果权重为浮点数则会损失正确性。此外,权重的取值范围是在准确率和效率之前权衡的问题。

离散神经网络

为了得到一个 FHE 友好的神经网络,本文设计了离散神经网络 Discretized neural networks, DiNN ,该神经网络输入为 { − I , . . . , I } \{ -I, ... , I \} {I,...,I} 中的整数;权重为 { − W , . . . , W } \{ -W, ... , W \} {W,...,W} 中的整数;神经元中的激活函数会将累加的和值映射到 { − I , . . . , I } \{ -I, ... , I \} {I,...,I} 中的整数。这使得神经元的计算可以叠加,即可以增加任意层数而不会产生输入输出取值范围不同的问题。

神经元2

  • 取值范围并没有看起来的这么严格,比如可以只取 0, 1 构成二进制网络
  • 这是 size 和 performance 之间的权衡的问题,当离散化一个神经网络时,需要更大的取值范围来保证准确率
  • 从实数域上的神经网络转换为离散神经网络十分简单,只需要舍去小数部分即可。DiNN中是这么做的,但这并不一定是最好的

DiNN 评估步骤

DiNN 评估 (Evaluation) 的整体步骤如下:

  1. 同态地计算累加: ∑ i w i ⋅ E n c ( x i ) = E n c ( ∑ i w i x i ) \sum_i w_i \sdot Enc(x_i) = Enc( \sum_i w_i x_i ) iwiEnc(xi)=Enc(iwixi)
  2. 同态地计算激活函数: E n c ( f ( ∑ i w i x i ) ) Enc(f(\sum_i w_i x_i)) Enc(f(iwixi))
  3. 进行自举: E n c ∗ ( f ( ∑ i w i x i ) ) Enc^*(f(\sum_i w_i x_i)) Enc(f(iwixi)) 减少噪声,使得运算能够不停运行
  4. 对每一层的每个神经元进行 1-3 的步骤

消息空间的确定方式可以为:自己猜测、数据推断 或 最坏情况分析 (作者不推荐)

随着乘积、累加等操作,密文的噪声会增长,因此需要从一个很小的噪声开始运算,为保证安全性,需要选择较大的参数。

自举的引入

在此之前的一些工作中 (例如 Cryptonets, DGBL16) 研究者使用了 SHE (SomeWhat Homomorphic Encryption) 。在 SHE 方案中同态加密的参数需要预先设置,并且随着神经网络层数的不断增大,密文的噪声逐渐增加,需要增大参数来保证密文不会被错误解密,这使得 SHE 方案在深度神经网络中不可行(网络深度过大导致参数过大甚至不实际)。

本文的方案引入了自举 (Bootstrapping) ,在每次运算后都更新密文,使得密文的噪声始终控制在一定范围内,且密文的噪声与神经网络的层数不相关,因此该方案可以构造任意深度的神经网络,并且理论上运行时间与神经网络的层数呈近似线性。

文中使用的自举方案为 TFHE 中的门自举 (笔记1) ,在每次运算后都会进行一次自举的步骤,保证密文中噪声的稳定。大体流程可以理解为一个幸运大转盘:

幸运大转盘

  1. 首先对这个转盘进行一次旋转 (同态计算 X b − < s , a > X^{b - <s, a>} Xb<s,a> ) ,需要使用到自举密钥
  2. 将图中箭头指向的密文取出
  3. 进行密钥转换,使其变为使用原先的密钥加密的密文,消息不变

激活函数的同态评估

本文将激活函数与自举操作相结合,即在计算激活函数的同时完成密文的自举操作。本文所使用的的激活函数为符号函数: f ( x ) = s i g n ( x ) f(x) = sign(x) f(x)=sign(x) ,方法大致流程如下:

幸运大转盘2

设计如上图所示的幸运大转盘,输出旋转到的数字的符号,即正数输出1,负数输出-1。

对 TFHE 的改进

此外,本文的作者们还在 TFHE 的基础上进行了 4 种改进,分别为:明文的打包密钥转换的前置动态变化的消息空间优化盲旋步骤

明文的打包

为了减少方案中的带宽,本文将多个值打包到一个密文中,即使用 TLWE 密文代替原先的 LWE 密文,将 N 个元素的密文大小从 N 个 LWE 密文 减小到 1 个 TLWE 密文。

方案消息密文
LWE标量(n + 1) 标量
TLWE多项式(k + 1) 多项式

这种打包技术使得 TLWE 成为 LWE 的一个有吸引力的变种,在 FHE 应用中被广泛使用;通过 Extract 可以提取出 LWE 密文。以一层神经网络为例,计算累加的整体流程如下:

  1. 首先使用标准的打包技术,将多项式加密为 TLWE 密文: c t = T L W E . E n c r y p t ( ∑ i p i X i ) ct = TLWE.Encrypt(\sum_i p_i X^i) ct=TLWE.Encrypt(ipiXi)
  2. 对第一个隐藏层中的权重进行同样的操作: w p o l : = ∑ i w i X − i w_{pol} := \sum_i w_i X^{-i} wpol:=iwiXi
  3. 将 1 和 2 中式子相乘可得到累加结果: c t ⋅ w p o l = E n c ( ∑ i w i x i ) ct \sdot w_{pol} = Enc(\sum_i w_i x_i) ctwpol=Enc(iwixi)

此外,因为模型已经训练好,在预测过程中不会改变,因此 w p o l w_{pol} wpol 不会改变,可以预先计算好并将其 FFT 表示存储在内存中,在分类步骤中节省时间。

DiNN-打包1

从环面上的元素的数量来看,代价从 N ( n + 1 ) N(n + 1) N(n+1) 变为 N ( k + 1 ) N(k + 1) N(k+1) 。注意到得到的密文是 N N N 维的 LWE 密文,而不是原先的 n n n 维 LWE 密文,因此需要通过密钥转换才能成为合法的密文。

密钥转换的前置

在这里密钥转换的主要目的是减少 LWE 的维度。由于 自举密钥的大小、最终噪声的 level 、外积计算的数量 都和 LWE 的维度线性相关,因此减小维度可以在 内存使用 和 计算效率 上相当重要。本文的作者认为在自举过程开始时减小维度,比在自举过程结束时减小维度的效果更好,因此对密钥转换过程进行了前置。

DiNN-密钥转换前置1

这样的做法颠倒了两种 LWE 方案的使用:现在所有的事情都在高维的 N-LWE 上完成,而抵维的 n-LWE 只在自举操作期间使用。密钥转换中的噪声不再用于任何计算(直接进入盲旋),因此允许密钥转换中的噪声变得更大,从而减少了保持相同安全性所需的维度,从而在每次自举过程中节省时间。

DiNN-密钥转换前置2
DiNN-密钥转换前置3

唯一的缺点是:使用更高维的 N-LWE sample 意味着服务器的内存使用量略高,输出的密文更大,计算密文加法的速度略慢。但是这些操作与自举相比几乎是瞬时的,所以这不是什么问题。

动态变化的消息空间

在整个神经网络计算的过程中,消息空间可以始终保持不变。然而如果在神经网络传递的过程中改变消息空间 (减少 slides 的数量) 可以获得更大的噪声容量,进而减小所需的参数。

文中的操作为更改自举使用的轮子。通过更改每个神经元中轮子上初始的值的数量和大小,能够得到不同的消息空间,进而在神经网络计算的过程中得到不同的消息空间。具体的操作为将 testVector 设置为:

− 1 2 B l + 1 ∑ i = 0 N − 1 X i \frac{-1}{2 B_l + 1} \sum_{i = 0}^{N - 1} X^i 2Bl+11i=0N1Xi

其中 B l B_l Bl 由当前的神经网络 l l l 层决定,是下一层神经网络 ( l + 1 l + 1 l+1 层) 的累加的边界。

优化盲旋步骤

盲旋算法概述:

输入:

  • 一个 n-LWE 密文 ( a , b ) (\pmb{a}, b) (aaa,b) ,其中系数属于 Z 2 N \mathbb{Z}_{2N} Z2N
  • 一个 TLWE 密文 C \pmb{C} CCC ,即 testVector 的加密
  • 自举密钥 b k bk bk

输出:

  • 一个 TLWE 密文 X b − < s , a > ⋅ t e s t V e c t o r X^{b - <\pmb{s}, \pmb{a}>} \sdot testVector Xb<sss,aaa>testVector

算法步骤:

  1. A C C ← X b ⋅ C ACC \leftarrow X^b \sdot \pmb{C} ACCXbCCC
  2. for i i i = 1 … n / 2 n/2 n/2 do
  3. A C C ← ( ( X a 2 i + a 2 i + 1 − 1 ) b k 3 i + ( X a 2 i − 1 ) b k 3 i + 1 + ( X a 2 i + 1 − 1 ) b k 3 i + 2 ) ⊡ A C C ACC \leftarrow ((X^{a_{2i} + a_{2i + 1}} - 1)bk_{3i} + (X^{a_{2i}}-1)bk_{3i + 1} + (X^{a_{2i} + 1}-1)bk_{3i + 2}) \boxdot ACC ACC((Xa2i+a2i+11)bk3i+(Xa2i1)bk3i+1+(Xa2i+11)bk3i+2)ACC
  4. end for
  5. return A C C ACC ACC

文中的优化参考了 [ZYL+17] 中的技术,是 [ZYL+17] 与 TFHE 两种方案的折中。效果对比如下:

DiNN-自举改进1

DiNN 方案的整体流程

方案的整体流程示意图:

DiNN-整体流程1

  1. 将图像加密为 TLWE 密文
  2. 将 TLWE 密文乘以隐藏层的权重组成的多项式,这一步可以使用 FFT 加速
  3. 从所的密文中提取出一个 1024-LWE 的密文,它是结果常数项的加密
  4. 进行密钥转换,得到一个 450-LWE 的密文
  5. 通过自举减少噪声的 level
  6. 对密文结果和输出层的权重进行乘法和累加
  7. 返回神经网络输出结果的 10 个密文,用户解密后可根据分数最高的标签得到神经网络的分类结果

参考资料

视频:https://www.youtube.com/watch?v=iKAnkb7zURo

代码:https://github.com/mminelli/dinn

PPT:https://www.di.ens.fr/~minelli/docs/slides-crypto-2018.pdf

论文:Bourse F, Minelli M, Minihold M, et al. Fast homomorphic evaluation of deep discretized neural networks[C]//Annual International Cryptology Conference. Springer, Cham, 2018: 483-512.

[ZYL+17] Zhou T, Yang X, Liu L, et al. Faster bootstrapping with multiple addends[J]. IEEE Access, 2018, 6: 49868-49876.

本文仅供个人学习使用

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值