数据标注及未知类别解决方案总结
前言:最近看了一些数据标注和未知分类方案总结一下
1、Autonomous Unknown-Application Filtering and Labeling for DL-based Traffic Classifier Update
给未知流量打标签的框架,主要解决未知流量分类的问题,提出一个开放世界流量分类的问题。
为了从根本上提高网络的测量和管理水平,网络流量分类技术得到了广泛的研究。机器学习是网络流量分类的有效方法之一。具体而言,深度学习(dl)因其在不损害用户隐私和网络安全的前提下,即使在加密的网络流量中仍然能够有效地进行访问而受到研究人员的广泛关注。然而,现有的大多数模型都是从封闭世界数据集中创建的,因此它们只能对以前采样和标记的现有类进行分类。在这种情况下,未知类不能被正确分类。为了解决这个问题,提出了一个自主学习框架,有效地更新主动操作过程中基于数据链的流量分类模型。该框架的核心包括基于 dl 的分类器、自学习鉴别器和自主自标记模型。判别器和自标记过程可以在主动操作中生成新的数据集,以支持分类器更新。在一个开放的数据集(即 iscx vpn-nonvpn)上对建议的框架进行评估,并独立地收集数据包。结果表明,该自主学习框架能够从未知类中过滤数据包,并提供准确的标签。因此,可以利用自主生成的数据集成功地更新相应的基于动态链接库的分类模型。
Framework
1、DL -based packet classification
这里先输出softmax的概率值,根据阈值直接将小于的分类为Pn(L),由于可能存在误分类,需要将大于阈值的再进行一步二分类
2、self-learned unknow application discrimination
discriminator需要先做一步训练,然后对大于阈值的数据进行分类,分出来的未知类别数据归入Pn(R),
这里Pn(L)和Pn(R)组成Pn,这些Pn数据都属于未知类别的数据。
3、autonomous unknow packet self-labeling
剩余部分就是对未知类别数据进行特征提取降维,聚类后加入训练数据库
Question
1、这里有个二次分类在里面,训练是个问题
2、聚类的类别是指定,但是实际情况可能不知道有多少类别,而且就算知道类别也无法立即给定具有现实意义的标签
2、暹罗网络的学习内容(度量学习)
孪生网络学习特征表示,是的类间距离更大和类内距离更小,学习完特征表示后,使用分类算法进行分类
什么是孪生网络?
Siamese network就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wp2ee4pL-1638504867087)(pic/PU-learning/image-20211203104402780.png)]
大家可能会有疑问:共享权值是什么意思?左右两个神经网络的权重一模一样?
答:是的,在代码实现的时候,甚至可以是同一个网络,不用实现另外一个,因为权值都一样。对于siamese network,两边可以是lstm或者cnn,都可以。
大家可能还有疑问:如果左右两边不共享权值,而是两个不同的神经网络,叫什么呢?
叫伪孪生网络,
孪生神经网络的用途是什么?
简单来说,衡量两个输入的相似程度。孪生神经网络有两个输入(Input1 and Input2),将两个输入feed进入两个神经网络(Network1 and Network2),这两个神经网络分别将输入映射到新的空间,**形成输入在新的空间中的表示。**通过Loss的计算,评价两个输入的相似度。
先上结论:孪生神经网络用于处理两个输入**“比较类似"的情况。伪孪生神经网络适用于处理两个输入"有一定差别”**的情况。比如,我们要计算两个句子或者词汇的语义相似度,使用siamese network比较适合;如果验证标题与正文的描述是否一致(标题和正文长度差别很大),或者文字是否描述了一幅图片(一个是图片,一个是文字),就应该使用pseudo-siamese network。也就是说,要根据具体的应用,判断应该使用哪一种结构,哪一种Loss。
我的理解,为什么称为孪生,有的时候孪生也可以是就一个网络,只是输入的不同,最后计算损失不同。对于判断相似度的问题,每次的输入是两个样本,对应一个标签(是否相同)。如果改成一个网络训练两次的话,那每次输入的就是一个样本,那这个样本对应的标签是什么呢?
Softmax当然是一种好的选择,但不一定是最优选择,即使是在分类问题中。传统的siamese network使用Contrastive Loss。损失函数还有更多的选择,siamese network的初衷是计算两个输入的相似度,。左右两个神经网络分别将输入转换成一个"向量",在新的空间中,通过判断cosine距离就能得到相似度了。
Cosine是一个选择,exp function也是一种选择,欧式距离什么的都可以,训练的目标是让两个相似的输入距离尽可能的小,两个不同类别的输入距离尽可能的大。其他的距离度量没有太多经验,这里简单说一下cosine和exp在NLP中的区别。
半监督的PU学习方案:
3、基于半监督的PU-Learning的论文
来自于css17,阿里蚂蚁金服的文章,很有工程借鉴性,可以作为有效的辅助工具。
PU learning (Positive and Unlabeled learning),这里PU就是只有正向标签和未标签的学习问题。
由于监督学习标签难以正确获取的问题,并且现实情况只有一些少量已知的恶意UEL攻击,以及大量的未标注的数据,这就使得监督学习的范式不可行。
使用两种策略:两阶段策略和成本敏感策略
系统架构:
-
特征抽取模块
将原始 url 转换为数字特征向量
抽取查询的键值对,然后对每个键值对进行统计信息提取8维。
最后形成 (N + 1) ∗ 8 dimensional feature vector
-
模型训练
利用提取的训练 url 特征训练 pu 学习模型。
这里利用两阶段的策略,首先先从未标记的实例中选取一些确定的负例,第二阶段然后转化为监督学习的任务,利用正实例和选定的可靠的负实例,训练传统的监督模型,并将其进一步用于新实例的预测。
-
预测
预测新 url,系统输出一个候选恶意 url 集。
在预测阶段,一个新输入的URL首先将在特征提取模块被转换为(n + 1)∗8维特征向量,然后所提取的特征向量将送入一个双策略模型,每个模型都将输出一个分数表示恶意URL的概率。得分越高,这个URL就越有可能是恶意的。我们把两个分数平均作为URL的最终得分,选择具有较高分数的URL构造为候选恶意URL集。
这篇文章主要是训练了两个模型,第一个是将正样本和未标记样本分别看作是positive samples和negative samples, 然后利用这些数据训练一个标准分类器。分类器将为每个物品打一个分数(概率值),通常正样本分数高于负样本的分数,因此对于那些未标记的物品,分数较高的最有可能为positive。这样选定可靠的负样本。
然后利用正负样本进行监督学习的模型。有监督的是有成本的学习,也就是模型的损失函数,加入误分类的惩罚系数。
两阶段模型都输出一个分数,取平均值,判定负例样本。
PU学习主要有以下两个步骤:
- 根据已标注过的正样本P在未标注样本集U中找出可靠的负样本集合(Reliable Negative Examples,简称RN),将PU问题转化为二分类的问题;
- 利用正负样本通过迭代训练得到一个二元分类器。
4、ADOA Anomaly Detection with Partially Observed Anomalies
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDPPJeY8-1638504867090)(pic/PU-learning/image-20211117161642941.png)]
这里也是两个阶段
第一阶段:
首先对已知异常进行聚类,使用K-means算法,以及简单的多维欧几里得距离进行度量。形成K个异常簇。
对未标记样本进行如下计算:
根据隔离森林计算一个隔离分数,也就是平均路径长度,因为异常很少而且不同,它们总是被隔离在靠近树根的地方,而正常的样本会被分离到树的深处。一系列公式计算后,越高的分数接近到1,越被认为是异常样本。
还需要计算一个相似性的分数,每个样本到K个异常簇的距离。
两个分数计算一个总的分数TS,设定一个阈值对未标注样本进行一次分类,选择一些潜在的异常和可靠的正常实例。
第二阶段:
设置权重
对观察到的异常实例权重全部设置为1,对选出来的异常如果TS越高,设置的权重越高;
对选出来的正常实例,TS分数越小,获得设置的权重越高。
最后获得一个(K+1)的分类模型,对于每个样本损失函数需要乘上权重计算得到,然后训练分类。