【隐私计算】算术秘密分享的加法和乘法运算(Beaver Triple预处理)

在安全多方计算中(MPC)中,算术秘密分享是最基础的机制。一直有在接触,但是一直没有整理清楚最基础的加法和乘法计算流程。

算术秘密分享

概念: 一个位宽为 l l l-bit的数 x x x,被拆分为两个在 Z 2 l \mathbb{Z}_{2^l} Z2l环上的数之和。
形式化描述: 对于一个位宽为 l l l-bit的数 x x x,其算术秘密分享是 ⟨ x ⟩ A \langle x\rangle^A xA,则满足 x ≡ ⟨ x ⟩ 0 A + ⟨ x ⟩ 1 A m o d 2 l x \equiv \langle x\rangle^A_0+\langle x\rangle^A_1~\mathrm{mod}~2^l xx0A+x1A mod 2l,其中, ⟨ x ⟩ 0 A , ⟨ x ⟩ 1 A ∈ Z 2 l \langle x\rangle^A_0, \langle x\rangle^A_1 \in \mathbb{Z}_{2^l} x0A,x1AZ2l
Share(分享)算法
P i P_i Pi生成随机数 r ∈ R Z 2 l r\in_R\mathbb{Z}_{2^l} rRZ2l,令 ⟨ x ⟩ i A = x − r \langle x \rangle^A_i=x-r xiA=xr作为自己的share,并将随机数 r r r发给另一方 P 1 − i P_{1-i} P1i,即 ⟨ x ⟩ 1 − i A = r \langle x \rangle^A_{1-i}=r x1iA=r
Reconstruct(重构)算法
P 1 − i P_{1-i} P1i将自己的share发给 P i P_i Pi,然后 P i P_i Pi计算 x = ⟨ x ⟩ 0 A + ⟨ x ⟩ 1 A x=\langle x\rangle^A_0+\langle x\rangle^A_1 x=x0A+x1A重构真实的 x x x值。

算术秘密分享的加法

加法非常简单,两方在本地直接计算share的加法,即满足真实值的加法。
当计算 z = x + y z=x+y z=x+y时, P i P_i Pi在本地计算 ⟨ z ⟩ i A = ⟨ x ⟩ i A + ⟨ y ⟩ i A \langle z\rangle^A_i=\langle x\rangle^A_i+\langle y\rangle^A_i ziA=xiA+yiA
本地可加性很好证明, P 0 P_0 P0计算 ⟨ z ⟩ 0 A = ⟨ x ⟩ 0 A + ⟨ y ⟩ 0 A \langle z\rangle^A_0=\langle x\rangle^A_0+\langle y\rangle^A_0 z0A=x0A+y0A,同时 P 1 P_1 P1计算 ⟨ z ⟩ 1 A = ⟨ x ⟩ 1 A + ⟨ y ⟩ 1 A \langle z\rangle^A_1=\langle x\rangle^A_1+\langle y\rangle^A_1 z1A=x1A+y1A,于是, z = ⟨ z ⟩ 0 A + ⟨ z ⟩ 1 A = ⟨ x ⟩ 0 A + ⟨ y ⟩ 0 A + ⟨ x ⟩ 1 A + ⟨ y ⟩ 1 A = x + y z = \langle z\rangle^A_0+\langle z\rangle^A_1=\langle x\rangle^A_0+\langle y\rangle^A_0+\langle x\rangle^A_1+\langle y\rangle^A_1=x+y z=z0A+z1A=x0A+y0A+x1A+y1A=x+y,因此成立。
因此,在MPC中,秘密分享的加法只需简单的本地加法,不会引入任何通信开销。

算术秘密分享的乘法

