2021SC@SDUSC
经过阅读paddle的源码,我理解了动态图下的Transformer encoder源码实现,由于这个实现比较复杂,因此我将通过两个博客来对Transformer encoder的源码实现进行说明。
Transformer的每个Encoder子层(bert_base中包含12个encoder子层)包含 2 个小子层 :
- Multi-Head Attention
- Feed Forward
(Decoder中还包含Masked Multi-Head Attention)
class 有如下几个:
PrePostProcessLayer | 用于添加残差连接、正则化、dropout |
PositionwiseFeedForwardLayer | 全连接前馈神经网络 |
MultiHeadAttentionLayer | 多头注意力层 |
EncoderSubLayer | encoder子层 |
EncoderLayer | transformer encoder层 |
在动态图中,网络层的实现继承paddle.fluid.dygraph.Layer,类内方法__init__是对网络层的定义,forward是跑前向时所需的计算。
具体实现如下,对代码的解释在注释中:
一些必要的导入
"dygraph transformer layers"
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import numpy a