BERT收敛

时间:2020-01-27 12:09:04

标签: tensorflow keras deep-learning nlp bert-language-model

我正在对80m对推文集上的ALBERT进行一些修改来训练自己的BERT实现,如果网络很深,网络将不会收敛。

我做的第一个实验是使用6层,6个关注头,dim_qkv = 64,一个产品密钥存储层以及本文中建议的超参数,动态屏蔽,跨层参数共享(全部共享), E = 128和H = 768,针对批量大小为1024的梯度累积,以及LAMB作为优化器(我还用Adam + Noam Learning Rate衰减进行了一些实验,结果相似)。所有的Transformer层都使用GELU激活功能和LayerNormalization;按照ALBERT的建议,产品密钥存储器使用BatchNormalization,并且在实验中未使用Dropout。

此模型在经过约30分钟的训练(约90000个样本)后开始改进,但是,当我将层数和关注头数更改为8时,它无法开始进行改进(卡在同一时刻的训练中)损失和准确度值,在掩盖语言模型上准确度约为3%。

在失败之后,按照BERT的实现,我将权重初始化从glorot_uniform更改为stddev = 0.02的truncated_normal,并且具有8层和8个关注头的模型现已收敛。问题是,当我尝试将层数和注意头数增加到大于8的值时。

我尝试使用10、12和16层,但即使经过12小时的训练(〜10m样本),它们都没有开始改善。损失和准确性的提高非常缓慢(〜停留在相同的损失和准确性上)。

为了使这些深度网络的培训更加稳定,我完全失去了以下步骤。有没有人经历过与这些类型的模型类似的事情,或者可以给我一些见解?

编辑:

由Adam + Noam更改LAMB优化器并进行6000个预热步骤,经过2小时的训练,具有10层模型的模型开始改善。

0 个答案:

没有答案