NEZHA: Neural Contextualized Representation for Chinese Language Understanding(2019-8-31)

模型介绍

NEZHA整体上是基于BERT的改进。在NEZHA中使用的是函数式相对位置编码,而在原始的Transformer和BERT中每个词使用的是绝对位置编码。位置编码信息直接加到词嵌入作为Transformer的输入。位置编码一般有2种方式:

  • 函数式编码。通过预定义函数(如正弦函数)直接给出位置编码。
  • 参数式编码。此时的位置编码作为模型参数的一部分,通过学习得到。参数式位置编码涉及两个概念,一个是距离,表示这个词离“我”有多远,另一个是维度,Word Embedding一般有几百维,比如512维,每一维有一个值,通过位置和维度两个参数来确定一个位置编码的值。比如有学者提出一种参数相对位置编码方法,将相对位置信息加入到Transformer的自注意力层中。再往后发展二者的结合体,比如Transform-XL和XLNet使用正弦编码矩阵(非学习得到)和两个偏置项(训练学习到的)表示相对位置编码。

NEZHA使用函数式相对位置编码,通过预定义函数的方式在自注意力层编码相对位置。实验结果表明,该方法是一种有效的位置编码方案,并在实验中取得了一致的效果。此外,NEZHA在训练过程中使用了三种已被证明是有效的预训练BERT技术,即全词覆盖,混合精度训练和LAMB优化。

模型改进

Functional Relative Positional Encoding

在目前版本的NEZHA中,使用了函数式相对位置编码,通过相对位置的正弦函数来计算输出和注意力分数。这种想法得益于Transformer中使用的函数式绝对位置编码。具体的, a i j V a_{ij}^V aijV a i j K a^K_{ij} aijK 都来源于正弦函数,并且在训练期间固定。为了更加清晰,使用 a i j a_{ij} aij 来表示公式中的 a i j V a_{ij}^V aijV a i j K a^K_{ij} aijK 。分别考虑 a i j a_{ij} aij 维度为 2k 的 2k+1 的情况:

a i j [ 2 k ] = sin ⁡ ( ( j − i ) / 1000 0 2 ⋅ k d z ) a_{ij}[2k]=\sin((j-i)/10000^{\frac {2\cdot k} {d_z}}) aij[2k]=sin((ji)/10000dz2k)

a i j [ 2 k + 1 ] = cos ⁡ ( ( j − i ) / 1000 0 2 ⋅ k d z ) a_{ij}[2k+1]=\cos((j-i)/10000^{\frac {2\cdot k} {d_z}}) aij[2k+1]=cos((ji)/10000dz2k)

每一个维度是根据正弦函数来进行位置编码的,不同维度正弦编码有不同的波长。上述公式中, d z d_z dz 表示 NEZHA 模型的每个 head 的隐含层大小。波长是一个从 2 π 2\pi 2π 到10000 ⋅ 2 π 2\pi 2π 的几何级数。选择固定正弦函数,可以使该模型具有更强的扩展性;即当它遇到比训练中序列长度更长的序列时,依然可以发挥作用。

Whole Word Masking(WWM)

在初始的BERT中,每个token或者每个汉字都是随机覆盖的。而 NEZHA 预训练模型,则采用了全词覆盖(WWM)策略,当一个汉字被覆盖时,属于同一个汉字的其他汉字都被一起覆盖。该策略被证明比 BERT 中的随机覆盖训练(即每个符号或汉字都被随机屏蔽)更有效。在 NEZHA 的 WWM 实现中,使用了一个Jieba进行中文分词。在 WWM 训练数据中,每个样本包含多个覆盖汉字,覆盖汉字的总数约占其长度的 12%,随机替换的占 1.5%。尽管这样预测整个词运算难度有所增加,但最终取得的效果更好。

Mixed Precision Training

在 NEZHA 模型的预训练中采用了混合精度训练技术。该技术可以使训练速度提高2-3倍,同时也减少模型的空间占用,从而可以利用较大的batch size。

传统的深度神经网络训练使用 FP32 (即单精度浮点格式)来表示训练中涉及的所有变量(包括模型参数和梯度);而混合精度训练在训练中采用了多精度。具体来说,它重点维持模型中权重的单精度副本(称为主权重),即在每次训练迭代中,将主权重舍入为FP16(即半精度浮点格式),并使用 FP16 格式存储的权重、激活和梯度执行向前和向后传递;最后将梯度转换为FP32格式,并使用FP32梯度更新主权重。

LAMB Optimizer

LAMB 优化器是专为深度神经元网络大batch size同时分布式训练而设计。尽管使用大的batch size训练可以有效地加快 DNN 训练速度,但是如果不仔细调整学习率,当batch size处理的大小超过某个阈值时,模型的性能可能会受到很大影响。LAMB 优化器则不需要手动调整学习率,而是采用了一种通用的自适应策略。优化器通过使用非常大的batch size(实验中高达 30k 以上)来加速BERT的训练,而不会导致性能损失,甚至在许多任务中获得最先进的性能。值得注意的是,BERT的训练时间最终从3天显著缩短到 76 分钟。

模型参考

论文地址:https://arxiv.org/abs/1909.00204

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值