-
-
[原创]基于深度学习的恶意软件分类器(五)
-
发表于:
2022-4-24 11:02
15259
-
参考论文:IMCFN: Image-based Malware Classification using Fine-tuned Convolutional Neural Network Architecture构建的恶意软件分类器,本文所用的数据集为在基于深度学习的恶意软件分类器(一)文中介绍过的微软公开数据集,与论文中所用数据集并不相同。
下图为分类器的构建过程,首先通过applyColorMap将灰度图转为彩图作为输入数据,接着用这些来微调(fine-tuning)加载了预训练模型的VGG16模型来完成分类器的训练。此外,还通过数据增强(Data Augmentation, DA)来缓解数据不足的问题,增加训练集样本多样性。
Python版本:3.6.13
Pytorch版本:1.8.1
CUDA版本:11.4
下图显示了将一张恶意软件可视化为灰度图后,resize成(224*224)大小后在应用applyColor转换为彩图的结果,从转换结果可以看出转换的彩图依然具有清晰的图像纹理。
在深度学习的任务中,都会希望样本数量可以足够多,且类型丰富。这样的数据集训练出来的模型具有更好的泛化能力,分类器的性能将会更高。但是,实际训练过程中,很有可能无法得到满意的样本数量,因此,需要通过数据增强来丰富样本数。数据增强的方法有很多,本文选用了其中3种,分别是垂直翻转,水平翻转和随机旋转一定角度(-45度到45度),下面的图图分别对应三种数据增强方法后生成的图片。
通过数据增强,此时拥有了类别更丰富,数量更多的训练样本来构建分类器,此时的数据类代码如下:
卷积神经网络(Convolutional Neural NetWorks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,具有良好的表征学习能力。卷积层和池化层是卷积神经网络的关键内容,这两个层都是通过滑动窗口实现的。
下图是一个卷积层的实例,此时输入的图像是一个5*5大小的矩阵,卷积核的大小为3 * 3,此时滑动窗口的大小就是3 * 3,滑动窗口的步长为1,该滑动窗口会向下或向右移动,对应的窗口中的数值与卷积核的数值进行卷积运算(对应相乘后相加)作为输出结果。
以下图为例,第一个输出结果就是输入图像深色部分核卷积核中的每一个对应数字相乘得到的结果,也就是0 * 0 + 1 * 1 + 2 * 2 + 5 * 1 + 6 * 2 + 7 * 0 + 0 * 2 + 1 * 1 + 0 * 0 =23。第一个结果计算完成后,滑动窗口会向右移动一个步幅,第二个输出结果的计算就是1 * 0 + 2 * 1 + 3 * 2 + 6 * 1 + 7 * 2+ 8 * 0 +1 * 2 + 2 * 1 + 3 * 0 = 32。以此类推,最终输入图像经过运算以后会得到最终的输出结果。
卷积层的输出结果会在经过池化层处理,如下图所示,池化层分别平均池化层和最大池化层两种。和卷积层一样,池化层也是通过滑动窗口来实现的,图中对应的滑动窗口大小为2*2,每次也是移动一个步长。池化层的计算很简单,最大池化层就是对窗口中的数值取最大值作为输出,平均池化层就是对窗口中的数值求平均数后最为输出。通过池化层可以减少输入数据,从而减少特征的尺寸以便更快地计算,同时池化层可以保留最重要的信息。
通常,一个卷积神经网络架构具有一组或多组卷积和池化层,最后通过一组全连接层输出结果。在卷积层和池化层的支持下,CNN可以进行局部的特征学习,专注于输入数据的局部部分,抽取出图像中的有效特征。全连接层就会接收到这些高级别的特征作为输入,因此能够准确地处理复杂数据,在图像识别和分类方面有良好的性能。
下图是VGG16的网络架构,该网络共有5个Block,包含13个卷积层和5个池化层来抽取图像特征,最终通过全连接层来输出分类结果。最后的一层全连接层为任务的类别数,这里的1000是ImageNet数据集的类别数,需要修改为本文的分类任务数。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2022-4-28 16:59
被1900编辑
,原因: