🗂
RNNとLSTMからAttention→Self Attentionへ
1. RNNとLSTMの主な問題点
1-1. 系列長に関する問題
- エンコーダ・デコーダモデルでは、入力系列全体の情報を固定長のベクトル(隠れ状態)に圧縮
- 長い系列になればなるほど、情報の圧縮率が高くなり、情報損失が発生
例:100単語の文章も500単語の文章も、同じ大きさの隠れ状態(例:256次元)に押し込める必要がある
1-2. 長距離依存の問題
- 理論的にはLSTMは長距離の依存関係を扱えるが、実際には限界がある
- 系列が長くなると、初期の情報が徐々に失われていく
例:「私は今朝... (長い文章) ...を食べた」という文で、
「食べた」の主語が遠く離れた「私は」であることを認識するのが困難
1-3. ボトルネック問題
# RNN/LSTMのエンコーダ・デコーダモデルの概念図
input_sequence = ["I", "am", "a", "student"]
hidden_state = encoder(input_sequence) # 全ての情報を1つのベクトルに圧縮
output_sequence = decoder(hidden_state) # この1つのベクトルから全て復元しなければならない
2. Attention機構による解決
2-1. 情報圧縮の回避
# Attentionモデルの概念図
input_sequence = ["I", "am", "a", "student"]
encoder_outputs = encoder(input_sequence) # 各入力位置の情報を保持
# デコード時に必要な情報に直接アクセス可能
output_word = decoder(current_state, encoder_outputs) # 全入力情報が利用可能
2-2. 直接的なアクセス
- デコーダが出力を生成する際、入力系列の全ての位置に直接アクセス可能
- 必要な情報を動的に選択して使用
2-3. パフォーマンスの向上
従来のLSTM翻訳:
"I ate an apple" → 隠れ状態に圧縮 → "私はりんごを食べた"
Attentionありの翻訳:
"I ate an apple" → 各単語の情報を保持
"私は" を生成時 → "I" に注目
"りんご" を生成時 → "apple" に注目
"食べた" を生成時 → "ate" に注目
Attention機構は、RNNやLSTMの根本的な制約を解消し、より柔軟な情報処理を可能にした。特に機械翻訳などの系列変換タスクで大きな性能向上をもたらした。
なお、これらの問題点は必ずしもRNNやLSTMの欠陥というわけではなく、系列データを扱う上での本質的な課題だった。Attention機構は、これらの課題に対する新しいアプローチを提供したと言える。
3. 通常のAttention(Cross-Attention)とSelf-Attentionの違い
3-1. 入力ソースの違い
Cross-Attention
- 異なる2つのシーケンス間の関係性を学習
例:機械翻訳
ソース文: "I love programming"
ターゲット文:"私は" という部分を生成する時
- Query:「私は」の隠れ状態
- Key, Value:ソース文"I love programming"の各単語の表現
Self-Attention
- 同一シーケンス内での関係性を学習
例:文章理解
入力文:"The cat sat on the mat"
"sat" の処理時:
- Query:「sat」の表現
- Key, Value:同じ文の全単語("The", "cat", "sat", "on", "the", "mat")の表現
3-2. シーケンス内の相互関係の捉え方
Cross-Attention
- 非対称な関係
- 一方のシーケンスから他方のシーケンスへの一方向の関係性
- Query側とKey/Value側で異なる役割
- 処理の特徴
例:翻訳タスク
英文の"bank"に対する日本語訳を生成時:
- 前後の英単語との関係を考慮
- 既に生成された日本語訳は考慮するが、まだ生成していない日本語訳は考慮しない
Self-Attention
- 対称的な関係
- 同一シーケンス内の全ての位置が互いに関係し合う
- 各位置が他の全ての位置との関係性を学習
- 処理の特徴
例:文章理解タスク
"The bank near the river" の "bank" の意味理解:
- 前後の単語("the", "near", "the", "river")との関係を同時に考慮
- 位置に関係なく、文全体からの情報を利用可能
3-3. 応用場面の違い
Cross-Attention
- 主な用途
- 機械翻訳
- 質問応答
- 画像キャプション生成
- 具体例
機械翻訳:
入力:英語文
出力:日本語文
特徴:異なる言語間の対応関係を学習
質問応答:
入力:質問文と文書
出力:回答
特徴:質問と文書の関連部分を発見
Self-Attention
- 主な用途
- 文章の意味理解
- 文章の特徴抽出
- 系列データの前処理
- 具体例
感情分析:
入力:「この製品は使いやすいが、価格が高い」
処理:文中の各単語が他の単語とどう関係するかを分析
- 「使いやすい」(ポジティブ)
- 「価格が高い」(ネガティブ)
両方の要素を考慮した総合的な判断が可能
文法解析:
入力:「The cat that chased the mouse escaped」
処理:長距離依存関係の把握
- 「cat」と「escaped」の主語-動詞関係を直接認識可能
3-4. 実装上の重要な違い
Cross-Attention
# 異なるソースからのQ, K, V
query = decoder_state # デコーダーの状態
key = encoder_outputs # エンコーダーの出力
value = encoder_outputs # エンコーダーの出力
Self-Attention
# 同じ入力からQ, K, V生成
query = linear_q(input_sequence)
key = linear_k(input_sequence)
value = linear_v(input_sequence)
3-5. 両者の組み合わせ
Transformerでは両方のAttentionを使用:
- エンコーダー:Self-Attentionで入力の理解
- デコーダー:
- Self-Attentionで出力の整合性確保
- Cross-Attentionでエンコーダーの情報を参照
このように、Cross-AttentionとSelf-Attentionは、異なる特徴と用途を持ちながら、相補的に機能する。タスクの性質に応じて適切な方式を選択、または組み合わせることが重要だ。
Discussion