サブロウ丸

サブロウ丸

主にプログラミングと数学

Transformerによる翻訳システム自作; part4 FeedForward & Residual Connection

本稿ではFeedForward層とResidual connection(残差接続)、正規化層を導入します。Transformerはattention機構とFeedForward機構から構成されており、それぞれに対して残差接続が行われています。

実装

FeedForward

FeedForwardとは循環構造を持たないニューラルネットワークの総称です。Transformerでは単純に隠れ層が1つの全結合層が用いられます。また隠れ層の次元は通常入力次元とは大きなものが用いられ出力次元は入力次元と同じものに設定されます。

さてそれではなぜこのfeedforward層が必要なのでしょうか。少なくともattentionは結局Value部分の平均化操作にすぎないため、非線形変換や、活性化関数的操作、それ以上の操作を行いたい場合はこのような追加の層が必要です(参考: natural language - What is the role of feed forward layer in Transformer Neural Network architecture? - Cross Validated)。ニューラルネットワークでは多様な変換が行える機構が(それが必要かどうかはおいといて)含まれている方が良いのでしょう。

他: [2012.14913] Transformer Feed-Forward Layers Are Key-Value Memories

コード差分

Residual connection

日本語で残差接続です。ReLUやバッチ正則化と並ぶ、深層ニューラルネットワークの要とされています。

図のようにxを入力する関数の出力y=g(x)とxを合算したものを最終的な出力とします。 この残差接続により、勾配消失を防げたり、深い層のモデルの学習を安定させる効果がある(そうです)。

また計算グラフにおけるbackward計算処理も簡単で、単純にaddのノードに到達した勾配をそのままxのノードへ送るだけです。

コード差分

正規化層

入力するミニバッチデータに関して正規化を行います。(同じ箇所のデータが平均0分散1になるように変換します。)これは学習を安定させる効果があります。

コード差分

全体の構成

コード

まとめ

本稿ではfeed forward層、residual connection、正規化層を追加し、その実装を示しました。

他の記事