相比于加法,乘法则复杂很多,需要依靠双方的通信来实现。
当计算 z = x ⋅ y z=x\cdot y z=xy时,需要依赖预处理阶段生成的乘法三元组(Beaver Triple): c = a ⋅ b c=a\cdot b c=ab,注意 a , b , c a, b, c a,b,c均与真实的输入 x , y x, y x,y无关。
下面是基于Beaver Triple计算秘密分享乘法的流程:

  1. P i P_i Pi本地计算 ⟨ e ⟩ i A = ⟨ x ⟩ i A − ⟨ a ⟩ i A \langle e\rangle^A_i=\langle x\rangle^A_i-\langle a\rangle^A_i eiA=xiAaiA ⟨ f ⟩ i A = ⟨ y ⟩ i A − ⟨ b ⟩ i A \langle f\rangle^A_i=\langle y\rangle^A_i-\langle b\rangle^A_i fiA=yiAbiA
  2. 双方共同计算(重构)出 e = ⟨ e ⟩ 0 A + ⟨ e ⟩ 1 A = x − a e=\langle e\rangle^A_0+\langle e\rangle^A_1=x-a e=e0A+e1A=xa f = ⟨ f ⟩ 0 A + ⟨ f ⟩ 1 A = y − b f=\langle f\rangle^A_0+\langle f\rangle^A_1=y-b f=f0A+f1A=yb
  3. P i P_i Pi本地计算 ⟨ z ⟩ i A = i ⋅ e ⋅ f + f ⋅ ⟨ a ⟩ i A + e ⋅ ⟨ b ⟩ i A + ⟨ c ⟩ i A \langle z\rangle^A_i=i\cdot e\cdot f+f\cdot \langle a\rangle^A_i+e\cdot \langle b\rangle^A_i+\langle c\rangle^A_i ziA=ief+faiA+ebiA+ciA
  4. 最后,重构输出 z = ⟨ z ⟩ 0 A + ⟨ z ⟩ 1 A z=\langle z\rangle^A_0+\langle z\rangle^A_1 z=z0A+z1A

证明:
⟨ z ⟩ 0 A = f ⋅ ⟨ a ⟩ 0 A + e ⋅ ⟨ b ⟩ 0 A + ⟨ c ⟩ 0 A \langle z\rangle^A_0=f\cdot \langle a\rangle^A_0+e\cdot \langle b\rangle^A_0+\langle c\rangle^A_0 z0A=fa0A+eb0A+c0A
⟨ z ⟩ 1 A = e ⋅ f + f ⋅ ⟨ a ⟩ 1 A + e ⋅ ⟨ b ⟩ 1 A + ⟨ c ⟩ 1 A \langle z\rangle^A_1=e\cdot f+f\cdot \langle a\rangle^A_1+e\cdot \langle b\rangle^A_1+\langle c\rangle^A_1 z1A=ef+fa1A+eb1A+c1A
z = ⟨ z ⟩ 0 A + ⟨ z ⟩ 1 A = e ⋅ f + a ⋅ f + e ⋅ b + c = ( x − a ) ( y − b ) + a ( y − b ) + ( x − a ) b + c = x y − b x − a y + a b + a y − a b + b x − a b + a b = x y z=\langle z\rangle^A_0+\langle z\rangle^A_1\\~~~=e\cdot f+a\cdot f+e\cdot b+c\\~~~=(x-a)(y-b)+a(y-b)+(x-a)b+c\\~~~=xy-bx-ay+ab+ay-ab+bx-ab+ab\\~~~=xy z=z0A+z1A   =ef+af+eb+c   =(xa)(yb)+a(yb)+(xa)b+c   =xybxay+ab+ayab+bxab+ab   =xy
故成立。

Beaver Triple的生成

上面已经介绍了基于Beaver Triple计算乘法的流程,但是需要注意, c = a b c=ab c=ab也是秘密分享的形式:
c = a b = ( ⟨ a ⟩ 0 A + ⟨ a ⟩ 1 A ) ( ⟨ b ⟩ 0 A + ⟨ b ⟩ 1 A ) = ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A c=ab\\~~~=(\langle a\rangle^A_0+\langle a\rangle^A_1)(\langle b\rangle^A_0+\langle b\rangle^A_1)\\~~~=\langle a\rangle^A_0 \langle b\rangle^A_0+\langle a\rangle^A_1 \langle b\rangle^A_1+\langle a\rangle^A_0\langle b\rangle^A_1+\langle a\rangle^A_1\langle b\rangle^A_0 c=ab   =(⟨a0A+a1A)(⟨b0A+b1A)   =a0Ab0A+a1Ab1A+a0Ab1A+a1Ab0A
可以看到,第一项 ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A \langle a\rangle^A_0 \langle b\rangle^A_0 a0Ab0A和第二项 ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A \langle a\rangle^A_1 \langle b\rangle^A_1 a1Ab1A均可以在 P 0 , P 1 P_0, P_1 P0,P1本地计算,因此无需通信。而重点就在于后两项 ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A , ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A \langle a\rangle^A_0\langle b\rangle^A_1, \langle a\rangle^A_1\langle b\rangle^A_0 a0Ab1A,a1Ab0A,两个share分别在两方,因此必然引入通信,通常我们将这两项称作“交叉项”或CrossTerm。
那么,Beaver Triple的生成,本质上也就是解决交叉项计算的问题。下面介绍两种常用的计算方式:

