現在の言語モデルの比較のきっかけとなった「Attention」、「Transformer」について。
目次
AI・ディープラーニングの全体像
- 人工知能
- 機械学習
- ディープラーニングの基本・応用
- ディープラーニングの研究
- AIプロジェクト
- AI社会実装に伴う法律・倫理
Attention、Transformerの概要
- 「Transformer」→2017年、Googleの研究チームが開発
- 従来のRNNの言語モデルの課題(入力系列が長くなると遠く離れた単語間の関係や文脈を正しく把握しなくなる、入力データをステップごとに処理する必要があるため並列処理ができない)への対応が改善
- 長い文章の解析精度の飛躍的向上に貢献
- Transformerの内部構造にある「Attention(注意機構)」がキーとなっている
- 「Attention」→各時刻における情報の「重要度(重み)」を計算し、重要度の高い情報に”注意”を向けて学習(重要な内容を優先)する手法
- 文が長くとも、単語同士が離れていても、すべての単語の関係性を網羅的に把握し、それぞれの単語が果たしている役割を理解することができる
- Attentionを内蔵することで、Transformerは自然言語処理で優れた性能を発揮できている
- LLM(大規模自然言語モデル)の大部分はTransformerを使用して開発されている
- 文章生成においては、先行する文章中の単語の関係性を理解し、広い文脈を考慮しながら、次に来るべき単語を予測し、適切な文章を生成する
- Attentionには複数の種類があり、隠れ層の重みに着目するという点が共通している
- 「Source-Target Attention」→異なる系列間の関連性を評価する
- 「Self-Attention」→同じ系列内の関連性を評価する
- 「Multi-Head Attention」→Attentionを並列に並べることで性能向上を図っている
従来のRNNのモデル
Attentionモデル
Attention
Self-Attention
- 「Self-Attention(自己注意機構)」→入力された系列(文)の”各単語が他のすべての単語とどの程度関連しているか”を計算する機能
- 特定の時刻の単語に重要度(重み)を付加することと等価である
- 文脈全体を考慮しながら各単語を解釈、単語の分散表現を生成・更新できる
- 結果として、長い範囲にわたる依存関係を把握しやすくなった
- 従来のRNNを用いたエンコーダ・デコーダモデルの課題
:過去のある時刻の情報が現在の予測にどれだけ影響するかを算出することができないため、過去の時刻で読み込んだ単語列の影響が時間とともに薄れてしまい、文中の単語間の関係性や文脈を理解することが困難 - 従来のRNN:単語間の関係を計算するためには、単語数の分だけのステップが必要になってしまう
⇔Self-Attention:単語ごと「並列」に計算でき、一文のすべての単語間の関係を、わずか1ステップで高速に計算できる
Source-Target Attention
- 「Source-Target Attention」→入力系列(Source文)の各部分に対する出力系列(Target文)の各単語の関係性を解析する仕組み
- Seq2Seqモデルと同様、エンコーダとデコーダから構成されている
- エンコーダ:入力されたSource文を処理し、それをモデルが理解できる内部状態(エンコーディング)に変換し、デコーダに伝える
- デコーダ:エンコーダからの出力に基づき、Target文を生成する
(生成すべき次の単語に最も関連する部分を特定し、それらに「注意」を払いつつ、出力系列を生成する) - ニューラル機械翻訳において、2017年、新しいニューラル機械翻訳のモデルとしてTransformerが用いられる
- エンコーダとデコーダに、RNNの代わりに「Self-Attention」を採用、入力と出力の間の橋渡しをするために、「Source-Target Attention」が利用されている
- Attentionの性能により、離れた位置にある単語同士の関係性を捉えやすくなり、長文の翻訳の精度が飛躍的に向上
- RNNを使用しないことで並列計算が可能になり、データ処理やモデルの学習が高速化された
Transformer
ニューラル翻訳モデルを例とし、Transformerのアーキテクチャを確認。
概要
- Tansformerの主要な構成要素:エンコーダとデコーダ
- エンコーダ:入力文(翻訳前の文)を処理
(複数のSelf-Attentionのレイヤーを持つ) - デコーダ:出力文(翻訳後の文)を一単語ずつ順番に生成
(複数のSelf-Attentionのレイヤーを持ち、Source-Target Attentionのレイヤーを持つ)
Self-Attentionの役割
エンコーダの「Self-Attention」 | 入力文の「各単語と他の単語の関連度」を計算、各時刻の単語の隠れ状態に対し、文脈に即した表現(エンコーディング)を生成し、出力する |
---|---|
デコーダの「Self-Attention」 | デコーダへ入力される「前の時刻で生成された出力単語」との関係を捉え、出力系列の生成において、適切に次の単語が選ばれることに寄与する ※「Masked Self-Attention」→通常のSelf-Attentionと同様の役割を果たすとともに、未来のトークンにアクセスできないようマスキングし、”各ステップでの出力がそれまでの出力にのみ依存する”という自己回帰的な性質を実現 |
Source-Target Attentionの役割
- デコーダに対し、「エンコーダが処理した各単語を、デコーダがどの程度重視するか」を指示する
- 2種類のAttentionのそれぞれが、Transformerのパフォーマンスに重要な役割を果たす
- これらが同時に作動することにより、ある時刻の単語を生成する際、前の時刻の出力およびエンコーダに入力された系列の中から、影響力の高い単語に注意を向けることができる
Positional Encoding
- Self-Attentionの長所:単語の関係性と文脈を高速に計算できる
- Self-Attentionの短所:「語順」に関する情報を直接考慮できない
(入力される単語の順序が変わっても、出力が変わらないという問題) - 「位置エンコーディング(Positional Encoding)」→単語の順序に関する情報を入力に加味する
- 各単語が系列中の何番目の位置にあたるかを一意に区別するための位置情報をベクトルとして表現し、これらの位置ベクトルを単語の埋め込みベクトルに追加する
- 位置ベクトルへの変換には、符号化関数(三角関数など)を用いる
- 単語の絶対的位置情報だけでなく、単語間の相対的位置関係を埋め込むこともある
- 単語の位置と意味の両方を用いて文脈を解釈できるようになり、より精度の高い結果を生成する