为什么说Transformer就是图神经网络?
作者 | Chaitanya Joshi
译者 | Kolen
出品 | AI科技大本营(ID:rgznai100)
前言
有些工程师朋友经常问我这样一个问题:“图深度学习听起来很棒,但是现在是否有非常成功的商业案例?是否已经在实际应用中部署?”
除了那些显而易见的案例,比如Pinterest、阿里巴巴和Twitter公司部署的推荐系统,一个稍有细微差别的成功案例就是Transformer架构的实现,它在NLP行业引起了轩然大波。
通过这篇文章,我想建立起图神经网络(GNNs)和Transformers之间的联系。具体来说,我将首先介绍NLP和GNN领域中模型架构的基本原理,然后使用公式和图表来阐述两者之间的联系,最后将讨论如何让两者协同运作来推动这方面的研究进展。
我们先来谈谈模型架构的目的——表示学习。
NLP的表示学习
从一个较高的层次来分析,几乎所有的神经网络结构都将输入数据表示为向量(vectors)或者嵌入(embeddings)的形式,从而对数据中有用的统计和语义信息进行编码。这些潜在或隐藏的表示方法可以用于执行一些有用的任务,例如对图像进行分类或翻译句子。其中,神经网络通过接收反馈(通常是通过误差(error)/损失(loss)函数)来学习如何构建越来越好的表示方法。
在自然语言处理(NLP)中,按照传统方式,人们习惯将递归神经网络(RNNs)以照序列的方式(即一个时间步对应一个单词)来构建句子中每个单词的表示。直观地说,我们可以把RNN层想象成一个传送带,上面的字从左到右进行自回归处理。最后,我们得到句子中每个单词的一个隐藏特征,并将其传递到下一个RNN层或者用于我们选择的NLP任务。
Transformers最初是用于机器翻译领域,但是现在已经逐渐取代了主流NLP中的RNNs。该架构采用了一种全新的表示学习方法:完全抛弃了递归的方法,Transformers使用注意力机制构建每个词的特征,从而找出句子中所有其他单词对上述单词的重要性。理解了这一关键点我们就能明白,单词的更新特征仅仅是所有单词特征的线性变换之和,这些特征是根据它们的重要性进行加权。
早在2017年,这个想法听起来就非常激进,因为NLP界已经习惯了使用RNN处理文本的序列(每次一个单词)的风格。这篇论文的标题可能是火上浇油!
Yannic Kilcher为此做了一个出色的视频概述。
解析Transformer
让我们通过将上一节内容转述成数学符号和向量的语言来加深对这个架构的认识。如下所示,我们将句子中第i个词的隐藏特征h从
层更新到
层:
其中,表示句子中的词汇集,而
是可以学习到的线性权重(分别表示注意力计算中的Query, Key 和 Value)。句子中的每个单词并行执行注意力机制,从而可以一次性获得它们已更新的特征——这是Transformer相对RNNs的另一个加分点,它使得模型能够逐字更新特征。
我们可以通过下面这张流程图来更好地理解注意力机制:
输入词汇特征和句子中其他词汇集
,我们使用点积运算来计算出每对
的注意力权重
,接着对所有的进行softmax运算。最后,把所有的
相对应的权重
累加得到单词i更新后的词汇特征
。句子中的每个单词都会并行地经历相同的流程来更新其特征。
多头注意力机制
事实证明,要让这种点积注意力机制起作用是很难的——如果随机初始化处理得不好会使得整个学习过程失去稳定性。我们可以通过并行执行多个注意力“头”并将结果连接起来(现在每个注意力头都有单独的可学习权重)来克服这个问题:
其中,是第k个注意力头的可学习的权重,而
是一个向下的投影,用以匹配跨层的
和
的尺寸。
通过观察上一层中隐藏特征的不同的变换过程以及方面,多头机制允许注意力机制从本质上“规避风险”。关于这点,我们将在后面详细讨论。
尺度问题和前向传播子层
促使形成最终形态的Transformer结构的关键问题是,注意机制之后的词的特征可能在不同的尺度或重要性上:(1)这可能是由于某些词在将其他词的特征累加时具有非常集中或非常分散的注意力权重。(2)在单个特征/向量输入级别,跨多个注意力头(每个可能会以不同的比例输出值)进行级联可以导致最终向量
的输入具有一个大范围的值。遵循传统的机器学习思路,在上述流程中增加一个归一化层似乎是一个合理的选择。
Transformers使用LayerNorm克服了问题(2),LayerNorm在特征层级上进行归一化并学习一种仿射变换。此外,通过求特征维度的平方根来缩放点积注意力有助于抵消问题(1)。
最后,作者提出了控制尺度问题的另一个“技巧”:具有特殊结构的考虑位置的双层MLP。在多头注意力之后,他们通过一个可学习的权重将投影到一个更高的维度,在该维度中,
经过ReLU非线性变换,然后投影回其原始维度,然后再进行另一个归一化操作:
说实话,我不确定超参数化前馈子层背后的确切理由是什么,似乎也没有人对此提出疑问!我认为LayerNorm和缩放的点积不能完全解决突出的问题,因此大型MLP是一种可以相互独立地重新缩放特征向量的手段。
Transformer层的最终形态如下所示:
Transformer架构也非常适合非常深的网络,使NLP界能够在模型参数和扩展数据这两方面进行延伸。每个多头注意力子层和前馈子层的输入和输出之间的残差连接是堆叠Transformer层的关键(但为了清楚起见,在上图中省略了)。
GNNs构建图的表示
我们暂时不讨论NLP。
图神经网络(GNNs)或图卷积网络(GCNs)在图数据中建立节点和边的表示。它们是通过邻域聚合(或消息传递)来实现的,在邻域聚合中,每个节点从其邻域收集特征,以更新其周围的局部图结构表示。通过堆叠多个GNN层使得该模型可以将每个节点的特征传播到整个图中,从其邻居传播到邻居的邻居,依此类推。
以这个表情符号社交网络为例:由GNN产生的节点特征可用于预测性任务,例如识别最有影响力的成员或提出潜在的联系。
在他们最基本的形式中,GNNs通过以下方法来更新节点i在层的隐藏层特征h(例如,????),也就是先将节点自身的特征
和每个邻居节点
特征
的聚合相累加,然后再整体做一个非线性变换,如下:
其中是GNN层的可学习的权重矩阵,而
是一个非线性变换,例如ReLU。在上述例子中,N (????) ={ ????, ????, ????, ???? }。
邻域节点上的求和可以被其他输入大小不变的聚合函数代替,例如简单的 均值/最大值函数或其他更强大的函数(如通过注意机制的加权和)。
这听起来熟悉吗?
也许这样一条流程可以帮助建立连接:
如果我们要执行多个并行的邻域聚合头,并且用注意力机制(即加权和)替换领域 上的求和 ,我们将获得图注意力网络(GAT)。加上归一化和前馈MLP,瞧,我们就有了Graph Transformer!
句子就是由词全连接而成的图
为了使连接更加清晰,可以将一个句子看作一个完全连接的图,其中每个单词都连接到其他每个单词。现在,我们可以使用GNN来为图(句子)中的每个节点(单词)构建特征,然后我们可以使用它来执行NLP任务。
广义上来讲,这就是Transformers正在做的事情:Transformers是以多头注意力作为邻聚合函数的GNNs。标准GNNs从其局部邻域节点聚合特征,而NLP的Transformers将整个句子视为局部邻域,在每个层聚合来自每个单词
的特征。
重要的是,各种特定于问题的技巧(如位置编码、因果/掩码聚合、学习率表和大量的预训练)对于Transformers的成功至关重要,但在GNN界中却很少出现。同时,从GNN的角度看Transformers可以启发我们摆脱模型结构中的许多花哨的玩意。
可以从Transformers和GNN中学到什么?
现在我们已经在Transformers和GNN之间建立了联系,接着让我们来探讨一些新的问题...
8.1 全连接图是NLP的最佳输入格式吗?
在统计NLP和ML之前,Noam Chomsky等语言学家致力于发展语言结构的最新理论,如语法树/图。Tree LSTMs已经尝试过这一点,但是也许Transformers/GNNs是可以让语言理论和统计NLP的领域结合得更加紧密的更好的架构?
8.2 如何学习到长期依赖?
完全连通图使得学习词与词之间的非常长期的依赖关系变得非常困难,这是完全连通图的另一个问题。这仅仅是因为图中的边数与节点数成二次平方关系,即在n个单词的句子中,Transformer/GNN将在n^2对单词上进行计算。如果n很大,那将会是一个非常棘手的问题。
NLP界对长序列和依赖性问题的看法很有意思:例如,使注意力机制在输入大小方面稀疏或自适应,在每一层中添加递归或压缩,以及使用对局部性敏感的哈希法进行有效的注意,这些都是优化Transformers有希望的新想法。
有趣的是,还可以看到一些GNN界的想法被混入其中,例如,用于句子图稀疏化的二进制分区似乎是另一种令人兴奋的方法。
8.3 Transformers在学习神经网络的句法吗?
NLP界有几篇关于Transformers可能学到什么的有趣论文。其基本前提是,对句子中的所有词对使用注意力机制(目的是确定哪些词对最有趣),可以让Transformers学习特定任务句法之类的东西。
多头注意力中的不同头也可能“关注”不同的句法属性。
从图的角度来看,通过在完全图上使用GNN,我们能否从GNN在每一层执行邻域聚合的方法中恢复最重要的边线及其可能带来的影响?我还不太相信这种观点。
8.4 为什么要用多头注意力?为什么要用注意力机制?
我更赞同多头机制的优化观点——拥有多个注意力可以改进学习,克服不好的随机初始化。例如,这些论文表明,Transformers头可以在训练后“修剪”或“删除”,并且不会产生重大的性能影响。
多头邻聚合机制在GNNs中也被证明是有效的,例如在GAT使用相同的多头注意力,MoNet使用多个高斯核来聚合特征。虽然多头技巧是为了稳定注意力机制而发明的,但它能否成为提炼出额外模型性能的标准?
相反,具有简单聚合函数(如sum或max)的GNNs不需要多个聚合头来维持稳定的训练。如果我们不需要计算句子中每个词对之间的成对兼容性,对Transformers来说不是很好吗?
Transformers能从抛弃注意力中获益吗?Yann Dauphin和合作者最近的工作提出了另一种ConvNet架构。Transformers也可能最终会做一些类似于ConvNets的事情。
8.5 为什么Transformers这么难训练?
阅读新的Transformer论文让我觉得,在确定最佳学习率表、预热策略和衰减设置时,训练这些模型需要一些类似于黑魔法的东西。这可能仅仅是因为模型太大,而且所研究的NLP任务非常具有挑战性。
但是最近的结果表明,这也可能是由于结构中归一化和残差连接的特定组合导致的。
在这一点上我很在意,但是也让我感到怀疑:我们真的需要代价昂贵的成对的多头注意力结构,超参数化的MLP子层以及复杂的学习计划吗?
我们真的需要具有大量碳足迹的(译者注:有人提出现在训练一个模型相当于5辆汽车一天的排碳量)大规模模型吗?
具有良好归纳偏差的架构难道不容易训练吗?
原文链接:
https://dwz.cn/eE9kZK6q
(本文由AI科技大本营编译,转载请联系微信1092722531)
【end】
◆
精彩推荐
◆
在这次疫情防控中,无感人体测温系统发挥了怎样的作用?它的技术原理是什么?无感人体测温系统的应用场景中有哪些关键技术与落地困难?高精准的无感人体测温系统的核心技术武器是什么?对于开发者们来说,大家应该了解哪些技术?
本周四晚八点,澎思科技智能安防行业解决方案副总监带来的直播《疫情防控天网:云端边下的全栈AI技术与应用》。扫描二维码或者点击阅读原文即刻报名。
推荐阅读
机器会成为神吗?
6个步骤,告诉你如何用树莓派和机器学习DIY一个车牌识别器!(附详细分析)
微信回应钉钉健康码无法访问;谷歌取消年度I/O开发者大会;微软公布Visual Studio最新路线图
什么是CD管道?一文告诉你如何借助Kubernetes、Ansible和Jenkins创建CD管道!
智能合约初探:概念与演变
血亏 1.5 亿元!微盟耗时 145 个小时弥补删库
你点的每个“在看”,我都认真当成了AI
相关文章:

