Page 259 - 《软件学报》2026年第2期
P. 259

738                                                        软件学报  2026  年第  37  卷第  2  期


                                                                                         b
                                                                                           b
                    为了验证算法的正确性, 只要注意到第 4 行开始的第                j 次迭代, 将会在分块矩阵规模为         2 ×2  的情况下, 将  A
                                                                                                 ) ]
                                                             b
                                                      b
                                                                                           b
                                                  b
                                                                                                  b
                                          b
                       (b x , j) 的分块矩阵  A[b x 2 : (b x +1)2 ][ j2 : ( j+1)2 ] 与   ( j,b y ) 的分块矩阵  A[ j2 : ( j+1 2 [b y 2 :
                                                                                                       b
                 中位于                                             B 中位于
                       b                                            (t x ,t y ) 的临时变量   上. 每个线程分块将申请
                 (b y +1)2 ]  相乘, 并将结果矩阵第  t x  行、第   列的内容加到线程                     t
                                                   t y
                    b
                  b
                                                                           m
                 2 ×2 ×64 bit = 2 2b+3  B  的共享内存, 每个线程将执行  2 m−b+1  +1 次全局访存和  2  次  GPU  上  64  位整数间乘法.
                    我们基于线性层的计算方法设计了卷积层 Conv2D 计算协议. 基础的 Conv2D 运算将输入                     X  的每个与卷积核    K
                                                                                               n×n
                 规模相同的子矩形同       K  作互相关运算, 并将结果按照子矩形的位置关系排列成结果矩形. 我们设                     X ∈ R , K ∈ R k×k ,
                                   2                                           (0)  (M−1)
                 则 X 共有   m = (n−k +1)  个   k×k 的子矩形, 假设它们从左到右、从上到下排列为       X ,...,X   . 定义展平操作:

                                                                                      q 2
                                 Flatten : R q×q  ∋ Y 7→ Flatten(Y) = (Y 0,0 ,...,Y 0,q−1 ,...,Y q−1,0 ,...,Y q−1,q−1 ) ∈ R .
                    假设输入批量为      B, 批次  b 的输入矩阵为    X b , 且  Conv2D  层有  c 个输出频道, 卷积核分别为  K 0 ,...,K c−1 . 观察矩
                 阵乘法:

                                             (
                                              (0) ) 
                                      Flatten X   
                                              0   
                                                  
                                                  
                                           .      
                                                  
                                           .      
                                                  
                                           .      
                                                  
                                            (   ) 
                                                  
                                     
                                      Flatten X (M−1)   
                                     
                                             0    
                                                  
                                                   (                            )
                                           .              (   )          (     )
                                                              t               t
                                           .        Flatten (K 0 )  ...  Flatten (K c−1 )
                                                   ·                             .
                                           .      
                                                  
                                                  
                                            (   ) 
                                             (0)   
                                      Flatten X    
                                     
                                              B−1  
                                                  
                                                  
                                           .      
                                                  
                                           .      
                                           .      
                                                  
                                                  
                                            (   ) 
                                                  
                                             (M−1) 
                                       Flatten X
                                              B−1
                                 B×(n−k +1)×(n−k +1) 的张量就恰好是    Conv2D  的输出. im2col 算法  [25] 就是基于这个思想设
                    这个结果组织成
                 计的. 图  2  展示了直接卷积与      im2col 卷积的关联. Antelope   中使用   im2col 连同已经有的矩阵乘法算法实现
                 Conv2D  的计算.

                                                         (a) 直接卷积
                                                  (b) im2col 卷积, 转化为矩阵乘法
                                           图 2 直接卷积与     im2col 卷积转化为矩阵乘法

                  3.3   ReLU  激活层实现
                      ReLU (x) := max{x,0} 是在神经网络中广泛使用的激活函数, 计算简单且能有效解决梯度消失问题、促进稀
                                       l−1
                 疏激活. 由于输入取值于       [−2 ,2 l−1  −1]∩Z, 我们只需检查  x 的最高符号位   MSB( x), 然后借助

                                                   ReLU (x) = 1−MSB(x)· x
                 完成激活层的实现. 我们的设计思路是通过              MSB  协议让三方持有     b = MSB(x) 的秘密分享   [[b]] , 然后设计该特殊
                                                                                         B ′
                             ′
                 布尔秘密分享     B  下的数据与算术秘密分享数据的混合乘法协议以实现上式中的乘法.
                  3.3.1    MSB  获取协议
                              [[  ]]                                B ′     ([[  ]])              3
                    对于给定的      x; f , 我们希望通过  MSB  获取协议计算     [[[x < 0]]] ← MSB  x; f  . 此前的工作中, ABY 通过将
                 算术秘密分享模式转化为二进制秘密分享模式以后截取最高位实现该协议; FALCON                          使用算术秘密分享, 根据无
                                                                          )
                                                                      (
                                                                     O logl , 对于本文的  64  位整数而言, 需要十多
                 符号数的绕环判断函数获取最高符号位. 这些方案的通信轮数都是
                                                                                          3
                 轮甚至数十轮通信, 这无法很好地发挥            GPU  的并行计算能力. 文献      [21] 和文献  [23] 延续  ABY 的思路, 离线预计
                 算  edaBits 来优化算术秘密分享到二进制秘密分享模式的转换.
   254   255   256   257   258   259   260   261   262   263   264