top of page

自然言語処理の観点におけるTransformerのAttention機構


本記事は「Attention Is All You Need」と題された論文(12 Jun 2017)の内容を含んでいる。これは、自然言語処理(NLP)に革命をもたらした Transformer モデルに関する重要な研究である。以下は、TransformerのSelf-Attention機構に焦点を当てた本記事のポイントである。


 ・Transformer モデル: 従来の再帰的ニューラルネットワーク(RNN)や畳み込みニューラルネットワーク(CNN)に代わる新しいアーキテクチャだ。Transformer は完全にSelf-Attention 機構に基づいている。


 ・Self-Attention 機構は、入力シーケンス内の各位置が、シーケンス内の他の位置との関連性を捉えることを可能にする。これにより、文中の遠隔距離にある単語間の関係もモデルが学習できるようになる。


・スケールドドット積注意(Scaled Dot-Product Attention): Self-Attention 機構の一種だ。クエリとすべてのキーのドット積を取り、それにスケーリングファクターをかけたものに softmax 関数を適用して重みを計算する。これにより、特定の値(Value)への重み付けが行われる。


 

この記事からわかること


  1. Transformerモデルは、Self-Attention 機構に基づく革新的なアーキテクチャであり、自然言語処理に大きな影響を与えている。

  2. Self-Attention 機構は、入力シーケンス内の各要素間の関係性を捉え、長距離の依存関係を効率的にモデル化することができる。

  3. Self-Attention 機構の計算は、クエリ、キー、値の3つのベクトルを用いて行われ、各要素間の関連度を評価し、注意を配分する。

  4. Self-Attention 機構は、各要素間の計算を独立して行うことができるため、並列処理が可能であり、計算速度の向上に寄与する。

  5. RNNは逐次的な処理が必要であるのに対し、Self-Attention 機構は並列処理が可能であるという点で優れている。

  6. Self-Attention 機構では、単語間の関連性に基づいて動的に注意を配分することで、文脈の理解を深め、複雑な言語現象を捉えることができる。

  7. Self-Attention 機構の計算には、値ベクトルや埋め込みベクトルなどの概念が用いられ、これらは入力データを適切に変換し、タスクに必要な情報を抽出するために重要な役割を果たす。


 

目次



 

1.Self-Attention 機構


・概略

Self-Attention 機構は、シーケンス内の各要素がシーケンス内の他のすべての要素との関係

を計算し、その関係性に基づいて情報を集約する方法だ。このメカニズムにより、モデルは文脈を理解し、特定の単語やフレーズが文内の他の部分とどのように関連しているかを捉えることができる。Self-Attention 機構は特に、長距離の依存関係を効率的にモデル化する能力において、従来の RNN や CNN に比べて優れている。


・Self-Attention 機構の計算方法

Self-Attention 機構を計算するには、まず入力シーケンスから 3 つの異なる重み行列を使用して、クエリ(Q)、キー(K)、値(V)の 3 つのベクトルセットを生成する。これらのベクトルは、入力の線形変換によって得られる。Self-Attention 機構の計算は以下の手順で行われる。


①クエリと全てのキーのドット積を計算する。これにより、各クエリに対する全キーの関連度が得られる。


②スケーリング: ドット積の結果にスケーリングファクター(通常はキーの次元の平方根の逆数)を乗じる。これは、勾配の消失や爆発を防ぐために行う。


③ソフトマックス関数を適用して、各クエリに対するキーの重み(または注意度合い)を計算する。これにより、各クエリに関連するキーの重み付けされた和を取ることができる。


④重みと値(V)の積を計算し、それらを合計して、最終的な出力ベクトルを得る。

この出力は、入力シーケンスの各要素がシーケンス内の他の要素とどのように関連しているかを考慮した、集約された情報を含んでいる。


 

2.Self-Attention 機構の利点


並列計算の可能性: Self-Attention 機構は入力シーケンスの全要素を一度に処理できるため、計算の並列化が可能だ。これは、RNN のように時系列で順番に計算を行うモデルと比較して、訓練速度を大幅に向上させる。

長距離の依存関係の捉えやすさ: Self-Attention 機構はシーケンス内の任意の 2 点間の直接的な関係をモデル化できるため、長距離の依存関係を効果的に捉えることができる。柔軟性と適応性: Self-Attention 機構は、入力シーケンスの構造に依存しない汎用的なアプローチだ。そのため、様々なタイプのデータやタスクに適応しやすい。


・Self-Attention の優れたポイント:並列処理が可能

Self-Attention 機構が入力シーケンスの全要素を一度に並列計算できる理由は、その計算

