数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
三、Transformer-XL [2019]
尽管
RNN
适应性很广,但是,由于梯度消失和爆炸导致RNN
很难优化。在LSTM
中引入门控和梯度裁剪技术可能不足以完全解决这一问题。从经验上看,以前的工作发现:LSTM
语言模型平均使用200
个context words
,表明有进一步改进的空间。另一方面,注意力机制中的长距离
word pairs
之间的直接联系可能会有助于优化,并学习长期依赖性。最近《Character-level language modeling with deeper self-attention》
设计了一套辅助损失来训练深度Transformer
网络从而用于character-level
语言建模。该方法存在两个问题:- 尽管取得了成功,但该模型的训练是在几百个字符的分离的固定长度的
segment
上进行的,没有跨segment
的信息流。 由于固定的上下文长度,该模型无法捕捉到超出预定义上下文长度的任何长期依赖关系。 - 此外,固定长度的
segment
是通过选择连续的符号块symbol chunk
来创建的,没有考虑句子或任何其他语义边界。因此,该模型缺乏必要的上下文信息从而无法很好地预测前几个symbol
,导致低效的优化和较差的性能。我们把这个问题称为上下文碎片化context fragmentation
。
为了解决上述固定长度上下文的局限性,论文
《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》
提出了一个新的架构,叫做Transformer-XL
(意为extra long
)。论文将递归的概念引入deep self-attention network
。具体而言,论文不是为每个新的segment
从头开始计算hidden state
,而是复用在previous segments
中获得的hidden state
。复用的hidden state
用于current segment
的memory
,在前后segment
之间建立了一个递归连接recurrent connection
。因此,建立非常长期的依赖关系的模型成为可能,因为信息可以通过递归连接recurrent connection
来传播。同时,从前一个segment
传递信息也可以解决上下文碎片化的问题。RNN
是在position
之间构建递归,Universal Transformer
是在depth
之间构建递归,Transformer-XL
是在segment
之间构建递归。通常一个
segment
代表一个样本,因此这也是样本之间构建递归。更重要的是,论文展示了使用相对位置编码
relative positional encoding
而不是绝对位置编码absolute positional encoding
的必要性,以便在不引起时间混乱的情况下实现状态重用state reuse
。因此,作为一个额外的技术贡献,论文引入了一个简单但更有效的相对位置编码公式,该公式可以泛化到比训练期间看到的长度更长的序列。Transformer-XL
在五个数据集上获得了强有力的结果,这些数据集从word-level
语言建模到character-level
语言建模。Transformer-XL
还能够生成相对连贯的、数千个token
的长篇文章。坤文的主要技术贡献包括:
- 在纯粹的自注意力模型
self-attention model
中引入递归的概念。 - 推导出一个新颖的位置编码方案。
这两种技术构成了一套完整的解决方案,因为其中任何一个单独的技术都不能解决固定长度上下文的问题。
Transformer-XL
是第一个在word-level
语言建模到character-level
语言建模上取得比RNN
更好结果的自注意力模型。- 尽管取得了成功,但该模型的训练是在几百个字符的分离的固定长度的
相关工作:为了捕获语言建模中的长距离上下文,一系列工作直接将更宽上下文的
representation
作为additional input
输入到网络中。现有的工作有人工定义context representation
的,也有依靠从数据中学到的document-level topic
。例如,可以把非常长上下文的
sum word embedding
作为额外的输入。更广泛地说,在通用序列建模中,如何捕获长期依赖性一直是一个长期研究问题。从这个角度来看,由于
LSTM
的普适性,人们在缓解梯度消失问题上做了很多努力来有助于优化,包括更好的初始化、辅助损失、增强的记忆结构memory structure
、以及其他的修改RNN
内部结构的方法。与他们不同的是,我们的工作是基于Transformer
架构的,并表明语言建模作为一个现实世界的任务,受益于学习长期依赖性的能力。
3.1 模型
给定一个
token
序列 $ \mathbf x = (x_1,\cdots,x_T) $ ,语言建模language modeling
的任务是估计联合概率 $ P(\mathbf x) $ 。这个联合概率通常被自回归地分解为:其中
$ \mathbf x_{\lt t} $ 为序列截止到时刻 $ t $ (不包含)的上下文 $ \mathbf x_{\lt t} = (x_1,\cdots,x_{t-1}) $ 。在这项工作中,我们坚持采用标准的神经网络方法来建模条件概率。具体而言:
- 一个神经网络将上下文
$ \mathbf x_{\lt t} $ 编码到一个固定维度的隐状态hidden state
中。 - 然后将隐状态(一个向量)与每个单词的
word embedding
相乘,从而得到一组logit
。 - 将这组
logit
馈入softmax
函数,从而得到关于next token
的离散概率分布。
- 一个神经网络将上下文
3.1.1 普通的 Transformer
为了将
Transformer
或self-attention
应用于语言建模,核心问题是如何训练Transformer
从而将一个任意长的上下文有效地编码为固定尺寸的representation
。理想的方法是用一个无条件的
Transformer
来处理整个上下文序列,但是由于资源有限,这通常是不可行的。一个可行但粗糙的近似方法是:将整个语料库分割成规模可控的较短的
segment
,只在每个segment
内训练模型,忽略之前segment
的所有上下文信息。我们称之为普通的Transformer
模型,并在下图(a)
中可视化。在这种训练范式下,信息在前向传播和反向传播过程中都不会跨segment
流动。使用固定长度的上下文有两个关键限制:
- 首先,最大依赖长度被
segment
长度所限。在character-level
语言建模中,segment
长度为几百。 - 其次,简单地将一个序列分割成固定长度的
segment
将导致上下文碎片化问题。
在评估过程的每一步,普通的
Transformer
模型也会消耗相同长度的segment
(与训练segment
长度相同),但仅在segment
的最后一个位置做一个预测。然后在下一步,该segment
只向右移动了一个位置,而新的segment
必须从头开始计算,如图(b)
所示。这个过程确保了每个预测都利用了最长的上下文,同时也缓解了训练中遇到的上下文碎片化问题。然而,这种评估过程是非常昂贵的。我们将表明:我们提出的架构能够大幅提高评估速度。注意:训练阶段和评估阶段有两个地方不一致:
segment
移动的步长不一致:训练期间右移 $ L $ 个位置( $ L $ 等于segment
长度),验证期间右移一个位置。- 预测位置不一致:训练期间对
segment
的每个位置进行预测,而验证期间仅对segment
的最后一个位置进行预测。这是为了和segment
移动步长相匹配,使得每个位置仅进行一次预测。
之所以训练期间
segment
移动步长更大,个人猜测是为了降低训练样本量。假设segment
长度固定为 $ L $ ,如果移动步长为 $ L $ ,则每个训练epoch
中每个token
会出现一次;如果移动步长为1
,则每个训练epoch
中每个token
会出现 $ L $ 次。- 首先,最大依赖长度被
3.1.2 Segment-Level Recurrence
为了解决使用固定长度上下文的局限性,我们建议在
Transformer
架构中引入一个递归机制。在训练过程中,固定前一个segment
计算好的hidden state
序列,并在处理next segment
时作为扩展上下文extended context
来重用,如下图(a)
所示(图中的绿色路径表示扩展上下文)。尽管反向传播仍然保持在一个
segment
内,但这个额外的输入(即,前一个segment
的hidden state
序列 )允许网络利用历史信息,导致了对长期依赖性的建模能力,并避免了上下文碎片化。注意:
- 在训练过程中,前一个
segment
的hidden state
序列被冻住,不再更新它们的状态(前向传播)以及梯度(反向传播)。 - 对于前一个
segment
,需要考虑每一层的hidden state
序列(而不仅仅是最后一层)。
- 在训练过程中,前一个
具体而言,假设长度为
$ L $ 的连续的两个segment
为:记
$ \mathbf x_\tau $ 的第 $ n $ 层hidden state
序列为: $ \mathbf H_\tau^{(n)} = \left(\mathbf{\vec h}_{\tau,1}^{(n)},\cdots,\mathbf{\vec h}_{\tau,L}^{(n)}\right)^\top\in \mathbb R^{L\times d} $ ,其中第 $ i $ 行表示位置 $ i $ 的hidden state
$ \mathbf{\vec h}_{\tau,i}^{(n)}\in \mathbb R^d $ , $ d $ 为hidden state
维度。那么 $ \mathbf x_{\tau+1} $ 第 $ n $ 层hidden state
序列的计算过程为:拼接第
$ n-1 $ 层的上下文: $ \tilde{\mathbf H}^{(n-1)}_{\tau+1} = \text{SG}\left(\mathbf H_\tau^{(n-1)}\right)\circ \mathbf H_{\tau+1}^{(n-1)} $ ,其中: $ \text{SG}(\cdot) $ 表示stop-gradient
, $ \circ $ 表示沿着序列长度的维度拼接两个hidden state
序列。生成
query, key, value
:注意:
query
用当前segment
的上下文,而key/value
用扩展的上下文。这是因为我们只需要计算当前segment
的representation
,这对应于query
的形状。计算第
$ n $ 层的hidden state
序列: $ \mathbf H^{(n)}_{\tau+1} = \text{Transformer-Layer}\left(\mathbf Q^{(n)}_{\tau+1},\mathbf K^{(n)}_{\tau+1},\mathbf V^{(n)}_{\tau+1}\right) $ 。
与标准的
Transformer
相比,关键的区别在于:key
$ \mathbf K^{(n)}_{\tau+1} $ 和value
$ \mathbf V^{(n)}_{\tau+1} $ 是根据扩展上下文 $ \tilde{\mathbf H}^{(n-1)}_{\tau+1} $ 来计算的,而 $ \mathbf H_\tau^{(n-1)} $ 是从前一个segment
缓存的。我们通过上图(a)
中的绿色路径来强调这一特殊设计。由于这种递归机制应用于语料库的每两个连续的segment
,因此它在hidden state
中创造了一个segment-level
的递归。因此,有效利用的上下文可以远远超过两个segment
。这对于
batch
的组织是一个挑战,要求前后两个样本之间是连续的,并且不能随机选择样本。请注意,连续两个
segment
之间, $ \mathbf H_{\tau+1}^{(n)} $ 和 $ \mathbf H_\tau^{(n-1)} $ 之间的递归依赖关系对每一层都右移了一位(整体右移一位),这与传统的RNN
语言模型中的同层递归不同。因此,最大可能的依赖长度与网络层数、segment
长度呈线性增长,即 $ O(N\times L) $ ,如上图(b)
中的阴影区域所示,这里 $ N $ 为网络层数、 $ L $ 为segment
长度。 $ \mathbf{\vec h}_{\tau+1,i}^{(n)} $ 依赖于 $ \left\{\mathbf{\vec h}_{\tau,i+1}^{(n-1)},\cdots,\mathbf{\vec h}_{\tau,L}^{(n-1)},\mathbf{\vec h}_{\tau+1,1}^{(n-1)},\cdots\mathbf{\vec h}_{\tau+1,i}^{(n-1)}\right\} $ ,即第 $ n-1 $ 层中:序列 $ \mathbf x_{\tau} $ 的位置 $ i+1 $ 到位置 $ L $ 、以及序列 $ \mathbf x_{\tau+1} $ 中的位置 $ 1 $ 到位置 $ i $ ,一共 $ L $ 个位置。对于同层递归,则
$ \mathbf{\vec h}_{\tau+1,i}^{(n)} $ 依赖于 $ \left\{\mathbf{\vec h}_{\tau,1}^{(n-1)},\cdots,\mathbf{\vec h}_{\tau,i}^{(n-1)},\mathbf{\vec h}_{\tau+1,1}^{(n-1)},\cdots\mathbf{\vec h}_{\tau+1,i}^{(n-1)}\right\} $ 。segment-Level
递归类似于截断的BPTT
(用于训练RNN
语言模型)。然而,与截断的BPTT
不同的是:我们的方法缓存了hidden state
的一个序列,而不仅仅是最后一个hidden state
,并且应该与相对位置编码技术一起应用。注意,
segment-Level
递归对于每一层,都需要缓存hidden state
的一个序列。除了实现超长上下文和解决上下文碎片化问题,递归方案带来的另一个好处是评估速度明显加快。具体而言,在评估过程中,先前的
segment
的representation
可以被重用,而不是像普通Transformer
那样从头开始计算。在我们对enwiki8
的实验中,Transformer-XL
在评估过程中比普通Transformer
模型快1800
多倍。
最后,请注意,递归方案不仅限于前面一个
segment
。理论上,我们可以在GPU
内存允许的范围内缓存尽可能多的previous segments
,并在处理当前segment
时复用所有这些segment
作为额外的上下文。因此,我们可以缓存一个长度为 $ M $ 的old hidden state
序列,跨越(可能)多个segment
,并将它们称为memory
$ \mathbf M_\tau^{(n)}\in \mathbb R^{M\times d} $ 。总的上下文长度为
$ L+M $ 。在我们的实验中,我们在训练时将
$ M $ 设置为等于segment
长度 $ L $ ,在评估时将 $ M $ 设为 $ L $ 的若干倍。segment
长度 $ L $ 用于划分segment
,上下文长度 $ M $ 用于建模上下文,二者的作用不同。这里在训练期间和评估期间采用不同的上下文长度,会不会影响评估效果?毕竟训练数据分布和测试数据分布人为地导致了不一致(总的上下文长度不一致)。
3.1.3 Relative Positional Encoding
为了重用前面
segment
的hidden state
,有一个关键的技术挑战我们还没有解决:如何保持位置信息的一致性?在标准的
Transformer
中,序列顺序的信息是由一组位置编码positional encoding
来提供的,表示为 $ \mathbf U\in \mathbb R^{L_\max\times d} $ ,其中第 $ i $ 行 $ \mathbf{\vec u}_i $ 对应于segment
内第 $ i $ 个绝对位置, $ L_\max $ 定义了最大可能的建模长度。如果我们简单地将这种位置编码应用于我们的递归机制,那么hidden state
序列的计算方式为:其中:
$ \mathbf E_{\mathbf x_\tau}\in \mathbb R^{L\times d} $ 为segment
$ \mathbf x_\tau $ 的word embedding
, $ f(\cdot) $ 为一个变换函数, $ \mathbf U_{1:L} $ 为 $ \mathbf U $ 的前 $ L $ 行组成的矩阵。 $ \mathbf H_\tau $ 作为计算 $ \mathbf H_{\tau+1} $ 的扩展上下文, $ \mathbf E_{\mathbf x_{\tau+1}} + \mathbf U_{1:L} $ 作为计算 $ \mathbf H_{\tau+1} $ 的input
。
$ L_\max \ge L $ ,这是因为可能需要在测试期间泛化到unseen
的序列长度。注意,
$ \mathbf E_{\mathbf x_\tau} $ 和 $ \mathbf E_{\mathbf x_{\tau+1}} $ 都与相同的位置编码 $ \mathbf U_{1:L} $ 相关。因此,该模型没有信息来区分任何 $ x_{\tau,j} $ 和 $ x_{\tau+1,j} $ 之间的位置差异, $ 1\le j\le L $ ,从而导致了纯粹的性能损失。为解决这个问题,基本的想法是相对位置编码。从概念上讲,位置编码给了模型一个关于如何收集信息的时间线索或 "
bias
",也就是说,关注attend
哪个地方。以相对的方式来定义时间bias
是更直观和更可泛化的。例如,当一个query
向量 $ \mathbf{\vec q} _{\tau,i} $ 关注key
向量 $ \left\{\mathbf{\vec k}_{\tau,j}\right\}_{j\le i} $ 时,它不需要知道每个key
向量的绝对位置来识别segment
的时间顺序,只要知道每个key
向量 $ \mathbf{\vec k}_{\tau,j} $ 与 $ \mathbf{\vec q}_{\tau,i} $ 之间的相对距离(即 $ i-j $ )就足够了。实际上,人们可以创建一组相对位置编码
$ \mathbf R\in \mathbb R^{L_\max\times d} $ ,其中第 $ i $ 行 $ \mathbf{\vec r}_i\in \mathbb R^d $ 表示两个位置之间的相对距离为 $ i $ 。通过将相对距离动态地注入到attention score
,query
向量可以很容易地根据不同距离区分出 $ x_{\tau,j} $ 和 $ x_{\tau+1,j} $ 的representation
,使状态重用机制变得可行。同时,我们不会丢失任何时间信息,因为绝对位置可以从相对距离中递归恢复。此前,相对位置编码的想法已经在机器翻译和音乐生成任务中得到了探索。在这里,我们提供了一种不同的编码形式,它不仅与绝对位置编码有一一对应关系,而且在经验上也具有更好的泛化性。
首先,在标准的
Transformer
中,同一个segment
中的注意力得分可以分解为:其中:
$ \mathbf{\vec e}_{x_i} $ 为 $ x_i $ 的embedding
向量, $ \mathbf{\vec u}_i $ 为位置 $ i $ 的positional embedding
, $ \mathbf W_q $ 为query
的投影矩阵, $ \mathbf W_k $ 为key
的投影矩阵。然后,按照仅依赖于相对位置信息的思路,我们建议重写上述四项为:
一种更简单直接的改写方式为:
$ a_{i,j}^{\text{rel}} = \left(\mathbf W_q\left(\mathbf{\vec e}_{x_i}+\mathbf{\vec r}_{i-j}\right)\right)^\top\left(\mathbf W_k\left(\mathbf{\vec e}_{x_j}+\mathbf{\vec r}_{j-i}\right)\right) $ 。可以通过实验来验证效果。第一个改变是用相对位置编码
$ \mathbf{\vec r}_{i-j} $ 来取代(b)
和(d)
中的绝对位置编码 $ \mathbf{\vec u}_j $ 。这实质上反映了一个先验,即只有相对距离才是最重要的。注意, $ \mathbf R $ 是一个正弦编码矩阵,没有可学习的参数。实际上,绝对位置在一些任务中也同样重要,例如:句子里的第一个位置和最后一个位置都比较重要,可能包含特殊的语义。
其次,我们引入一个可训练的参数
$ \mathbf{\vec u}\in \mathbb R^d $ 来取代(c)
中的 $ \left(\mathbf W_q \mathbf{\vec u}_i\right)^\top $ 。在这种情况下,由于query
向量对所有的query position
都是相同的,因此这表明无论query position
如何,对不同的单词的attentive bias
应该保持不变。类似地,我们引入一个可训练的参数
$ \mathbf{\vec v}\in \mathbb R^d $ 来取代(d)
中的 $ \left(\mathbf W_q \mathbf{\vec u}_i\right)^\top $ 。这表明无论query position
如何,对不同相对位置的attentive bias
应该保持不变。在绝对位置编码中,
query
的位置、key
的位置都很重要,因此需要两个positional embedding
$ \mathbf{\vec u}_i,\mathbf{\vec u}_j $ 。在绝对位置编码中,只有
query
和key
的相对位置的编码才重要,因此只有一个positional embedding
$ \mathbf{\vec r}_{i,j} $ 。最后,我们特意将两个权重矩阵
$ \mathbf W_{k,E} $ 和 $ \mathbf W_{k,R} $ 分开,分别产生content-based
和location-based
的key
向量。 $ \mathbf{\vec u} $ 和 $ \mathbf{\vec v} $ 也分别对应于content-based
和location-based
的attentive bias
向量。
在相对位置编码中,每一项都有直观的含义:
$ \mathbf{\vec e}_{x_i}^\top\mathbf W_q^\top\mathbf W_{k,E}\mathbf{\vec e}_{x_j} $ : 表示基于内容的寻址addressing
。 $ \mathbf{\vec e}_{x_i}^\top\mathbf W_{q}^\top\mathbf W_{k,R}\mathbf{\vec r}_{i-j} $ :捕获内容相关的positional bias
。 $ \mathbf{\vec u}^\top\mathbf W_{k,E}\mathbf{\vec e}_{x_j} $ :捕获全局的content bias
。 $ \mathbf{\vec v}^\top\mathbf W_{k,R}\mathbf{\vec r}_{i-j} $ :捕获全局的positional bias
。
相比之下,
《Self-attention with relative position representations》
仅考虑了(a), (b)
两项,放弃了(c), (d)
两个bias
项。此外,《Self-attention with relative position representations》
将 $ \mathbf W_k \mathbf R $ 合并为单个矩阵可训练的矩阵 $ \hat{\mathbf R} $ ,这放弃了原始的正弦波位置编码中的inductive bias
。相比之下,我们的relative positional embedding
$ \mathbf R $ 采用正弦波公式,从而可以在评估期间泛化到训练期间更长的序列上。将
segment-level
递归与我们提出的relative positional embedding
相结合,我们最终得到了Transformer-XL
架构。注意,为了计算所有的
pair
$ (i,j) $ 的 $ \mathbf W_{k,R}\mathbf{\vec r}_{i-j} $ ,其计算代价为 $ O(L^2) $ 。我们在论文附录中展示了一个简单的计算过程,它将成本降低到 $ O(L) $ 。但是为了计算
$ a_{i,j}^{\text{rel}} $ ,仍然需要 $ O(L^2) $ 的计算复杂度。
3.2 实验
3.2.1 实验结果
这里比较不同数据集上语言建模的效果,评估指标为困惑度
perplexity: PPL
。WikiText-103
数据集:现有最大的具有长期依赖性的word-level
语言建模benchmark
。它包含了来自28K
篇文章的1.03
亿个训练token
,每篇文章的平均长度为3.6K
个token
,这可以测试建模长期依赖的能力。我们将训练时的注意力长度 (即,
$ L+M $ )设定为384
,评估时设定为1600
。如下表所示,Transformer-XL
超越了之前的SOTA
,将困惑度从20.5
降低到18.3
。enwik8
数据集:包含1
亿字节的未处理的维基百科文本。24
层的Transformer-XL
取得了新的SOTA
结果。训练时注意力长度为784
,评估时注意力长度为3800
。text8
数据集:包含1
亿个经过处理的维基百科字符,这些字符是通过转换为小写字母并删除[a ~ z]
以及空格以外的任何字符而创建的。同样地,
24
层的Transformer-XL
(超参数与enwik8
中的相同)取得了新的SOTA
结果。One Billion Word
数据集:没有保留任何长期的依赖性,因为句子已经被混洗过了。因此,这个数据集主要测试了只对短期依赖关系进行建模的能力。尽管
Transformer-XL
主要是为了更好地捕捉长期依赖性,但它极大地提高了单个模型的SOTA
。Penn Treebank
数据集:包含1
百万token
,用于验证模型在小数据集上的表现。我们对
Transformer-XL
采用了variational dropout
和weight average
。通过适当的正则化,Transformer-XL
在没有预训练和微调的模型中取得了新的SOTA
结果。
3.2.2 消融研究
解决长期依赖问题:我们在
WikiText-103
上进行研究,这需要建模长期依赖性。结果如下所示。在比较的编码方案中,
Shaw et al. (2018)
(《Self-attention with relative position representations》
)是相对位置编码,而Vaswani et al. (2017)
(《Attention is all you need》
)和Al-Rfou et al. (2018)
(《Character-level language modeling with deeper self-attention》
)是绝对位置编码。Ful/Half
损失指的是:对segment
中所有位置/最近的一半位置计算交叉熵。我们发现,绝对位置编码只有在Half
损失的情况下才能很好地工作,因为Half
损失在训练中排除了注意力长度很短的位置,从而获得更好的泛化。PPL init
表示评估时使用与训练长度相同的注意力长度;PPL best
表示评估时使用最佳注意力长度(由Attn Len
列给出)时的结果。结论:
- 递归机制和相对位置编码方案都是实现最佳性能的必要条件。虽然训练期间的反向传播长度只有
128
,但通过这两种技术,在测试期间注意力长度可以增加到640
。 - 在
151M
参数的Transformer-XL
中,测试期间,困惑度随着注意力长度的增加而减少。
- 递归机制和相对位置编码方案都是实现最佳性能的必要条件。虽然训练期间的反向传播长度只有
解决上下文碎片化问题:我们特意选择了一个不需要长期依赖的数据集,这样一来,递归机制的任何改进都可以归因于解决了上下文碎片化问题。具体来说,我们在
One Billion Word
数据集上进行实验,它只能从消除上下文碎片中受益。结论:
- 即使在不需要长期依赖的情况下,使用
segment-level
递归机制也能大幅提高性能。这与我们之前的讨论一致,即递归机制解决了上下文碎片化问题。 - 我们的相对位置编码在短序列上也优于
Shaw et al. (2018)
(《Self-attention with relative position representations》
)。
- 即使在不需要长期依赖的情况下,使用
3.2.3 其它
相对有效长度
Relative Effective Context Length
:Transformer-XL
具有最大的相对有效长度。相对有效长度的定义参考原始论文。
文本生成:在
WikiText-103
上训练。参考原始论文的附录。评估速度:由于状态重用,
Transformer-XL
在评估时可以达到相比普通Transformer
快1874
倍的速度。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论