IIS日志清理CMD版,VBS版,JS版,WSH版
IIS日志清理之IIS日志生成系统(CreateIISLog.vbs) 创建文件夹Function CreateFolder(Folder)On Error Resume NextSet FSO CreateObject("Scripting.FileSystemObject")FSO.CreateFolder(Folder)If Err>0 ThenErr.ClearCreateFolder FalseElseCreateFolder Tr…

make执行过程
make 的执行过程如下: 1.依次读取变量“MAKEFILES”定义的 makefile 文件列表 2.读取工作目录下的 makefile文件(根据命名的查找顺序“GNUmakefile”, “makefile”,“Makefile”,首先找到那个就读取那个) …
C语言不要重复包含.h头文件和.c文件
1.不要重复包含头文件 --以上出自《C语言程序设计:现代方法(第2版)》 f3.h //#ifndef AE_OK #define AE_OK 0 typedef int ngx_int_t; //#endiff2.h #include "f3.h"f1.h #include "f3.h" test.c #include <stdio.h>#include &…
论推荐系统与精细化运营
作者丨gongyouliu来源 | 大数据与人工智能(ID: ai-big-data)随着大数据与人工智能(AI)技术的发展与成熟,国家政策层面对大数据与人工智能技术、创新、创业层面的支持,企业越来越意识到数据和AI技术的价值,并逐步认可数…