過程が各要素間の関係性を個別に、かつ独立に評価する構造に基づいているためだ。具体

的には、Self-Attention 機構では、入力シーケンスの各要素からクエリ(Q)、キー(K)、

値(V)のベクトルを生成し、これらのベクトル間での関係性を計算する。この計算プロ

セスの特徴を以下に詳しく述べる。


・ベクトル化とドット積の計算

Self-Attention 機構では、入力シーケンスの各要素をベクトル化し(これにより、クエリ、キー、値の各ベクトルが生成される)、それらのベクトル間でドット積を計算する。このドット積は、各要素(クエリ)とシーケンス内の他の全要素(キー)との関連度を示す。ドット積の計算は各要素間で独立しており、一つの要素の計算結果が他の要素の計算に影響を与

えない。そのため、シーケンス内の全てのドット積を同時に計算することが可能だ。


・スケーリングとソフトマックス関数の適用

ドット積にスケーリングを適用し、その後でソフトマックス関数を適用することで、各クエ

リに対するキーの重み(Attention度合い)が得られる。このステップも、シーケンス内の各位置に対して独立に行われるため、全要素に対して並列に処理することができる。


・重み付け和の計算

最後に、得られた重みを値(V)に適用し、重み付け和を計算する。この操作も、シーケ

ンス内の各位置について独立して行うことができ、したがって並列処理が可能だ。


従来の RNN(再帰的ニューラルネットワーク)では、シーケンスの各要素を順番に処理する必要があり、各ステップの計算は前のステップの出力に依存している。これにより、計算が逐次的になり、並列化が困難になる。一方、Self-Attention 機構では、上述のようにシーケンスの全要素を独立して、かつ同時に処理することができるため、計算処理を大幅に高速化できるのだ。この高速化は、特に長いシーケンスを扱う自然言語処理タスクにおいて、トレーニング時間の短縮やより複雑なモデル構造の実現に寄与する。


*「各要素」の解説

本文では、Self-Attention 機構における「各要素」は、入力シーケンス内の単一の単語やトークンを指すと説明されている。自然言語処理では、テキストをより扱いやすい小さな単位(単語、サブワード、文字など)に分割するトークン化という前処理が行われ、これらの小さな単位が「各要素」に相当する。Transformer モデルでは、これらの各トークンが入力シーケンス内の他のトークンとどのように関連しているかを、Self-Attention 機構を用いて学習する。


*「サブワードトークン」の解説

本文では、「サブワードトークン」について詳しく説明されている。サブワードトークンとは、単語をより小さな単位に分割して生成されるトークンのことで、自然言語処理において単語の多様性や言語の豊かさに対応するために使用される。サブワードトークナイゼーションには、未知の単語への対応、語彙サイズの削減、言語の形態的特徴の捉えやすさといった利点がある。代表的なサブワードトークナイゼーション手法として、Byte Pair Encoding(BPE)、WordPiece、SentencePiece などが紹介されている。


 

3.並列処理から見た Self-Attention と RNN との比較


RNN(Recurrent Neural Network、再帰的ニューラルネットワーク)は、系列データを扱

うために設計されたニューラルネットワークの一種で、主に時系列データや自然言語など

の順序を持つデータに対して用いられる。RNN が系列データを順番に処理する必要があるのは、そのアーキテクチャが過去の情報を順序に沿って次々と処理し、その情報を隠れ状

態として保持していく設計に基づいているためだ。


・RNN の基本的な動作原理

①順序依存性: RNN は系列データを入力として受け取り、各時点(timestep)での入力に対して順番に処理を行う。各時点での処理は、その時点の入力データと、一つ前の時点の隠れ状態(過去の情報を含む)に依存する。


②隠れ状態の更新: 各ステップで、RNN は新しい入力と前のステップの隠れ状態をもとに、新たな隠れ状態を生成する。この隠れ状態は、過去の情報を含んでおり、次のステップの計算に引き継がれる。


③逐次的な処理: このようにして、RNN は系列の各要素を一つずつ順番に処理していき、各時点での情報を隠れ状態として更新し続ける。そのため、入力系列の全体的な文脈や時系列のパターンを捉えることができる。


・RNN の逐次処理が必要な理由

文脈の捉え方: 自然言語のような系列データは、要素間の順序が意味を持つため、この順序に沿った処理が必要だ。例えば、文章を理解するためには、単語や文節が現れる順序に従って情報を統合していく必要がある。過去の情報の継承: RNN の逐次処理は、時点 t の情報だけでなく、それ以前の時点での情報も考慮に入れることができる。これにより、過去の文脈を現在の処理に活かすことが可能になる。


