论文笔记(一)SecureML: A System for Scalable Privacy-Preserving Machine Learning

SecureML:A system for Scalable Privacy-Preserving Machine Learning

1 摘要及介绍

1.1 模型的大体架构

首先,主要模型中主要有客户端和两台服务器,假设这两台服务器不会恶意合做。   整个训练过程大体分为在线和离线两个阶段,在线阶段的主要任务就是利用本文提出的安全算数技术在共享的十进制数上进行模型的更新,根据混淆电路的思想,除了最后能获得的模型,什么数据也不会暴露出来;离线阶段的主要任务是服务于在线阶段的乘法运算——利用线性同态加密或者不经意传输生成必要的三元组,由于这个开销比较大,后期还提出了一种改进,用客户端来辅助生成三元组;算法

1.2 主要贡献

  • 为线性回归、逻辑回归、神经网络这三种机器学习算法开发出了新型的隐私保护的深度学习协议
  • 开发出了支持在共享的十进制数上的安全算数操做的技术
  • 对于那些非线性激活函数,如sigmoid softmax,提出了一种支持安全多方计算的替代方案
  • 以上提出的全部技术相较于目前的技术,在保证安全的前提下,速度上都有很大的提高

1.2.1 为三种机器学习算法开发出的隐私保护的协议

线性回归、逻辑回归和神经网络这三种机器学习方案很是简单但也很是经常使用,并且他们之间思想相似且一种递进的趋势。 所谓思想相似指的是他们都是有监督的机器学习算法,思路都是先前馈,算出交叉熵以后,在利用随机梯度降低,再后馈更新模型。 所谓递进指的是,线性回归只涉及到了简单的加乘操做,本质上讲不考虑效率的状况下,只要可以实现隐私保护的线性操做便可实现线性回归,最简单的混淆电路便可实现,但本文考虑了效率,因此提出了一种更快的在共享的十进制数上的安全算法操做技术。而逻辑回归相较于线性回归,只是多了激活函数,因此做者提出了一种替代的解决方案。而神经网络在算法设计上虽然与逻辑回归不一样,可是其“组件”上依然是线性操做+激活函数。编程

1.2.2. 更快的安全两方乘法——在共享的十进制数上的算数操做

前人主要的性能瓶颈是在安全两方计算,好比姚氏混淆电路中,计算定点乘法操做开销很是大。安全

本文提出的方案:将这两个共享的十进制数表示成有限域上的整数,使用离线生成的三元组在共享的整数上执行乘法操做,每一方都截断它所拥有的积的那部分,于是固定数量的比特便可表示小数部分。通过验证,即便是用截断以后的share恢复出来的乘积,相较于定点乘法差距不大,偏差几乎能够忽略不计。服务器

1.2.3支持安全多方计算的激活函数

逻辑回归和神经网络必须使用sigmoid和softmax,但如今使用的用多项式去模拟激活函数的方式是低效。网络

本文提出了一种新的激活函数,相似于两个RELU函数之和并用小型混淆电路求和,来替代sigmoid,并用到了在算数分享和姚氏分享之间的切换。与之相似,为了替代softmax,提出了一种结合了RELU、加法和除法结合的激活函数。架构

1.2.4 其余提升效率的方法——向量化与客户端辅助生成三元组

​ 为了提升系统的总体效率,还提出了提升总体性能的方法,如向量化,提取数量数据的时候按batch来提取。离线阶段,提出一种更快的、每一个客户帮助产生三元组的离线阶段。可是比起标准设定,安全性保证不够好,由于它须要客户端和服务器不会同流合污。机器学习

2 基础知识

2.1 机器学习

由于本文的重点在于隐私保护,因此涉及到的机器学习三个算法都是很是基础的,是机器学习中的"hello world"级的线性回归、逻辑回归和神经网络这三个算法。并且总体思路也几乎相同——先前馈,求出交叉熵,而后使用随机梯度降低再后馈来更新模型。如下是对于他们的简单回顾:编程语言

2.1.1 线性回归

