查看原文
其他

【综述专栏】除了NLP,Transformer还可以用来做什么?

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

来源:知乎—李鹏宇

地址:https://zhuanlan.zhihu.com/p/449831041


01

引言
Transformer是Vaswani et al. (2017)年在《Attention Is All You Need》中提出的一个里程碑式的语言模型[1]。它依靠自注意力机制和位置编码来刻画文本数据中的语义、语法信息,取得了非常好的效果。在Transformer的基础上,人们又提出了GPT、BERT等预训练语言模型,拉开了自然语言处理研究和应用的“预训练+微调”时代。
近几年,计算机视觉、多模态、药物结构研发等领域的从业者,也开始关注Transformer系列模型,并在实践中发现Transformer在NLP之外的领域也是有效的。这里以MolTrans和Informer为例,介绍药物研发、时间序列预测任务里,人们应用和修改Transformer的方式和经验。

02

(最有钱的)生物医药领域
生物医药领域可能是20世纪以来最为活跃的科研及应用领域,这方面的从业者很早就意识到了机器学习方法的价值。很多研究人员试图使用机器学习方法来发现有效的药物结构。
这里以Huang Kexin et al (2020)提出的MolTrans,一个用于预测药物和蛋白质分子是否会发生交互作用的模型为例 [2],介绍生物医药领域使用Transformer的方式。

2.1. 任务理解

(貌似)很多药物产生疗效的基础,是药物分子与人体中的某种蛋白产生交互作用(估计是生化反应)。如果交互作用导致的变化有利于我们的身心健康,对应的药物就可能是有效的。这样,预测一个药物是否会和一种蛋白产生交互作用(Drug–target protein interaction, DTI),成为药物研制的一个重要任务。基线版本的预测方法,似乎是在生物化学实验室里遍历(药物,蛋白质)二元组,看看反应结果——不过,人肉搜索的代价太高了。
从业者们多年工作下来,积累并整理了大量的药物研发相关数据,为使用机器学习方法发现可以产生交互作用的(药物,蛋白质)对奠定了领域知识和数据准备。基于机器学习方法的DTI,按照模型类型可以分为传统机器学习方法(逻辑回归等)和深度学习方法(深度信念网络、卷积神经网络等等)两类;从特征构建方式的角度,可以分为手工构建特征和自动构建特征(基于深度学习方法的DPI大都属于此类)两类。目前(2021年末),从公开报道来看,基于深度学习的方法因效果和泛化性较好,应用已经比较广泛。
MolTrans对DTI任务的定义更加精确:
从NLP的视角来看,DTI是一个“匹配任务”,即计算两个序列匹配(语义相同、意图相同、构成QA对、句子1的语义包含了句子2的语义,等等)的概率大小。

2.2. 分子结构的初步表示

药物分子和蛋白分子的结构都比较复杂,是(化学键为边、原子为节点的)图,类似语义网、知识图谱。许多医药数据里会用Simplified Molecular Input Line Entry System (SMILES)[2],以token序列的形式来描述分子结构。SMILES表示的获取方法(具体计算方式未知,应该很容易查到)非常简单:使用深度优先的方式遍历分子结构图。这样,对我们来说,药物结构和蛋白质结构都是序列数据——这可是时空上存在关联性的序列数据,和文本数据很像,值得尝试使用NLP的模型来处理。

2.3. Tokenize的方法——如何切分分子结构序列

为了利用分子SMILES序列里的子结构信息,MolTrans使用字节对编码方法对SMILES序列进行了切分。词汇表的构建,即药物结构和蛋白结构频繁子序列的挖掘过程如图2-1所示;而基于词汇表对特定序列进行切分(tokenization)的方式,一般是是前项最大匹配法。

图2-1 字节对编码方法里构建词汇表的算法

这样,我们就可以用2个专属的词汇表,把药物分子结构和蛋白分子结构表示为词汇表位置编码(整数值形式的词语ID;唯一的独热编码)序列。

2.4. 数据集的构造

作者基于多份开源数据集构造了训练集、开发集和测试集。一些开源数据集缺少负例,作者使用随机挑选非当前样本的方式负例。最终获得的负例个数多余整理,作者对负例实施了负采样,获得了一个均衡的二分类数据集。

2.5. MolTrans的结构

完成数据预处理后,就可以开始建模了。如图2-2,是MolTrans的整体结构。
它的前向过程是这样的:
(1) 使用2个独立的Transformer分别对药物分子结构和蛋白结构进行编码、获得二者的结构表示(都是元素为浮点数的向量序列)。
(2) 计算药物结构token和蛋白结构token两两之间的交互作用分数(点积注意力分数)。
(3) 使用CNN去从一个较大的视角来分析前面得到的交互作用分数矩阵。对医药领域的专业人员来说,这个矩阵里得分高的(药物结构子序列,蛋白结构子序列)二元组,是交互作用产生位置的良好候选。
(4) 把第(3)步里CNN输出的若干缩略图拉直、拼接,形成一个蕴含了药物和蛋白交互作用信息的向量。
(5) 使用一个逻辑回归模型预测输入的药物和蛋白是否会产生交互作用。
图2-2 MolTrans的整体结构

