目录
三、GNN网络结构
摘要
本周,我研读了《Longformer: The Long-Document Transformer》这篇论文,它针对长文本处理领域中的一个关键挑战——长距离依赖和高时空复杂度问题提出了解决方案。传统的 Transformer 模型在处理长文本时面临效率低下的问题,而 Longformer 通过结合局部自注意力和全局自注意力(稀疏注意力)机制,显著提升了处理长文本的能力。这种创新的注意力机制不仅提高了模型的处理速度,还扩大了其处理文本长度的范围,能够高效处理数万词的文本。我还对图神经网络(GNN)的基本概念和应用进行了学习。GNN 引人注目的地方在于其处理图结构数据的能力,这使其在捕捉节点间复杂关系方面表现出色。
ABSTRACT
This week, I read a paper titled "Longformer: The Long-Document Transformer" , which proposed a solution to a key challenge in the field of long-text processing - the problem of long-range dependencies and high spatiotemporal complexity. The traditional Transformer models, which face inefficiencies when dealing with long texts, have been significantly improved by the Longformer through the integration of local and global self-attention mechanisms (sparse attention). This innovative attention mechanism not only enhances the processing speed of the model but also expands the range of text lengths it can handle, effectively processing texts of tens of thousands of words. Additionally, a study was conducted on the basic concepts and applications of Graph Neural Networks (GNN). The notable aspect of GNNs lies in their ability to process graph-structured data, which enables them to excel in capturing complex relationships between nodes.
一、文献阅读
1、题目
题目:Longformer: The Long-Document Transformer
文章链接:https://arxiv.org/abs/2004.05150
2、摘要
尽管Self-Attention可以建模长距离文本,但由于时空复杂度都为平方级,从而它无法一次处理较长的文本。BERT的处理方法是,将文本截断为512的长度,如此一来,虽然模型可以分段处理,但数据的预处理也是相当麻烦的。文章采用局部自注意力和全局自注意力结合的方式(或简称为稀疏注意力),同时为其进行了CUDA优化,从而使得模型最大能够容纳长度上万的文本,同时还能实现更好的结果。
Although Self-Attention can model long-distance relationships in text, its time and space complexity are both quadratic. Therefore, it cannot handle longer texts in a single pass. BERT addresses this issue by truncating the text to a length of 512. While this allows the model to process segments, it introduces complexity in data preprocessing. The article proposes a combination of local self-attention and global self-attention (referred to as sparse attention), optimized with CUDA. This approach enables the model to accommodate texts of lengths up to tens of thousands, providing improved results.
3、创新点
1、滑动窗口注意力(Sliding Window Attention)
左图为传统的Transformer中的Self-attention,对序列中每一对token都计算注意力,所以注意力占用的储量随序列长度平方增长。
右图b就是本文提出每个Longformer层只计算图中绿色区域内的self-attention。
传统Transformer中的自注意力是这样计算的:,其中
,L表示序列长度,d表示词向量长度。
的计算就是Q中的某一行依次和K中的所有行求点积,那么Q、K各有L行的情况下,需要进行
次点积计算,从而得到
。一个Transformer Block包含若干次Self-attention的计算,所以注意力的空间复杂度就是
。
Longformer的不通知去就在于,对于Q中的某一行,如第t行,它只计算其与K中 这个窗口内的w行的点积。那么对于整个sliding window attention,就只需要进行w*L次点积计算。尽管不同Longformer Block可以有不同的w值,但w通常远小于L且取值与L无关,所以Sliding Window Attention的空间复杂度就是
。
这种滑动窗口和CNN的卷积核有异曲同工之妙,因此文章又借用感受野的概念,对特征提取的范围进行了衡量。一般地,如果窗长为 w ,序列长度为 L ,则感受野为 O(L*w)(图(b)中绿色的区域)。虽然对于提取局部文本特征来说感受野大小并不是那么重要,但是相比于Transformer中的 还是太小了,不能很好地捕捉稍远距离的上下文之间的关联。为了扩大感受野,作者又进一步提出了Dilated Sliding Windows。
作者又把上述的连续窗口稀疏化,分割成一个个子窗口,每个子窗口之间距离为d,称作gap(上图c中d=2)。这样可以在不增加时空复杂度的同时,将感受野进一步扩大到O(l*w*d)。但是这种做法存在一个问题,如果d对于所有注意力头都是一个常值,则gap(图中绿色块之间的空白)对应的token-pair将永远不会被计算注意力。作者经过实验印证了这一点:对于每个注意力头采取不同的dilation设定,可以达到更好的效果。一般来说,较大的dilation可以捕捉较长距离的文本依赖,而较小的dilation或无dilation可以更好地捕捉短距离的局部特征,小dilation和大dilation可以形成互补。
Global Attention
仅凭滑动窗口注意力只能捕捉局部文本特征,所以Longformer还包含一项task-specific的全局注意力作为补充:对序列中的特定token,计算它们与整个序列之间的注意力。例如在文本分类任务中,计算token和其它所有token之间的注意力作为global attention;而对于QA任务,计算Question中每个token和其它所有token间的注意力。
Global Attention涉及的task specific token的数量通常是很少的([CLS]只占一个token,Question通常也只有十几个token,远小于序列总长度),而且不会随着序列长度而变化,因此注意力计算的空间复杂度仍然是O(n)。
2、基于TVM实现了稀疏自注意力的CUDA优化
上图展现了传统Transformer中注意力计算的内存占用随着输入序列长度的增大呈平方上升(右图紫色),而Longformer在长序列处理中具有显著存储优势(右图红色)的同时,处理速度的下降微乎其微(左图红色)。
图中作为baseline的Full self-attention就是传统Transformer 中的自注意力;Longformer采用了Naive Pytorch和TVM两种实现方式。Naive Pytorch和Longformer的区别在于:Longformer的实现采用TVM技术将计算自注意力的代码编译为CUDA核,将处理速度提高了6倍左右(左图青色和红色)。
4、文献解读
一、Introduction
众所周知,Transformer 的 Self-Attention 有一大优点一大缺点:优点是它能在理论上建模任意长的文本,缺点是实践中过长的文本会导致内存爆炸。这是因为,自注意力的时空复杂度都是平方级的,文本越长,空间消耗就显著更大,所以在实际使用的时候,通常把句子长度截短到512,然后分段送入模型。这种方法虽然可以在一定程度上解决内存不足的问题,但是:它回避了Self-Attention的固有缺陷,只是一种暂缓之计;这种方法非常麻烦,需要预处理数据集;很多任务都包含大量长文本,实际需要要求我们能够一次性处理它们。基于以上现状和自注意力的固有缺陷,本文提出结合局部自注意力和全局自注意力,在提高效率的同时又不失效果。和之前的许多工作相比,本文没有在具体技术上有太大创新,但是本文首次将这种稀疏自注意力应用到了三种包含长文本的任务上:问答、共指消解和文档分类,并证明了其有效性。
二、实验过程
1、数据集
text8:text8 包含 100M 处理过的维基百科字符,这些字符是通过降低文本大小写并删除除26个字母a到z和空格
enwik8:数据集 enwik8 包含 100M 字节的未处理维基百科文本
2、评价指标
评价两种不同的模型在两个数据集上的表现如何
3、实验结果
在小的模型上,long former比其他模型都要好。这也证明了这个模型的有效性。
在大的模型上,比18层的transformerxl要好,跟第二个和第三个齐平,不如第四、五两个。但作者说明,这两个模型并不适用于pretrain-finetune的模式。
text8的消融实验:
实验设置:在 text8 任务中,使用小模型训练150K步。
结论1: 由底层至高层递增窗口大小,可提升性能;递减则反而性能降低。
结论2: 有跳跃窗口的效果比没有跳跃窗口的效果要好。
WikiHop的消融实验:
长文本表现明显高于roberta
可以看出没有线性映射的效果明显下降
没有全局注意力效果也是明显下降
当用RoBERTa-base(seqlen: 512, attention n*n)的准确率比较低,也说明效果的提升不是来自于额外的预训练,而是模型结构的改进。
三、结论
本文提出了一种综合的稀疏自注意力模型——LongFormer,利用局部自注意力和全局自注意力在大幅降低空间复杂度的情况下提高模型效果。LongFormer可以直接吞进长文本,而不需要像BERT类模型一样对其强行截短,这就有利于那些需要建模长距离语义的任务。在语言模型、问答、共指消解和文档分类任务上,LongFormer展现出了它强壮的一面,也为稀疏自注意力的研究带来新的可能性,我们期待它能在更多任务上取得好的表现。
二、GNN
一、什么是GNN
图(Graph)
在讨论GNN之前,我们先来回忆一下什么是图。在计算机科学中,图是由节点和边两部分组成的一种数据结构。图G可以通过节点集合V和它包含的边E来进行描述。如下图所示:
GNN
GNN全称----图神经网络,它是一种直接作用于图结构上的神经网络。我们可以把图中的每一个节点V当作个体对象,而每一条边E当作个体与个体间的某种联系,所有节点组成的关系网就是最后的图U。
这里的V, E , U都可以编码成一个特征向量,所以实际上GNN还是做的是提取特征的工作而已。GNN的一个典型应用是节点分类,我们希望利用GNN提取出每个节点V的特征向量,来预测每个节点的标签。同样的,也可以通过节点与节点间的特征,来预测出对应边E的标签。当然,也可以利用所以节点提取出的特征,来预测整个图V 的标签。 如下图:
与传统CNN、RNN的区别
1、节点
CNN和RNN等都需要节点的特征按照一定的顺序进行排列,但对于图结构,并没有天然的顺序。所以,GNN采用在每个节点上分别传播(propagate)的方式进行学习,由此忽略了节点的顺序,相当于GNN的输出会随着输入的不同而不同。
2、边(图结构的边表示节点之间的依存关系)
传统的神经网络不是显式地表达中这种依存关系,而是通过不同节点特征来间接地表达节点之间的关系,这些依赖信息只是作为节点的特征。GNN 可以通过图形结构进行传播,而不是将其作为节点特征的一部分,通过邻居节点的加权求和来更新节点的隐藏状态
3、推理
推理是高级人工智能的一个非常重要的研究课题,人脑中的推理过程几乎都是基于从日常经验中提取的图形。标准神经网络已经显示出通过学习数据分布来生成合成图像和文档的能力,同时它们仍然无法从大型实验数据中学习推理图。然而,GNN 探索从场景图片和故事文档等非结构性数据生成图形,这可以成为进一步高级 AI 的强大神经模型。
二、GNN原理
1、邻接矩阵
邻接矩阵简单来说就是:比如有n个顶点,那么这个邻接矩阵的大小就是n*n的一个矩阵,然后矩阵中只有两种数字:一个是0,一个是1,如果说顶点1和顶点2,顶点6有连接,那么在矩阵中相应的位置上的值就是1,其它位置就是0。
如下图所示:
图中2-1这一节点,它与8个顶点有关联,那么在2-1这一行,总共有8个位置表蓝,其它位置都是白色,就是这个意思。
有一句话,包含这几个单词:Graphs are all around us。可以用下面的方式表示成一个图。
首先进行建模
就和下面的图2a一样,每个单词表示一个顶点,相邻的两个单词之间会有一条边相连
用数字表达一个图:
(1)每一个单词可以用一个向量embedding来编码,所有单词组成一个单词的特征矩阵
(2)顶点的连接情况可以用一个邻接矩阵来表示
(3)每一条边可以用一个有意义的向量embeddind来表示,所有边向量组成一个边的特征矩阵
(4)全局信息
所以最后输入到GNN中的数据就包括一个顶点特征矩阵、一个邻接矩阵、一个边的特征矩阵以及一个全局信息
总结一下:从上面的例子可以得出,输入到GNN中的一个图包含四个部分,一个顶点的特征矩阵,一个边的特征矩阵,一个顶点连接情况的邻接矩阵以及一个全局信息。
其中顶点的连接情况我们在稍后进行优化表示,用一个邻接表来表示,放弃使用邻接矩阵,这会有一些好处。全局信息比较抽象,会单独有一个部分进行讲解。
现实中还有很多数据可以用图来进行表示,比如在一个社交网络中,各个人物之间的关系。商品推荐系统中,不同客户之间、不同商品之间、以及商品和客户之间的关系。而且这些数据都有一个特点,就是组成非常复杂,这也是图神经网路的优点之一,可以处理极为复杂的网络关系。
2、聚合操作
GNN的输入一般是每个节点的起始特征向量和表示节点间关系的邻接矩阵,有了这两个输入信息,接下来就是聚合操作了。所谓的聚合,其实就是将周边与节点有关联的节点
加权到
上,当作一次特征更新。同理,对图中的每个节点进行聚合操作,更新所有图节点的特征。
聚合操作的方式多种多样,可根据任务的不同自由选择,如下图所示:
3、多层迭代
CNN,RNN都可以有多个层,那么GNN也当然可以。一次图节点聚合操作与w加权,可以理解为一层,后面再重复进行聚合、加权,就是多层迭代了。一般GNN只要3~5层即可,所以训练GNN对算力要求很低。如下图所示:
三、GNN网络结构
下面使用消息传递神经网络来构建GNN。 GNN采用“图入图出”架构,也就是说模型将图作为输入,改变图的信息后进行输出。
(1)最简单的GNN层
GNN的一层:对顶点向量embedding、边向量embedding和全局向量embedding分别构造一个多层感知机(MLP),这三个MLP就共同组成了一个GNN的层,输入是embedding,输出也是embedding,embedding的值进行了更新,但维度不变。
顶点embedding,边embedding和全局embedding的输入-处理(MLP)-输出是分开进行的,因为有3个MLP,分别各自处理顶点、边或者全局信息
Un代表全局信息,Vn代表所有的顶点embedding,En代表所有的边embedding,每个f(带有下标)就是一个多层感知机,共同组成了GNN的一层。
多层这样的结构就构成了一个最简单的GNN。
(2)对图信息进行预测
当一个图的embedding经过了多层GNN层的处理后,输出的embedding中可能就含有了大量丰富的信息,将这些embedding通过若干全连接层处理(或者其他分类器)就可以对顶点进行预测了。
但是可能存在一些问题,例如,有一些顶点中信息缺失(embedding无法表征顶点的特点),但是和它相连的边以及全局含有有用的信息,我们就需要将边和全局的信息传递给对应的顶点。
方法:将与该顶点相连接的边的embedding与全局embedding求和(或者其他方式),得到的结果加到顶点embedding中(如果维度不同需要做映射),如下图所示。这个方法我们称为Pooling。
这样经过池化Pooling以后每个顶点中都含有丰富信息,对于边信息缺失或者全局信息缺失我们采用对称的方法进行处理。
可以将最简单的GNN模型总结成如下的结构。
一张图输入,经过GNN层(实质上就是三个分别对应点、边和全局的MLP),输出一个属性已经变换的图,在经过全连接层,得到输出。
四、GNN的变体
1、图类型(Graph Type)
原始的GNN输入的图结构包含带有标签信息的节点和无向边,这是最简单的图结构,但在现实生活中,存在多种图的变体,主要有有向图、异质图、带有边信息图和动态图:
有向图(Directed Graphs):即图中的边是存在方向的。有向边可以带来比无向边更多的信息。
异构图(Heterogeneous Graphs):即图中存在多种类型的节点。处理异构图的最简单方法是将每个节点的类型转换为与原始特征连接的 One-hot 特征向量。(其中,论文《Deep Collective Classification in Heterogeneous Information Networks》提出将元路径(meta path)概念用在异质图的信息传播上,根据节点类型和距离来对局部范围内节点进行分组,对于每一组,Graph Inception将它作为异构图的一个子图,然后在子图内进行传播,并将不同异构图得到的结果进行连接得到综合的节点表示。)
带有边信息的图(Graphs with Edge Information):即图中的每条边也存在权重或类型等信息。这种类型的图有两种解决办法:
一种是将图形转化为二部图(bipartite graph),将原始的边转化为一个节点以及两条新的边(原始边也作为节点,两条新的边分别连接原始边的两端节点)。(论文G2S)
第二种方法是在不同种类的边上,使用不同的权重矩阵来进行传播,就是说每一种边类型都关联一个权重矩阵,显然,对于边类型很多时参数量非常大。(论文R-GCN减少参数)
动态图(Dynamic Graphs):动态图类型有静态的图结构,并且能够处理动态的输入信号。
DCRNN和STGCN首先使用GNN获空间结构信息,然后将outputs馈入到一个序列模型(如sequence-to-sequence或者CNN)
与此相反的是,Structural-RNN和ST-GCN同时获取时间信息和空间信息
2、传播类型(Propagation Type)
论文中的传播(propagation)指的是汇集从邻居节点和连接的边的信息,来对节点进行更新的过程,对于获取节点或者边的隐藏状态,神经网络中的传播步骤(propagation step)和输出步骤(output step)至关重要。在传播步骤方面的改进主要有卷积、注意力机制、门机制和跳跃连接(skip connection),而在输出步骤通常遵循**简单的前馈神经网络设置。
传播步骤主要的模型如下图:
2.1 卷积(Convolution)
这方面的进展通常分为谱方法(Spectral Methods) 和非谱方法(Non-Spectral Methods)
Spectral Method 希望使用谱分解的方法,应用图的拉普拉斯矩阵分解进行节点的信息收集。
Non-Spectral Methods 直接使用图的拓扑结构,根据图的邻居信息进行信息收集。直接在图上定义卷积操作,也就是在空域上相邻的邻居节点上进行操作。
2.2 注意力机制(Attention)
图注意力网络(Graph Attention Network,GAT)致力于将注意力机制应用在图中的信息收集阶段。注意力机制在很多基于序列任务(sequence-based tasks)比如机器翻译、机器阅读理解等等上都产生了非常好的效果。
2.3 门机制(Gate)
这些变体将门机制应用于节点更新阶段。目前在信息传播步骤中使用的⻔机制类似于GRU和LSTM模型,这种机制可以减小原始GNN模型的约束,并提升在图结构中的⻓期的信息传播。Gated graph neural network 将 GRU 机制应用于节点更新。 LSTM ,根据具体情境的不同,可以分为 Tree LSTM、Graph LSTM 和 Sentence LSTM 等。
2.4 跳跃连接(Skip connection)
多应用都会将图神经网络层进行叠加,来实现更好的结果,因为更多的层意味着每一个节点能够从更多的邻居节点中获取信息。但是,更深的模型反而可能表现更坏,主要因为随着指数个数上升的相邻节点数量,更多的层可能会汇集到更多的噪声信息。
很多工作将残差网络(residual network)应用于图神经网络中(但是,即使有残差网络,具有更多层的GCN在许多数据集上的性能不如2层GCN)。
2.5 分层池化(Hierarchical Pooling)
在计算机视觉中,一个卷积层后通常会接一个池化层,来得到更加一般的特征。类似的是,在图结构中,一种分层池化层也能够起到类似的效果,复杂的和大规模的图通常会包含丰富的分层结构,这种结构对于节点层次(node-level)和图层次(graph-level)的分类任务非常重要。
总结
本周,我主要阅读了《Longformer: The Long-Document Transformer》这篇论文和图神经网络(GNN)的相关知识。论文针对长文本处理中的长距离依赖和高时空复杂度问题提出了解决方案。传统的 Transformer 模型在处理长文本时效率较低,而 Longformer 通过结合局部自注意力和全局自注意力机制,显著提升了处理长文本的能力。这种稀疏注意力机制不仅加快了模型的处理速度,还能处理长度达数万词的文本。
在学习图神经网络方面,我了解到 GNN 的强大之处在于其能够直接处理图结构数据,并有效捕捉节点之间的复杂关系。这一特性使得 GNN 在社交网络分析、蛋白质结构预测等领域表现出色。通过这周的学习,我不仅加深了对深度学习技术的理解,还拓宽了我对人工智能在不同领域应用潜力的认识。这些知识对于我未来的学术研究和实际应用将会非常有帮助。