6月26日,亚马逊云科技Community Day在上海举办。亚马逊云科技首席开发者布道师、资深数据科学家、资深应用科学家以及亚马逊云科技Machine Learning Hero悉数到场,针对AI开源的技术趋势及落地实践项目进行分享和讨论。
上期,我们带来了亚马逊云科技首席开发者布道师王宇博关于构建开源机器学习生态系统的精彩分享。本期,我们带来了亚马逊上海人工智能研究院资深应用科学家王敏捷对亚马逊云科技在深度学习算法运用到图数据领域的探索和研究话题的分享。在亚马逊云开发者公众号后续的内容中也会带来更多的嘉宾分享,感兴趣的伙伴们可以持续关注!
想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注在上海、北京、深圳三地举办的2021亚马逊云科技中国峰会!点击图片报名吧~上海站峰会已经圆满落幕,更多精彩内容,敬请期待北京、深圳分会吧!
王敏捷:深图在人工智能中的探索和研究
说到深图在人工智能中的探索和研究,首先要明确一个概念——什么是人工智能?王敏捷认为,要实现真正的人工智能有两点非常重要,第一是要理解为什么现在的人工智能算法会犯错,第二是要去探讨人工智能算法与人脑之间结构化的一致性。
“研表究明,汉字序顺并不定一影阅响读。”比如当你看完这句话后,才发这现里的字全是都乱的。人在理解自然语言的时候,并非通过线性的方式去理解,而是成块的去理解文本。而很多模型,是通过线性的方式理解文本。
从图像识别的角度,假如用算法去识别一张印有一只狗坐在摩托车上的图片,只能识别到画面本身是由狗和摩托车构成的,无法获得更多结构化的信息,而人脑是可以感受到画面的趣味性的。
生活中的很多数据以图结构(Graph)的形式存在,小到微观分子,大到生产生活,在图上完成机器学习任务是极为常见的需求。
近年来,如何把深度学习算法运用到图数据成为开发者们关注的重点。因此也诞生了图神经网络Graph Neural Networks (GNNs)。所谓图神经网络是指用于学习点、边或者整张图的向量表示的一类深度神经网络,其核心思想是消息传递。比如,想判断一个人喜欢哪只NBA球队,可以通过社交网络上了解他的朋友喜欢哪只球队,如果他80%的朋友都喜欢,那么他大概率也会喜欢这只球队。对某个点进行建模的时候,通过其他相邻点去收集信息,这个过程就是信息传递。
把所有相邻节点的信息收集到一起做一个累和,获得了一个加权累和的消息之后,再通过更新函数对所在节点已经有的信息做一个更新。这就是图神经网络最基本的数学建模。
图神经网络在不同领域都有着非常广泛的应用。
分子医药:首先是分子性质预测。其输入数据为分子结构图。之后通过消息传递建模,利用图神经网络获取向量表征,输入到下游的分类器,可以判断化学药品的性质、毒性等。其次是药分子生成,先构建一个编码模型,然后通过图神经网络将其变成向量表示,同时加入一些指导,生成能够符合我们需要性质的分子。第三,是药物重定位,在这方面,亚马逊构建了一个药物知识图谱DRKG,用于表示药物,疾病蛋白,化合物等对象之间的关系。使用图神经网络对该数据进行建模后,则可以预测药物和疾病蛋白节点之间的连接关系,从而预测治疗新型疾病的潜在药物。目前,通过图神经网络建模所推荐的41种药物当中,有11种已经被应用于临床。
知识图谱:在知识图谱中可以使用图神经网络完成很多下游任务。如知识补全、任务节点分类等。
推荐系统:主流的推荐系统主要基于用户和商品之间的交互数据。假如A用户购买某个商品,系统留下购买记录,通过数据分析,如果发现B用户的购买记录与A用户相似,那么,大概率A用户购买的商品,B用户也会感兴趣。目前,基于图神经网络推荐系统已实现商业落地。
计算机视觉:输入场景图,通过图神经网络建模,在结尾时加入图片生成器,通过这张场景图可以反向去生成更好的图片。
自然语言处理:在自然语言处理中图的结构也无处不在。比如TreeLSTM,句子本身不是线性结构,它有语法结构,利用句子语法树结构进行训练,得到更好的分析模型。此外,现在比较火热的是“变形金刚”(Transformer),也是深图的变种。
图神经网络不管是在学界还是业界,都有了一些非常好的落地方案。但也有很多问题亟待解决。如规模越来越大,如何去建模?如何把非结构化数据中的结构化数据抽取处理?这就需要好的工具去开发模型。
使用传统深度学习框架(TensorFlow/Pytorch/MXNet等)编写图神经网络并非易事。消息传递计算是一种细粒度计算,而张量编程接口则需要定义粗粒度计算,粗粒度和细粒度的差异,使得图神经网络的书写非常困难。亚马逊针对这一挑战开发了作为桥梁的DGL。王敏捷从编程接口设计、底层系统优化、开源社区建设三个方向介绍了DGL。
首先是编程接口设计。用图的概念做编程,核心理念是以图为本。王敏捷认为,开发者首先应了解,图是图神经网络的“一等公民”。所谓“一等公民”是指所有DGL的函数和NN模块都可以接受和返回图对象,其中也包括核心的消息传递API。
其次是底层系统的设计优化。其他的图神经网络框架(比如PyTorch Geometric, PYG)往往使用gather/scatter原语来支持消息传递计算,计算过程中产生大量冗余的消息对象,占用大量内存带宽。而DGL使用高效稀疏算子加速图神经网络,比PYG快2~64倍,并能节省6.3倍的内存,且对巨图非常友好。
最后,王敏捷就开源社区建设方面的经验进行了分享。他主要分享了以下几点经验。
第一,代码并不是唯一重要的东西,文档在开源项目中也占有半壁江山。亚马逊设计了不同层级的文档。针对新手,有120分钟上手DGL,只需下载运行,便可手把手学会如何训练。对于进阶用户,有用户指南,其中涵盖设计概念,有DGL接口手册,通过阶梯式的方式,让用户从新手成长为专家。
第二,开源社区需要有丰富的GNN模型样例。社区发展的非常快,反应速度要想跟上社区发展,就需要GNN有很多不同的应用场景,通过模型把它们涵盖在一起。目前DGL大概有70多个经典的GNN模型样例,涵盖各个领域和研究方向。
第三,需要注重社区交互。亚马逊设置了很多社区活动,组织开发者们相互交流,如定期举办GNN用户群的分享会,邀请学界和业界前沿的学者或者开发人员分享GNN领域的成果等。另外,用户论坛、Slack、微信群,也为大家提供不同渠道的沟通平台。