Character-Level Language Modeling with Deeper Self-Attention

链接

  • 论文链接:https://arxiv.org/pdf/1808.04444v2.pdf
  • 项目链接:https://github.com/nadavbh12/Character

一、前言

  • 论文中展示了一个具有固定上下文长度的比较深的transformer模型(64-layer),该模型大大优于各种RNN模型的变体,并且在两个流行的基准测试中达到了最优水平。
  • 在实验中发现在中间网络层和中间序列位置中添加辅助损失是很重要的。
  • 关于transformer模型可以参考:https://blog.csdn.net/ACM_hades/article/details/88898313

二、Character Transformer Model

1、模型概述

  • 语言模型通常用条件概率分布进行表示: P r ( t 0 : L ) = P ( t 0 ) ∏ i = 1 L P r ( t i ∣ t 0 : i − 1 ) Pr(t_{0:L})=P(t_0)∏_{i=1}^LPr(t_i |t_{0:i-1}) Pr(t0:L)=P(t0)i=1LPr(tit0:i1)
  • 我们使用transformer网络模型来模拟 P r ( t i ∣ t 0 : i − 1 ) Pr(t_i|t_{0:i−1}) Pr(tit0:i1),即训练一个transformer模型使得输入序列 t 0 : i − 1 t_{0:i−1} t0:i1,输出 P r ( t i ∣ t 0 : i − 1 ) Pr(t_i|t_{0:i−1}) Pr(tit0:i1)
  • 为了实现 P r ( t i ∣ t 0 : i − 1 ) Pr(t_i|t_{0:i−1}) Pr(tit0:i1),我们使用causal attention将当前词后面的词mask掉。causal attention其实与transformer的decode部分中的masked attention是一样的。如下图所示:
    Character-Level Language Modeling with Deeper Self-Attention_第1张图片
    上图计算的就是 P ( t 4 ∣ t 0 : 3 ) P(t_4 |t_{0:3}) P(t4t0:3)
  • 与一般的语言模型一样我们在序列中的每个位置预测下一个词,如下图所示:
    Character-Level Language Modeling with Deeper Self-Attention_第2张图片
    但是,由于我们的模型不允许信息在batch之间传递,这导致模型预测某些词时,上下文信息会比较短——有时可能只有一两个词。

2、辅助损失(Auxiliary Losses)

  • 在刚开始进行训练时,当transformer的层数超过10层后,模型收敛速度变慢性能变差,为了解决这个问题加入了auxiliary losses
  • 中间层的auxiliary losses:
    • 除了在transformer的最上层进行下一个词的预测以外,我们在transformer的每个中间层也进行了下一个词的预测,这样中间层的每个位置都会有对应的损失函数,就叫做中间层的auxiliary losses,
    • 当然最后所有的损失函数都是要加入到总损失函数中去的,再用总损失函数进行梯度下降算法进行学习。我们这里使用的是加权求和,即每个辅助损失函数以一定的权重加入到总损失函数总去。对于中间层的辅助损失函数的权重我们有两个要:
      • 层越低,权重越小。
      • 假设我们一共有 n n n层,当我训练完成 l / 2 n l/2n% l/2n后,要求第 l l l层的辅助损失权重为0.
        Character-Level Language Modeling with Deeper Self-Attention_第3张图片
  • Multiple Targets的auxiliary losses:
    • 在序列中的每个位置,模型对下一个字符进行两次(或更多次)预测。对每次预测我们使用不同的分类器,这样我们对transformer的每一层的每个位置都会产出两个或多个损失函数,选择一共作为主要损失,其他的都称为字符辅助损失。
    • 每个位置的多个损失需要合并成当前位置的总损失,我们将每个辅助损失乘0.5加上主损失得到当前位置的总损失。
      Character-Level Language Modeling with Deeper Self-Attention_第4张图片

位置编码(Positional Embeddings)

  • 在标准的transform中位置embeding用的是正弦曲线产生的时间信息,并且这个位置embeding是在输入transformer最下层之前加入到词embeding中去的。
  • 由于我们的模型深度比较深,这种时间信号可能在沿着transformer向上传递的时候发生丢失。为了解决这个问题,我们在每一层添加一个维度512的Positional Embeddings矩阵,这些矩阵都是可学习的。这样第 i − 1 i-1 i1层的输出加上第 i − 1 i-1 i1层的Positional Embeddings后再输入到第 i i i层中去。

你可能感兴趣的:(NLP模型)