服务器产品选型与性价比图解
转载于:https://blog.51cto.com/lijichao/229471

解决jsp引用其他项目时出现的 cannot be resolved to a type错误
JSP页面引用其他项目的时候,在jsp页面上写如下代码: <%List<CandleEntity> candleEntities;CandleOperate candleOperate new CandleOperate(DataBaseEntity.getInstance()); %>虽然也添加了引用 <%page import"com.sjzh.xtrader.l…

ATT格式汇编语言
1.编译与链接 方法一:使用as #as -o test.o test.s #ld -o test test.o 方法二:使用gcc #gcc -o test test.s gnu连接器查找_start标签以确定程序的开始,但gcc查找main标签,所以使用gcc要把 _start改为main 2.调试 #as -gsta…

取得Repeater内部控件命令名与命令参数
前台: <table border"0"cellpadding"0"cellspacing"1"class"meet_tbl"><tr class"meet_title bold"><td>会议名称</td><td>制定日期</td><td>删除</td></tr…
Python在计算内存时值得注意的几个问题
作者 | 豌豆花下猫来源 | python猫(ID:python_cat)我之前的一篇文章,带大家揭晓了 Python 在给内置对象分配内存时的 5 个奇怪而有趣的小秘密。文中使用了sys.getsizeof()来计算内存,但是用这个方法计算时,可能会出现意…

