トランスフォーマーの論文を読む⑦前方
前回に引き続き、今回も論文を読みながらトランスフォーマーの仕組みを解説します。特に、位置ごとのフィードフォワード(Position-wise Feed-Forward Network)にフォーカスします。
下図にあるように、位置ごとのフィードフォワードはトランスフォーマーのエンコーダとデコーダの両方で使われています。

エンコーダとデコーダの両方で使われている
アテンションが文章からの文脈を取り入れているとすると、位置ごとのフィードフォワードは何をしているのでしょうか。そもそも「位置ごと」とはどう言う意味でしょうか。
では、論文のセクション3.3「Position-wise Feed-Forward Networks」から読み続けましょう。
「位置ごと」とは
論文のセクション3.3「Position-wise Feed-Forward Networks」は、次のように始まります。
エンコーダとデコーダの各レイヤーには、アテンションのサブレイヤーに加えて、位置ごとに別々かつ同一に適用される全結合フィードフォワードネットワークが含まれています。
In addition to attention sub-layers, each of the layers in our encoder and decoder contains a fully connected feed-forward network, which is applied to each position separately and identically.
これは前述した図の中にある位置ごとのフィードフォワードについて述べて美ます。エンコーダとデコーダの中には、アテンション以外に「位置ごとに別々かつ同一」に適用される「全結合フィードフォワードネットワーク」が含まれています。
まず、言葉の意味として「全結合フィードフォワードネットワーク」は、線形層を含んだニューラルネットワークのことです。「全結合」とは、各層のノード(ニューロン)が前の層の全てのノードと接続されている構造を持っていることを指します。「フィードフォワード」は、データが入力から出力へと一方向に流れることを意味しています。ある意味、「畳み込みとか回帰層ではないよ」と言っているわけです。
では、「位置ごとに別々かつ同一」とはどう言うことでしょうか。
まず、「位置ごと」とは、文章におけるトークンの位置を意味します。つまり、「埋め込みベクトル」ごとに処理を行うと言う意味です。これは、アテンション機構が全ての埋め込み(位置)に対して処理行い結果をまとめるのと対照的です。よって、「位置ごとに別々」と強調しているわけです。
また、「同一」とは、位置ごとに別々に処理するけど、その内容(計算の仕方)は同じだということです。
簡単にまとめると、各埋め込みベクトルに対して同じ処理を全結合フィードフォワードネットワークを使って別々に行なっている、となります。
では、全結合フィードフォワードネットワークの中身はどうなっているのでしょうか。
全結合ネットワーク
論文の続きを読みます。
これは、2つの線形変換とその間にReLU活性化関数が適用される構成から成り立っています。
This consists of two linear transformations with a ReLU activation in between.
そして、論文は次の数式を掲示しています。
$$
\text{FFN}(x) = \max(0, xW_1 + b_1) W_2 + b_2
$$
FFNは、Feed Forward Networkの略
xは入力データ(埋め込みベクトル)
$${z_1 = xW_1 + b_1}$$は、最初の線形変換。
$${z_2 = \max(0, z_1)}$$は、ReLUの処理を数式で示したもの。
$${z_2 W_2 + b_2}$$は、2番目の線形変換。
要するに、埋め込みベクトルに対して、線形層、ReLU、線形層の処理を施しているだけです。
上式を図にすると次のようになります。

なお、実際の処理では、PyTorchなどのライブラリを使って、全ての位置に対して上記の処理を並列に実行することが出来ます。また、バッチ処理もできます。
続きを読みます。
線形変換は異なる位置にわたって同じですが、レイヤーごとに異なるパラメータが使用されます。
While the linear transformations are the same across different positions, they use different parameters from layer to layer.
「線形変換は異なる位置にわたって同じです」と言っているのは、前述した「位置ごとに別々かつ同一」と同じことで、構造としては同じ全結合ネットワークが使われています。

「レイヤーごとに異なるパラメータが使用されます」は、エンコーダやデコーダを複数のブロックが積み重ねられた構造としてみたときに、各ブロックにおけるパラメータの値(重み、バイアスなど)は、異なっているということです。

畳み込みニューラルネットワークでも同様で、同じ畳み込みブロックが繰り返されているとしても各ブロックの中のパラメータはそのブロック特有であるのと同じことです。
もちろん、位置ごとのフィードフォワードだけでなく、アテンション機構も含めて、全てのパラメータは、属するブロック特有のものです。
しかし、実際のところ、位置ごとのフィードフォワードが行う処理の意味はなんなのでしょうか。
これに関しては、位置ごとのフィードフォワードを違った観点から解釈することで理解が深まります。
1x1畳み込みとの比較
論文は、こう続きます。
これを別の方法で表現すると、カーネルサイズ1の2つの畳み込みとして説明できます。
Another way of describing this is as two convolutions with kernel size 1.
埋め込みベクトルのシーケンスを、横一列に並んだピクセルとして考えると、埋め込みベクトルの次元数は、画像のチャンネル数に相当します。

