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

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 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】恶意文件静态检测模型检验及小结 的全部内容了。

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

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 并行计算
"震撼!CLIP模型:OpenAI的跨模态奇迹,让图像与文字共舞,解锁AI理解新纪元!"
【10月更文挑战第14天】CLIP是由OpenAI在2021年推出的一种图像和文本联合表示学习模型,通过对比学习方法预训练,能有效理解图像与文本的关系。该模型由图像编码器和文本编码器组成,分别处理图像和文本数据,通过共享向量空间实现信息融合。CLIP利用大规模图像-文本对数据集进行训练,能够实现zero-shot图像分类、文本-图像检索等多种任务,展现出强大的跨模态理解能力。
135 2
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
当语言遇见智慧火花:GPT家族历代模型大起底,带你见证从平凡到卓越的AI进化奇迹!
【10月更文挑战第6天】随着自然语言处理技术的进步,GPT系列模型(Generative Pre-trained Transformers)成为该领域的明星。从GPT-1的开创性工作,到GPT-2在规模与性能上的突破,再到拥有1750亿参数的GPT-3及其无需微调即可执行多种NLP任务的能力,以及社区驱动的GPT-NeoX,这些模型不断进化。虽然它们展现出强大的语言理解和生成能力,但也存在如生成错误信息或偏见等问题。本文将对比分析各代GPT模型的特点,并通过示例代码展示其部分功能。
125 2
|
4天前
|
机器学习/深度学习 人工智能 语音技术
Fugatto:英伟达推出的多功能AI音频生成模型
Fugatto是由英伟达推出的多功能AI音频生成模型,能够根据文本提示生成音频或视频,并修改现有音频文件。该模型基于增强型的Transformer模型,支持复杂的组合指令,具有强大的音频生成与转换能力,广泛应用于音乐创作、声音设计、语音合成等领域。
45 1
Fugatto:英伟达推出的多功能AI音频生成模型
|
2月前
|
存储 人工智能 分布式计算
Parquet 文件格式详解与实战 | AI应用开发
Parquet 是一种列式存储文件格式,专为大规模数据处理设计,广泛应用于 Hadoop 生态系统及其他大数据平台。本文介绍 Parquet 的特点和作用,并演示如何在 Python 中使用 Pandas 库生成和读取 Parquet 文件,包括环境准备、生成和读取文件的具体步骤。【10月更文挑战第13天】
264 60
|
1月前
|
人工智能
AI科学家太多,谁靠谱一试便知!普林斯顿新基准CORE-Bench:最强模型仅有21%准确率
【10月更文挑战第21天】普林斯顿大学研究人员提出了CORE-Bench,一个基于计算可重复性的AI代理基准,涵盖计算机科学、社会科学和医学领域的270个任务。该基准旨在评估AI代理在科学研究中的准确性,具有多样性、难度级别和现实相关性等特点,有助于推动AI代理的发展并提高计算可重复性。
49 4
|
2月前
|
人工智能 自然语言处理
从迷茫到精通:揭秘模型微调如何助你轻松驾驭AI新热点,解锁预训练模型的无限潜能!
【10月更文挑战第13天】本文通过简单的问题解答形式,结合示例代码,详细介绍了模型微调的全流程。从选择预训练模型、准备新任务数据集、设置微调参数,到进行微调训练和评估调优,帮助读者全面理解模型微调的技术细节和应用场景。
74 6
|
2月前
|
人工智能 自然语言处理 安全
【通义】AI视界|Adobe推出文生视频AI模型,迎战OpenAI和Meta
本文精选了过去24小时内的重要科技新闻,包括微软人工智能副总裁跳槽至OpenAI、Adobe推出文本生成视频的AI模型、Meta取消高端头显转而开发超轻量设备、谷歌与核能公司合作为数据中心供电,以及英伟达股价创下新高,市值接近3.4万亿美元。这些动态展示了科技行业的快速发展和激烈竞争。点击链接或扫描二维码获取更多资讯。
|
2月前
|
机器学习/深度学习 人工智能 TensorFlow
解锁AI潜力:让开源模型在私有环境绽放——手把手教你搭建专属智能服务,保障数据安全与性能优化的秘密攻略
【10月更文挑战第8天】本文介绍了如何将开源的机器学习模型(如TensorFlow下的MobileNet)进行私有化部署,包括环境准备、模型获取与转换、启动TensorFlow Serving服务及验证部署效果等步骤,适用于希望保护用户数据并优化服务性能的企业。
62 4
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
揭开模型微调Fine-Tuning的神秘面纱:如何在预训练基础上巧妙调整,解锁定制AI解决方案的秘密武器
【10月更文挑战第8天】模型微调是在预训练模型基础上,利用特定领域数据进一步训练,以优化模型在特定任务上的表现。此方法广泛应用于自然语言处理和计算机视觉等领域,通过调整预训练模型的部分或全部参数,结合适当的正则化手段,有效提升模型性能。例如,使用Hugging Face的Transformers库对BERT模型进行微调,以改善文本匹配任务的准确率。
61 1
|
2月前
|
存储 人工智能 开发者
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本
90 0
三文带你轻松上手鸿蒙的AI语音02-声音文件转文本