2.6. 实验结果分析

作者复现了6个经典模型(包含当时的SOTA),作为基线模型与MolTrans进行比较。比较的结论是,MolTrans总体上超越了当时的最佳模型。具体的结论有:
(1)模型在开源数据集中表现最佳。
(2)模型在遇到未收录的药物或蛋白时,仍然可以保持很好的预测能力。(3)在小数据集场景中,MolTrans的优势很大。
(4)MolTrans的泛化性很强,可以适应不同类型的蛋白。作者分析了MolTrans对4中高频的蛋白类型的预测能力,发现模型表现比较稳定(没有具体数据)。
(5)MolTrans的可解释性比较好。交互分数矩阵可以辅助研发人员分析可能发生交互作用的药物分子位置和蛋白分子位置。
(6)模型中的Transformer、CNN、和交互模块是3个关键零件。
复现其他人的模型,然后在配置相同的情况下比较自己的模型和其他模型的优劣,是公平的做法。不过,对研究人员的诚信水平比依赖较大。

2.7. MolTrans的贡献

MolTrans可以使用所有的生物医药数据集,为药物分子结构和蛋白分子结构构建高质量的词汇表。相比此前的方法,对提升了对无标签数据集的挖掘程度。
使用字节对编码来实施分子序列的切分,提供了一种蕴含关于分子子结构的文本表示。这种表示和模型中的交互作用分数矩阵结合起来,提升了预测结果的可解释性、为研究人员的决策提供了有效的参考信息。

2.8. 其他

MolTrans使用无标签数据的方式可以更彻底一些:使用语言模型的训练方式,分别对两个Transformer进行预训练,然后进行微调。
由于分子结构数据的时空特点与文本数据十分相似(比如序列长度都为数十至数百、序列内元素存在依存关系、顺序关系、语义、语法角色等等),因此,MolTrans在基本没有对Transformer的结构进行调整的情况下获得了很好的效果。当然,这也和药物研发的场景特点有关:药物研发是硬件充足情况下的离线任务,对模型的时间效率和空间效率不敏感。如果任务要求我们在较小的内存和较短的时间内完成计算,比如实时地预测今后14天每个整点的气温,那就得对Transformer的结构做一些改进了。

03

时间序列预测
气温、电压、股票价格、在线用户人数等等数据,都是时间序列——在预测这些数据未来趋势的基础上,我们可以提前做一些部署(比如增加服务器以应对即将到来的流量高峰),可以让生产和生活的效果更好。
这里以Zhou et al. (2020) 提出的Informer为例介绍Transformer在时间序列预测方面的应用[3]。

3.1. 任务理解

作者对时间序列预测任务的定义是这样的:
一般来说,  ,即  是一个比较长的向量,我们会利用多种特征来进行预测;有时候,我们也会做自回归任务,即基于一个变量已知的一段时间窗口内数据,去预测其未来一段时间的取值。文本生成的目标,是在已知一段文本序列的情况下,预测(未来应该出现)的一段文本序列,因此也是一种时间序列预测任务。
一般来说,  ,即我们的预测目标是预测一个变量在未来的取值;有时候,我们的任务是同时度多个变量在未来的取值进行预测[4](比如天气预报需要预测气温、湿度、风力等等变量的取值)。
当  取值比较大,即需要预测的时间点个数比较多时,我们称时间序列任务为长时间序列预测(long sequence time-series forecasting, LSTF)。

3.2. 问题

作者认为,RNN等模型的长期预测能力比较弱,如图3-1所示。在预测比较远的未来数据时,LSTM的预测误差会比较大;推理阶段的计算速递也会显著下降。

图3-1 LSTM的长期预测能力比较弱

Transformer不光在NLP领域超越了RNN和LSTM,在时间序列预测任务中也超越了二者。不过,Transformer在进行LSTF任务时,会遇到一下3个明显的困难:
(1) 自注意力机制的计算复杂度是  。其中L为输入序列的长度。Transformer在处理超长序列时,自注意力机制消耗的内存和时间会达到我们不能接受的水平。
(2) Transformer是多层堆叠而成的深度模型,参数量非常大,会消耗大量存储空间。如果Transformer包含了J个编码器或解码器层,那么对应的空间复杂度是  。超长序列的处理也是比较困难的。
(3) 推理速度慢。Transformer的解码方式是自回归式的,即每一步接受之前一个时间窗口的数据、预测下一步的数据,速度非常慢。在使用GPT做闲聊回复生成时,我深深地感受到了这一点。
作者的目标,是改进Transformer的结构,从而改善Transformer在这3个方面的问题,进而使Transformer可以较快地完成LSTF任务。

