本文主要围绕下面这篇paper展开内涵和外延的讨论:
[1]SiddiquiMA,FernA,DietterichTG,etal.Feedback-guidedanomalydiscoveryviaonlineoptimization[C]//Proceedingsofthe24thACMSIGKDDInternationalConferenceonKnowledgeDiscovery&DataMining.ACM,2018:2200-2209.
笔者这里先简单概括一下这篇笔者所理解的这篇paper的主要核心思想:
1.主动学习思想的融合:
主动学习,也叫查询学习,它要求算法在每轮学习迭代中能够基于某种策略,从当前样本集中选择出“最不确定的一个或一组样本”。从这个角度来思考,无监督异常检测算法普遍都能胜任这个目标,作者在paper中也提到了这个框架的可插拔性,paper中选择了isolationforest孤立森林算法,每一轮迭代中,通过不断将isolationtree当前不确定的数据(无监督模型发现的异常数据),也即最浅路径叶节点输出给外部反馈者并接受feedbacklabel(正例or负例),以此获得一批打标样本。
2.凸优化框架的融合:
主动学习(查询学习),是机器学习的一个子领域。主要的思想是:通过一定的算法查询最有用的未标记样本,并交由专家进行标记,然后用查询到的样本训练分类模型来提高模型的精确度。
A=(C,Q,S,L,U)
只要是有监督学习算法即可。
通俗地理解:
Onlineactivelearning就是模型一次只输出一个预测样本给打标员,打标员通过检视后将反馈结果输入回模型,完成一次迭代。
Batch-sizeactivelearning是模型一次输出一整批数据(例如128),打标员统一打标后,统一将结果输入回模型。
理论上说,onlinelearning更利于逼近全局最优,但是在实际工程中,onlinelearning并不容易做到,因为人是不可能持续地一个样本一个样本的打标的,人毕竟不是机器,人会疲劳。因此,笔者在实际项目中,对原始论文中的Online部分修改为了Batch-size,通过一次积累一个batch样本,然后依然流式地逐一输入给原算法。
和onlineGD和batch-sizeGD问题一样,batch-size可以理解为对online的一种近似模拟,一般情况下,只要batch不要设置地太大(32-64),对最终结果的影响基本上可以忽略不计。
论文原作者提出的是onlineactivelearning,在实际工业场景中,onlineactivelearning的部署成本很大,我们一般采用smallbatch-sizeactivelearning代替,总体上效果影响有限。
即模型一次输出toprank的异常数据,由打标员统一打标后再输入回模型,之后将这批样本全部输入模型进行权重w的调整。接着进入下一轮的toprank异常点评选,如此循环。
RelevantLink:
凸优化在数学规划领域具有非常重要的地位,一旦将一个实际问题表示为一个凸优化问题,大体上意味着对应问题已经得到彻底解决。从理论角度看,用凸优化模型对一般非线性优化模型进行局部逼近,始终是研究非线性规划问题的主要途径。
从理论推演脉络角度来说,凸优化理论是研究优化问题的一个重要分支。实际上,最小二乘以及现行规划问题都属于凸优化问题。
下图展示在线凸优化的伪码流程图:
在一轮的迭代中,都要从凸集中选择一组向量序列w,并选择一个损失函数f()用于计算和目标值之间的差距。
传统IF检测异常时通常会将头部异常样本集(通常不会太多)输出给分析师,借助他们的专家经验判定是否为所要抓捕的风险,若准确率满足要求则进行生产部署,若不满足要求,则需要建模人员和分析师一起尝试修改特征工程,或者通过白名单排除一些样本集,这是一个将分析师的评估结果人工翻译给IF算法的过程。
FBIF作者的解决思路我这里理解是这样的:首先IF是一种生成式模型,IF训练收敛过程没有打标样本的参与,最终生成的概率分布决策函数(decisionfunction)没有有监督样本的参与,经验误差自然会很大。作者将onlinelearning框架思想融入模型中,将监督学习的思想和流程加入到这个无监督过程中,使完全的无监督算法变成半监督的算法。这样得到的综合模型即拥有无监督异常算法的泛化能力,同时也能兼顾有监督学习的强拟合能力的特点。
FBIF省去了传统利用IF做异常检测模型中,反复人工翻译的过程,直接输出,反馈,而后吸收的过程建模为一个onlinelearning过程。
这样我们将整个tree上的每一条边按照ont-hot形式进行编码,那么可以很容易想象,每一个leaf节点都会经过一定数量的边,例如一颗3层6个边的树,某个节点对应的树结构向量可能就是【1,1,1,0,0,0】,如下图所示:
权重w是由feedback反馈(有监督标签)驱动调整的,因此,score越大意味着异常度越高,score越小意味着异常度越小,这就构成了一个有监督线性回归模型(也即原文说的generalizedlinearanomalydetectors(GLADs))的回归训练过程。
FBIF的主体框架采用了onlineconvexoptimization(OCO)框架来描述该过程,可以理解为:我们是在一个对抗性的环境循环地一轮轮做游戏的过程,其中每一轮我们的行动(action)是选择convexsetS中的向量,在游戏的第t步,过程如下:
详细的算法流程如下:
我们接下来逐个讨论各个子环节。
注意,OCO是一个不断迭代循环的过程,模型不仅产出“suspiciousabnormalinstance”给反馈者,同时上一轮反馈者给的feedback也会影响这一轮的模型预测结果,是一个递归过程。
另外,在论文中选用了tree-based的anomalydetectfunction,所以对权重w的限制是非负,这点在写代码的时候需要注意。
接下来按照IF的传统过程得到映射后向量,并乘上权重参数w,根据异常值score得到一组topanomalyinstance。
但是在实际工程项目中,基本上,样本集D是一个天文数字,在笔者所在的网络安全攻防场景更是家常便饭,所以人工反馈最多只能完成最多上万次的反馈,一般通过上千次的反馈后,FBIF模型就会完成收敛。
接下来的问题如何将反馈转换为可优化的数值函数,以便进行最优逼近,例如梯度下降。
基本上来说:
yt=+1:loss值要更小yt=-1:loss值要相对更大损失函数的总体目的是在整个比赛中(所有的t轮次)之后,总体的损失最小,所以这是一个符合贪婪模式的迭代式优化算法。
得到了损失函数的形式和计算方法之后,通过梯度下降对权重参数进行更新。
可以看到,人工的反馈相当于加入了一种梯度方向,在原始UnsupervisedDectionalgorithm的基础上,强行“影响”了训练过程中参数的调整方向,最终得到的模型参数是“数据+人经验”综合影响的结果。这可以理解为是一种加入了先验知识的模型训练。
程序对一个数据集同时进行了IF和FBIF过程,注意,最好运行1024次以上,比较容易看出数据趋势。运行结束后可以得到两个不同的文件:
我们先对两个文件进行unique处理,结果如下:
#IF过程1024->230:压缩率=77.5%#FBIF过程1024->138:压缩率=86.7%压缩率越低,意味着预测结果的概率分布越分散,即不集中。
这个结果可以这么理解,IF是基于随机过程进行特征选择和切分阈值选择的,随机性很高,不容易收敛。
而FBIF因为加入了feedback的拟合过程,随着梯度下降的训练,模型逐渐向feedback的梯度方向拟合,因此收敛速度更快。
再来看IF和FBIF的平均反馈值:
Avg:Baseline->2.31934Feedback->6.70898可以看到,FBIF比IF的平均异常反馈要高很多,这意味着,FBIF算法产出的异常值,更有可能是业务场景中关心的异常点(也即和label更靠近)。
再来看最后一次预测结果的召回对比:
#FBIF1024,1,2,3,4,5,6,6,7,8,9#IF1024,1,2,2,2,2,2,2,2,2,3FBIF的召回率已经比开始时有很大提升,而IF依然和初始时没有太多变化。
从这里也看出,IF算法不需要迭代运行多次,一次运行和多次运行的结果没有太多区别。
笔者在项目中,feedback不断迭代之后,整个模型中线性部分w的影响力会逐渐占统治地位,最终整个模型会逐渐和专家经验过拟合。
尤其是在原来概率分布灰色地带的样本点,模型会趋向不告警。
这样导致的效果是,整体模型的误报确实少了,模型可能可以上线了,但是漏报的潜在风险也大了,要用别的新的泛化方法来发现可能的漏报。
通过构建工作流,可以不断进行迭代feedback训练,并最终得到拟合于专家经验的FBIF模型。