线性回归是根据现有点,拟合出一个n元一次函数,所谓的模型就是系数向量w,把数据向量化表示以后,更新模型最核心的公式是: $$ w:=w-{1\over |B|}\alpha X^T_B×(X_B×w-Y_B) $$ 其中,w为系数矩阵,也就是所谓的“模型”,每次训练时选出的那组数据叫作一个batch,|B|就是batch中数据的个数,(XB,YB)就是一个batch中全部的数据组成的向量组,物理意义其实就是函数图像上的不少点。函数

2.1.2 逻辑回归

逻辑回归在二分类问题上很经常使用,它通常获得的是一个介于0~1之间的数。逻辑回归和线性回归很相似,可是多了一个激活函数,就是这个激活函数使整个算法从线性飞跃到了非线性,把数据向量化以后,更新模型的公式和线性回归也很像,就是多了激活函数f: $$ w:=w-{1\over {|B|}}\alpha X^T_B×(f(X_B×w)-Y_B) $$ 各个符号的意义和线性回归的几乎同样,激活函数f通常要么是logistic(这篇文章里叫logistic,但我看通常的机器学习资料里管他叫sigmoid): $$ y={1\over {1+e^{-x}}} $$ 或者是softmax: $$ y = {e^{-x_i} \over \sum e^{-x_i}} $$ 这都是很常见的激活函数了。性能

2.1.3 神经网络

这里提出的神经网络也是最多见的BP神经网络,整个过程和线性回归和逻辑回归大同小异。从本质上来讲,线性回归只涉及到了线性的加乘操做,逻辑回归多了激活函数,神经网络相较于前两种算法在这个方面并无什么本质上的突破,因此只要解决了线性和激活函数的隐私计算问题,这三种机器学习算法的运算问题都获得了解决。

做为深度学习的“hello world”任务,MNIST是全部新手的第一关,任务也很是简单,就是分类任务,不过是多分类。思路也相似,所谓的“模型”就是每一层神经网络之间的系数矩阵,先前馈,求出交叉熵,而后随机梯度降低,再后馈调整系数矩阵,最终达到一个比较理想的结果: $$ W_i := W_i - {\alpha\over|B|}×f(X_{i-1}×W_i)×Y_i $$

2.2 安全计算

2.2.1 不经意传输

​ 不经意传输是安全多方计算经常使用的技术:有一个发送者S,他有两个输入x0和x1,又有一个接收者R,它有一个选择比特b,获得xb(b∈{0,1}),可是S不知道b到底是什么,而R也不可能知道除xb以外的另外一个输入是什么。符号描述起来是:(null, xb) <- OT(x0,x1;xb),伪代码描述起来是这样:

Parameter: Sender S and Receiver R

Main: On input (SELECT, sid, d) from R and (SEND, sid, x0, x1) from S, return (RECV, sid, xb) to R.