3.3. Informer的结构

3.3.1. 整体架构

Informer的整体架构和经典Transformer基本一样,如图3-2所示,采用了encoder-decoder结构。Encoder的任务仍然是获得对输入数据的整体表示;decoder的任务仍然是预测目标信号;decoder内负责综合encoder信息和decoder掌握信息的,仍然是自注意力机制。
不过,从外观上看,Informer和Transformer存在这样几个差异:
(1) 作者为Informer设计了一种新的注意力机制,即ProbSparse Self-attention。
(2) Decoder的输入只有输入序列、预测目标序列的位置为空(用0表示)。这是为“不循环迭代、一次实现预测”服务的结构设计。
(3) 使用一个全连接网络对decoder内自注意力机制输出的序列向量进行映射,得到各个维度(一个step的一个维度上的元素,是对应变量在这个时间点上的取值)。
Informer的结构细节还需要仔细分析。
图3-2 Informer的架构

3.3.2. 一种高效的自注意力机制——ProbSparse Self-Attention

3.3.2.1. 如何度量A对B注意力的重要性?

简单来说,注意力机制是融合两份数据信息的一类计算方法,常见的包括双线性函数注意力、点积注意力等(极端情况下,基于求和运算也可以构建注意力机制)。采用了缩放点积注意力(scaled dot-product)的自注意力,是Transformer的一大贡献。自注意力分数的计算方式是这样的:
其中,d是输入的维数,比如字嵌入向量的长度,起到了类似知识蒸馏等方法中超参数“温度”(Temprature)的作用——将数据的绝对值大小压缩到一个较小的空间,也就是softmax的快速变化区域,从而降低优化难度。Q、K、V相等,都是形状为(batch_size, max_seq_len, dim)的矩阵。
的形状是(batch_size,max_seq_len,max_seq_len),是输入序列中元素对输入序列中元素的注意力权重,记序列中第i个数据(对应NLP中的token)对第j个数据的注意力权重为  这个概率分布越接近均匀分布,即
,自注意力分数就越接近V——这样的话,query认为value中的各个元素重要性是接近的,注意力机制就没有存在的必要了——Informer的(擅长逆向思维的)作者认为,应该让  的分布远离均匀分布,这样自注意力机制才能为系统带来一点差异化的信息。作者基于  和均匀分布的KL散度构造了一个用来度量注意权重分布多样性(偏离均匀分布就会出现很多零,因此原文里称”稀疏性”)的的指标:
考虑到Informer只需要知道这指标的相对大小,这里把完整KL散度里的常数项删掉了。该指标取值越大,表明  与均匀分布差异越大、query对key的注意力越个性化、向系统提供的信息越独特和重要。

3.3.2.2. 初级版本ProbSparse Self-attention

计算前面所述的指标  ,然后保留query的  个token对key的  个注意力权重(向量)中,得分最高的u个。u的经验值是:  
这样,我们得到的新注意力机制就是:
式中,  是一个形状为(batch_size,u,dim)的矩阵,注意力的计算复杂度从
  的含义为,我们只关注原始query中最重要的几个token。由此看来,这个算法可以在NLP中提取文本的关键词。

3.3.2.3. 完全版本ProbSparse Self-attention

为了进一步简化注意力,作者开始秀操作了。
首先,他们给出了  的上界和下界,即
  的上界去掉常数项后,就成了
者又证明了,  的相对大小,与  的相对大小,是一致的。这样,就可以用  来评价注意力的重要性。  的取值比  更稳定,不容易受到大量零值的影响。
然后,作者证明了,只需要从query和key的  个注意力权重中,随机抽取  个,就可以比较精准地估计  取值。换句话说,我们只需要随机选择  个(query的token,key的token)对,然后计算它们对应向量的点积,就可以得到  的近似值。使用这种估计方法,可以节省不少算力。
考虑到算法说明只是完整计算过程的一部分,对开复现工作不是很亲和,这里整理了完整版ProbSparse Self-attention的推理过程:

3.3.2.4. 要点

ProbSparse Self-attention的计算操作导致了一个后果,就是输出序列的长度比输入序列短了一些。如果我们堆叠若干个ProbSparse Self-attention,那最终的输出会很短——图3-2中的3个梯形,体现的就是这个现象。
序列长度缩减有什么用呢?对自注意力机制来说,复杂度可以显著降低。

3.3.3. 一种减少自注意力存储空间消耗的方法——Self-Attention Distilling

