PositionwiseFeedForward
OpenNMT-py/onmt/modules/position_ffn.py
深層学習界の大前提Transformerの論文解説! external_linkの1.3.3 Position-wise 順伝播ネットワーク external_link より引用
各ブロックのAttention層のあとに入っているPosition-wise 順伝播ネットワーク。 Position-wiseというのはただ単に、各単語ごとに独立してニューラルネットワークがあるということ(ただし、重みは共有)。 ニューラルネットワーク内では他単語との干渉はない。2層のニューラルネットワークになっている。
- d_model: モデルの次元数
- d_ff: ニューラルネットワークの階層数
class PositionwiseFeedForward(nn.Module): def __init__(self, d_model, d_ff, dropout=0.1): super(PositionwiseFeedForward, self).__init__() self.w_1 = nn.Linear(d_model, d_ff) self.w_2 = nn.Linear(d_ff, d_model) self.layer_norm = nn.LayerNorm(d_model, eps=1e-6) self.dropout_1 = nn.Dropout(dropout) self.relu = nn.ReLU() self.dropout_2 = nn.Dropout(dropout) def forward(self, x): inter = self.dropout_1(self.relu(self.w_1(self.layer_norm(x)))) output = self.dropout_2(self.w_2(inter)) return output + x
Position-wise Feedforward Network external_link
作って理解する Transformer / Attention external_linkから引用。
各 Hopping の Attention のあとには FFN をはさむ。