HDU 1816, POJ 2723 Get Luffy Out(2-sat)
HDU 1816, POJ 2723 Get Luffy Out 题目链接 题意:N串钥匙。每串2把,仅仅能选一把。然后有n个大门,每一个门有两个锁,开了一个就能通过,问选一些钥匙,最多能通过多少个门 思路:二分通…
AI战“疫“之路:揭秘高精准无感测温系统的全栈AI 技术
在这个全民抗疫的特殊时期,今年的春节返潮来得比往年迟了许多。如今不少企业结束了远程办公,开始陆续复工,一时间,无论是重点防控的机场、火车站,还是学校、企业、社区等密集型场所,都安排了密集的防疫驻扎…

关于text段、data段和bss段
根据APUE,程序分为下面的段:.text, data (initialized), bss, stack, heap。 data/bss/text: text段在内存中被映射为只读,但.data和.bss是可写的。 bss是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局…

091023 T GIX4 项目中的 智能部署 和 智能客户端
先说一下ClickOnce的使用方法:先给一个要发布的工程设置安全和签名。然后发布到iis中。当用户访问该iis目录下的.application文件时,就会自动安装整个应用程序。 再说一下我们目前的应用程序。相对还是比较复杂的,分为框架部分和特定应用程序部分。其中的…

STL学习系列九:Map和multimap容器
1.map/multimap的简介 map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排序规则插入,所以不能指定插入位置。map的具体…
人工智能改变未来教育的5大方式!
作者 | Zohaib翻译 | 天道酬勤,编辑 | Carol出品 | AI科技大本营(ID:rgznai100)科技正在改变着我们的生活、工作和娱乐方式,教育领域也不例外。 人工智能将像大多数其他领域一样全面改变教育领域,这取决于当…

