分享嘉宾:胡一然 极验 高级算法工程师
编辑整理:王彦磊 灵数科技
出品平台:DataFunTalk
导读:近几年图建模的研究一直保持很高的热度,每年的论文产出量是非常高的,在业界一些知名的技术团队也都在寻求图相关算法与自身业务相结合的探索,所以说不管是在学术界还是在业界,各行业实际都在探索图建模的赋能之路。极验在图神经网络出来的时候就已经尝试使用图模型和实际数据相结合做了一些探索,并且承接了很多图建模合作的任务,比如在银行、社交平台,保险或者某公安厅,帮助客户去识别这种异常流量并且定位攻击手段,这都是非常有代表性的案例,无论各行各业它都有一些通用性。所以,此次拿出来跟大家分享,希望给大家一个参考。
主要内容包括:
图模型介绍:简单介绍下图神经网络的发展史,包括图建模的优势和常用的应用场景;
极验图建模的探索与演进:在图神经网络出来的时候极验就已经尝试使用图模型和实际数据相结合做了一些探索,此次会简单介绍下我们做了哪些探索,取得了哪些成果,包括探索中已经可以落地的方案和效果;
我们的思考:和大家探讨下在整个探索中遇到的一些问题,包括我们的一些思考。
01 图模型介绍
1. 图神经网络的发展史
先看下图神经网络的一个简单的发展史:
图神经网络的概念是在2005年提出的,从2005年到2013年这个时间段是一些比较早期的研究,这些早期的研究都是以一种迭代的方式通过循环神经网络的模型来传播邻居结点的信息,这个时期研究的模型计算量是比较大的。
在2012年前后的时候卷积神经网络开始在视觉领域取得了很好的成绩,所以人们在2013年的时候就把图卷积的概念引入到了图神经网络中,当时提出的是一种基于频域卷积操作。
在2013年到2016年,这种基于频域卷积的很多模型被提出来,但是基于频域的卷积需要在整个图上做些处理,它非常难以并行或者扩展到大图上。
所以在2016年的时候,就有人提出了基于空间卷积的图模型,这样就可以极大的提高图卷积模型的计算效率。在之后的几年里,各种基于空间卷积的图模型变体被大家提出来 并且在之后的几年里一直到现在都被广泛的应用到各种领域,比如这里提到的计算机视觉领域、自然语言处理领域、社交网络分析领域等,大家都在研究图卷积网络与实际应用相结合的落地。
2. 图建模研究浪潮
包括在近几年,图建模的研究也一直保持很高的热度,大家可以看到下图在一个搜索引擎里,我们搜GCN相关的论文就可以看到近几年论文发表量都有一两百篇,并且这只是图建模领域的一个分支,扩大到整个领域的话,实际每年的论文产出量是非常高的。然后在业界我们看到一些知名技术团队的文章中也都在寻求图相关算法与自身业务相结合的探索,所以这可以说明的是不管是在学术界还是在业界,各行业实际都在探索图建模的赋能之路。
3. 图建模特点
下面我们探索下图建模都有哪些特点,为什么一把火烧到了风控。
首先我们知道风控以前是比较传统的,从传统的卖库,比如IP库、设备库、手机黑卡库这些,但是这些管控也非常严格了,然后到后面风控就做到了各种规则系统、专家系统,比如人工分析一些频次上的异常、关联上的异常,做这种异常流量识别。但实际这用的都是这种大量数据中的冰山一角,在深度学习非常火的情况下,比如卖人脸识别的或者卖语音的,这些都做出了一些非常成熟的产品,但是我们做风控的人,不管是部门还是供应商都非常的着急,因为手里有一堆这种有关联关系这种大量的数据,但是因为不能结构化只能沉淀在硬盘里,却发挥不了很大的价值。
那么现在风口来了,就是图卷积。它的整个过程其实就是深度学习,既然是深度学习,它自然就能够利用深度学习这种端到端的学习特点,之前分析人员一般都是构建各种规则系统去很繁琐的寻找关联关系,但是现在有了这种端到端的学习能力,分析人员就可以从这种任务中解放出来。并且对图模型来说只需要输入邻接矩阵和特征矩阵,图模型就能很自然聚合到结点的一些特征信息和结构信息。
比如我们常见的一个设备被一批人公用的话,我们在这个图结构上就类似于这个图一样(下图),这一个设备是一个结点,就会关联到很多结点,基于图数据的这种特点,它就很容易的学习到这种关联关系。在图卷积之前,实际也有很多相关的知识图谱相关的算法,比如路径查找,比如社区发现,但它本身还都是一种直接推断的过程,并非这种端对端学习的过程。实际这种端对端学习的过程代表着高效,它能够有效减少中间环节信息不对等的这种特性,一旦说我们在终端发现了问题,那整个系统的每一个中间环节它都可以进行联动调节。
4. 图建模场景
我们实际生活中的业务数据都可以用图来表示,因为图这种结点加关系的结构是可以包罗万象的一种数据结构,基本可以涵盖我们所有的业务数据。所以图卷积这种技术不仅仅能解决我们刚才提到的风控场景,比如图1这种风控场景:小号识别等,还有一些其他传统问题也得到了很大的提升,我们认为这种图建模的任务主要可以分为三大类:
Embedding,比如我们做用户画像;
边预测,比如第2幅图里展示的内容推荐,用户偏好挖掘;
子图挖掘,比如第3幅图,所谓的恶意刷评、社区检测等我们都可以认为是子图挖掘的一种。
5. 极验&图建模
由于当前图建模应用的多样性,业界对其的关注度非常高,并且也都在各类的场景中用它与自己的业务场景相结合做了一些实践,也都证明很有效。而我们极验在多年的这种积累下,本身就有很强大的数据覆盖量,无论是去探究这种数据流量之间的各类关系还是说对于异常团伙的一个精准识别,我们认为只有在和图模型相结合的过程中才能挖掘出更多的流量价值,并且对于我们极验来说本身就是希望通过各种AI技术解决这种交互安全问题,利用最有效的技术去更好的为客户做服务也是我们的一个愿景,所以我们在图建模上也进行了一些持续的研究,当然也取得了一些不错的成果。
02 极验图建模的探索与演进
1. 我们的探索
前面我们也提到了在2017年是图卷积这项技术的爆发之年,在当年的各大顶级会议上实际都出现了跟图建模相关的论文,在2018年的时候,基本上又翻了3倍,这实际是非常罕见的,这也说明了这项技术的需求量是非常大的。就是在相关的理论提出的时候,我们数据团队就已经非常感兴趣了,并且在自己的数据上做了一些验证,效果非常不错,因此我们在2018年的时候就把GCN上线到了我们验证产品线上做人机检测。
在2019年的时候我们承接了很多像这种数据建模合作的任务,比如在银行、社交平台,保险或者某公安厅,我们都有这种联合建模的任务,帮助他们去识别这种异常流量并且定位攻击手段,这都是非常有代表性的案例,这也是给大家拿出来分享的一个原因,无论各行各业它都有一些通用性,都能有所参考。
在同年(2019年)我们还推出了自研的图建模平台,这个目的是便于我们可以完成一些通用的图建模任务,我们还出版了一本图神经网络的书籍。在2020年的时候,我们将GCN上线到了我们的深知产品线用于做异常账号识别的这种场景,从GCN在我们的两条产品线上线之后,基于一些遇到的情况,我们就开始探索GCN在更多业务场景下的适用性,所以后面就提出来了GCN在大规模数据下的一个普适方案,包括今年也在提出一种GCN上线实时建模的方案。
我们做的工作从实际技术方案来讲可以分为两大类:一类是离线GCN模型,一类是实时GCN模型。从承接的服务上来讲,目前主要是作为内部产品线的一个技术支撑,同时也作为我们图建模平台一环落地来使用,今天我主要来介绍一下我们两种技术方案上的架构和思考。
2. 离线GCN模型——基本方案
① 基本流程
首先来说离线的GCN方案,下面这个图就是离线GCN的一个基础流程图:这里的输入是一个特征矩阵和一个邻接矩阵,包括各个结点的标签,我们放入模型中,这里的输出实际就是模型学习到的各种结点的特征。其实GCN的本质可以理解为提取图的这种结构特征,在异常流量的检测中常见目的就是去判断这个流量是否异常,一般它是个分类任务,我们用GCN做分类任务,后面还可以再加一个softmax这种分类器。按照常见的做法就是做有监督的GCN分类,我们的输入数据需要带一些真实的标记,然后多次迭代最小化损失函数来达到理想的精度。
但是通常这种有监督的学习都需要大量带有标签的数据,业务的标签一般依赖于策略引擎和人工标注,像我们提供服务的厂商来说,还有一种标记就是来自客户反馈的业务标记,但很实际的一个情况就是在与黑产的对抗过程中标记的获取成本很高,或者是策略引擎的覆盖量并不全,常见的一种现象就是我们的客户会反馈他们的这种业务标记会比我们策略引擎标记的要多,但是他们也不太确定这些标记的真实性。这就可以说明实际企业往往拥有很大量的数据,但是这些数据的标记或者说有准确的标记只有少数
所以我们在做离线GCN方案的时候就考虑了用自监督模型。自监督模型实际是无监督训练的一种,但是它会模仿有监督去构造一些伪标签,我们在做自监督模型的时候,标签的选取会尽量的保证它的正交性,比如我们会选取这种业务场景作为标记,或者采用时间作为标记,或者是其他组合的处理过的key作为标记。
② 模型效果
这个是我们利用部分伪标签做的自监督训练的效果图,做的是一个多分类,下图中左边的这个图是我们最终的一个输出效果,纵坐标为实际打入的标记,横坐标是GCN分类预测的结果,对于这个结果的理解为:图中呈现竖条亮块状的预测分类,说明在伪标签的多数类中都存在该预测分类的模式,认为是一个正常数据的模式分类;而对于红框中相对比较独立的亮块,说明只在伪标签的某一类中存在这种预测出的模式,GCN模型就会认为它是特殊的一类,存在异常的可能性。
由于这种自监督模型不能直接去判断它是否异常,它只是对特征进行提取并做了一个分类,那么哪一类是异常实际我们还是要进行进一步的异常确认。
实际中对每一类数据异常确认的方法又比较多,这里列举常用的几种方法:下面图中上面的这两个图与我们自己的策略引擎做交叉对比的一个结果,比如我们红框里的第3类和第4类数据在这边(右上两个小图左边那个)就是纵坐标第三类第四类,可以看到与策略引擎的中高风险是有一定交集的。每一类里大概有30%-40%的数据已经被我们的策略引擎标记为有中高风险。所以我们结合这两个结果基本可以断定这块(红框中)的风险值是比较高的,然后再通过我们的策略引擎,根据这一类的数据具体与某一个规则相交的结果我们甚至可以去大概解释这类数据异常表现是什么样的。
除了这种方法,去判定一个类是否异常还有其他的方法,比如可以把GCN模型提出的特征做一个聚类,看一下每簇之间的一个距离,去分析其异常度或者是与已知的白样本特征分布做对比,去计算一个分布差异度,这都一些比较常用的异常(确认)手段。
3. 离线GCN模型——大规模数据
① 背景
在基础的GCN方案上,我们初期一般都是对单个客户的单天数据进行建模分析,因为一般的图模型都需要多轮的迭代才能达到比较理想的精度,都是通过GPU训练。但是对于有一些客户,他会有这种长期的数据建模需求比如有一周的数据或者一个月的数据,或者是有一些超大体量的客户,就会遇到这种GPU显存容量有限的问题,这种问题的解决方案有两种:
更换更大显存的GPU,这个就是花钱来解决,一般来说成本比较高;
考虑用CPU训练,但是大家都知道CPU训练时间比较长,尤其是经过多次迭代之后时间更是等不起,有时候好几天才能训练出来一波,所以我们试着来理解下GCN的本质,它实际就是前面的一个Embedding层加上后面一个分类层,所以我们就想到用CPU训练只训练一轮,不去计算损失,相当于我们给GCN模型的参数是随机的,所以这里的输出实际就只学习到了图的一个结构特征,后面就加一个常见的机器学习的分类器,甚至可以做一些并行化的计算,比如决策树、随机森林等。这种思想实际就是减少对GCN做分类这种目标的一个依赖,我们把得到更好的分类效果这种期望转移到分类层上。
② 不同方案效果对比
这里对比了下不同方案对应的效果,下图中图1就是上面讲的基础的GCN方案,在GPU上1000次的迭代训练,第2个图是用CPU训练的,在一层GCN后面加了一个随机森林的分类器。第3个图后面加的是K近邻的分类器。大家可以从这三幅图上看到,实际用GCN加随机森林和基础GCN的效果相差不是很大,相比较而言(使用K近邻分类器)最后一个图的效果相对来说会差些,并且我们拿到实际的数据标签之后,对比了一下前两个图,同一条数据上的两个标记差异比较小,所以我们可以认为这种方案是可行的。我们就采用了第二个后面加随机森林(分类器)的这样一种方案。
这里列了一下我们实验环境中的一些参数,比如我们一开始用8G显存的GPU做,只可以容纳60万的结点和400万的边,而且已经到达了上限,这个基本上落到我们实际的数据量上大概是10-20万的数据量,但是选用32G内存的机器使用CPU跑加上随机森林的分类器,我们压进去200万的结点和4000万的边还没有达到上限,耗时大概在10分钟,可以看到实际这个时间也是可以接受的,效果也相差不大。
所以我们内部产品线提供的这些模型的支持中离线的GCN方案用的就是这两种方案。如果数据量不是很大的情况下,一般会优先选取基础的GCN方案,因为后面这种方案随机森林会有一些超参数的选择会影响最终的分类效果。相比之下基础的GCN方案我们是可以关注更少的参数就可以达到相同的效果。
4. 实时GCN模型
① 背景
在离线的GCN方案做的相对比较完善之后,探索了GCN模型实时的可行性,因为离线的方案总是有一定的滞后性。当客户线上已经被黑产攻击,我们还是有一定的时间延迟才能为他们提供到识别的效果,如果可以做到实时的话,我们对异常流量的识别就会更加的敏捷,及时反馈给客户并做相应的处理,可以减少更多的损失,实时的要求实际是除了准确之外还有就是计算迅速。我们前面讲的大规模数据它的计算性能肯定不能满足这种需求,所以我们就考虑了这种小数据量的计算方式,小数据量的这种选取一般是线上有两种方式,一种是等时间间隔选取,一种是等数据量选取。我们这两种方案都做过实验,发现等数据量的方案效果更好些。
② 拟实时的GCN方案流程
在线上的数据按照时间轴获取的话我们把每1000条数据划分为一个数据块,这1000条数据第一步先做字段处理,第二步提取结点和边的相关结构,第三步就是放入GCN模型做Embedding,这里可以出来1000条数据每一条数据的多维特征,第四步做的是实时GCN的一个核心的计算模块,这里用的是一个聚类的思想:我们的假设是对于相同模型参数的模型来提取的特征,不同的白样本的特征分布是相似的,但是黑样本在特征分布上会表现出很明显的一个聚集性,会有别于白样本。基于这种假设,我们就拿第三步提取出的特征做聚类,并且和一个提前准备好的白样本做特征分布对比,计算分布差异度。这一步需要注意的两个点是:这里我们选取的对比的白样本和我们前面待预测的数据块是等量的,都是1000条数据,第二点我们待预测的GCN模型的参数和对比的白样本的GCN模型的参数应当是一致的。
这种方案在1000条数据上一次计算大概是500ms左右,但实际上还是不能满足实时的需求,只能做成一种拟实时,会有略微的滞后性,但是相比前面的离线的GCN还是可以更加快速的识别异常流量,并且这种小数据量计算本身除了提前需要准备的1000个白样本之外,其他的是不需要再标记的数据的,所以这种对数据的标记量需求也是很小的。
③ 实时的GCN方案流程
我们在拟实时的基础上进行了一些流程的优化,因为上面我们是每1000条数据一起来计算一次,耗时达不到要求。这个耗时我们测了一下,主要的时间是在图结构提取这一步,所以我们就尝试每1000条数据做一次构图,把这部分做成数据预处理阶段,这部分我们不要求实时,然后我们实时计算的部分就是每来一条数据,就通过增量式的构图方式把结点和边添加到刚才已经处理好的图结构上,这样就可以极大的减少构图过程中的时间。然后后面再做特征计算和分布差异度的对比,这样就可以实现了每处理一条数据大概在20-40ms左右,这就可以做到了一个真正的GCN的实时方案。目前这个方案我们已经实验完成,效果还不错,已经在内部的测试和上线中。
5. GCN模型效果——极验自有产品线
到这里我们已经把我们提出的离线的GCN方案和实时的GCN方案介绍完毕,我们这里看下对比的效果。这里我们选取五个结点来呈现效果。图模型的结点选择我们认为可以适量选取一些标志性的结点,比如账号、手机号、还有一些资源性的结点比如IP、UA,我们选取了这样5个结点,和我们现有的规则引擎对比,离线方案可以提升17%的异常识别率,实时的方案差一些,但也可以提升13%,这个效果在不同客户的数据下效果是有些差异的,在部分效果比较好的客户上识别率可以达到20%-30%左右,所以可以说GCN模型的效果跟我们现有的策略引擎模型相比,提升率是非常可观的。
6. 书籍—《深入浅出图神经网络》
这里做一个小小的介绍,这是我们数据团队结合自己在图神经网络领域的探索研究和实践写的一本书籍,可以图神经网络的一本入门级的书籍,感兴趣的小伙伴可以去了解一下。
7. 叠图——自有图建模平台
实际图建模平台已经有很多成熟的产品比如TigerGraph或者neo4j,都是非常优秀的平台,但是我们在使用的过程中会发现这些平台对我们所需要的一些卷积算子操作处理不是特别友好,所以我们也在尝试着构建自己的图建模平台。我们这个平台主要包括六大部分,也是我们实际工作的一个计划和结点,下图中上面四个部分是目前已经完工的部分,比如刚才讲的离线的GCN方案包括基础模型和适应大规模的模型都在工具箱里,用于我们平时离线分析的辅助判断。然后刚才所讲的实时模型就在这个业务组里,目前这部分是正在测试上线。这部分分布式存储和计算目前在实验和研发中,动态构图这个主要是希望将来做一个探索主要是schema、自适应这部分。
03 我们的思考
1. 技术上我们如何做的更成熟
首先我们认为产品的竞争力是其技术比较核心的地方,技术的落地探索往往可以很高的提升产品的质量,所以在技术上如何才能做的更成熟,我们认为模型的效果和性能的提升是最关键的点也是比较有说服力的点。另外一个就是关于模型的解释性,实际上可以看到模型的效果并不比规则的差,但是为什么输出这种结果它没有规则那么直观,就像我们做服务来说很常见的一个问题就是我们把GCN的结果提供给客户,客户会问你们的模型结果为什么会判断这个为异常,需要我们提供一些辅助证明,所以说这个图模型的可解释性后面也是需要我们继续探索的一个很有竞争力的点,这个目前也正在做这部分的探索。目前我们的模型可以用到不同的场景,但是对于不同的场景,模型的结点和边的选择都会有所变化,目前我们的方案是对所有的场景有建模需求的场景做一个分析认识之后根据经验进行结点的选取,但是如何让模型可以自适应的选择最优的结点也是我们后面考虑的一个点,这就是刚才所提到的动态构图那部分。
2. 服务上我们如何做的更成熟
技术最终的目的是为客户提供一个更优质的服务,那么我们的服务上如何做的更完备,就是当我们的模型成熟落地之后,模型的可迁移性就能支持我们结合一些具体的业务去对客户做一些定制化的需求甚至是私有的服务,而对于客户而言,他们需要得就是你这个建模平台功能需要完备,并且操作要便捷。对于我们内部来说我们对于模型、策略引擎还有人工标注这些环节的打通或者闭环的维护才能更好的提升这种服务效率。
3. 思考和探讨总结
根据前面的介绍来说,当前这种图模型和业务数据相结合的这种处理任务存在两个很大的瓶颈,一个就是缺乏算法,一个是缺乏标签,相信这是很多公司在图模型落地时都会遇到的一个问题。
在算力方面由于图建模的数据量一般是比较大的,但是GPU的显存有限,没有办法承载那么多数据,同时对于图计算本身来说就是图数据的这种特点:就是结点都是由边来相连的,它不太像传统的数据结构可以直接划分数据块进行并行运算。图如果要做切割的话一般都会存在这种边结构上的损失,所以图很难做分布式计算,那么我们在实际建模中如何克服这个问题,我们觉得最重要的是要深入理解图模型学习过程的本质,就是我们前面所讲的它实际就是一个Embedding加一个分类任务这样一个组合,那既然图数据本身难以并行计算,那么我们就需要把从GCN这种期望做分类任务转移到做Embedding任务上,后面加一种可以分布式运行的并且分类效果不错的机器学习中常用的分类算法,这种设计是让GCN只学习图的一些结构特征,削弱他对结点的属性特征的这种学习,这样处理之后我们就可以用CPU进行计算,实际上我们认为这就是算力和我们对GCN期望能力的一种权衡或取舍。
然后在标签方面,在我们风控场景中实际最终的目的是精准的识别异常流量,所以输入的数据都是未知的流量,输入的数据没有标签或者是一些不确定的弱标签,要解决这种问题的思路,我们认为就是多读论文,扩展视野,比如自然语言处理或计算机视觉中有一些很优秀的方法或者思想可以利用过来,比如自然语言处理中有那种transformer或attention机制,它都表现的很好,本身attention和GCN都是这种消息传递的机制,它会有一定的相似性,那么我们相信在这类的建模任务它们的解决方案中也可以多借鉴一下,会有一些新的思路。
今天我的分享就到这里,希望这个分享可以给大家带来一些思考或者是每个公司都有自己的业务,也可以大家参考探讨一下。
04 问答环节
Q:关于图结构的这块是如何做到压缩时间的?
A:这个问题实际前面也有讲过,最开始实施GCN的方案,我们是每1000条数据这样先来减少数据量的计算,这其实是我们最开始一个实验只是做一个尝试,看看时间性能能否够满足,后来发现这个耗时在500ms左右,对实时上的要求还是要差一点,然后我们就会分析每一步中,它的具体耗时具体是在哪里,当我们分析出来这500ms里,图结构的提取占整个耗时一个比较大的比重,所以我们就尝试着先对每1000条数据做一个图结构的提取,而这一步我们是不要求实时的,每来1000条数据我们做一个图结构的提取,隔一段时间可以再去更新一次,这个是不要求实时的,我们就把这个时间就相当于转移了,从实时计算阶段转移到了预处理阶段,就可以保证下面的实时计算是满足需求的。
Q:实时的GCN是否需要训练,它是随机的参数吗?
A:我们现在的实时GCN模型是不需要训练的,是给的随机参数,因为基于的假设是对于相同参数来说模型对白样本的分布是相似的,对黑样本是有具体性的,所以无论我们给(哪)一组随机的参数,只要保证跟你待预测的数据参数是一致的即可。
Q:对于GCN识别出来的结果如何评价误杀?
A:如何评价误杀实际就是一个准确率的问题,这个问题相信在很多公司都是一个痛点或者难点吧,就是很难去评价这种准确率。目前一般我们一个模型初步的评价结果比如和我们内部的策略引擎结果做一个对比,如果是比策略引擎多出来的部分我们会进行一个人工的分析,包括我们本身做服务的话,因为我们GCN目前是用的我们自己获取的一些行为数据,但是没有涉及到客户的业务标记,所以有时我们会去和客户沟通,让他们协助去评判下模型的效果,因为毕竟还是客户他们的业务数据更加的多,可以分析的维度就会更加的多。
今天的分享就到这里,谢谢大家。
在文末分享、点赞、在看,给个3连击呗~
分享嘉宾:
声明:本文来自DataFunTalk,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。