一个简单例子,理解CKKS中rescaling

CKKS近似同态加密方案作为leveled 同态方案,其中rescaling的步骤至关重要,

按照 Song 的介绍以及他们的文章,rescaling在密文乘运算后进行,一般是重线性化(relinearization)之后,重现性化这里不说了,直接看BFV方案的文章就可以,也就是通过额外引入relin_key, 使得密文乘运算后依然保证密文的规模不变依旧是(c0,c1),解密电路也依然是 c0+c1·s 。

Rescaling 的措施来自源于CKKS 方案在encode步骤中对明文多项式进行了scaliing(放大)假设scaling factor为delta,那么进行密文乘之后的密文 c_mul 具有对scaling factor 就变成了delta**2, 所以,如果不处理没几次乘法就会把Q域撑爆了。因此,这里的rescaling 说白了就是要把c_mul的缩放因子再变换回delta。

乍一看,觉得这不可能实现啊,数据大小不就变了么,

比如:500写作: 5*10, 那么50 *50=(5*10)*(5*10)=25*(10*10)= 25 * 100

而这里rescalling 的操作实际上是将 模数Q同步进行约减,而在约减后的模数域内其密文乘所具有的缩放因子 为delta 而不再是delta平方

 以刚才这个例子为准,假设一个密文(由于在CKKS中是对密文进行rescaliing操作,权且称为“密文”,可以理解为一个消息而已)为 5,放大后为50 = 5*10 此时 Q1=10000,例子如下:

Q1=10000
delta = 10
c1 = 5*delta
c2 = 5*delta
c_mul = (c1 * c2) % 10000 

print(c_mul)


# rescaling 
Q0 = Q1/delta
c_mul_rs = np.round(c_mul/delta) % Q0
print(c_mul_rs)


print((c_mul_rs/delta) % Q0)

输出:
2500
250.0
25.0

 其中250,c_mul_rs为在Q0域上的密文值,因此,在该层内进行“解密”(仅对c_mul 除一次delta),便可以得到25。而在Q1上c_mul为2500 则需要对其除两次delta。

因此通过这个例子,便能看出,rescale的目的就在于模数约减delta之后,对应密文乘的结果缩放因子 变回delta。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: tf.keras.layers.Rescaling是一个对输入进行缩放的层。它将数据的值进行线性缩放,从而将输入数据映射到指定的范围内。 该层的输入是一个tensor,它的值会被线性缩放到指定的范围内。例如,如果指定的范围是[0, 1],那么每个输入值都会除以一个固定的数,使得最小值变为0,最大值变为1。这可以确保输入数据的范围与模型的期望范围相匹配。 Rescaling层的主要作用是对输入数据进行预处理,以便更好地适应模型。预处理数据可以提高模型的训练效果,减少梯度消失或爆炸的问题,并且可以加快模型的收敛速度。 例如,如果输入数据的范围较大,可能会导致模型对大值更敏感,忽略小值。通过使用Rescaling层,可以将输入数据的范围缩小到更合适的范围内,以确保模型能够得到一致的训练结果。 使用Rescaling层非常简单,只需要将其作为模型的第一层,并指定所需的范围。例如,可以使用Rescaling((0, 1))将输入数据缩放到范围[0, 1]内。 总而言之,tf.keras.layers.Rescaling是一个对输入数据进行线性缩放的层,它可以用于预处理数据,以确保模型能够更好地适应输入数据的范围,从而提高模型的训练效果。 ### 回答2: tf.keras.layers.Rescaling是TensorFlow的一个图层(Layer),用于对输入数据进行缩放(Rescaling)。这个图层广泛用于将像素值从整数范围(如[0, 255])缩放到[0, 1]或[-1, 1]之间的浮点数范围。 使用Rescaling图层时,我们可以通过设置scale参数来指定期望的缩放范围,例如[0, 1]或[-1, 1]。图层会将输入数据的每个像素值除以缩放因子,从而将像素值缩放到指定的范围内。 这个图层是在模型的输入层前面使用的,用于对输入数据进行预处理。通过将输入数据进行缩放,我们可以确保数据的范围一致,并且可以有效地提高模型的性能和训练结果。 下面是一个使用Rescaling图层的示例代码: ```python import tensorflow as tf # 创建模型 model = tf.keras.models.Sequential() # 添加Rescaling图层 model.add(tf.keras.layers.Rescaling(scale=1./255, input_shape=(32, 32, 3))) # 添加其他图层和网络结构 ... ``` 在这个示例,我们首先创建了一个Sequential的模型,然后通过add方法添加了一个Rescaling图层。我们设置了scale参数为1./255,这样可以将输入数据的像素值从[0, 255]的整数范围缩放到[0, 1]的浮点数范围。 通过使用Rescaling图层,我们可以方便地对输入数据进行预处理,确保模型的输入数据的范围一致,并提高模型的训练效果。 ### 回答3: tf.keras.layers.Rescaling是一个层,用于对输入数据进行重新缩放。它将输入数据的每个元素除以一个特定的因子,并且可以加上一个特定的偏移量。这个层通常用于对输入数据进行预处理,以便将其缩放到特定的范围内。 在使用Rescaling层时,我们需要指定所需的缩放因子和偏移量。缩放因子可以是一个浮点数或一个数组,表示在每个输入维度上缩放的因子。偏移量可以是一个浮点数或一个数组,表示在每个输入维度上的偏移量。 例如,如果我们希望将输入数据的每个元素除以255(对应于像素值的最大值),则可以将缩放因子设置为1/255。这样做是因为RGB图像的像素值范围在0到255之间。如果我们还希望对输入数据进行平移,并将其缩放到-1到1的范围内,我们可以将偏移量设置为-0.5,并将缩放因子设置为1/255。 Rescaling层常常与其他层一起使用,例如在卷积神经网络。通过对输入数据进行重新缩放,可以帮助提高模型的训练性能并加速收敛过程。 总的来说,tf.keras.layers.Rescaling是一个用于对输入数据进行重新缩放的层,可以通过设置缩放因子和偏移量来实现。它在神经网络常用于对输入数据进行预处理,以便将其缩放到特定的范围内,从而改善模型的训练性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenxin0215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值