・RNN とSelf-Attention 機構の違い

Self-Attention 機構(特に Transformer モデル内で使用される)は、系列内の任意の要素間の依存関係を直接モデル化することができるため、系列の全要素を一度に処理し、並列化することが可能だ。これに対して、RNN は前述の通り、情報を順序立てて処理する必要があり、各ステップの処理が前のステップの出力に依存するため、並列化が困難である。この逐次的な処理の性質が、RNN の基本的な特徴となっている。


 

4.Self-AttentionにおけるAttentionの付け方


「自己注意」(Self-Attention)メカニズムでは、どの単語にどの程度の注意(attention)を払うかは、その単語が他の単語とどのように関連しているかに基づいて動的に決定される。この処理は数学的に計算され、モデルが自動的に学習するため、特定のタスクや文脈に適した注意の配分が可能になる。以下に、自己注意メカニズムの基本的な処理の流れを説明する。


①クエリ(Q)、キー(K)、値(V)の生成

入力された各単語(またはトークン)に対して、それぞれ3つのベクトル(クエリQ、キーK、値V)が生成されます。これらは元の入力ベクトルに異なる重み行列を掛けることで得られる。これらのベクトルは、後続の計算で単語間の関連性を評価し、注意の重みを決定するために使用される。


②注意スコアの計算

クエリと各キーのドット積(内積)を計算し、それによって各単語(クエリ)が他の単語(キー)にどの程度関連しているかのスコア(注意スコア)を求める。このスコアは、ある単語が他の単語にどの程度「注意」を払うべきかを示す。


③スケーリングとソフトマックス関数の適用

ドット積によって求められたスコアは、キーの次元の平方根で割ることでスケーリングされます。これにより、勾配消失や爆発を防ぐ。その後、ソフトマックス関数を適用して、各クエリに対するすべてのキーの注意スコアを正規化し、それらの和が1になるようにする。この結果得られる値は、各単語が他の単語にどの程度注意を払うべきかの重みとして機能する。


④重み付き値の合算

最後に、各値(V)に対して、ステップ3で計算した注意重みを掛け合わせ、それらの重み付き合計を求める。この合計は、入力シーケンスに対する新しい表現であり、各単語がシーケンス内の他の単語から受ける影響を反映したものになる。


*「値(Value)の計算方法 の解説

「値(Value)」ベクトルは、マルチヘッドAttentionメカニズムにおいて、各入力トークンから生成される3種類のベクトル(クエリ、キー、値)のうちの一つだ。これらのベクトルは、入力シーケンスの各トークンに関連する情報を異なる観点から捉えるために用いられる。値ベクトルの計算方法は以下の通り。


値ベクトルの計算

①入力の準備: マルチヘッドAttentionメカニズムの入力として、トークン化されたテキストが埋め込みベクトル(embedding vector)として提供される。これらの埋め込みベクトルは、各トークンの意味的な情報を密度の高い形で表現している。


②重み行列の適用: 値ベクトルは、入力された埋め込みベクトルに特定の重み行列(Value用の重み行列)を掛けることによって計算される。この重み行列はモデルの訓練過程で学習され、どのように入力データを変換するかを決定する。具体的には、各入力トークンの埋め込みベクトルに対して、V=Embedding×WVの計算を行う。ここで、WVは値に対する重み行列、Embeddingは入力トークンの埋め込みベクトルである。


値ベクトルの生成: 上記の計算により、入力シーケンスの各トークンに対応する値ベクトルが生成される。これらの値ベクトルは、後続の計算(Attentionスコアに基づく重み付き和の計算)において、各トークンから抽出される情報の量と質を決定する役割を持つ。


まとめ 値ベクトルは、マルチヘッドAttentionメカニズムにおいて、Attentionスコアに基づいて重み付けされた後、最終的な出力の計算に寄与する。値ベクトルによって、どのトークンが出力にどれだけ影響を与えるか(情報を提供するか)が決定される。重み行列を通じて値ベクトルを計算することで、モデルは入力データを適切に変換し、タスクに必要な情報を効果的に抽出する能力を獲得する。このプロセスはモデルの訓練によって最適化され、異なるタスクやデータセットに対して柔軟に対応できるようになる。


*「埋め込みベクトル(embedding vector)」の解説

「埋め込みベクトル(embedding vector)」は、単語やフレーズなどのテキストデータを、コンピュータが処理しやすい密度の高い数値ベクトルに変換するための表現だ。このベクトルは、テキストの意味的な情報を含むように設計されており、自然言語処理(NLP)タスクにおいて広く使用される。埋め込みベクトルの計算方法は主に以下の2つのアプローチがある。


