【AI】恶意文件静态检测模型检验及小结

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 在之前的博文中,博主提及过恶意文件静态检测的一种方法,并因此训练了模型,由于样本量巨大以及资源有限,训练一个 epoch 就需要一周多的时间,因此就先拿训练过一个 epoch 的模型来进行测试;

前言

在之前的博文 【AI】浅析恶意文件静态检测及部分问题解决思路 中,博主提及过恶意文件静态检测的一种方法,并因此训练了模型,由于样本量巨大以及资源有限,训练一个 epoch 就需要一周多的时间,因此就先拿训练过一个 epoch 的模型来进行测试;

拉取测试集

既然是要用来测试的样本,那么我们要尽可能的与训练集以及验证集中的样本不一样,因此,最好在一开始就做好分类,或者可以借用集合 set 的特性来整合;

我们先用训练集和验证集进行测试,伪代码如下:

with open('...pkl', 'rb') as f:
    train_data = pickle.load(f)

with open('...pkl', 'rb') as f:
    val_data = pickle.load(f)

train_data_ = [x[0] for x in train_data]
val_data_ = [x[0] for x in val_data]
zz = set(train_data_) - set(val_data_)

image.png

可以看到数量是完全相同的,因此训练集和验证集没有交集,即两者之间没有重复的样本;

接下来我们就开始拉去测试集,先从 Metadata_PE 表中去获取到 pathsha256 字段,然后在根据 sha256Event_PE_lab_22_11_24 表中进行查询 lab 标签;

image.png

这里的话,可以根据联合索引,直接从数据库中将全部数据导入,借用 pymsqlpandas 的包,在 python 中处理的速度比原生 SQL 要快不少,不过因为数据量较大,导入也消耗的一定的时间:

image.png

导入完成之后就是对数据进行处理:

new_sample_df = sample_df[sample_df['date'] >= pd.Timestamp('2022-12-01')]
pd.merge(new_sample_df, label_df, on="sha256")

这里的话,根据入库时间进行拉取,选取 2022-12-01 之后入库的样本:

image.png

因为这里只需要 exe 类型的文件,所以还需要再进行一次判断,样本量过大可采取多线程 ThreadPoolExecutor

if pefile.PE(path).is_exe():
    ...

全部完成之后,就是我们需要的测试集了;

image.png

检验模型

我们先将刚刚准备好的测试集进行导入:

test_loader = DataLoader(...)

然后传入到模型中,获取预测值,并计算损失:

# 特征值,模型的输入
test_x = batch_data[0].to(torch.float32).to(device)
# 预测值,模型的输出,两个值分别为黑白样本概率,如 [0.4052, -0.3841]
out = model(test_x)
# 标签值,用于计算损失
label = batch_data[1].to(device)
# 预测值与真实值之间的损失
loss = criterion(out, label.long())
# 一个 batch 的大小
val_size += label.size(0)
# 一个 batch 的损失,loss.item() 每个样本的平均损失
running_loss += loss.item() * label.size(0)

因为是检验模型,我们需要去评价模型的好坏,判断是否为恶意文件其实就是个二分类问题,这里的话使用混淆矩阵:

预测值0 预测值1
真实值0 TN FP
真实值1 FN TP
  • TN:真实值是0,预测值是0,即我们预测是 negative,预测正确了。
  • FP:真实值是0,预测值是1,即我们预测是 positive,预测错误了。
  • FN:真实值是1,预测值是0,即我们预测是 negative,预测错误了。
  • TP:真实值是1,预测值是1,即我们预测是 positive,预测正确了。

accuracy_score = (TP+TN) / (TP+TN+FP+FN):函数计算分类准确率,返回被正确分类的样本比例(default)或者是数量(normalize=False)。

精准率(查准率)和召回率(查全率)等指标对衡量机器学习的模型性能在某些场合下要比 accuracy 更好。

精准率:precision = TP / (TP+FP)。所谓的精准率是:分母为所有预测为1的个数,分子是其中预测对了的个数,即预测为正的样本中,实际为正的比例。

召回率:recall = TP / (TP+FN)。所谓的召回率是:所有真实值为1的数据中,预测对了的个数,也就是我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。

接下来,我们就根据预测值和标签值来进行计算:

preds_n = preds_sg
label_n = label_sg
# zes: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 
zes = np.zeros(label.size(0))
# ons: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
ons = np.ones(label.size(0))
preds_np = preds_n
label_np = label_n.reshape(-1)
train_correct01 = int(((preds_np == zes) & (label_np == ons)).sum())
train_correct10 = int(((preds_np == ons) & (label_np == zes)).sum())
train_correct11 = int(((preds_np == ons) & (label_np == ons)).sum())
train_correct00 = int(((preds_np == zes) & (label_np == zes)).sum())
FN += train_correct01
FP += train_correct10
TP += train_correct11
TN += train_correct00
accuracy_score = (TP+TN) / (TP+TN+FP+FN)
precision = TP / (TP+FP)
recall = TP / (TP+FN)

这里的话就用几个 batch 来略作检验:

image.png

