人工智能会伤害人类吗?怎样控制他们? (2)

一个大型神经网络从整体上看复杂度是惊人的,但是将它们分解之后也只是一些简单操作的重复而已。事实上,许多先进的神经网络通常只需要以下操作来创建:

加法

乘法

除法

减法

Sigmoid

tanh

指数函数

既然这样,我们在技术上是否可以加密同态神经网络本身吗?事实证明我们可以通过一些近似做到这一点。

加法 - 开箱即用

乘法 - 开箱即用

除法 - 开箱即用? - 乘 (1 / 被乘数) 即可

减法 - 开箱即用? - 加一个负数即可

Sigmoid - 嗯...也许有点难

Tanh - 嗯...也许有点难

指数 - 嗯...也许有点难

看起来我们可以很轻松地完成除法和减法,但是完成一些复杂函数则比完成加法和乘法操作困难的多。为了对深度神经网络进行同态加密,我们需要一些“秘密配方”。

第四部分:泰勒级数展开

可能你还记得高中或者大学里这部分的内容:泰勒级数允许我们使用无限项的加减乘除操作的组合来计算非线性函数。这个方法完美地解决了我们的问题!(除了需要无限项这一点)。幸运的是,如果你只能计算泰勒展开式的前几项,你也可以得到一个近似的函数。下卖弄给出了一些常用函数的泰勒级数(来源):

其中有指数函数!可以看到展开式只是一些加减乘除操作,这是我们可以完成的。同样地,我们可以像下图所示一样用Python实现我们需要的sigmoid函数的泰勒展开式(其展开式可以在Wolfram Alpha查阅)。我们可以只取前面的部分项来观察近似结果和实际结果的差距。

import numpy as np def sigmoid_exact(x): return 1 / (1 + np.exp(-x)) # using taylor series def sigmoid_approximation(x): return (1 / 2) + (x / 4) - (x**3 / 48) + (x**5 / 480) for lil_number in [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]: print("\nInput:" + str(lil_number)) print("Exact Sigmoid:" + str(sigmoid_exact(lil_number))) print("Approx Sigmoid:" + str(sigmoid_approximation(lil_number))) Input:0.1 Exact Sigmoid:0.524979187479 Approx Sigmoid:0.5249791875 Input:0.2 Exact Sigmoid:0.549833997312 Approx Sigmoid:0.549834 Input:0.3 Exact Sigmoid:0.574442516812 Approx Sigmoid:0.5744425625 Input:0.4 Exact Sigmoid:0.598687660112 Approx Sigmoid:0.598688 Input:0.5 Exact Sigmoid:0.622459331202 Approx Sigmoid:0.6224609375 Input:0.6 Exact Sigmoid:0.645656306226 Approx Sigmoid:0.645662 Input:0.7 Exact Sigmoid:0.668187772168 Approx Sigmoid:0.6682043125 Input:0.8 Exact Sigmoid:0.689974481128 Approx Sigmoid:0.690016 Input:0.9 Exact Sigmoid:0.710949502625 Approx Sigmoid:0.7110426875 Input:1.0 Exact Sigmoid:0.73105857863 Approx Sigmoid:0.73125

从结果可以看到,我们只取前四项时的计算结果就已经很接近无穷项的计算结果了。完成了复杂函数的问题之后,下面我们来选择一个同态加密算法。

第5部分:选择加密算法

同态加密是一个相对较新的领域,其里程碑事件是2009年克雷格·金特里(Craig Gentry)发明了第一个完全同态加密算法。这个发现为后来的研究者提供了立足点。这一领域大部分振奋人心的研究是围绕实现同态加密的图灵完全的计算机展开的。相应地,人们需要寻求一个有效且安全的同态加密算法方案,可以根据任意的计算输入去完成相应的逻辑门操作。人们普遍的希望是可以将工作安全地移植到云上并且不用担心发送的数据被发送者以外的人监听。这是一个非常酷的想法,也取得了很大进展。

但是还有一个缺陷,就是大多数完全同态加密算法在普通计算机上通常是非常慢的(不实用)。这引发了另一个有趣的研究方向,即只做部分同态加密的运算从而减小运算量。这种方案降低了灵活程度但提升了运算速度,是计算中常用的折衷手段。

我们从这一点出发寻找加密算法。理论上我们需要的是一个在浮点运算的同态加密方案(但我们本文更多以整数为例),为什么不是二进制呢?二进制加密固然可行,但是它不仅要求完全同态加密方案的灵活性(性能损失),还需要我们去管理二进制表示和数学操作中的逻辑操作。相比之下,没有那么强大的针对浮点数定制的HE算法更为合适。

尽管我们确定了这个限制条件,但是还有很多的算法以供选择。这里有一些具有我们喜欢的特性的流行算法:

基于整数向量的高效同态加密及其应用

Yet Another Somewhat Homomorphic Encryption (YASHE)

Somewhat Practical Fully Homomorphic Encryption (FV)

Fully Homomorphic Encryption without Bootstrapping

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdxwy.html