基于CKKS实现的ResNet20卷积神经网络
由于DNN的出现,图像分类已经变成一项简单移动的任务。然而,对图像中包含的敏感信息有关的隐私问题依然值得关注。通过结合ML和密码学技术,本文对该问题提出了一种解决方案。特别地,FHE已经成为最有前景的解决方案,它可以在加密数据上执行计算。本文基于FHE提出了Residual Network的实现,它允许对加密图像进行分类并确保仅有用户可以看到结果。且相较于已有的研究,本文的实现大大降低了内存和计算
Encrypted Image Classification with Low Memory Footprint using Fully Homomorphic Encryption
本文创新点:
(1) 提出了新的基于CKKS实现的卷积运算算法
(2) 搭建了切实可行的FHE-ResNet20密态神经网络
Abstract
由于DNN的出现,图像分类已经变成一项简单移动的任务。然而,对图像中包含的敏感信息有关的隐私问题依然值得关注。通过结合ML和密码学技术,本文对该问题提出了一种解决方案。特别地,FHE已经成为最有前景的解决方案,它可以在加密数据上执行计算。
本文基于FHE提出了Residual Network的实现,它允许对加密图像进行分类并确保仅有用户可以看到结果。且相较于已有的研究,本文的实现大大降低了内存和计算时间。
本文使用的FHE是CKKS同态加密方案,它可以在近似数上进行密态计算。
本文从三个方面对实现进行评估:没存要求、计算时间和计算精度。本文的演示证明了在一个笔记本电脑上使用15GB的内存,实现在CIFAR-10数据集上达到91.67%的准确率,且运行时间少于5分钟的加密ResNet20是可能的。可以看到该准确率接近于明文模型的92.60%。
1 Introduction
近些年,神经网络在各种任务上展示了令人印象深刻的能力,并且它正逐步地变成许多在线服务的基础模块。
然而当这些模型被部署为MLaaS时,实际上并没有给予用户的隐私太多关心。为了进行模型推理,服务提供商被需要访问用户的明文数据,然而这就会造成不容易处理的问题。
今天,数据在法律上是受保护的,但是当前除了法律之外,没有任何实用性的数据保护措施。通过探索机器学习和密码学的相交点,本文提出了一种解决方法。
具体来说,本文使用一种允许在加密数据上计算的密码学方案,实现了著名的ResNet神经网络。所使用的方案是HE方案中的一个算法。
1.1 Convolutional Neural Networks
CNN已经成为一种强有力的深度学习模型,旨在处理具有网格结构的数据,特别是图像,视频,时间序列等等。CNNs在1989年第一次被提出,作为一种辨认手写数字的算法。
在这些网络背后的主要思想是捕获来自数据的空间依赖关系、局部模式和特征,使其在图像分类任务中非常有效。这一族的CNN是基于残差连接的,这是神经网络中的一种快捷方式,允许梯度在训练过程中绕过一层或更多层。它将层的原始输入添加到层的输出上,创建一个残差块,从而允许网络有效地学习和优化参数。残差块的确预防了梯度消失的问题。
1.2 Homomorphic Encryption
1.3 Related works
1.3.1 Our contribution
在本文的提案中,利用了CKKS方案来实现一个训练好的ResNet20。不同于当前的研究[26,21],本文最小化了内存要求。[8]中表明内存是FHE电路中需要被解决的主要瓶颈,尽管大多数的工作在构建FHE解决方法时并没有考虑这方面的影响。本文提出一种高效的方式来执行卷积运算,称其为Optimized Vector Encoding,这仅仅要求5个旋转计算公钥。
参考下述的图1和表1是对最近的相关工作和本文工作的对比:
本文提出使用切比雪夫多项式来近似ReLU激活函数,不同于可组成的Minimax近似,本文的方法在深度和精度上给出了更高的灵活性(二者是成反比例的)。
1.4 Preliminaries
我们首先介绍和回顾关于FHE加密方案的一些必不可少的预备知识,特别是CKKS。
1.4.1 Mathematical fundamentals
1.4.2 The CKKS scheme
1.4.3 Moduli chain and Bootstrapping
1.4.4 Chebyshev Polynomials
2 Circuit overview
这里提出基于FHE实现的ResNet20。
2.1 Ciphertexts Depth
给定某个密文在执行各种同态功能时所需的乘法深度分配如下:
-
卷积层和BN层消耗一层深度。
-
使用切比雪夫多项式近似评估ReLU层消耗5、6或7层,层数越高精度越高。
此后,使用Bootstrapping技术来刷新密文的层数。
-
ModRaise消耗一层。
-
CoeffToSlot消耗4层。
-
sin函数的评估消耗8层。
-
SlotToCoeff消耗4层。
2.2 Residual Networks Structure
ResNet20是一种特殊类型的残差,具体构造如图2所示:
该网络由5层组成:
(1) Initial Layer: 以一个被表示为张量 R 3 × 32 × 32 \mathbb{R}^{3\times 32\times 32} R3×32×32的图片 I I I作为输入,然后评估一个卷积层一个BN层和一个ReLU函数。该层得到一个表示在 R 16 × 32 × 32 \mathbb{R}^{16\times 32\times 32} R16×32×32中的张量作为输出。
(2) Layer 1: 该层由三个基础块组合而层,每个块的结构如下图所示:
该结构输入一个 16 × 32 × 32 16\times 32\times 32 16×32×32大小的张量,卷积层的填充为{1,1},卷积核的宽度k=3,步长为{1,1},最后输出一个 16 × 32 × 32 16\times 32\times 32 16×32×32大小的张量。
(3) Layer 2 : 下采样
(4) Layer 3 : 下采样
(5) Classification Layer : 使用平均池化层从每个通道提取特征。接下来是一个有10个输出神经元的全连接层,每个神经元对应一个特定的类。通过选择输出得分最高的神经元进行分类决策。
随着电路的评估,密文中存储有效数据的槽会发生改变(总槽数是不变的): 在Layer 1中,密文有s=16384个槽,然后s被减少到s = 8192,依此类推,如表2所示。这允许在更小的密文上执行更快的计算。(我觉得这是因为OpenFHE库的特性使得这个说法成立。)
2.3 Optimized Vector Encoding
我们提出了向量编码的优化版本,在使用{1,1}填充的奇数大小内核的情况下,使用恒定数量的5个旋转键。
注意,这里的旋转键的数量不依赖于卷积核 k 2 k^2 k2的大小和通道数 c c c。
2.3.1 Incorpoating the Batch Normalization
优化后的向量编码程序允许同时评估卷积层和随后的BN层。当评估一个训练好的ResNet时,其中所有的BN层都使用预计算的均值和方差值,这使得它实际上是一个仿射变换。BN操作的原始公式如下:
y
=
x
−
E
[
x
]
V
a
r
(
x
)
+
ε
⋅
γ
+
β
y={x-E[x]\over{\sqrt{Var(x)+\varepsilon}}}·\gamma + \beta
y=Var(x)+εx−E[x]⋅γ+β
由于我们仅考虑推理过程,因此均值
E
[
x
]
E[x]
E[x]和方差值
V
a
r
(
x
)
Var(x)
Var(x)是不需要计算的,也就是说我们使用的是常数,因此我们可以重写上述公式如下:
KaTeX parse error: Expected 'EOF', got '&' at position 3: y&̲=&{x-E\over{V}}…
现在,由于卷积层可以被视为一种放射变换,因此它可以和BN层结合,仅仅消耗一个乘法深度。
2.3.2 Applying the kernel
首先需要描述一下本文图片张量到密文向量的打包方式。
将一个图片张量展开放入密文中,如图3所示:
更正式地来讲,即令
I
∈
R
c
×
w
×
w
I\in \mathbb{R}^{c\times w\times w}
I∈Rc×w×w是
c
×
w
×
w
c\times w\times w
c×w×w的输入张量的特征映射。
I
I
I被加密到
c
t
ct
ct中,对应于密文槽和张量值的关系为:
c
(
w
2
⋅
i
)
+
(
w
⋅
j
)
+
z
←
I
i
,
j
,
z
c_{(w^2·i)+(w·j)+z}\leftarrow I_{i,j,z}
c(w2⋅i)+(w⋅j)+z←Ii,j,z
其中,
0
≤
i
<
c
0\leq i < c
0≤i<c是通道的索引,
0
≤
j
,
z
<
w
0\leq j, z < w
0≤j,z<w是空间位置。
注意:由于ResNet20各种层的不同,在电路评估过程中c和w的值会发生改变。
下面介绍本文的卷积运算算法。
这里通过一个例子引入卷积应用程序。如下图所示,所有的卷积图像都以{1,1}进行填充。
卷积算法的评估包含三个步骤:
(1) 旋转的准备:
P r o p o s i t o n Propositon Propositon. 给定一个索引为环 Z N / 2 \mathbb{Z}_{N/2} ZN/2的生成元,则一个密文的全部旋转都可以从其对应的单一伽罗瓦计算公钥中获得。
例如,我们可以应用r次 R o t 1 ( c t ) Rot_{1}(ct) Rot1(ct),则可以获得密文 c t ct ct的r位旋转。但是这种方法是不推荐的,因为它是极其消耗时间的。相反的,本文通过寻找可能的旋转索引的组合提出了一种混合方法。
考虑图4的卷积计算。
很明显,本文期待的图片向量旋转如下所示:
此时,要求的旋转索引 { − 6 , − 5 , − 4 , − 1 , + 1 , + 4 , + 5 , + 6 } \{-6, -5, -4, -1, +1, +4, +5, +6\} {−6,−5,−4,−1,+1,+4,+5,+6}需要使用8个key来存储,由于这其中的某些项可以写为 ( 6 = 5 + 1 ) (6=5+1) (6=5+1)的形式,这就表明实际上这些旋转索引可以被减少到 { 1 , − 5 , + 5 , 1 } \{1, -5, +5, 1\} {1,−5,+5,1}。更重要的一点是,此方法并不需要更多的旋转,因为它仅是组合了已有的旋转。
考虑到密文是按顺序编码张量,即将图片展开为一维向量。然后将"水平"的向量旋转到"垂直"的向量(这里的水平和旋转,需要结合图3来思考,可以看到水平向量与垂直向量是一一对应的)。
给定特征映射尺寸 w w w(目前感觉这个应该表示的是卷积核的宽度),和填充后的尺寸 w ′ = w + 2 w'=w+2 w′=w+2,我们创建水平旋转索引1和-1,以及垂直旋转索引 w w w和 − w -w −w。从而我们可以按如下方式获得卷积应用所需的九个密文的对齐。
r 0 ← R o t − 1 ( r 1 ) r 1 ← F a s t R o t − w ( r 4 ) r 2 ← R o t + 1 ( r 1 ) r 3 ← F a s t R o t − 1 ( r 4 ) r 4 ← c r 6 ← F a s t R o t + 1 ( r 4 ) r 7 ← R o t − 1 ( r 7 ) r 8 ← F a s t R o t w ( r 4 ) r 5 ← R o t + 1 ( r 7 ) r_0\leftarrow Rot_{-1}(r_1) \\ r_1\leftarrow FastRot_{-w}(r4)\\ r_2\leftarrow Rot_{+1}(r_1)\\ r_3\leftarrow FastRot_{-1}(r4)\\ r_4\leftarrow c \\ r_6\leftarrow FastRot_{+1}(r4)\\ r_7\leftarrow Rot_{-1}(r_7)\\ r_8\leftarrow FastRot_{w}(r4)\\ r_5\leftarrow Rot_{+1}(r_7)\\ r0←Rot−1(r1)r1←FastRot−w(r4)r2←Rot+1(r1)r3←FastRot−1(r4)r4←cr6←FastRot+1(r4)r7←Rot−1(r7)r8←FastRotw(r4)r5←Rot+1(r7)
下面考虑一般情况下的密态卷积操作,算法1给出了上述过程的一般过程:
需要注意的是,此时所要求的旋转次数是 k 2 − 1 k^2-1 k2−1,但是旋转key的数目是常数4。
(2) Applying a set of filters:
给定上述步骤得到的 k 2 k^2 k2个旋转(指的是上述的得到的 k 2 k^2 k2个密文)。然后为每个旋转乘上匹配的权重得到新的密文。将得到的 k 2 k^2 k2个新的密文求和,则得到卷积运算的结果的密文。
一个卷积核被定义为一个四维的张量 K ∈ R n o u t × n i n × k × k K\in\mathbb{R}^{n_{out}\times n_{in} \times k \times k} K∈Rnout×nin×k×k,包含 n o u t n_{out} nout个卷积核。每个卷积核是一个三维的张量 R n i n × k × k \mathbb{R}^{n_{in}\times k\times k} Rnin×k×k,其中 n i n n_{in} nin是输入的通道数。
从直觉上来说,每一个旋转 c t i ct_{i} cti表示卷积核的第 i i i个元素被应用。因此,我们需要为卷积核生成 k 2 k^2 k2个明文,每个明文包含有 w 2 w^2 w2个重复的值,该值和卷积核的元素一一对应。
考虑图3中的示例,我们对该卷积核编码结果如图5所示:
该方法将一个 k × k k\times k k×k的卷积核使用 w 2 w^2 w2个槽编码到 k 2 k^2 k2个明文中。这里的重复是必要的,因为它们允许对整个通道的卷积运算执行并行评估。
如下图所示, k 2 k^2 k2个旋转中消息向量的某些值将被隐藏(实际上我们知道密文中的值已经是固定的,如果在密文中通过同态操作来隐藏对应的值,实际上会消耗密文的乘法深度,因此这里直接对卷积核的编码对应的位置的值进行0填充即可)。然后通过密文的相乘和相加,我们可以得到卷积结果。
上述过程更正式地来说,就是计算 t = ∑ i = 0 8 r i ⊗ k i t=\sum_{i=0}^8r_i\otimes k_i t=∑i=08ri⊗ki。
然而上述过程中我们仅仅使用的是明文中的前 w 2 w^2 w2个槽,所以此时在明文中存在大量的空槽,而且我们又可以观察到在对图片张量编码时,实际上是直接将c个通道的值均进行了编码,而这里 w 2 w^2 w2个槽仅仅对应一个通道。因此,我们可以扩展此程序,将c个卷积核同时应用于c个通道(因为单个卷积核也是具有c个通道的),具体含义如图7所示:
从而得到一个单一的密文t,其中第i个块(即第i个通道)包含第i个卷积核在第i个通道上计算,其排列如下:
(3) 应用于全部的卷积元素
太晦涩难懂了,等过段时间再继续看。。。
2.4 ResNet20 Circuit
回想ResNet20的结构,本文希望基于FHE构建一系列等效的块。第一个问题是自举操作的位置。
我们考虑将下图的明文基础块,构建成FHE基础块:
注意,本文将卷积层和BN层合并到了单一的ConvBN层中,因此两种操作仅仅消耗一层密文级别。
2.4.1 ReLU Approximation Interval
当使用切比雪夫多项式来评估非线性函数时,必须定义一个近似区间。如果使用的区间不是[-1,1],则会引起额外的级别消耗,因为必须将区间[a, b]缩放到[-1, 1]。
2.4.2 Downsampling Layers
3 Experiments and evaluations
4 Conclusion
本文提出了基于FHE的电路,对于CIFAR-10测试集,它能够以高级别的准确率来分类加密图像。本方法所达到的准确性的数级与其他工作相似,但是本文的方法显著减少了内存要求。使得它可以在个人计算机上运行。而且执行时间是更短的。在专门的加速软件上,本方案可以实现每秒5个图像的分类。
本文公开了源码:
https://github.com/LowMemoryFHEResNet20
更多推荐
所有评论(0)