crypten说明1

turorial1:

现在,我们对安全 MPC 的工作原理有了高层次的了解。通过这些教程,我们将解释如何使用 CrypTen 对加密张量进行安全操作。在本教程中,我们将介绍 CrypTen 的一个基本构件,称为 "CrypTensor"。 CrypTensor "是加密的 "torch "张量,可用于对数据进行安全计算。
CrypTen 目前只支持安全的 MPC 协议(不过我们打算增加对其他高级加密协议的支持)。通过使用 ```mpc``` 后端,```CrypTensors``` 可作为 ```torch``` 张量,其值已通过安全 MPC 协议加密。使用```mpc```后端创建的张量称为```MPCTensors```。我们将在教程 2 中详细介绍 ``MPCTensors`` 。
首先,让我们导入 ```crypten``` 和 ```torch`` 库。(如果导入失败,请参阅 README 中的安装说明)。

import crypten

import torch

crypten.init()

 创建加密张量
CrypTen 提供了一个 ```crypten.cryptensor``` 工厂函数,类似于 ```torch.tensor```,可以轻松创建 ```CrypTensors```。

让我们先创建一个 ```torch``` 张量,然后使用 ```crypten.cryptensor``` 对其加密。要解密 ```CrypTensor``` ,使用 ```get_plain_text()``` 返回原始张量。 (也可以直接从列表或数组创建```CrypTensors```)。

#### 比较
同样,我们可以对 ```CrypTensor``` 进行元素比较。与算术运算一样,在 ``CrypTensor``s 上执行的比较将返回一个 ``CrypTensor`` 结果。解密这些结果 ```CrypTensor```s 将分别评估为与 ```False``` 和 ```True``` 值相对应的 0 和 1。

#### 高级数学
我们还能使用迭代逼近法在````CrypTensors````上计算更高级的数学函数。CrypTen 为倒数、指数、对数、平方根、tanh 等函数提供 MPC 支持。请注意,由于使用了近似值,这些函数会产生数值误差。

此外,请注意,当输入值超出所用近似值的收敛范围时,其中一些函数会无声失效。这些函数不会产生错误,因为值已加密,不解密就无法检查。使用这些函数时要谨慎。(对某些模型的输入值进行归一化处理是一种很好的做法)。

## 使用加密张量的控制流

注意 ```CrypTensors``` 不能直接用于条件表达式。因为张量已加密,除非先解密张量,否则布尔表达式无法求值。尝试使用加密条件执行控制流将导致错误。

某些控制流仍可在不解密的情况下执行,但必须使用数学表达式执行。我们提供了```crypten.where(condition, x, y)```函数来抽象这种条件值设置。

下面的示例说明了如何为 ```CrypTensors``` 编写这种条件逻辑。

### 高级索引
CrypTen 支持许多对 "torch "张量进行的操作。加密的张量可以被索引、连接、堆叠、重塑等。有关操作的完整列表,请参阅 CrypTen 文档。


#### 实现注意事项

由于内部实现细节的原因,```CrypTensors``` 必须是结合```CrypTensors``` 和```torch``` 张量的操作的第一个操作数。也就是说,对于```CrypTensor``````````x_enc`````和明文张量```y````来说:
- 表达式 ``x_enc < y``` 是有效的,但等价表达式 ``y > x_enc``` 会导致错误。
- 表达式 ``x_enc + y``` 是有效的,但等价表达式 ``y + x_enc``` 会导致错误。

我们打算在将来添加对这两种表达式的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值