基于同态加密(HE)的Beaver Triple生成
流程如下:

  1. P 0 P_0 P0 E n c ( ⟨ a ⟩ 0 A ) Enc(\langle a\rangle^A_0) Enc(⟨a0A) E n c ( ⟨ b ⟩ 0 A ) Enc(\langle b\rangle^A_0) Enc(⟨b0A)发给 P 1 P_1 P1
  2. P 1 P_1 P1生成一个随机数 r r r,计算 d = E n c ( ⟨ a ⟩ 0 A ) ⟨ b ⟩ 1 A × E n c ( ⟨ b ⟩ 0 A ) ⟨ a ⟩ 1 A × E n c ( r ) d=Enc(\langle a\rangle^A_0)^{\langle b\rangle^A_1} \times Enc(\langle b\rangle^A_0)^{\langle a\rangle^A_1} \times Enc(r) d=Enc(⟨a0A)b1A×Enc(⟨b0A)a1A×Enc(r),然后将 d d d发给 P 0 P_0 P0
  3. P 0 P_0 P0计算 ⟨ c ⟩ 0 A = ⟨ a ⟩ 0 A + ⟨ b ⟩ 0 A + D e c ( d ) = ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A + ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A + r \langle c\rangle^A_0=\langle a\rangle^A_0+\langle b\rangle^A_0+Dec(d)=\langle a\rangle^A_0\langle b\rangle^A_0+\langle a\rangle^A_0 \langle b\rangle^A_1+\langle a\rangle^A_1 \langle b\rangle^A_0+r c0A=a0A+b0A+Dec(d)=a0Ab0A+a0Ab1A+a1Ab0A+r
  4. P 1 P_1 P1计算 ⟨ c ⟩ 1 A = ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A − r \langle c\rangle^A_1=\langle a\rangle^A_1\langle b\rangle^A_1-r c1A=a1Ab1Ar

证明:
c = ⟨ c ⟩ 0 A + ⟨ c ⟩ 1 A = ⟨ a ⟩ 0 A ⟨ b ⟩ 0 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A + ⟨ a ⟩ 1 A ⟨ b ⟩ 0 A = a b c=\langle c\rangle^A_0+\langle c\rangle^A_1\\~~~=\langle a\rangle^A_0 \langle b\rangle^A_0+\langle a\rangle^A_1 \langle b\rangle^A_1+\langle a\rangle^A_0\langle b\rangle^A_1+\langle a\rangle^A_1\langle b\rangle^A_0\\~~~=ab c=c0A+c1A   =a0Ab0A+a1Ab1A+a0Ab1A+a1Ab0A   =ab
故成立。

如上采用的加密算法Enc是Pailler同态加密算法,其同态性如下:

  • 明文加法 <=> 密文乘法;
  • 明文乘法 <=> 密文指数幂

因此在上面流程的第3步中Dec(d)时才会将乘法转成加法,指数幂转成乘法。关于背后的原理参考我的另一篇博客:【密码学基础】半/全同态加密算法基础学习笔记

