目录
一、前言
二、实验原理
2.1 明文与密文二分类
2.2 字节频率直方图
2.3 Z-Score 标准化
三、为什么研究激活函数?
3.1 ReLU
3.2 LeakyReLU
3.3 GELU
3.4 SiLU
四、BatchNorm 的作用
五、实验设计
5.1 数据集生成
5.2 CNN 网络结构
5.3 消融实验分组
5.4 训练参数
六、实验结果
6.1 五随机种子平均性能
6.2 不同激活函数对比
6.3 BatchNorm 消融结果
七、为什么 BatchNorm 可能没有带来提升?
7.1 输入已经经过 Z-Score 标准化
7.2 BatchNorm 的统计量可能影响模型输出
7.3 网络结构与输入特征可能不匹配
八、CNN 是否仍然存在单类别预测问题?
九、为什么 MLP 的效果比 CNN 更好?
十、实验局限性
10.1 数据主要来自模拟图像
10.2 明文与密文分类不等于识别加密算法
10.3 仍需要跨数据集泛化验证
10.4 需要进一步分析性能差异的统计稳定性
十一、下一步研究方向
十二、总结
一、前言
在前面的实验中,我们尝试使用多层感知机(MLP)和一维卷积神经网络(1D-CNN),对明文数据与 AES 加密数据进行二分类。实验发现,直接将原始字节序列或字节频率直方图输入 CNN,并不一定能够取得理想的分类效果。部分实验中,CNN 甚至会将所有样本预测为同一类别,导致准确率停留在 50% 左右。
为了分析这一问题,上一篇实验进一步比较了不同输入处理方式,包括原始字节、字节频率直方图、直方图数值放大和 Z-Score 标准化。五随机种子实验结果表明:
| MLP_Hist | 71.75% | 0.8322 |
| CNN_Raw | 53.43% | 0.5832 |
| CNN_Hist | 50.00% | 0.3088 |
| CNN_Hist_Scaled | 66.93% | 0.6959 |
| CNN_Hist_ZScore | 72.05% | 0.8041 |
可以看到,输入特征的处理方式对 CNN 性能产生了明显影响。那么,在使用 Z-Score 标准化的基础上,能否通过调整 CNN 内部的激活函数和归一化层,进一步改善分类效果?本篇文章将围绕这一问题展开实验。
本文主要研究三个问题:
ReLU、LeakyReLU、GELU、SiLU 四种激活函数是否会影响 CNN 的分类性能?
加入 Batch Normalization(BatchNorm)是否能够改善模型表现?
改进后的 CNN 能否超过使用相同输入特征的 MLP?
需要说明的是,本文研究的是特定数据集上的明文与密文分类,不涉及 AES 密钥恢复,也不能据此认为模型能够破解 AES。
二、实验原理
2.1 明文与密文二分类
本实验将输入数据分为两类:
-
标签 0:明文文件数据片段(Plaintext)
-
标签 1:AES-256-CTR 加密后的文件数据片段(Encrypted)
实验首先生成 RGB 图像,分别编码为 PNG 和 JPEG 文件,然后使用 AES-256-CTR 对文件字节进行加密。随后,将明文和密文按照固定长度切分为数据片段,每个片段包含 4096 字节。模型需要根据输入片段的统计特征,判断该片段来自明文文件还是加密后的文件。
2.2 字节频率直方图
对于一个长度为 4096 字节的数据片段,统计 0~255 每一种字节取值出现的次数。
设字节值 (i) 出现的次数为 (n_i),则归一化频率为:[h_i=\\frac{n_i}{4096}]
最终得到一个 256 维特征向量:[H=[h_0,h_1,\\ldots,h_{255}]]
与直接输入 4096 个原始字节不同,字节频率直方图不保留字节出现的先后顺序,而是描述整体频率分布。
这种特征可能反映文件编码和加密处理后的统计差异,但也会丢失字节之间的顺序关系。
2.3 Z-Score 标准化
为了减小不同特征维度之间的数值尺度差异,本实验使用 Z-Score 标准化:[x_i'=\\frac{x_i-\\mu_i}{\\sigma_i}]
其中:
-
(\\mu_i):训练集中第 (i) 个特征维度的均值;
-
(\\sigma_i):训练集中该维度的标准差。
为了避免标准差过小引起数值不稳定,代码中设置了最小标准差:
std = np.maximum(std, 1e-6)
特别注意:均值和标准差只根据训练集计算,再应用到验证集和测试集。
这样可以避免测试集统计信息泄漏到模型训练过程中。
三、为什么研究激活函数?
激活函数为神经网络引入非线性表达能力。
不同激活函数具有不同的梯度特性,可能影响模型的优化过程、收敛速度和最终分类性能。
本实验选择四种常见激活函数进行对比。
3.1 ReLU
ReLU 的定义为:[ReLU(x)=\\max(0,x)]
ReLU 计算简单,是卷积神经网络中广泛使用的激活函数。但对于负数输入,其输出和梯度均为 0,部分神经元可能长期无法获得有效更新。
3.2 LeakyReLU
LeakyReLU 在负数区域保留一个较小的斜率:
[LeakyReLU(x)=\\begin{cases}x,&x\\geq0\\\\alpha x,&x<0\\end{cases}]
本实验设置:[\\alpha=0.01]与 ReLU 相比,它允许负数区域继续传播梯度。
3.3 GELU
GELU(Gaussian Error Linear Unit)是一种平滑的非线性激活函数:[GELU(x)=x\\Phi(x)]
其中 (\\Phi(x)) 表示标准正态分布的累积分布函数。GELU 不会像 ReLU 那样直接截断所有负数输入。
3.4 SiLU
SiLU(Sigmoid Linear Unit)定义为:[SiLU(x)=x\\cdot\\sigma(x)]
其中:[\\sigma(x)=\\frac{1}{1+e^{-x}}]
SiLU 同样是一种平滑激活函数,其输出由输入与 Sigmoid 函数共同决定。本实验希望通过实际数据判断:这些函数的差异,是否会转化为明文与密文分类性能的差异。
四、BatchNorm 的作用
Batch Normalization 是深度学习中常见的归一化方法。
它通过批次统计量对网络内部特征进行标准化,并引入可学习的缩放与偏移参数。
在训练过程中,BatchNorm 通常使用当前批次的统计量;在推理过程中,则使用训练阶段积累的运行统计量。
BatchNorm 有时能够改善优化过程,但它并不保证在所有任务和网络结构中都有效。
因此,本实验分别构建:
-
不使用 BatchNorm 的 CNN;
-
在卷积层后加入 BatchNorm 的 CNN。
通过控制其他条件一致,观察 BatchNorm 是否真正改善模型性能。
五、实验设计
5.1 数据集生成
本实验使用 Python 生成模拟 RGB 图像,每张图像分别保存为 PNG 和 JPEG 格式。之后对文件字节进行 AES-256-CTR 加密,再分别提取明文与密文数据片段。
主要配置如下:
| 图像数量 | 60 |
| 图像尺寸 | 128 × 128 |
| 文件格式 | PNG、JPEG |
| 加密算法 | AES-256-CTR |
| 数据片段长度 | 4096 字节 |
| 每个文件最多提取片段 | 8 |
| 输入特征 | 256 维字节频率直方图 |
| 特征预处理 | Z-Score |
| 数据划分 | 训练集 60%、验证集 20%、测试集 20% |
| 随机种子 | 2026、2027、2028、2029、2030 |
为了降低数据泄漏风险,实验按照原始图像进行分组划分。
同一张原始图像产生的 PNG、JPEG、明文及密文片段被分配到同一个数据子集,不会跨训练集、验证集和测试集出现。
5.2 CNN 网络结构
本实验使用的 1D-CNN 结构如下:
输入:256 维直方图
│
▼
Conv1D(1 → 32, kernel=7)
│
[可选 BatchNorm]
│
激活函数
│
MaxPool1D
│
▼
Conv1D(32 → 64, kernel=5)
│
[可选 BatchNorm]
│
激活函数
│
MaxPool1D
│
▼
Conv1D(64 → 64, kernel=3)
│
[可选 BatchNorm]
│
激活函数
│
AdaptiveAvgPool1D(1)
│
▼
Linear(64 → 32)
│
激活函数
│
Dropout(0.2)
│
Linear(32 → 1)
│
▼
输出 Logit
│
Sigmoid
│
明文 / 密文预测
其中,Sigmoid 仅用于将输出 Logit 转换为预测分数。
训练阶段直接使用 BCEWithLogitsLoss,避免在损失函数之前重复执行 Sigmoid。
5.3 消融实验分组
本实验比较以下八种 CNN 配置:
| ReLU | CNN_ReLU_NoBN | CNN_ReLU_BN |
| LeakyReLU | CNN_LeakyReLU_NoBN | CNN_LeakyReLU_BN |
| GELU | CNN_GELU_NoBN | CNN_GELU_BN |
| SiLU | CNN_SiLU_NoBN | CNN_SiLU_BN |
每种配置运行五个随机种子,共进行:[4\\times2\\times5=40]次 CNN 训练。
另外,每个随机种子训练一次 MLP,作为对照组。
5.4 训练参数
| 优化器 | Adam |
| 学习率 | 0.001 |
| Batch Size | 64 |
| 最大 Epoch | 30 |
| Early Stopping Patience | 6 |
| 损失函数 | BCEWithLogitsLoss |
| 固定分类阈值 | 0.5 |
模型使用验证集损失进行 Early Stopping,并恢复验证损失最低时的模型参数。
实验同时记录固定阈值 0.5 和验证集优化阈值的结果。
为便于比较,本文主要展示固定阈值 0.5 下的实验指标。
六、实验结果
6.1 五随机种子平均性能
根据实际运行生成的 five_seed_summary.csv,得到以下结果:
| MLP_Hist | 93.67% | 0.9367 | 0.9849 |
| CNN_SiLU_NoBN | 81.33% | 0.8260 | 0.9124 |
| CNN_ReLU_NoBN | 79.75% | 0.8080 | 0.8943 |
| CNN_LeakyReLU_NoBN | 78.92% | 0.8024 | 0.8878 |
| CNN_GELU_NoBN | 76.67% | 0.7720 | 0.8646 |
| CNN_SiLU_BN | 69.67% | 0.7497 | 0.8168 |
| CNN_LeakyReLU_BN | 70.58% | 0.7298 | 0.8130 |
| CNN_GELU_BN | 69.50% | 0.7354 | 0.7922 |
| CNN_ReLU_BN | 66.92% | 0.7020 | 0.7793 |
从结果可以观察到:
第一,在四种激活函数中,SiLU 的 CNN 表现最好。
不使用 BatchNorm 时,CNN_SiLU_NoBN 的平均 Accuracy 为 81.33%,ROC-AUC 为 0.9124。
第二,加入 BatchNorm 后,四种 CNN 的平均 ROC-AUC 均下降。
第三,MLP 在本次数据集上的表现明显优于全部 CNN 配置。
MLP 的平均 ROC-AUC 达到 0.9849,而表现最好的 CNN 为 0.9124。
6.2 不同激活函数对比
先只比较不使用 BatchNorm 的四种 CNN:
| SiLU | 81.33% | 0.9124 |
| ReLU | 79.75% | 0.8943 |
| LeakyReLU | 78.92% | 0.8878 |
| GELU | 76.67% | 0.8646 |
结果表明,在当前网络结构、输入特征和训练配置下,SiLU 获得了最好的平均性能。不过,不能据此得出“SiLU 在所有加密数据分类任务中都优于 ReLU”的结论。激活函数的效果仍然可能受到网络深度、数据分布、学习率及其他超参数的影响。
6.3 BatchNorm 消融结果
将相同激活函数下的有无 BatchNorm 结果进行比较:
| ReLU | 0.8943 | 0.7793 | -0.1150 |
| LeakyReLU | 0.8878 | 0.8130 | -0.0748 |
| GELU | 0.8646 | 0.7922 | -0.0724 |
| SiLU | 0.9124 | 0.8168 | -0.0956 |
可以看到,四种激活函数加入 BatchNorm 后,平均 ROC-AUC 都出现下降。其中,ReLU 的下降幅度最大,约为 0.1150。这一结果与“加入归一化层就能提升性能”的直觉并不一致。但它并不意味着 BatchNorm 本身存在问题,而是说明:
BatchNorm 是否有效,需要结合具体的数据表示、网络结构和训练条件进行验证。
七、为什么 BatchNorm 可能没有带来提升?
对于这一现象,可以提出几个可能的解释。
7.1 输入已经经过 Z-Score 标准化
本实验输入的 256 维直方图已经进行了 Z-Score 处理。BatchNorm 又在卷积层内部引入归一化操作。这两种归一化并不等价,也不能简单认为它们发生了“重复标准化”,但它们可能共同改变网络的特征分布与优化过程。是否存在不利的相互作用,还需要进一步实验验证。
7.2 BatchNorm 的统计量可能影响模型输出
BatchNorm 在训练和推理阶段采用不同的统计量处理方式。如果训练批次的统计特征与验证集、测试集存在差异,模型的预测结果可能受到影响。可以通过观察训练损失、验证损失和预测概率分布,进一步检查这种可能性。
7.3 网络结构与输入特征可能不匹配
这是另一个值得注意的问题。字节频率直方图的 256 个位置分别对应字节值 0~255。在这种表示中,直方图中相邻的位置表示相邻的字节取值,但不一定具有适合卷积提取的局部语义。例如,字节值 100 和 101 的频率相邻,并不意味着它们之间一定存在类似图像相邻像素的局部结构。
因此,1D-CNN 的局部卷积优势可能无法充分发挥。
这也可能解释为什么本次 MLP 的表现优于 CNN。需要强调的是,以上解释都属于基于实验现象提出的研究假设,尚未通过独立实验确定具体原因。
八、CNN 是否仍然存在单类别预测问题?
在早期实验中,CNN 曾出现所有样本都被预测为明文的情况。例如,在一个明文与密文数量相等的测试集中:
| 真实明文 | 270 | 0 |
| 真实密文 | 270 | 0 |
这种情况下,模型准确率为 50%,并没有正确识别出任何密文。本次消融实验的情况有所改善。
检查五随机种子下的固定阈值实验结果,没有出现所有样本都被预测为明文的情况。
以 CNN_SiLU_NoBN 为例,其五次实验的平均混淆矩阵为:
| 真实明文 | 88.4 | 31.6 |
| 真实密文 | 13.2 | 106.8 |
这里的数值是五次实验的平均值,因此包含小数。
可以看到,模型已经能够正确识别多数密文,但仍存在明文被误判为密文的情况。这说明当前 CNN 不再只是输出单一类别,而是已经表现出一定的分类能力。不过,不能仅凭这一现象判断模型已经充分学习到具有普遍性的加密数据特征。
九、为什么 MLP 的效果比 CNN 更好?
本次实验中,MLP_Hist 的平均 ROC-AUC 达到 0.9849,明显高于全部 CNN 配置。这一现象值得关注。MLP 直接对 256 维直方图进行全连接特征学习,能够建立不同字节频率维度之间的组合关系。而 1D-CNN 主要依赖卷积核提取局部特征。对于字节频率直方图而言,局部相邻关系未必是最有价值的结构信息。因此,MLP 在这种特征表示上获得更好的结果是可以理解的。
但这里还存在一个重要问题:在上一篇实验中,MLP_Hist 的平均 ROC-AUC 约为 0.8322,而本次达到了 0.9849。两次实验的数据生成流程、样本构成及预处理配置并不完全相同,因此不能直接将这个差距解释为模型结构的性能提升。
本次实验内部的 MLP 与 CNN 可以进行对比,但不同篇文章中的数值不应在缺少统一实验条件的情况下直接比较。
十、实验局限性
虽然本次实验获得了较好的分类结果,但仍存在一些限制。
10.1 数据主要来自模拟图像
实验使用随机生成的 RGB 图像,并将其编码为 PNG、JPEG 文件。这些数据不能完全代表真实环境中的文件分布。特别是不同文件格式的编码方式可能产生明显的字节统计差异,模型可能利用这些差异进行分类。
10.2 明文与密文分类不等于识别加密算法
本文的任务是判断数据片段来自明文文件还是 AES-CTR 加密后的文件。即使分类准确率较高,也不代表模型能够识别未知加密算法,更不代表可以恢复 AES 密钥。
10.3 仍需要跨数据集泛化验证
目前的训练集和测试集虽然按照源图像进行了分组,但仍然来自相似的数据生成流程。如果更换图像来源、文件格式或文件片段位置,模型性能可能发生明显变化。
10.4 需要进一步分析性能差异的统计稳定性
本次使用五个随机种子,能够初步观察模型的稳定性。但若要得出更强的结论,还需要结合标准差、配对比较和更大规模的独立测试集。
十一、下一步研究方向
根据本次实验,后续可以重点研究三个方向。
方向一:研究 CNN 与直方图特征的匹配问题。
对比原始字节、字节频率直方图、相邻字节转移统计等输入表示,判断哪些特征更适合卷积网络。
方向二:进一步验证 BatchNorm 的影响。
结合训练损失曲线、不同批量大小以及其他归一化方法,分析 BatchNorm 性能下降的原因。
方向三:开展跨数据集泛化实验。
使用真实文件和不同数据来源,测试模型是否仍然能够区分明文与密文,排除模型依赖特定文件格式或数据生成方式的可能性。其中,第三个方向对于后续论文研究尤其重要。
十二、总结
本文围绕 1D-CNN 的激活函数和 BatchNorm 进行了消融实验。
在相同的数据处理和训练条件下,对 ReLU、LeakyReLU、GELU、SiLU 四种激活函数,以及是否使用 BatchNorm 进行了系统比较。
根据五随机种子的实验结果,可以得到以下结论:
SiLU 是本次四种激活函数中表现最好的 CNN 配置。 不使用 BatchNorm 时,平均 Accuracy 为 81.33%,ROC-AUC 为 0.9124。
BatchNorm 并没有提升当前 CNN 的性能。 四种激活函数在加入 BatchNorm 后,平均 ROC-AUC 均下降。
MLP 在本次字节频率直方图数据集上优于 CNN。 其平均 ROC-AUC 达到 0.9849。
改进后的 CNN 不再出现全部样本被预测为明文的情况。 但分类性能仍受输入表示和网络结构影响。
高准确率不代表模型具备跨数据集泛化能力。 后续仍需要通过真实文件和独立数据来源进行验证。
本次实验说明,在加密数据分类任务中,神经网络结构并不是越复杂越好。
输入特征是否适合网络结构,以及实验数据是否能够支持可靠的泛化结论,可能比单纯增加网络层数更重要。
下一篇将进一步研究不同输入特征与数据来源对分类性能的影响,探索模型究竟学习到了什么。
网硕互联帮助中心








评论前必须登录!
注册