程序在内存中运行的奥秘
简介当丰富多彩的应用程序在计算机上运行,为你每天的工作和生活带来便利时,你是否知道它们是如何在计算机中工作呢?本文用形象的图表与生动的解释,揭示了程序在计算机中运行的奥秘。 内存管理是操作系统的核心功能,无论…

微软虚拟化解决方案课件
微软虚拟化解决方案课件转载于:https://blog.51cto.com/yangzhiguo/231577

【Python 第8课】while
2019独角兽企业重金招聘Python工程师标准>>> 先介绍一个新东西:注释。python里,以“#”开头的文字都不会被认为是可执行的代码。 print “hello world”和 print "hello world" #输出一行字是同样的效果。但后者可以帮助开发者更…
2019年度CSDN博客之星TOP10榜单揭晓,你上榜了吗?
培根说,『读书造成充实的人,会议造成未能觉悟的人,写作造成正确的人』。在短信短视频快速迭代的快时代,更深度的思考、更正确的实践,更成体系的写作与分享,尤显可贵。这里,每一篇博文都是开发者…

objdump查看目标文件构成
objdump objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具 反汇编 #objdump -d cpuid2 对于其中的反汇编代码 左边是机器指令的字节,右边是反汇编结果。显然,所有的符号都被替换成地址了, 注意没有加$的数表示内存地址&#…

jQuery--AJAX传递xml
程序代码$.ajax({ url:Accept.jsp, type:post, //数据发送方式 dataType: xml, //注意这里是xml哦 ,不是html ( html比较简单,所以我拿xml做下例子,解释下 )data:text$("#name").val()&datenewDate(), //要传递的数据 timeout: 2000, …

ActionDescriptor 的认识
ActionDescriptor的作用是对Action方法的元数据的描述,通过ActionDescriptor我们可以获取到action方法的相关的名称,所属控制器,方法的参数列表,应用到方法上的特性以及一些筛选器;ActionDescriptor是由ControllerDescriptor类中的FindAction方法进行创建; ActionDescriptor类也…

readelf和ldd分析elf文件
1. elf 文件格式 linux系统中,gcc编译器编译出的object文件、可执行文件都属于elf文件。 elf文件由三个部分组成:elf header、program headers|section headers、sections|program segments。 如果是executable文件,则section部分是不需要的…
号称3个月发布最强量子计算机,卖口罩的霍尼韦尔凭什么?
作者 | Just出品 | AI科技大本营新冠疫情的发生,霍尼韦尔这家口罩品牌引入众人眼帘。但实际上,口罩业务只是这家企业的一小块副业,它能做的业务十分多元。3月4日,霍尼韦尔宣布在量子计算领域取得突破,将提升量子计算机…

一位老工程师前辈的忠告
诸位,咱当工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱…

一站式学习Wireshark
https://community.emc.com/message/818739#818739 转载于:https://blog.51cto.com/jackprivate/1725190

objdump与readelf
objdump和readelf都可以用来查看二进制文件的一些内部信息. 区别在于objdump 借助BFD而更加通用一些, 可以应付不同文件格式, readelf则并不借助BFD, 而是直接读取ELF格式文件的信息, 按readelf手册页上所说, 得到的信息也略细致一些. 几个功能对比. 1. 反汇编代码 查看源代…

接口学习笔记(2009.11.24)
了解接口,主要是为了一道经典面试题:接口与抽象类的区别,对接口的理解却很少,现在学习一下。 接口只包含方法、属性、事件或索引器的签名。成员的实现是在实现接口的类或结构中完成的。 Interfacenamespace study1124{ interfa…
“一网打尽”Deepfake等换脸图像,微软提出升级版鉴别技术Face X-Ray
作者 | Just出品 | AI科技大本营(ID:rgznai100)Deepfake换脸图像的泛滥给人类社会带来了巨大的挑战。虽然研究者们为检测换脸图片提出了多种AI鉴别算法,但随着换脸算法的不断改造升级,鉴别算法很难跟上换脸算法的变化。微软亚洲研…

双边滤波算法的简易实现bilateralFilter
没怎么看过双边滤波的具体思路,动手写一写,看看能不能突破一下。 最后,感觉算法还是要分开 水平 与 垂直 方向进行分别处理,才能把速度提上去。 没耐性写下去了,发上来,给大伙做个参考好了。 先上几张效果图…