基于不经意传输(OT)的Beaver Triple生成
另一种常用的方式是基于COT(相关性不经意传输)的方式。
下面是计算交叉项 ⟨ a ⟩ 0 A ⟨ b ⟩ 1 A \langle a\rangle^A_0\langle b\rangle^A_1 a0Ab1A的流程:

  1. P 0 , P 1 P_0, P_1 P0,P1之间建立COT协议通信,其中 P 0 P_0 P0作为发送方, P 1 P_1 P1作为接收方;
  2. 在第 i i i轮的COT通信中:
    • P 1 P_1 P1输入 ⟨ b ⟩ 1 A [ i ] \langle b\rangle^A_1[i] b1A[i]作为自己的选择比特, P 0 P_0 P0输入相关性函数 f Δ i ( x ) = ( ⟨ a ⟩ 0 A ⋅ 2 i − x ) m o d 2 l f_{\Delta_i}(x)=(\langle a\rangle^A_0 \cdot 2^i - x)~\mathrm{mod}~2^l fΔi(x)=(⟨a0A2ix) mod 2l
    • P 0 P_0 P0获得消息对 ( s i , 0 , s i , 1 ) (s_{i, 0}, s_{i, 1}) (si,0,si,1),其中, s i , 0 ∈ R Z 2 l s_{i, 0}\in _R\mathbb{Z}_{2^l} si,0RZ2l s i , 1 = f Δ i ( s i , 0 ) = ( ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) m o d 2 l s_{i, 1}=f_{\Delta_i}(s_{i, 0})=(\langle a\rangle^A_0 \cdot 2^i - s_{i, 0})~\mathrm{mod}~2^l si,1=fΔi(si,0)=(⟨a0A2isi,0) mod 2l P 1 P_1 P1获得 s i , ⟨ b ⟩ 1 A [ i ] = ( ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) m o d 2 l s_{i, \langle b\rangle^A_1[i]}=(\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i - s_{i, 0})~\mathrm{mod}~2^l si,b1A[i]=(⟨b1A[i]a0A2isi,0) mod 2l
    • ⟨ u ⟩ 0 A = ( ∑ i = 0 l s i , 0 ) m o d 2 l \langle u\rangle^A_0=(\sum_{i=0}^ls_{i, 0})~\mathrm{mod}~2^l u0A=(i=0lsi,0) mod 2l, ⟨ u ⟩ 1 A = ( ∑ i = 0 l s i , ⟨ b ⟩ 1 A [ i ] ) m o d 2 l \langle u\rangle^A_1=(\sum_{i=0}^l s_{i, \langle b\rangle^A_1[i]})~\mathrm{mod}~2^l u1A=(i=0lsi,b1A[i]) mod 2l

证明:
⟨ a ⟩ 0 A ⟨ b ⟩ 1 A = ⟨ u ⟩ 0 A + ⟨ u ⟩ 1 A = ∑ i = 0 l s i , 0 + ∑ i = 0 l s i , ⟨ b ⟩ 1 A [ i ] = ∑ i = 0 l ( s i , 0 + ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) = ∑ i = 0 l ( ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i ) \langle a\rangle^A_0 \langle b\rangle^A_1=\langle u\rangle^A_0+\langle u\rangle^A_1\\~~~~~~~~~~~~~~~~=\sum_{i=0}^ls_{i, 0}+\sum_{i=0}^l s_{i, \langle b\rangle^A_1[i]}\\~~~~~~~~~~~~~~~~=\sum_{i=0}^l(s_{i, 0}+\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i - s_{i, 0})\\~~~~~~~~~~~~~~~~=\sum_{i=0}^l(\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i) a0Ab1A=u0A+u1A                =i=0lsi,0+i=0lsi,b1A[i]                =i=0l(si,0+b1A[i]a0A2isi,0)                =i=0l(⟨b1A[i]a0A2i)
注:到这一步已经非常直观了,其实就是在二进制中做乘法,一个数的每一位去乘另一个数,然后移位(乘上对应位的2的幂次)累加(对每一位的乘法结果求和)。

举例:
假设 ⟨ a ⟩ 0 A = 3 , ⟨ b ⟩ 1 A = 5 = ( 101 ) 2 \langle a\rangle^A_0=3, \langle b\rangle^A_1=5=(101)_2 a0A=3,b1A=5=(101)2,于是:

