利用单通道分析读取深度神经网络架构
立即解锁
发布时间: 2025-08-31 01:15:11 阅读量: 10 订阅数: 18 AIGC 

### 利用单通道分析读取深度神经网络架构
在深度神经网络(DNN)的安全领域,攻击者可以通过侧信道分析(Side-Channel Analysis,SCA)来提取模型的架构信息,这对模型的安全性构成了严重威胁。本文将详细介绍如何通过电磁(EM)侧信道分析来读取DNN的架构,包括各层参数的提取方法以及架构提取的整体方法论。
#### 卷积层参数提取
在卷积层中,矩阵乘积的EM活动模式与卷积核大小、输入通道数等参数密切相关。当卷积核大小为Z = 3时,特定模式会在预期的列计数模式之后出现。然而,随着模式变得越来越小,区分它们变得困难,而且输入通道数(Cin)对可区分模式的数量有很大影响。例如,MNIST CNN的第一个卷积层输入为灰度图像,Cin必然等于1,使用3×3卷积核时,只会出现两种模式,并且除法余数的处理会产生不同的EM活动。因此,恢复卷积核相关参数(K)具有挑战性,尤其是当Cin较小时。
一旦知道输入高度(Hin)、输出高度(Hout)和卷积核大小(Z),基于P < Z的事实和相关公式,可以推导出步长(S)和填充(P)。通过对可能的P值计算S,只有一个整数值符合要求。
#### 池化层参数提取
CMSIS - NN实现的最大池化操作依赖于两个计算块。第一个块(第1 - 6行)处理沿x轴的池化,使用两个嵌套循环遍历Hin和Hout;第二个块(第8 - 11行)完成沿y轴的池化,仅使用一个循环遍历Hout。池化操作通常分为两个步骤:选择和分配局部区域,然后进行统计计算(这里是求最大值)。因此,我们可以观察到与这两个分离循环相关的两种不同的EM活动,最后一个(较短的)活动直接与Hout相关。通过这种方式,可以推导出池化核大小Zpool = Hout / Hin。
以下是最大池化操作的代码实现:
```python
# MaxPool - arm_maxpool_q7_HWC
# Input: Iin input tenor of size H2_in · Cin, Iout output tenor of size H2_out · Cout, P, S, Hker
# Output: Filled Iout
def arm_maxpool_q7_HWC(Iin, Iout, P, S, Hker):
Hin = int(len(Iin) ** 0.5)
Hout = int(len(Iout) ** 0.5)
# Pooling along x axis
for iy in range(Hin):
for ix in range(Hout):
winstart, winstop = set_window(iy, ix, Iin, Hker, P, S)
compare_and_remplace_if_larger(winstart, winstop, iy, ix, Iin)
trigger_up()
# Pooling along y axis
for iy in range(Hout):
rowstart, rowstop = set_rows(iy, Iin, Iout, Hker, P, S)
compare_replace_then_apply(rowstart, rowstop, Iin, Iout)
trigger_down()
return Iout
```
从观察来看,整个MaxPool层的EM活动呈现出两个不同的块,第二个块的模式更易区分。通过放大第二个部分,可以看到这些模式由低振幅活动段和高振幅活动段组成,分别对应池化计算的两个步骤。这些模式的数量Np可以轻松手动计数,并且与Hout值匹配。
#### 全连接层神经元数量提取
全连
0
0
复制全文
相关推荐