其实看的出模型的效果挺差的;

排查问题

由上可知,我们训练了一段时间的模型效果并不理想,这是为什么呢?

看了一下过往的日志,发现一个问题:

image.png

一个 batch 里的所有预测值都是一样的?怪事;

再去看看自己训练集里的样本,发现是各不相同的:

image.png

那就是梯度消失导致了这一问题...

现在的一个解决方案就是更换模型,换成一个小模型,之后训练的效果如何,会更新在之后的博文里,敬请期待!

后记

以上就是 【AI】恶意文件静态检测模型检验及小结 的全部内容了。

本文介绍了拉取数据集的一些小细节,以及如何对模型进行检验,排查相关问题,希望对大家有所帮助!

目录
相关文章
|
4天前
|
人工智能 测试技术 API
AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签
本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。
|
4天前
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
|
24天前
|
人工智能 自然语言处理 搜索推荐
最强AI写作助手,内置4o模型,引领AI智能问答的新纪元
随着人工智能技术的飞速进步,BKAI凭借其强大的GPT-4o模型,正在重新定义智能问答的标准。其中表现最强的AI助手神器:BKAI
|
5天前
|
人工智能 自然语言处理 数据挖掘
【通义】AI视界|性能超越GPT-4o?最强大的开源AI模型来了……
本文介绍了五项最新AI技术动态,包括性能超越GPT-4o的开源AI模型Reflection70B、智谱清言App限时免费的视频通话功能、哈佛医学院研发的癌症诊断AI模型CHIEF、Replit推出的AI编程助手,以及英特尔与日本AIST合作设立的芯片制造研发中心。这些进展展示了AI领域的快速创新与广泛应用。更多详情,请访问通义官网体验。
|
4天前
|
人工智能 测试技术 PyTorch
AI计算机视觉笔记二十四:YOLOP 训练+测试+模型评估
本文介绍了通过正点原子的ATK-3568了解并实现YOLOP(You Only Look Once for Panoptic Driving Perception)的过程,包括训练、测试、转换为ONNX格式及在ONNX Runtime上的部署。YOLOP由华中科技大学团队于2021年发布,可在Jetson TX2上达到23FPS,实现了目标检测、可行驶区域分割和车道线检测的多任务学习。文章详细记录了环境搭建、训练数据准备、模型转换和测试等步骤,并解决了ONNX转换过程中的问题。
|
4天前
|
人工智能 计算机视觉
AI计算机视觉笔记十五:编写检测的yolov5测试代码
该文为原创文章,如需转载,请注明出处。本文作者在成功运行 `detect.py` 后,因代码难以理解而编写了一个简易测试程序,用于加载YOLOv5模型并检测图像中的对象,特别是“人”类目标。代码实现了从摄像头或图片读取帧、进行颜色转换,并利用YOLOv5进行推理,最后将检测框和置信度绘制在输出图像上,并保存为 `result.jpg`。如果缺少某些模块,可使用 `pip install` 安装。如涉及版权问题或需获取完整代码,请联系作者。
|
26天前
|
人工智能 边缘计算 自然语言处理
谷歌微型AI模型“Gemma 2 2B”正出人意料地挑战科技巨头
谷歌微型AI模型“Gemma 2 2B”正出人意料地挑战科技巨头
谷歌微型AI模型“Gemma 2 2B”正出人意料地挑战科技巨头
|
26天前
|
人工智能 自然语言处理 搜索推荐
苹果与EPFL合作发布4M AI模型,开启AI新时代
苹果与EPFL合作发布4M AI模型,开启AI新时代
苹果与EPFL合作发布4M AI模型,开启AI新时代
|
11天前
|
机器学习/深度学习 人工智能
AI模型提早5年预警乳腺癌,MIT研究登Science获LeCun转发
【9月更文挑战第1天】麻省理工学院(MIT)研究人员开发的深度学习AI模型,在乳腺癌早期预警方面取得突破性进展,相比传统方法提前5年预警癌症,准确率超过90%。此成果不仅在医学界引起轰动,还获得了人工智能领域知名学者Yann LeCun的高度评价。尽管面临准确性和可解释性的挑战,但该研究展示了AI在医疗领域的巨大潜力,有望革新乳腺癌的早期筛查和诊断方式。论文详情见[链接]。
19 3
|
14天前
|
机器学习/深度学习 人工智能 Android开发
揭秘AI编程:从零开始构建你的第一个机器学习模型移动应用开发之旅:从新手到专家
【8月更文挑战第29天】本文将带你走进人工智能的奇妙世界,一起探索如何从零开始构建一个机器学习模型。我们将一步步解析整个过程,包括数据收集、预处理、模型选择、训练和测试等步骤,让你对AI编程有一个全面而深入的理解。无论你是AI初学者,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启示。让我们一起开启这段激动人心的AI编程之旅吧! 【8月更文挑战第29天】在这篇文章中,我们将探索移动应用开发的奇妙世界。无论你是刚刚踏入这个领域的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和指导。我们将从基础开始,逐步深入到更复杂的主题,包括移动操作系统的选择、开发工具的使用、