⟨ a ⟩ 0 A ⟨ b ⟩ 1 A = ⟨ u ⟩ 0 A + ⟨ u ⟩ 1 A = ∑ i = 1 l ( s i , 0 + s i , ⟨ b ⟩ 1 A [ i ] ) = ∑ i = 1 l ( s i , 0 + ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i − s i , 0 ) = ∑ i = 1 l ( ⟨ b ⟩ 1 A [ i ] ⋅ ⟨ a ⟩ 0 A ⋅ 2 i ) = 1 ⋅ 3 ⋅ 2 0 + 0 ⋅ 3 ⋅ 2 1 + 1 ⋅ 3 ⋅ 2 2 = 3 + 0 + 12 = 15 \langle a\rangle^A_0 \langle b\rangle^A_1=\langle u\rangle^A_0+\langle u\rangle^A_1\\~~~~~~~~~~~~~~~~=\sum_{i=1}^l (s_{i, 0}+s_{i, \langle b\rangle^A_1[i]})\\~~~~~~~~~~~~~~~~=\sum_{i=1}^l (s_{i, 0}+\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i - s_{i, 0})\\~~~~~~~~~~~~~~~~=\sum_{i=1}^l (\langle b\rangle^A_1[i]\cdot \langle a\rangle^A_0 \cdot 2^i)\\~~~~~~~~~~~~~~~~=1\cdot 3 \cdot 2^0+0 \cdot 3\cdot 2^1+1\cdot 3\cdot 2^2\\~~~~~~~~~~~~~~~~=3+0+12\\~~~~~~~~~~~~~~~~=15 a0Ab1A=u0A+u1A                =i=1l(si,0+si,b1A[i])                =i=1l(si,0+b1A[i]a0A2isi,0)                =i=1l(⟨b1A[i]a0A2i)                =1320+0321+1322                =3+0+12                =15
故计算正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android项目实战开发-----期末总结2

项目三&#xff1a;网络层和数据模型的封装 任务一&#xff1a;网络请求和数据解析 1&#xff0c;网络请求 &#xff08;1&#xff09;Android中的网络存储主要是使用HTTP/HTTPS协议访问服务器&#xff0c;与服务器发生数据交互。 &#xff08;2&#xff09;Android提供两种…

python -- python安装

1、python的诞生和发展&#xff1a; python语言是一种解释型、面向对象型、动态数据类型的高级程序设计语言。 2、python的安装&#xff1a; 1、安装解析器&#xff1a; 在安装的过程中需要注意的是&#xff1a; 在安装pycharm的时候也是同样的道理&#xff0c;需要指定安装…

【长文干货】Python可视化教程

文章目录 数据介绍Matplotlib散点图折线图柱形图直方图 Seaborn散点图折线图柱形图直方图 Bokeh散点图折线条形图交互式 Plotly基本组合优化&#xff1a;定制化下拉菜单 总结 数据介绍 在这个小费数据集中&#xff0c;我们记录了20世纪90年代初期餐厅顾客在两个半月内给出的小…

【机器学习 | 可视化】回归可视化方案

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Golang中WebSocket和WSS的支持

引言 WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;它为实时通信提供了一种简单而强大的方式。而WSS&#xff08;WebSocket Secure&#xff09;是一种通过加密的方式使用WebSocket的协议&#xff0c;可以在安全的传输层上进行通信。本文将探讨Golang中WebS…

初试华为网络设备-交换机

目录​​​​​​​ 一.交换机的工作原理 二.交换机的三个主要功能 三.交换机的类型 四.华为交换机的系统类型 五.常用华为交换机常用配置和命令 1.查看设备信息 2.查看和修改交换机系统时间 3.修改设备命令 4.配置console登陆认证方式及超时时间 5.telnet配置 6.配置设备超级密…

LESS的叶绿素荧光模拟实现——任意波段荧光模拟

目录 前言一、任意波段荧光模拟的实现二、需要注意的输入参数 前言 此专栏默认您对LESS (LargE-Scale remote sensing data and image Simulation framework) 模型和叶绿素荧光(Sun-Induced chlorophyll Fluorescence, SIF)有一定的了解。当然&#xff0c;您也可以在这里下载中…

Kubernetes

Kubernetes Docker的安装Docker安装&#xff1a;安装docker依赖环境配置国内docker-ce的yum源&#xff08;这里采用的是阿里云&#xff09;安装docker。插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自…

适用于Mac M1的hsdis-aarch64.dylib

源文件连接&#xff1a;hsdis HotSpot Disassembly Plugin Downloads 百度网盘链接: https://pan.baidu.com/s/1bd6TlAHgp9j2ZixQftHWdg 提取码: ug7s

C++基础 -17-继承中 基类与派生构造和析构调用顺序

