このシリーズではE資格対策として、シラバスの内容を項目別にまとめています。

E資格まとめ

試験概要 ディープラーニングの理論を理解し、適切な手法を選択して実装する能力や知識を有しているかを認定する。 1.応用数学 (1)確率・統計 (2)情報理論 2.機…

Transformer

Transformerの概要

RNN(Recurrent Neural Network)により時系列データの処理がうまく行えることが分かっている一方で、計算効率の問題がありました。逐次的な計算が必要であるため、時間がかかります。そこでRNNのような性能を持ちながら、より効率的な計算が可能なモデルの開発が求められていました。その結果として登場したのが、トランスフォーマー(Transformer)です。

トランスフォーマーは、RNNを使用せずに、アテンションの概念だけで機械翻訳問題を解くためのモデルで、Ashish Vaswaniらによって提案されました。このモデルは、翻訳タスクにおいて当時の最高性能を達成し、以降、機械翻訳の主流となりました。

アテンションの概念

トランスフォーマーの中核となるのが、アテンションと呼ばれる概念です。アテンションは辞書オブジェクトとして解釈され、質問文(Query)を入力すると、参照すべき場所(Key)が決まり、その場所の値(Value)が得られる仕組みです。ソフト・アテンションでは、参照すべき場所の重みに応じて値を平均化し、回答を得ています。この概念はメモリに相当する部分として機能します。

ソースターゲット・アテンションとセルフ・アテンション
トランスフォーマーでは、特にソースターゲット・アテンションとセルフ・アテンションの2つの種類のアテンションが用いられています。

ソースターゲット・アテンション: 2つの系列間の対応関係を捉える目的で用いられます。Queryはデコーダ側、KeyとValueはエンコーダ側に位置付けられます。
セルフ・アテンション: 文章内の単語間の関係を捉える目的で使用されます。Query、Key、Valueが同じ単語から生成され、各単語が文章中のすべての単語と比較される構造です。

Transformerの構成

エンコーダ
エンコーダは、入力系列を連続的なベクトル表現に変換する役割を果たします。エンコーダは通常、同じ構造を持つ複数のレイヤーから構成されます。各レイヤーには以下の2つの主要な部分があります。

セルフ・アテンション層: 入力系列の各単語が、系列内の他のすべての単語とどれだけ関連しているかを計算します。これにより、文脈に応じた単語の表現が可能になります。
フィードフォワード・ニューラルネットワーク: アテンション層の後に続く、全結合のニューラルネットワークです。各位置で同じフィードフォワード・ネットワークを独立して適用します。
これらの層の間には、正規化層が挿入され、各部分の出力がスムーズに連結されます。

デコーダ
デコーダは、エンコーダの出力を利用してターゲット系列を生成する役割を果たします。エンコーダと同様に、デコーダも複数のレイヤーから構成されますが、以下の3つの主要な部分があります。

セルフ・アテンション層: ターゲット系列の文脈を捉えます。ただし、未来の情報を見ないようにマスキングが行われます。
エンコーダ-デコーダ・アテンション層: エンコーダの出力とデコーダの出力を照合し、デコーダがエンコーダの出力にどれだけ注意を払うべきかを学習します。
フィードフォワード・ニューラルネットワーク: エンコーダと同様の構造を持つこの部分が、最終的な出力を生成します。
エンコーダとデコーダの各レイヤーは、多層の構造を持っており、その数や構造はタスクやデータに応じて調整されます。

位置エンコーディング
トランスフォーマーでは、単語の順序情報を捉えるために、位置エンコーディングが用いられます。これは入力埋め込みに追加され、系列内の各単語の位置をモデルに提供します。

マルチヘッド・アテンション(Multi-head attention)

1) 入力単語
入力として、系列内の単語が与えられます。

2) 単語の埋め込み
各単語は、ベクトルに埋め込まれる。この埋め込みベクトルが、以降の計算の基礎となります。

3) ヘッド毎の変換
論文では、通常8つのヘッドを用いるとされています。各ヘッドには独自の重み行列Wiがあり、これを埋め込みベクトルXに掛けることで、各単語埋め込みをQuery(i)、Key(Ki)、Value(Vi)に変換します。

4) 各ヘッドのアテンション計算
各ヘッドで計算されたQiKiViを用いて、アテンションの結果Ziが計算されます。具体的には、

$$ Z_i = \text{softmax}\left( \frac{{Q_i K_i^T}}{{\sqrt{{d_k}}}} \right) V_i $$


にSoftmax関数を適用し、その結果をViと掛け合わせることで得られます。ここで、dkはKeyベクトルの次元数です。

まとめ

最後までご覧いただきありがとうございました。