位置ごとのフィードフォワードでは、埋め込みベクトルごとに、二つの線形層(全結合層)を適用しますが、これをカーネル1の二つの畳み込み、つまりは、1x1畳込み、ReLU、1x1畳込みを行なっていると捉えることが出来ます。
このように解釈すると何が嬉しいのでしょうか。
入力と出力の次元は $${d_{\text{model}} = 512}$$ であり、内部レイヤーの次元は $${d_{\text{ff}} = 2048}$$ です。
The dimensionality of input and output is $${d_\text{model} = 512}$$, and the inner-layer has dimensionality $${d_ff = 2048}$$.
ここでは淡々と次の事実を述べています。位置ごとのフィードフォワードの入力(埋め込みベクトル)と出力(埋め込みベクトル)の次元数$${d_\text{model}}$$は512ですが、中間の次元数$${d_{ff}}$$はその4倍の2048となっています。
「だから、何?」とツッコミたくなりますが、このセクションは以上で終わっています。実は、ここでの解釈は前述の1x1畳み込みと関係があります。
つまり、位置ごとのフィードフォワード$${FFN(x)}$$が、行なっていることは、1x1畳み込みを使って、一時的に埋め込みの次元数(画像ならばチャンネル数)をより高次元にしているということです。そして非線形であるReLUを適用しています。
ここで一旦、画像処理を思い浮かべてください。
1x1畳み込みを用いることで、異なるチャネル(特徴マップ)間の情報を統合することができます。これにより、ネットワークがチャネル間の関係を学習し、より複雑な特徴を抽出する能力が向上します。
中間層の次元を一時的に増やす(拡張)ことで、より少ないパラメータで高い次元の特徴空間を探索することが可能になります。このテクニックは、パラメータの数を増やすことなくモデルの表現力を高める方法として有効です。
1x1畳み込みの後に活性化関数(ReLU)を適用することで、モデルに非線形性を導入し、より複雑な関数の近似が可能になります。これはネットワークがより複雑なパターンを学習するのに役立ちます。
これらの利点は、チャンネルの数を一時的に拡張することがカギとなっています。このことから、MobileNet V2の反転残差ブロックを思い浮かべた方もいるでしょう。
これを位置ごとのフィードフォワードに当てはめると、各埋め込みベクトルの次元数を一時的に拡張して埋め込みベクトル内の要素値の複雑な関係や特徴を抽出することが可能となるということです。
トランスフォーマーでは回帰層や畳み込み層がないことにはなっていますが、実際には、1x1畳み込みが行われていると解釈できると言うわけです。
位置ごとのフィードフォワード
ここで、位置ごとのフィードフォワードの役割をアテンション機構との関連において考えてみましょう。
アテンション機構では、入力シーケンスのすべての埋め込みベクトル間の複数の関係の強さを使って、必要な文脈情報を埋め込みベクトルへと抽出していきました。
一方で、位置ごとのフィードフォワードネットワークは、アテンション機構によって得られた文脈情報を含む各埋め込みベクトルを独立に処理します。このステップでは、各位置のベクトルが個別に変換され、その情報がより豊かになるように操作されます。このプロセスにより、モデルは各位置の特徴をさらに洗練させることができます。
よって、トランスフォーマーでは、これら二つのステップをエンコーダとデコーダの各レイヤーで繰り返すことで、シーケンス全体の文脈を捉えつつ、各位置の情報を詳細に分析・充実させることができます。
このようなトランスフォーマーの仕組みを畳み込みニューラルネットワークを使った画像処理と比較してみましょう。
画像は2次元の広がりを持ち、また、隣り合ったピクセルとの関係が重要なので、畳み込みカーネルを使った処理が行われます。そして、次元数を増減させながら各位置(ピクセル)の情報を充実させていきます。
一方、トランスフォーマーは、シーケンス(1次元)の情報を扱いますが、シーケンス内の全ての埋め込みベクトル(ピクセルに相当)の間の関係が重要なのでアテンションによる処理が行われ、さらに次元数を増減させながら各位置(トークン)の情報を充実させているというわけです。
こうして考えると、画像モデルも言語モデルも突き詰めると似たようなことを行なっていると言えます。
トランスフォーマーにおける処理は、後に画像処理に応用されます。有名なのは、ビジョン・トランスフォーマーです。
次回予告
次回も論文の続きであるセクション3.4「Embeddings and Softmax」を読み進めていきます。
お楽しみに!
