编辑推荐: |
本文主要介绍了大规模图数据库中的异常检测,围绕下面四点展开:异常检测的场景介绍、图神经网络检测异常、对抗图攻击鲁棒模型及实际应用的案例介绍,
希望对您的学习有所帮助 。
本文来自于微信公众号DataFunSummit,由火龙果软件Linda编辑、推荐。 |
|
导读:在世界各地,各种各样的异常事件频生。在电信领域,仅2021年短短一年时间就发生了超过5亿起电信诈骗案件,造成的经济损失达到了164亿美元;在金融领域,2018年光是信贷诈骗就造成了超过270亿美元的损失;在能源领域,甚至因为窃电事件的发生导致印度GDP直接下降了1.5%;其他像游戏、电商各个领域的诸多异常事件也是层出不穷。图神经网络(GNN)在大规模图数据的处理中展现了非常好的效果,我们希望将这一有利工具应用到现实场景中的异常检测任务之中。
今天的介绍会围绕下面四点展开:
异常检测的场景介绍
图神经网络检测异常
对抗图攻击鲁棒模型
实际应用的案例介绍
01 异常检测的场景介绍
1. 新冠疫情后的行业扶持
现在整个世界都在经历新冠疫情的考验。那么在新冠疫情期间,政府应该去扶持哪些行业或者说优先扶持哪些行业,可以使得整个社会的经济得到最快复苏?对比传统的企业流水等数据,用电量数据可以更精细化地、更真实地反馈企业的复苏能力。我们采用超过7亿条国家电网的用电量数据,对不同行业的企业用电情况进行了评估。图1-1描述了以杭州为代表城市,从疫情爆发开始持续一年时间内的各个地区经济复苏能力的变化过程。
图1-1 杭州疫情爆发后一年各地区经济复苏能力
如果独立地去考虑每一个行业,可以发现受到疫情影响比较严重的行业,如餐饮、旅游、娱乐等,或许应该得到更多的政府扶持。但是,行业跟行业之间其实也存在一定的影响力,某个行业的复苏可能会带动其他行业的蓬勃发展。
因此,我们尝试着从数据里面学习出一个图结构,图中的每一个节点表征一个行业,如果一个行业会对另一个行业产生一定影响,两个节点之间就会存在一条有向边。通过行业影响力的图结构可以发现,如果我们扶持对别的行业影响更大的行业,例如交通行业等,能够加速整个社会的经济复苏进程。这个案例也告诉我们,图结构能够帮助我们更好地对异常事件进行干预并及时止损甚至产生更大收益。
2. 金融领域的风险控制
另一个更常见的场景是金融领域的风险控制。比如,今天某个人来向银行借款,银行需要在借款之前预先判断这个人能否及时还款再实施借款行为,以尽可能规避拖欠款问题。在金融行业中,将借款逾期超过90天的用户称为金融诈骗用户。金融风控的具体目标就是去提前预测一个用户是否为诈骗用户。
这项工作其实已经是老生常谈了,很多已有的工作尝试把逾期的预测问题用一些机器学习的技术去解决。这些已有的工作通常利用用户过往的借贷记录来做判断,比如某个用户过去每个月借1千块钱,但这个月突然借了1万块钱,此时可能会显得比较异常。但是,我们也发现有超过61%的诈骗用户,在第一次申请贷款账号的时候就会行骗,对于这些用户,我们并没有他们过往的借贷记录,因此传统的方法也就失效了。
这种情况该如何应对?其实,我们可以利用用户之间的社交关系来对此类用户的异常行为进行检测,把金融领域的风险控制问题表示成一个图问题。如图1-2所示,图结构中每个节点表示一些用户。整个图上有三类用户:第一类是蓝色的普通用户;第二类是红色的诈骗用户;第三类是灰色的身份未知的用户,例如刚刚来申请借款的用户。
图1-2 金融风控中用户关系的图结构表示
金融风控的目标是预测这些灰色的未知用户是属于普通用户还是诈骗用户。传统的图挖掘本质上是希望找到能够区分异常节点跟普通节点的某些图特征。例如,异常节点的重要性会更高,而这个重要性可以通过度或者PageRank分数等指标衡量。
在寻找这部分有用特征的时候,我们发现很多异常节点的二度邻居也是异常的,但奇怪的是,两者间桥接了一个正常的节点。这个现象很难得到合理解释,通过与兴业科技业务团队的交流,我们发现桥接这两个诈骗节点的中间节点其实并不正常,称之为黑中介用户。这类用户不会自己去行骗,而是去维护一些信用评级比较好的账号,并用这些账号探测平台的风控策略,进而去教别人行骗。
当然这些黑中介用户非常可恶,但是他们的存在也为检测诈骗用户打开了一扇窗。一个简单假设是:如果一个用户周围全是黑中介用户,那么这个用户是诈骗分子的概率会更高一些,我们可以设计一套模型同时抓住黑中介跟诈骗分子。
虽然这个模型不是今天的重点,但是回顾一下这个案例,可以看出整个工作过程花了很多的时间和精力去挖掘这些有效的特征,特别是发现这个领域中还存在一类叫黑中介的特殊用户。理解图特征以及对应关系的过程开销非常大,为了能够更好挖掘异常用户,我们尝试自动地从图结构中提取特征。
02 图神经网络检测异常
从图结构中提取特征也是近年来非常流行的图表示学习的话题,一个代表性工作就是用GNN来做风控。首先将视角拉回到起点,思考一个比较根本的问题:为什么GNN可以找到这些异常用户?这里可以从谱域和空间域两个不同的角度去回答,对应了GNN两个不同的理解维度。
1. 谱域的图神经网络检测异常
谱方法做GNN的思想非常简单,就是想对图数据应用卷积操作。由于在原始图上对信号x做卷积会遇到很多挑战,谱方法通过图的傅立叶变化,对图的拉普拉斯矩阵做特征分解,然后将互相正交的特征向量所构成一个新的空间,作为做卷积的投影空间。在投影空间中,我们定义一个滤波器h(∧)与谱域上面的新信号UTx进行卷积,就可以得到做完卷积的谱域图信号。要把这个信号从谱域投影回原始空间时,只需要再做一个傅立叶逆变换,整个过程如图2-1所示。通过谱方法去做一些模型的学习,本质上都是在学这样一个卷积和。
图2-1 使用谱方法做图信号卷积
通过谱方法做图信号卷积的操作与信号处理中的滤波操作非常像,很多工作已经表明GNN的卷积更接近于低通滤波,会把一些高频信号给过滤掉,保留低频信号。对于一个时间序列,其因变量是时间,高低频信号指示的是信号会随着时间发生多大频率的变化。而在图数据上,关注的是节点,本质上是在一个节点域上面对数据进行的描述。图上的高频信号是指节点之间变化比较大的信号,反之,低频信号就是一群节点长得比较像的信号。
在做一些推荐问题的场景时,这样的GNN是完全适用的。因为针对一个用户做推荐时,可以假设周围的邻居与用户的兴趣爱好比较相似,用周围邻居去推理用户的兴趣是完全合理的。但是在做异常检测时,异常节点自然就是跟周围的节点很不一样的节点,如果把这些高频信号过滤掉的话,本质上就无法捕捉到这些异常节点。
总结来说,如果图结构本身带有一些异常节点,那么这个图其实是一个高低频信号所混合的结构,我们并不希望把这些高频信号当作噪音一样过滤掉,而希望把高低频信号同步地建模起来。对于一些正常节点,低频信号会比较重要;而对于一些异常节点,可能高频信号反而会更加重要一些。
如图2-2所示,在利用社交网络来检测金融诈骗用户的任务中,灰色柱是直接采用GCN得到的效果;橙色柱是将前30%的高频信号加回去之后的效果,对比结果说明高频信号确实能够帮助我们抓住异常节点;蓝色柱的结果通过AMNet模型得到的,可以看到它带来的提升会更加明显。
图2-2 采用GCN进行金融诈骗用户检测
接下来介绍一下AMNet模型是如何来做金融诈骗用户检测任务的。
该模型的核心思想是希望在做异常检测时同步抓取图结构中的高低频信号,并且根据不同类型节点自适应地去选择所偏好的信号。如图2-3所示,整个框架由两个部分组成,第一部分包含了一组滤波器,其中每一个滤波器分别负责抓取高频信号或者低频信号;第二部分则使用不同节点做选择,进一步获取节点偏好的信号组合。
图2-3 AMNet的模型框架
在AMNet模型的第一个部分中,我们需要设计一个好的图滤波器,用以捕捉不同频率的信号。这些图滤波器的输出应该处于同一范围中,并且保持一个正值,以免数值的不均衡影响后续的自适应选择。据此,我们选择了Bernstein多项式序列作为图滤波器,并且限定多项式的系数在[0,1]之内。模型的第二部分采用了注意力机制,让每个节点可以自适应的选择自己所偏好的一个信号。最后,在每个节点选择完它所偏好的信号以后,我们就可以据此做异常节点的预测。
如图2-4所示,针对虚假评论数据集、比特币虚假交易数据集、金融诈骗数据集以及电信诈骗集提供的场景,我们发现AMNet模型由于考虑了全频道的信号,可以在这四个数据集上都得到最好的效果。
图2-4 不同场景下GNN方法的实验效果
如果将AMNet模型中所要学习的滤波器个数限定为两个,我们会发现正好有一个滤波器去抓取低频信号,而另一个滤波器去抓取高频信号。在模型做推断的过程中,对于一些目标节点,模型并不知道它到底属于正常节点还是异常节点,因此模型其实是在同步地判定节点的身份以及其对信号的偏向性。如图2-5所示,在学习过程中,最开始正常用户的注意力值跟异常用户是比较接近的,对于高低频信号并没有什么偏好;随着训练轮次的增加,模型对每个节点是正常还是异常的判断更加确定,于是这个节点对于高低频信号的偏好差异也会更加明显。
图2-5 AMNet模型中不同类型节点的偏好以及注意力值变化
2. 空域的图神经网络检测异常
刚刚通过谱域的视角,尝试回答GNN是否够捕捉异常节点的问题,接下来,我们也尝试从空间域的角度来回答这一问题。空间域GNN的基础思想是学习可以聚合这个节点周围一度邻居表征的节点表示,并且通过这样的方式得到目标节点的表征。这种方法的一个重要的基础假设是,图结构中通过边相邻的节点,它们的特征以及标签都应该是趋同的。只有满足这样的假设,这种空间聚合的方式才能生效。也就是说,大部分的空间域GNN都更适用于具有同质性的图结构数据。
举一个例子,美国大选时红蓝两党的关系,就是一个典型的同质性图,如图2-6所示。图中关系比较密切的节点,政见是比较统一的。当我们去推断某一个节点的政见时,通过这个节点周围的邻居,就很容易获得该节点的政见。例如,由于节点Stevens的周围节点都是红色阵营的,我们可以推论出节点Stevens本身也是一个红色阵营的节点。
图2-6 美国大选时红蓝两党的关系图
大家可以想象一下另外一个场景,如果在蓝色阵营中出现了两位有不同想法的人,即被标记为紫色的两个节点。两个节点的政治立场稍微发生了一些变化,这对于蓝色阵营而言,就已经是所谓的异常节点了。假设我们想用空域GNN识别这两个节点,对这两个节点的一度邻居做消息聚合。那么只需要迭代一次,这两个紫色节点就会完全被蓝色信息给淹没。通过这一个直观的例子,我们可以看到从空域的角度理解GNN不太适用于捕捉此类异常节点。
当处理不满足同质性假设的图结构时,传统的GNN到底丢失了什么样的信息?另一个例子做出了补充,如图2-7所示,想要学习图中白色节点的表示,传统的GNN需要聚合它周围的邻居。我们来看其中的两个邻居:左边的蓝色节点与右边的黄色节点。在白色节点聚合信息之前,GNN要先去分别聚合蓝色节点跟黄色节点的信息。可以看到,这两个节点做完消息聚合以后,同样会得到一个两蓝一白一黄的表示。然而,这两个节点在原始图中是完全不一样的,它们对白色节点做消息聚合时应当提供不同的信息。显然,当利用GNN通过一度邻居的聚合方法以后,蓝色节点跟黄色节点带来的信息已经无法区分了。
图2-7 通过一度邻居进行信息聚合后的节点表示
为了解决这个问题,我们希望进一步扩大目标节点的视野域。当聚合一度邻居信息不够的时候,我们的想法是对目标节点相关联的路径做聚合。回到刚刚的例子来看,当我们的白色节点要去聚合蓝色节点的信息时,将会获得两蓝路径和一黄一蓝的路径所得到的信息表示;而在聚合黄色节点的信息时,将会获得两条一蓝一黄的路径所得到的信息表示。在这种设定下,路径所提供的消息,可以区分这两个不同节点的信息。
基于这个假设,我们提出了PathNet的框架,该网络不再聚合一度邻居而是去聚合有效的路径。第一步,我们需要针对目标节点采样一些路径。随着视野域的扩大,路径的数目会呈指数爆炸式增长,为了能够采样到含有更多信息量的路径,过程中引入了最大熵的目标,使最终得到的路径之间的差异尽可能大。得到这些路径之后,第二步就是对这些路径做聚合。路径具有两个比较重要的性质:首先,路径是有序的,我们需要用一个循环神经元来保持路径的有序性;再者,相同长度的路径所经过的节点可能完全不一样,我们需要计算路径中的每一个节点距离目标节点到底有多远,并将结果作为消息聚合时的一个输入。
采样得到了很多路径以后,每个节点对不同的路径的偏好度是不一样的。对于一些异常节点,它可能会偏好一些比较长的路径;对于一些正常节点,它可能会偏好满足同质性假设在周围徘徊的路径。因此,网络同样用一个注意力机制来对每个节点的路径的权重做一个建模,如图2-8所示。
图2-8 PathNet的模型框架
03 对抗图攻击鲁棒模型
接下来介绍一下异常检测场景中的对抗攻击。某些异常节点可能会去干扰我们的模型,就好像之前提到的黑中介用户一样,我们希望去提升模型的鲁棒性。这一系列工作主要从攻击和防御两方面出发,主旨是希望能够去提高对抗攻击的可落地性。
1. 从攻击模型出发提升鲁棒性
领域内好多已有的工作中,攻击模型的异常节点常常会被假设成无所不能,能够知道目标模型的网络结构、参数甚至训练标签。但是,我们认为这些假设过于强大了,在现实中很难找出有这么一些攻击者的存在。退一步来讲,假设攻击者不知道模型的参数跟结构,但是能够跟模型做互动,就像黑中介一样,通过维护信用评分比较好的账号探测整个模型的策略,这在实际中也很难实现。因为当攻击者探测了很多次以后,模型其实很容易抓出这个异常节点,然后将它打入黑名单。
那么,假设不知道任何目标模型的信息,并且也不能跟模型做互动的情况下,我们还能不能够对这个模型进行一个有效的攻击呢?答案当然是可以的。在今年AAAI的一个研究工作中,我们得到的结论是,只需要知道对面的模型是一个图模型,那么就可以完成这个攻击,细节如图3-1所示。并且,文章最后也通过实验来论证了这一点。
图3-1 黑盒攻击模型框架
2. 从防御模型出发提升鲁棒性
对于提升防御层面的可落地性,我们想针对这种在工业界应用比较多的图预训练框架来做防御。通过图的预训练框架,我们可以通过一个或者很多个图数据得到整个图的编码表示,并用这个表示来做各种各样的下游应用,例如节点分类、链接预测以及社区发现等。
当数据受到攻击以后,各个下游应用都会受到影响,传统的一些防御工作会在浅层模型上面来部署防御。这样做的好处是可以明确要保护的目标是什么,由于各个下游应用都有可能受到影响,它的缺点是要在各个浅层模型上都部署防御,成本自然就会比较高。如图3-2所示,我们的工作提出在图的预训练阶段就完成防御,这样一旦一个数据受到攻击,在信息编码层面就可以把攻击拦截下来,不会影响到任何一个下游应用。这样做最大的挑战在于我们现在已经不知道到底要保护哪个任务了,所以很难明确防御的目标是什么,限于篇幅这里就不展开讨论了。
图3-2 图的预训练阶段防御框架
04 实际应用的案例介绍
最后介绍一下相关工作在应用落地方面的工作。
1. 王者荣耀异常玩家发现
首先,我们从一个比较热门的游戏场景——王者荣耀出发。在这个游戏中,某一个玩家可以通过发语音或者打字这样的方式与其他玩家互动,可能大部分玩家之间都是讨论战术等正常互动,也存在少数的异常玩家会恶意辱骂别的玩家。我们的目标是希望把这些带有辱骂行为的玩家给识别出来。
我们利用2019年王者荣耀的某一个数据集,把这个游戏过程建模成一个图结构。在这个游戏中,每一个玩家可以选择一个英雄,我们就在这个英雄类别跟玩家之间连一条边。选完英雄以后,5个玩家就组成了1个团体,这个团体会和对面的另一个团体做一些互动,包括用一些技能或者走位去击杀对面的玩家,或者辅助自己的队友完成击杀。在图结构中,我们把击杀跟辅助击杀的事件用边来表征,如图4-1所示。
图4-1 王者荣耀游戏的图结构建模
比较有意思的一点是,我们借鉴了社会学里的概念,尝试了解一个玩家玩什么类型的英雄会对他的行为产生比较大的影响。通过这项工作,我们发现玩刺客的玩家发生辱骂行为的概率会更高一些。通过分析我们发现,这个现象的本质原因是玩家能力比较出众时,他会去担任对游戏战局有决定性作用的角色,而责任越大压力也就越大,所以通过行为去释放这些压力的可能性也会更大一些。
2. 癫痫波快速诊断
另外一个真实的场景是与深圳市儿童医院合作的癫痫检测工作,目标是帮助难治性儿童癫痫患者。癫痫病是一种欠缺有效根治手段的脑疾病,特别是难治性癫痫,往往无法靠药物来得到永久性的抑制,唯一的根治手段就是手术切除。在这个手术之前,医生需要定位患者脑部的哪个区域导致癫痫的发生,这个步骤是基于患者的颅内脑电信号来实施的。
通常情况下,医生会在患者脑子里面插入14到16根电极棒,用于采集不同脑区的脑电信号,并通过这些信号来识别异常的癫痫波。然而,通过人工的方式读取信号的效率非常低下,一般一个患者需要持续插电极半个月到一个月的时间才能完成数据的采集和读取。我们希望通过AI来缩短周期,帮助医生在三天以内就能够有效的识别致痫区。
采集颅内脑电信号的一个电极里面有三个信道,每个信道对应着不同的脑区位置。据此一个直观的想法是对不同的信道做独立建模,然后预测某一段信号是否是癫痫信号。但其实脑区跟脑区之间是存在一些关联的,某一个脑电信号会从某一个脑区传递到另一个脑区。癫痫最本质的一个特征是,当一个区域发生异常以后,它会迅速的把癫痫波传播到别的脑区中,使得整个脑子产生大面积的扰乱信号。
脑电信号在脑区之间的传播方式,即使在神经科学中也是一个未知的开放问题。于是,我们试图通过结构学习的方式,从大量数据中学习出了表达一个脑区跟脑区之间传播关系的图结构,并通过这个图结构来对癫痫信号做更好的识别,如图4-2所示。实验证明,在癫痫信号仅占千分之二比例的场景中,我们提出的BrainNet依然可以得到一个很好的效果。
图4-2 BrainNet的模型框架
|