对ProbSparse Self-attention输出的形状为(batch_size,较短的序列长度,dim)的数据,Informer会使用卷积神经网络里的常用操作,即“一维卷积-激活-池化”来再概括一下。原文称这个操作为“Self-Attention Distilling”。
这一步的目的,是对ProbSparse Self-attention的输出进行进一步的概括和浓缩(大小变为原来的1/4)。图3-3展示了ProbSparse Self-Attention与Self-Attention Distilling的计算方式。需要注意的是,Informer实现ProbSparse Self-Attention的时候,会将query中被舍弃的token对应的注意力遮蔽掉,而不是真的裁剪。因此,图例显示的注意力计算结果(k个红色矩阵)的形状是(batch_size,L,L)。而自注意力蒸馏操作会真的缩小数据的大小。
为了提升模型的鲁棒性,Informer采用了类似多头注意力的做法,配置了2个特征抽取路线:
(1) Main stack。对应的计算路线最后一步,是使用一个线性变换,将形状为(L/4,L/4)映射为形状(L/4, dim)的矩阵,作为输入数据的缩略表示。
(2) second stack对应的计算路线比Main stack少一次注意力计算和注意力蒸馏(这样得到的feature map形状与main stack输出的一样)。
(3) 可能还有更多。Informer官方代码里总共用了3个stack。
把配置的z个stack输出的feature map拼接后,就是encoder的输出了,形状为(batch_size,z*L/4, dim)。注意,这里是时间维度上的拼接(假设是,各个map的相同纬度信息类型相同) 。

图3-3 Informer自创的ProbSparse Self-Attention与Self-Attention Distilling计算方式示意图

3.3.4. 如何“一步生成”

为了一步生成预测结果,Informer对Transformer的decoder做了以下改动:
(1) 输入序列为”已知序列,若干个0”;注意力掩码。其中若干个0是占位的,对应了需要预测的数据点。即输入序列长度为  在自回归形式的训练中,注意力掩码负责防止模型看到未来的数据。
(2) 使用SparseProb Self-Attention获取输入序列的表示。
(3) 使用经典自注意力机制融合输入序列表示和编码器输出的Feature Map数据。这里用的是输入序列表示对Feature Map的注意力,因此自注意力机制输出的表示数据形状为
(4) 对自注意力输出数据的每个step进行线性变换、预测对应时间点的数据。

3.3.5. 损失函数

由于Informer处理的是回归类任务,监督信号和预测值是温度、电压这样的物理量实际取值,因此使用的损失函数是均方误差(Mean Squared Error, MSE)损失函数。

3.4. 实验结果分析

Informer在LSTF任务中的效果,总体上超越了经典Transformer。不论是单变量回归,还是多变量回归,Informer都是SOTA。Informer在不同时间粒度的场景下都有优势;Informer在多变量回归中的优势更明显。
输入序列长度、用于计算抽样比例u的参数c、堆叠层数3个参数,对MolTrans效果的影响非常显著。实际应用中,需要仔细调整这3个参数。

3.5. Informer的贡献

基于严谨的推导,得到了一个性质良好的自注意力机制简化策略。这种优化模型的方式是比较扎实的,值得学习。
使用了多个策略,显著改善了Transformer的时间和空间消耗,提升了这类模型对资源受限、实时预测等场景中的适应能力。

3.6. 其他

作者的数学基础是比较好的,可以在对比散度的基础上一路放松和证明,得到一个性质良好、复杂度较低的算法。我这样的调参侠,大部分时候是依靠数据分析和“感觉”来寻找有效的结构设计——累、效率低,没有高级感。
基于Transformer构造时间序列预测模型的相关工作非常多,比如今年(2021年)出现的超越Informer的Autoformer[4]。

04

结语
人工智能领域的从业者们组成了一个旨在发现更加有效的模型和算法的共同体。大家关注和尝试的方向是多样的,提升了“西方不亮东方亮”的概率。
为了将Transformer推广到各种模态、各类任务、各种场景,人们对Transformer实施了各种各样的改动或者改进。

参考文献

[1] Vaswani A , Shazeer N , Parmar N , et al. Attention Is All You Need[J]. arXiv, 2017.

[2] Huang K , Xiao C , Glass L , et al. MolTrans: Molecular Interaction Transformer for Drug Target Interaction Prediction[J]. 2020.

[3] Zhou H , Zhang S , Peng J , et al. Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting[J]. 2020.

[4] Xu J, Wang J, Long M. Autoformer: Decomposition transformers with auto-correlation for long-term series forecasting[J]. Advances in Neural Information Processing Systems, 2021, 34.

[5] transformer的decoder自注意力机制融合自身信息和encoder输出的方式https://github.com/jadore801120

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“综述专栏”历史文章


更多综述专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存