PTM学习笔记

1、ALbert

BERT不足:只把BERT的宽度增加到2倍(hidden Size 从1024增加到2048),发现参数已经达到了12亿7千万个,内存直接爆了。

Attention feed-forward block占总共参数的80%左右,Token embedding projection block占参数的20%左右。

ALBERT在同一任务时效果没BERT好的原因:可能是feed forward 层共享,效果会下降

 

ALBERT模型为了给BERT瘦身,让模型更大的BERT有算力能跑起来。作者通过权值共享和矩阵分解减少参数。

  • 改进BERT:主要是不同层之间共享参数,以及用矩阵分解降低embedding的参数
  • 降低了空间复杂度,但计算量并没有减少,所以在模型进行下游任务和预测的时候并不会更快。

所以作者说现在优化BERT的方法也是往时间复杂度的方向优化。

  • Factorized Embedding Parameterization,矩阵分解降低embedding参数量。
  • Cross-layer Parameter Sharing,不同层之间共享参数。
  • Sentence Order Prediction(SOP),next sentence任务的负样本增强。

对BERT进行了三个改造

1)词嵌入向量参数的因式分解 Factorized embedding parameterization

O(V * H) to O(V * E + E * H)

V:词表大小;H:隐层维度;E:词向量维度 

如以ALBert_xxlarge为例,V=30000, H=4096, E=128
   
那么原先参数为V * H= 30000 * 4096 = 1.23亿个参数,现在则为V * E + E * H = 30000*128+128*4096 = 384万 + 52万 = 436万,

词嵌入相关的参数变化前是变换后的28倍。

以 BERT-Base 为例

  • 以 BERT-Base 为例,Base中的Hidden size 为768, 词表大小为3w,此时的参数量为:768 * 3w = 23040000。
  • 如果将 Embedding 的维度改为 128,那么此时Embedding层的参数量为: 128 * 3w + 128 * 768 = 3938304。二者的差为19101696,大约为19M。
  • 其实Embedding参数量从原来的23M变为了现在的4M,似乎变化特别大,然而当我们放到全局来看的话,BERT-Base的参数量在110M,降低19M也不能产生什么革命性的变化。
  • 因此,可以说Embedding层的因式分解其实并不是降低参数量的主要手段。

先把第一次的映射放到很低的维度,然后在映射为我们需要的维度。这样做有两个好处:

  • 词的Context independent表示与Context dependent表示之间解锁,可以自由的对Context dependent表示进行加高,也就是网络变宽。
  • One-hot向量到第一次映射的参数非常多,可以把这块参数变的非常小。(BERT的One-hot向量输入,第一次投影是词与词之间是没有交互的。只有到了做Attention时,词与词之间才有交互。因此第一次投影不需要很高维度的向量。)

矩阵分解本质上就是一个低秩分解的操作,其通过对Embedding 部分降维来达到降低参数的作用。

  • 在最初的BERT中,以Base为例,Embedding层的维度与隐层的维度一样都是768,
  • 但是对于词的分布式表示,往往并不需要这么高的维度,比如在Word2Vec时代最多采用50或300这样的维度。
  • 那么一个很简单的思想就是,通过将Embedding部分分解来达到降低参数量的作用

2)跨层参数共享 Cross-Layer Parameter Sharing

 参数共享能显著减少参数。共享可以分为全连接层、注意力层的参数共享;注意力层的参数对效果的减弱影响小一点。

ALBERT提出的另一个减少参数量的方法就是层之间的参数共享,即多个层使用相同的参数。

参数共享有三种方式:只共享feed-forward network的参数、只共享attention的参数、共享全部参数。ALBERT默认是共享全部参数的。

可以理解为此时的权值共享并不是说12层transformer_encoder的值是一样的,只是占用了同一变量,所以模型的计算量并没有少,只是参数个数变成了原来的12分之一。

3)段落连续性任务 Inter-sentence coherence loss

使用段落连续性任务。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了。
 
避免使用原有的NSP任务,原有的任务包含隐含了预测主题这类过于简单的任务。

SOP 全称为 Sentence Order Prediction,其用来取代 NSP 在 BERT 中的作用,毕竟一些实验表示NSP非但没有作用,反而会对模型带来一些损害。

SOP的方式与NSP相似,其也是判断第二句话是不是第一句话的下一句,但对于负例来说,SOP并不从不相关的句子中生成,而是将原来连续的两句话翻转形成负例。

4)其他变化

1)去掉了dropout  Remove dropout to enlarge capacity of model.
    Further increase model capacity by removing dropout
    最大的模型,训练了1百万步后,还是没有过拟合训练数据。说明模型的容量还可以更大,就移除了dropout
    (dropout可以认为是随机的去掉网络中的一部分,同时使网络变小一些)
    We also note that, even after training for 1M steps, our largest models still do not overfit to their training data. 
    As a result, we decide to remove dropout to further increase our model capacity.
    其他型号的模型,在我们的实现中我们还是会保留原始的dropout的比例,防止模型对训练数据的过拟合。
    
2)为加快训练速度,使用LAMB做为优化器 Use LAMB as optimizer, to train with big batch size
  使用了大的batch_size来训练(4096)。 LAMB优化器使得我们可以训练,特别大的批次batch_size,如高达6万。

3)使用n-gram(uni-gram,bi-gram, tri-gram)来做遮蔽语言模型 Use n-gram as make language model
   即以不同的概率使用n-gram,uni-gram的概率最大,bi-gram其次,tri-gram概率最小。
   本项目中目前使用的是在中文上做whole word mask,稍后会更新一下与n-gram mask的效果对比。n-gram从spanBERT中来。

https://github.com/brightmart/albert_zh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值