①事前学習された埋め込み 事前に大規模なテキストコーパスを使って学習された埋め込みベクトルを使用する。この方法では、Word2Vec、GloVe(Global Vectors for Word Representation)、FastTextといった手法が一般的だ。これらのモデルは、単語の共起情報や文脈を基にして、各単語に対する埋め込みベクトルを学習する。


Word2Vec: 周囲の単語から特定の単語を予測する(CBOW: Continuous Bag of Words)か、特定の単語からその周囲の単語を予測する(Skip-gram)という2つのアプローチで訓練される。


GloVe: 共起行列(単語がどのように共に出現するかの行列)を使用して、単語間の関係を捉えることにより、埋め込みを学習する。


FastText: 単語をサブワードのn-gramに分割し、これらのサブワードの情報を組み合わせることで単語のベクトルを生成する。これにより、未知の単語やレアな単語に対しても柔軟に対応できる。


②タスク固有の学習 特定のNLPタスクのためにネットワークをエンドツーエンドで訓練する際、埋め込み層も同時に学習される。この場合、初期の埋め込みベクトルはランダムに初期化され、訓練過程でタスクに最適な形に調整されていく。このアプローチはTransformerベースのモデル(BERT、GPTなど)で一般的に採用されている。


*埋め込みベクトルの計算の解説

埋め込みベクトルの計算は、基本的には単語ID(辞書での単語のインデックス)をベクトルに変換する過程だ。事前学習された埋め込みを使用する場合は、対応する単語IDに基づいて学習済みのベクトルを参照する。タスク固有の学習を行う場合は、学習過程で単語IDに対応するベクトルが最適化される。どちらの場合も、得られた埋め込みベクトルは、単語の意味的な情報を数値化したものであり、後続のモデル(RNN、CNN、Transformerなど)での処理の基礎となる。


*「Attention度合」の計算方法 「Attention度合」を計算する過程でのソフトマックス関数の役割は、マルチヘッドAttentionメカニズム内で非常に重要だ。この関数は、単語間の関連度スコアを正規化し、それらを合計が1になるような確率分布に変換する。これにより、各単語が他の単語にどれだけ「Attention」を払うべきかの重みを定量化する。以下に、マルチヘッドAttentionメカニズム内でのソフトマックス関数の使用方法を詳しく説明する。


*Attention度合の計算手順の解説

①関連度スコアの計算: まず、クエリ(Q)とキー(K)の間でドット積を計算し、各クエリに対する全キーの関連度スコアを求める。これにより、ある単語が文内の他の単語とどれだけ関連があるかのスコアが得られる。


①スケーリング: 得られたスコアは、キーの次元の平方根の逆数でスケーリングされる。これは、スコアの値が大きすぎる場合にソフトマックス関数の勾配が極端に小さくなるのを防ぐためだ。


②ソフトマックス関数の適用: スケーリングされたスコアにソフトマックス関数を適用する。


ソフトマックス関数は、以下の式で表される。

Softmax(xi)=exi∑jexj

ここで、xiはある単語に対する他の単語の関連度スコアをスケーリングした値、exiはその指数関数、分母の∑jexjは全てのスコアの指数関数の合計だ。この操作により、関連度スコアが0から1の範囲に収まる確率分布に変換され、全てのスコアの合計が1になる。

ソフトマックス関数の意味 関連度の相対化: ソフトマックス関数によって、ある単語に対する他の単語の重要度が相対的に計算される。これにより、ある単語に最もAttentionを払うべき単語と、そうでない単語が区別される。 確率分布への変換: 関連度スコアを確率分布に変換することで、どの単語にどれだけのAttentionを払うかを確率的に決定する。これは、モデルが文脈を考慮して情報の集中点を動的に調整するのに役立つ。


 

5.まとめ


Self-Attention機構は、入力シーケンス内の各要素間の関係性を捉え、長距離の依存関係を効率的にモデル化することができる。その計算は、クエリ、キー、値の3つのベクトルを用いて行われ、各要素間の関連度を評価し、注意を配分する。Self-Attention機構は、RNNとは異なり、各要素間の計算を独立して行うことができるため、並列処理が可能であり、計算速度の向上に寄与する。また、Self-Attention機構では、単語間の関連性に基づいて動的に注意を配分することで、文脈の理解を深め、複雑な言語現象を捉えることができる。Self-Attention機構の計算には、値ベクトルや埋め込みベクトルなどの概念が用いられ、これらは入力データを適切に変換し、タスクに必要な情報を抽出するために重要な役割を果たす。









bottom of page