首先声明 定义了派生类会同时调用基类和派生的构造函数 定义了派生类会同时调用基类和派生的析构函数 那么顺序如何如下图 构造由上往下顺序执行 析构则完全相反 #include "iostream"using namespace std;class base {public:base(){cout << "base-bui…

大模型加载的参数介绍及推荐表,temperature、top_k、top_p、num_beams、num_beam_groups、do_sample等

大模型加载的参数介绍及参数推荐表&#xff0c;temperature、top_k、top_p、num_beams等等 返回论文目录 返回资料目录 如果需要非常清晰读懂每个参数&#xff0c;需要了解一下与大模型配套的Beam Search算法。 参数推荐值简介定义temperature0.95这个值越大生成内容越随机&a…

ESXI 6与 ESXI 7的相同点和不同点

ESXi 6和ESXi 7是VMware公司推出的虚拟化操作系统的不同版本&#xff0c;在功能上有一些共通点和区别。 相同点&#xff1a; 不同点&#xff1a; 总的来说&#xff0c;ESXi 7相对于ESXi 6可能在性能、功能和安全性方面有所改进&#xff0c;并提供更好的硬件兼容性。因此&#x…

国家开放大学 作业练习

试卷代号&#xff1a;1354 高级英语阅读(2) 参考试题 Section Ⅰ New Words Ⅰ. Match each vocabulary word on the left with the correct definition on the right. (30 points,3 points each) 1.________determine A. unusual 2. ________afford …

orvibo旗下的VS30ZW网关分析之二:版本回退方法

概述 上接第一篇: orvibo旗下的VS30ZW网关分析之一-CSDN博客 此产品VS30ZW支持openwrt的页面,可以版本回退进行刷机。 openwrt固件下载: 固件名称:openwrt-VS30ZW-mt7628.bin 链接地址:https://download.csdn.net/download/leekwen/88579427 版本回退方法: 1、同…

多模态大模型总结2(主要2023年)

LLaVA-V1&#xff08;2023/04&#xff09; 论文&#xff1a;Visual Instruction Tuning 网络结构 如下图 所示为 LLaVA-v1 的模型结构&#xff0c;可以看出其简化了很多&#xff0c;但整体来说还是由三个组件构成&#xff1a; Vision Encoder&#xff1a;和 Flamingo 模型的 V…

微信小程序获取手机号上限,怎么处理比较省钱

微信新规 微信2023年改了规则&#xff0c;原本免费的小程序获取手机号&#xff0c;现在如果要获取要1分钱一条。 有些小程序的用户非常恐怖&#xff0c; 比如一些工具类的&#xff0c; 群发类的。如果进入小程序就必须要获取小程序&#xff0c;就像是无底洞&#xff0c;让运营…

【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法

目录 说明&#xff1a; 1. 参数模型&#xff08;全局字典&#xff09; 2. 实现过程&#xff08;C&#xff09; 创建功能包 参数命令行的使用 YAML参数文件 rosparam命令 使用示例 编程方法&#xff08;C&#xff09; 配置代码编译规则 编译并运行 编译 运行 3. 实…

【C++笔记】红黑树的简易实现

【C笔记】红黑树的简易实现 一、什么是红黑树以及红黑树好在哪里1.1、什么是红黑树1.2、红黑树比AVL树好在哪里&#xff1f; 二、红黑树的模拟实现2.1、红黑树的插入2.2、仅变色调整2.3、变色单旋调整2.4、变色双旋调整 一、什么是红黑树以及红黑树好在哪里 1.1、什么是红黑树…

Docker容器网络模式

1.none网络 1&#xff09;使用默认网络模式创建一个BusyBox容器&#xff0c;用于对比none网络模式&#xff1b; 测试网络&#xff0c;可以正常连接外网。 2&#xff09;再创建一个none网络模式的BusyBox容器&#xff1b; 测试网络连接&#xff0c;无法连接外网。 总结&#x…

Linux网卡没有eth0显示ens33原因以及解决办法

原因 首先说明一下eth0 与 ens33的关系&#xff1a; 目前的主流网卡为使用以太网络协定所开发出来的以太网卡&#xff08;Ethernet),因此我们Linux就称呼这种网络接口为ethN(N为数字)。 举个栗子&#xff1a;就是说主机上面有一张以太网卡&#xff0c;因此主机的网络接口就是…