Transformer解析与tensorflow代码解读

本文是针对谷歌Transformer模型的解读,根据我自己的理解顺序记录的。

另外,针对Kyubyong实现的tensorflow代码进行解读,代码地址https://github.com/Kyubyong/transformer

Layer Normalization

首先是Layer Normalization部分,和Batch Normalization有点不一样,BN能够让模型收敛的更快,但是BN的缺点也比较明显。

BN的缺点:

  1,BN特别依赖Batch Size;当Batch size很小的适合,BN的效果就非常不理想了。在很多情况下,Batch size大不了,因为你GPU的显存不够。所以,通常会有其他比较麻烦的手段去解决这个问题,比如MegDet的CGBN等;

  2,BN对处理序列化数据的网络比如RNN是不太适用的;So,BN的应用领域减少了一半。

  3,BN只在训练的时候用,inference的时候不会用到,因为inference的输入不是批量输入。这也不一定是BN的缺点,但这是BN的特点。

BN是在batch的方向上计算均值方差,而LN是在每一条数据维度的方向上计算均值方差,换句话说,LN的操作类似于将BN做了一个“转置”,对同一层网络的输出做一个标准化。下图比较清晰:

猜你喜欢

转载自www.cnblogs.com/zhouxiaosong/p/11032431.html