(:P8不经意传输的算法描述

咱们在两个地方使用使用不经意传输:一、离线阶段产生三元组 二、计算激活函数

传统的不经意传输效率较低,这里使用了一种扩展的不经意传输correlated OT扩展,记做COT,可以容许接收和发送者执行m个OTs以n(n,一个安全参数)基、带有公钥操做的OTs和O(m)快速对称密钥操做的代价。在这里,两个输入是不独立的,s0是一个随机数,而s1=f(s0),f是用户选定的一个系数矩阵。一个l-bit消息的COT,记做COTL,是n+l比特,计算由三个哈希组成。

2.2.2 混淆电路两方安全计算

混淆电路的目的是为了根据两方的输入x,y计算出f(x,y)的结果,可是参与运算的彼此不可能知道对方的输入,一套混淆方案大体由一下几部分组成:

参数1 参数2 输出1 输出2
混淆算法 随机种子$ 函数f 混淆电路F 解码表dec
解码表dec 随机种子$ x 混淆输入x^
评价(evaluation)算法 混淆输入x^ 混淆电路FZ[i] = UBi* V[i] 混淆输出z^
解码算法 混淆输出z^ 解码表dec f(x)

给定上述方案,则能够设计出一套安全两方计算协议,在通常的相似协议中,alice叫作generator,bob叫作evaluator。generator负责本身设计密钥,把整个真值表加密、混淆,而后和evluator利用不经意传输协议,evaluator作出选择以后,将选中的label和他的密钥还给evalator,两方再分别解密。一个例子以下:

  1. alice运行混淆算法:根据随机种子和函数f,生成混淆电路GC和解码表dec

  2. alice将x放入解码表dec编码以后获得混淆输入x^

  3. alice将混淆电路GC和混淆输入x^发送给bob

  4. bob经过不经意传输,获得了本身的混淆输入y^

  5. bob接着在GC上执行评价算法——经过x^ y^和混淆电路GC获得混淆输出z^

  6. 双方经过解码算法获得最终结果f(x)

    以上算法被记做:(za,zb) <- GarbledCircut(x;y,f)

2.2.3 秘密分享和三元组

​ 在咱们的协议中,全部的中间结果都被两个服务器所秘密分享的。这里实现了三种不一样的分享方案:加法、布尔和乘法分享。

1、加法分享

  所谓将a加法分享,就是将a拆成两个数字,这两个数字之和是a,这两个数字由两方分别保存。记做(ShrA(.))。为了加法分享一个l-bit的值a,记做<.>,以alice和bob为例:

  1. alice随机产生一个2^l范围内的整数a0 (a0记做<a>A0 )

  2. alice计算出a1 = a - a0 mod 2^l

  3. alice将a1发送给bob (a1记做<a>A1)

    为了恢复RecA(.,.)已经被加法分享的值a,Pi将<a>i发送给P1-i,双方分别计算<a>0+<a>1

2、乘法分享

​ 所谓将c乘法分享,就是将c拆成两个数字,而这两个数字之积是c,这两个数字由两方分别保存。记做(MulA(.,.))。如今c已经被分享成了<a>和<b>,咱们假设双方已经共享了<u> <v> <z>,其中:

  • u和v都是2^l整数域内的随机值

  • z = u*v mod 2^l

    乘法分享流程以下:

  1. Pi本地计算<e>i = <a>i - <u>i
  2. Pi本地计算<f>i = <b>i - <v>i
  3. Pi运行Rec(<e>0, <e>1)
  4. Pi运行Rec(<f>0, <f>1)
  5. Pi计算

$$ c_i = -i * e * f + f * <a>_i + e * <b>_i + <z>_i $$

3、布尔分享

布尔分享能够被视做在{0,1}整数域内的加法分享,其中异或被加法替代,逻辑与被乘法替代。   关于布尔分享和姚氏分享:此协议中不显式使用姚氏分享,由于它会被隐藏在混淆方案中,可是Y2B转换会被使用来将混淆输出变成布尔分享   能够把混淆电路协议视做操做姚氏分享的输入来产生姚氏分享的输出。特别地,在全部混淆方案中,generator为每一个wire w产生两个随机字符串kw0,kw1。当使用点&排序技术时,generator也产生随机排序比特rw,使Kw0 = kw0||rw,Kw1 = kw1 || (1-rw)。被排成串的比特流一会被用来排序每一个被混淆真值表的行   好比,数字a的姚氏分享是<a>Y0 = Kw0, Kw1 & <a>Y1 = Kwa。为了恢复被分享的值,参与者交换他们的shares,异或或者逻辑与会被执行来评价相关的逻辑门。   从姚氏分享切换到布尔分享的操做记做Y2B(.,.),其中,姚氏分享<a>Y0 = Kw0, Kw1 & <a>Y1 = Kwa,布尔分享则变成了P0拥有<a>B0=Kw0[0],P1拥有<a>B1= <a>Y1[0]=Kwa[0]换句话说,混淆方案中用来排序的比特能够被无缝切换到布尔分享。

3 隐私保护的机器学习

3.1 隐私保护的线性回归

​ 基于算数秘密分享三元组的隐私保护的线性回归

训练数据被秘密分享于两个服务器S0 S1上,咱们将其分别记为(<X>0, <Y>0) (<X>1, <Y>1)。s0可使用它的公钥来加密第一个share,而后将加密后的结果和明文share上传S1上,S1把被加密的share传给S0来解密。

数据被秘密分享,模型也被秘密分享——系数矩阵w也被秘密分享于两个服务器上,初始阶段都是随机值,在两个服务器之间没有任何通讯。每一轮GSD以后,它被更新但仍然保持秘密分享,直到训练的最后才会恢复。

在线阶段,咱们进行线性回归的更新,公式是: $$ w_j := w_j - \alpha(\sum^d_{k=1}x_{ik}w_k-y_i)x_{ij} $$ 由于没有向量化,因此这是一个个的数字,根据以前所述,这些数字都是被秘密分享在两个服务器上的,又由于只有加法和乘法,所以咱们使用相应的、被分享值的加法和乘法算法给来更新系数: $$ <w_j> := <w_j> - \alpha Mul^A(\sum^d_{k=1}Mul ^A(<x_{ik}>,<w_k>)-<y_i>,<x_{ij}>) $$ 也就是说每一个服务器用这个公式来分别更新本身本地的相应的值。

3.1.1 向量化

上面那个只是针对一个训练数据,举个例子,好比d=3,有这样一个训练数据([x1 x2 x3], y[1]),更新时就是i=1,j从1到3.

咱们想要同时训练一个batch的数据,这样能够提升效率,因此可使用向量化技术。因此咱们将共享值上的线性操做推广到了共享矩阵上的线性操做。其实很是相似,就是把全部的值都换成了矩阵便可,矩阵中的每一个元素视做共享值便可。若是mini-batch有B条数据,那么在线阶段的更新公式就是变成了: $$ <\bold w> := <\bold w> - {1\over|\bold B| } \alpha Mul^A(<\bold X^T_B>,Mul^A(<\bold X_B>,<\bold w>)-<\bold Y_B>) $$ 一个样本在不一样的轮次上会被使用不少次,它知足用一样的随机三元组来掩盖它。所以离线阶段,一个共享的n*d随机矩阵<U>被用来生成掩盖数据样本<X>。

在线阶段的起始阶段,<E>i = <X>i - <Y>i被计算并被交换来重构E。此后,EB被选择并且被使用在乘法协议中,不带有任何更多的计算和交流。特别的,在离线阶段,一系列下标B1,B2...Bt在两个服务器间获得公认。仅仅须要n,d,t的知识或者一个上标而不须要真实数据。而后三元组<U>,<V>,<Z>,<V'>,<Z'>被提早计算:

维度 做用 备注
U n×d mask data X
V d×t 每一列用来mask w forward propagation
Z |B|×t 中间结果 Z[i] = UBi* V[i]
V' |B|×t 每一列用来mask Y* - Y backward propagation
Z' d×t 中间结果 Z'[i] = UTBi* V'[i]

将数据用矩阵形式表示,将大大下降交流和通讯的效率.

3.1.2 被分享的十进制数上的算数操做

正如以前讨论的,前人工做的不高效主要来源于在共享/加密的十进制数上的计算,以前的解决方案主要有两种: 一、把共享的十进制数当作整数,作乘法后在很大的有限域上彻底保留下全部的精度。缺点是只能支持必定数量的乘法,由于结果的范围会随着乘法的数量指数级增加。 2、在十进制数上利用安全两方计算的布尔电路来作定点或者浮点乘法。这带来了大量的负载,由于计算两个l-比特长的数的乘法就须要O(l^2)个门,在2PC(例如姚氏混淆电路中),这样的电路须要为每一个乘法进都算一次。

本文提出了一种简单但有效的支持有限域上的十进制数的解决方案。考虑对两个小数部分最多有lD比特的两个十进制数x y的定点乘法,首先把经过x' = 2^lD×x,y' = 2^lD×y,把数字转化成整数,而后把他们相乘获得z = x'×y',注意到z最多有2lD表示积的小数部分,因此咱们简单粗暴地将最后z的最后lD比特砍掉,这样它最多有lD比特来表示小数部分。 z也能够被秘密分享,能够证实,两个服务器分别砍去本身的最后lD位比特,和想要的z其实最多相差一个最不重要的比特位,这对最后结果的影响能够说是微乎其微。换句话说,相较于标准的定点乘,咱们只是缺乏了小数部分最不重要的一个比特位。

隐私保护的线性回归的在线部分的协议如图所示:

线性回归 协议假定了数据无关的共享矩阵<U><V><Z><V'><Z'>已经在离线阶段产生,除了共享十进制数的加乘,协议还须要将系数向量和学习率相乘,为了让乘法更有效率,将{\alpha \over |B|}变成2的幂次,好比{\alpha \over |B|} = 2^{-k}

3.2 离线阶段——产生三元组子

说到底我仍是不理解,在线和离线阶段都分别用来干什么?个人理解是,所谓模型更新,所须要的不过是一次线性混淆计算,简单来说,就是双方共同计算一个a*b便可,而后各自能够获得计算结果。这么讲吧,你本身也发现了,你本身其实可能根本不须要online就能作不少事情,你所须要online作的只是一小部分,不少事情不必online作了,因此分红了online和offline。

那咱们这里线下作了些什么呢?就是generate 三元组。对啊,我就是想问,为何offline的必定是generate 三元组?而不是其余的工做?

回忆一下,给定共享随机矩阵(这里所谓的共享是什么意思?是两方拥有同样的矩阵?仍是说这个矩阵被秘密分享,便可以用两个数字相加恢复出来?)<U>,<V>关键步骤是从<U>中选择一个|B|×d的子矩阵,和从<V>选择一个列并计算他们积的shares,这被重复t次来计算出<Z>,<Z'>被这样计算以相反的维度。

所以,简化起见,咱们关于于基础步骤,给定|B|×d的矩阵<A>的shares,和一个d×1的矩阵<B>的shares,咱们想要计算|B|×1的矩阵<C>的shares。咱们利用接下来的关系:C = <A>0 ×<B>0 + <A>0 ×<B>1 +<A>1 ×<B>0 +<A>1 ×<B>1。<<A>0 ×<B>1> <<A>1 ×<B>0>能够合做计算,而 <A>0 ×<B>0 <A>1 ×<B>1便可在本地计算。

接下来就是如何合做计算<<A>0 ×<B>1> 、<<A>1 ×<B>0>>这两个式子的问题

3.2.1 基于同态加密的生成

为了计算<A>0 ×<B>1的shares,S1使用LHE加密<B>1的每一个元素,并将它发送给S0。S0而后在密文上执行矩阵乘法,其中加法被乘法替代,乘法被幂运算取代。最后,S0将获得的密文用随机值掩盖,发送给S1解密。最终的结果就是S0和S1分别获得了<<A>0 ×<B>1>0和<<A>0 ×<B>1>1这两个shares。对于计算<<A>1 ×<B>0>>,方法是同样的。再用上能够本地计算的两个式子,C便可算出出来。说白了,线下阶段就是在计算没法本地计算的三元组子嘛?

我大概懂了什么叫generate 三元组,说白了就是根据本地存储的<A>和<B>计算出<C>,上面的分析是将求出<C>拆成四个式子的运算,一半能够offline作,一半须要交流。须要交流的那个两个式子的求解过程只须要传送一下两个被加密/混淆过的矩阵便可,通讯开销小。计算开销经过分析是能够接受的.

3.2.2 基于不经意传输的生成

上面的问题——计算<<A>0 ×<B>1>的shares也能够用不经意传输来解决,步骤以下:

  1. S1使用bj个比特来选择从2个使用COT从aij中计算出来的值选一个出来(明明就是一个aij,为何要变成两个,并且怎么变成两个的???)
  2. 对于k=1~l,S0设置COT的系数函数为fk(x)=aij*2^k+x mod 2^l
  3. S0执行COT(rk,fk(xj); bj[k])
  4. S1执行COT(rk, fk(x); bj[k])
    • 若是bj[k] = 0,S1获得 rk
    • 若是bj[k] = 1,S1获得 aij*2^k+x mod 2^l
    • 也能够写成bj[k] * aij * 2^k + rk mod 2^l

$$ <a_{ij},b_j>_0 = \sum _{k=1}^l*(-r_k) (mod 2^l) $$

$$ <a_{ij},b_j> 1= \sum {k=1}^l(b_j[k]aij2^k+r_k)= a{ij}*b_j+\sum{k=1}^lr_k (mod 2^l) $$

3.3 隐私保护的逻辑回归

相较于线性回归,逻辑回归须要在共享数字上计算激活函数: $$ f(u)={1\over 1+e^{-u}} $$ 这其中有除法有幂运算,很难用算数或布尔电路来进行安全两方计算。以前使用的用多项式去近似的方法虽然能够行可是效率过低而没法使用。

3.3.1 安全计算友好型激活函数

因此做者提出用这样一种激活函数来做为替代方案:

$$ f(x)=\begin{cases}0,&if \quad x<-{1\over 2}\cr x+{1\over 2},&if \quad -{1\over 2} \leq x \leq {1\over 2}\cr1,&if\quad x> {1\over 2} \end{cases} $$ 激活函数

之因此使用这个函数,一来是由于它在边界很容易收敛到0或1,并且和RELU函数很像。

一旦咱们使用新的激活函数,在计算后馈阶段时,咱们使用相同的更新函数做为逻辑函数,即继续使用逻辑函数计算偏导数,这种方法通过实验证实效率很好。做者页建议探索更多安全多方计算友好型能够被简单的布尔和算数电路计算的激活函数。

3.3.2 隐私保护协议

新的激活函数是电路友好型。它仅仅包含了测试输入是否在[-1/2,1/2]这个区间。可是,仅仅把姚氏混淆电路协议整个的直接用到激活函数中是不高效的。相反,咱们利用在算数分享和姚氏分享之间切换的技术。逻辑回归和线性回归随机梯度降低的惟一不一样就是逻辑回归在每一个前馈过程都多了一个额外的激活函数。所以,首先咱们和计算线性回归同样,先计算除了数据和系数矩阵的内积,而后将算数分享切换到姚氏分享并计算激活函数的值使用混淆电路。而后在切换回算数分享来继续后馈过程。具体训练过程以下:

逻辑回归

3.4 隐私保护的神经网络训练

在隐私保护的线性回归和逻辑回归均可以被很顺畅地扩展来支持隐私保护的神经网络的训练,我可使用RELU函数做为每一个神经元的激活函数,交叉熵做为损失函数。每一个神经元的系数的更新函数均可以像表达成像2.1中讨论的那种封闭模式。除了激活函数的求值和偏导函数外,前馈和后馈阶段的全部函数都是简单的线性操做。为了给RELU函数求和和求导,咱们像给逻辑函数那样转换到姚氏分享便可,混淆电路仅仅将两个shares相加并输出最重要的比特,比咱们在逻辑函数中使用的电路还要简单。RELU的求值和求导函数能够在一轮以内一块儿求出来,求导的结果用在后馈阶段。   咱们也提出了安全多方计算友好型的softmax的替代方案。而后咱们将RELU全部的输出加起来求和,使用出发电路,将每一个输出除以总和。这样,输出能够保证是几率分布。   根据实验中的观察,花在RELU混淆电路上的时间占了大量的在线训练时间。所以,咱们也考虑将激活函数替换成平方函数。这样调整以后,咱们达到了93.1%的准确率。如今,一个计算RELU函数的混淆电路被在共享值上的三元组子所替代,在线阶段的性能大大提升。可是,这种方法花费了更多的三元组也提升了在线阶段的开销。

3.4.1 效率讨论

在线阶段,计算复杂度是 使用矩阵算数操做的明文训练加上RELU求值和使用混淆电路和不经意传输的 两倍。 离线阶段,三元组的总数相较于增加了O(\sum^m_{i=1}d_m)相较于回归,这实际上是神经元的总数。一些三元组子能够为在线矩阵乘法以矩阵形式产生

3.5.1 隐私保护预测

咱们迭代咱们能够隐藏输入数据、模型、预测结果和他们的任意组合,由于在咱们的协议中他们能够秘密分享。若是要么输入数据、要么模型能够被揭露出来,效率能够进一步提高,例如,若是模型是明文,带有矩阵的输入数据的乘法能够被直接计算在shares,不须要直接计算的三元组

4 客户端辅助的离线协议

主要的性能瓶颈是离线阶段,它包含大量的密码学操做例如OT或者LHE,,固然会比在线阶段的在有限域上的简单的加乘操做慢。这刺激咱们去寻找另一种产生三元组的替代方案。尤为,咱们让客户端产生三元组。既然客户端首先须要秘密分享他们的数据,进一步让他们秘密分享一些额外的三元组也是天然而然的事情。如今,一些三元组能够在没有任何秘密学操做、以可信任的方式产生。这大大提升了效率,尽管他有好处,也改变了安全模型。

4.1 客户端辅助的三元组

简单起见,注意到在整个训练过程当中,每一个数据样本中的特征在两个三元组子中用到了——一次是在前馈阶段,一次是在后馈阶段。所以,它suffices for客户端持有这个值来产生2E三元组。尤为,对于每一个样本中的每一个特征,客户端处理数据来产生随机值u来掩盖数据,产生随机值vk,vk' for k = 1~E并计算zk=u*vk,zk'=u* vk' 最后,客户端将<u>, <vk>, <vk'>, <zk>, <zk'>的shares分布在两个服务器上。此次操做我确定在哪里见过,若是是服务器作,该怎么作呢?服

咱们不假定客户端在产生三元组的时候知道数据是如何partitioning的,这意味着咱们没法从在线阶段的向量化中获益。举个例子,在线性回归的前馈阶段,咱们使用以前计算的和在线阶段具备同样的维度的矩阵三元组U×V=Z。如今,当三元组被客户端产生时,在mini-batch Xb中的数据或许属于不一样的,且不知道他们拥有相同的训练batch的客户端,所以不一样共认一个共同的随机矩阵V来计算Z 相反的,若是不进行向量化,即对于在XB中的每一个数据样本x,双方使用独立产生的三元组计算<y*>=MulA(<x,w))。所以,在线阶段的通讯、计算开销和两台服务器的存储负载都提升了。 客户端辅助三元组产生由于没有密码学操做参与其中,虽然提升了离线阶段的效率,可是由于矩阵三元组被向量的内积所替代,它将负载引入了在线阶段。所要执行的乘法的总数是相同的,整体上,矩阵相乘算法比使用编程语言中的矩阵库要快。这是最大的被客户端辅助产生三元组引入的负载。 通讯的开销也一样上升了,之前系数矩阵被一个随机矩阵所掩盖来计算一个矩阵乘法,如今每计算一个内积就要被不少不一样的随机矩阵来掩盖。被掩盖的值要用安全计算协议在两方之间传输。   最后,存储开销也提高了。先前,矩阵V和矩阵Z比数据大小要远远地小,矩阵U和数据同样的大小。如今,由于三元组子被独立产生,V的大小变成了|B|*d*t=n*d*E,比数据的大小要多出一个E。U的大小仍然同样,由于每一个数据仍然被一个随机值所掩盖,Z的大小仍然相同由于一旦服务器从全部的客户端那里收到了shares,值将会被聚合。   尽管有这样负载,由于离线阶段被大大提高,在线阶段仍然是有效率的,因此总体的性能被大大提高。这种客户端辅助产生三元组的架构也是是如今最有前景的一种架构。

4.2 新的安全模型

安全模型也随之发生改变,仅仅记下改变的那一部分。先前,用户只负责上传数据,所以服务器固然没法知道任何信息当它和一小部分客户端同流合污时。如今,由于客户端也产生三元组,若是一小部分客户端和服务器联合起来时,他们或许能够恢复出系数矩阵,这损害了诚实客户端的利益。所以在这个安全模型中不容许服务器和客户端同流合污。

相关文章
相关标签/搜索