デコード Transformersを平易な英語で説明します
「わかりやすい英語でTransformerを解説」
コード、数学、またはキー、クエリ、値の言及はありません
2017年の導入以来、トランスフォーマーは機械学習の分野で顕著な力となり、主要な翻訳や自動補完サービスの能力を革新しています。
最近、OpenAIのChatGPT、GPT-4、およびMetaのLLamaなどの大規模言語モデルの登場により、トランスフォーマーの人気はさらに高まっています。これらのモデルは非常に注目され、興奮を呼び起こしており、すべてトランスフォーマーアーキテクチャの基礎に築かれています。これらのモデルはトランスフォーマーの力を利用して、自然言語理解や生成の驚異的なブレークスルーを実現しており、一般の人々に公開されています。
トランスフォーマーの動作を分解するための多くの良質なリソースがあるにもかかわらず、私は数学的にはメカニクスが理解できるのに、直感的にトランスフォーマーがどのように動作するかを説明するのが難しいと感じました。多くのインタビューを行い、同僚と話し合い、その件に関するライトニングトークを行った後、多くの人々が同じ問題を抱えていることがわかりました!
このブログ記事では、コードや数学に頼らずにトランスフォーマーの動作原理を高レベルで説明することを目指します。技術的な専門用語や以前のアーキテクチャとの比較を混同させないように努めます。できるだけシンプルにすることを試みますが、トランスフォーマーはかなり複雑なので、それを達成することは簡単ではありません。ただし、トランスフォーマーが何を行い、どのように行うかについて、より良い直感を提供できると思います。
トランスフォーマーとは何ですか?
トランスフォーマーは、シーケンスを入力とするタスクに適したニューラルネットワークアーキテクチャの一種です。この文脈でのシーケンスの最も一般的な例は、単語の順序付きセットと考えることができる文です。
これらのモデルの目的は、シーケンス内の各要素の数値表現を作成することで、要素とその隣接コンテキストに関する重要な情報を包括します。その結果得られた数値表現は、後続のネットワークに渡すことができ、これにより生成や分類を含むさまざまなタスクを実行するためにこの情報を活用できます。
これらのモデルが豊かな表現を作成することで、下流のネットワークは入力シーケンスの潜在的なパターンや関係をよりよく理解することができ、一貫性のある文脈に即した出力を生成する能力が向上します。
トランスフォーマーの主要な利点は、シーケンス内の長距離の依存関係を処理できることと、並列処理が可能な高い効率性です。これは、機械翻訳、感情分析、テキスト生成などのタスクに特に有用です。
トランスフォーマーには何が必要ですか?
トランスフォーマーに入力を供給するためには、まず入力をトークンのシーケンスに変換する必要があります。これは、入力を整数で表す単語のルックアップテーブルとなる語彙を定義することで最も簡単に実現できます。この語彙に含まれていない単語を表すために特定の数値を予約することで、常に整数値を割り当てることができます。
実際には、これはテキストのエンコーディングの素朴な方法であり、catやcatsなどの単語は、同じ動物の単数形と複数形の説明にもかかわらず、完全に異なるトークンとして扱われます!この問題を克服するために、バイトペアエンコーディングなどの異なるトークナイズ戦略が考案されています。これにより、単語がインデックス化される前に小さなチャンクに分割されます。さらに、文章の開始と終了などの特殊なトークンを追加することは、モデルに追加の文脈を提供するためにしばしば役立ちます。
次の例を考えて、トークナイゼーションプロセスをよりよく理解しましょう。
「こんにちは、Drosvalの天気は素敵ですね?」
Drosvalは、次のプロンプトを使用してGPT-4によって生成された名前です。「David GemmellのDrenai Universeのように属する可能性のある架空の場所の名前を作成できますか?」と故意に選択されたもので、訓練されたモデルの語彙には登場しないはずです。
transformers libraryのbert-base-uncased
トークナイザーを使用して、これは次のトークンのシーケンスに変換されます:
各単語を表す整数は、特定のモデルのトレーニングとトークナイゼーション戦略に応じて変わります。これをデコードすると、各トークンが表す単語がわかります:
興味深いことに、これは私たちの入力と同じではありません。特殊トークンが追加され、略語は複数のトークンに分割され、架空の場所の名前は異なる「チャンク」で表されています。私たちは「uncased」モデルを使用したため、すべての大文字の文脈が失われています。
ただし、例として文を使用しましたが、トランスフォーマーはテキスト入力に限定されていません。このアーキテクチャは、ビジョンタスクでも良い結果を示しています。 画像をシーケンスに変換するには、ViTの作者たちは画像を重なりのない16×16ピクセルのパッチに分割し、これらを長いベクトルに連結してからモデルに渡しました。トランスフォーマーをレコメンダーシステムで使用している場合、アプローチの1つとして、ユーザーが最後に閲覧したn個のアイテムのアイテムIDをネットワークの入力として使用することがあります。ドメインの入力トークンの意味のある表現を作成できれば、これをトランスフォーマーネットワークに入力できます。
トークンの埋め込み
入力を表す整数のシーケンスができたら、それらを埋め込みに変換できます。埋め込みは、機械学習アルゴリズムによって簡単に処理できる情報の表現方法であり、トークンが圧縮された形式でエンコードされた意味を捕捉することを目指します。最初に、埋め込みはランダムな数値のシーケンスとして初期化され、学習中に意味のある表現が学習されます。ただし、これらの埋め込みには固有の制約があります。トークンが表示される文脈は考慮されません。これには2つの側面があります。
タスクによっては、トークンを埋め込む際にトークンの順序を保持したい場合もあります。これは、NLPなどのドメインでは特に重要です。そうしない限り、単語袋のアプローチになってしまいます。これを克服するために、位置エンコーディングを埋め込みに適用します。複数の位置埋め込みの作成方法がありますが、主なアイデアは、入力シーケンスの各トークンの位置を表すもう一つの埋め込みセットを持ち、これらをトークン埋め込みと組み合わせることです。
もう一つの問題は、トークンは周囲のトークンによって異なる意味を持つ場合があるということです。以下の文を考えてみましょう。
暗いですね、誰が明かりを消しましたか?
わあ、この小包は本当に軽いですね!
ここで、単語「軽い(light)」は2つの異なる文脈で使用され、完全に異なる意味を持っています!ただし、トークン化戦略に応じて、埋め込みは同じになる可能性があります。Transformerでは、これはアテンションメカニズムによって処理されます。
概念的には、アテンションとは何ですか?
Transformerアーキテクチャで最も重要なメカニズムの一つは、アテンションとして知られるものです。これにより、ネットワークは入力シーケンスのどの部分が与えられたタスクにとって最も関連性が高いかを理解することができます。各トークンに対して、アテンションメカニズムは現在のトークンの理解に重要な他のトークンを特定します。Transformer内でこれがどのように実装されるかを探求する前に、アテンションメカニズムが概念的にどのような目標を追求しているのかをシンプルに理解しましょう。
アテンションを理解する一つの方法は、各トークンの埋め込みを、周囲のトークンに関する情報を含んだ埋め込みに置き換える手法と考えることです。文脈に関係なく、すべてのトークンに同じ埋め込みを使用する代わりに、現在の文脈に応じた重み付き平均、あるいは一般的な線形結合を作成することで、この文脈を捉えることができます。
以前に見た文の一つについて、これがどのように見えるかの単純な例を考えてみましょう。アテンションが適用される前、シーケンス内の埋め込みは周囲の文脈を持っていません。したがって、lightという単語の埋め込みは以下の線形結合として可視化できます。
ここで、私たちの重みは単なる単位行列です。アテンションメカニズムを適用した後、以下のように私たちのlightの埋め込みを表現するための重み行列を学習したいです。
今回は、選択したトークンに対して最も関連性の高いシーケンスの埋め込みに大きな重みが与えられるため、最も重要な文脈が新しい埋め込みベクトルにキャプチャされることが保証されます。
現在の文脈に関する情報を含む埋め込みは、時には文脈化された埋め込みとして知られており、これが最終的に作成しようとしているものです。
アテンションがどのような目標を達成しようとしているかの高レベルな理解ができたので、次のセクションで実際にこれがどのように実装されているのかを探求してみましょう。
アテンションはどのように計算されますか?
アテンションには複数のタイプがあり、線形結合を行うために使用する重みの計算方法に主な違いがあります。ここでは、スケーリングされたドットプロダクトアテンションを考えます。これは元の論文で紹介されたものであり、最も一般的なアプローチです。このセクションでは、すべての埋め込みに位置エンコードが施されていることを前提とします。
元の埋め込みを使用して線形結合を行い、文脈化された埋め込みを作成することを目指しているので、必要な情報はすべて学習された埋め込みベクトルにエンコードされていると仮定し、計算する必要があるのは重みだけです。
重みを計算するためには、各トークンがお互いに関連しているかどうかをまず決定する必要があります。これを実現するためには、2つの埋め込み間の類似性の概念を確立する必要があります。2つの単語が類似していることを示すために、ドット積を使用する方法があります。
各トークンについて、シーケンス内の他のすべてのトークンとの関連性を計算するため、これを行列の乗算に一般化することができ、これにより重み行列が得られます。重み行列はアテンションスコアとも呼ばれます。重みが1になるようにするために、SoftMax関数も適用されます。ただし、行列の乗算は任意の大きな数値を生成する可能性があるため、これによってSoftMax関数が非常に小さな勾配を返すことがあり、トレーニング中に勾配消失の問題が生じる可能性があります。これを防ぐために、アテンションスコアはスケーリングファクターで乗算され、それからSoftMaxが適用されます。
今、コンテキスト化された埋め込み行列を取得するために、注意スコアと元の埋め込み行列の積を計算します。これは、埋め込みの線型組み合わせを取ることと同等です。
モデルが注意スコアとそれに続くコンテキスト化された埋め込みを生成するのに十分に複雑な埋め込みを学習することができるかもしれません。しかし、通常は非常に小さな埋め込み次元に多くの情報を凝縮しようとしています。
そのため、モデルの学習を少し簡単にするために、いくつかの学習可能なパラメータを導入しましょう!埋め込み行列を直接使用する代わりに、3つの独立した線型層(行列乗算)を通して渡しましょう。これにより、モデルは埋め込みの異なる部分に「焦点」を当てることができるはずです。以下のイメージで示されています:
イメージからわかるように、線型投影にはQ、K、Vというラベルが付いています。元の論文では、これらの投影はクエリ、キー、バリューと呼ばれ、情報検索からのインスピレーションを受けているとされています。個人的には、この類似性が理解を助けるとは感じませんでしたので、ここでは文献との一貫性を保つためにこの用語を使用し、これらの線型層が異なることを明示します。
このプロセスがどのように機能するかを理解したので、注意の計算をQ、K、Vに渡す3つの入力を持つ単一のブロックと考えることができます。
同じ埋め込み行列をQ、K、Vに渡す場合、これは自己注意として知られています。
マルチヘッドアテンションとは何ですか?
実際のところ、通常、トランスフォーマーは複数の自己注意ブロックを並列に使用して、入力シーケンスの異なる部分に同時にアテンションを集中させるために使用されます — これがマルチヘッドアテンションとして知られています。
マルチヘッドアテンションのアイデアは非常にシンプルであり、複数の独立した自己注意ブロックの出力を連結し、それから線型層を通してそれらの文脈情報を組み合わせることをモデルが学習できるようにします。
マルチヘッドアテンションブロックで使用される隠れた次元サイズは通常、注意のヘッド数で元の埋め込みサイズを除算した値に選ばれます。これにより、埋め込み行列の形状を維持することができます。
トランスフォーマーの他の要素は何ですか?
トランスフォーマーを紹介した論文は、(悪名高くなった)”Attention is all you need”という名前でしたが、これは少し混乱を招くものです。なぜなら、トランスフォーマーには注意以外の要素があるからです!
トランスフォーマーブロックには以下の要素も含まれます:
- フィードフォワードニューラルネットワーク(FFN):バッチとシーケンス内の各トークン埋め込みに適用される2層のニューラルネットワーク。FFNブロックの目的は、トランスフォーマーに追加の学習可能なパラメータを導入し、文脈埋め込みを識別的かつ広がっているようにすることです。元の論文ではGeLU活性化関数を使用していますが、FFNの構成要素はアーキテクチャによって異なる場合があります。
- レイヤーノーマリゼーション:トランスフォーマーや他のディープニューラルネットワークのトレーニングを安定化するために使用されます。シーケンスごとの活性化を正規化し、トレーニング中に活性化が大きすぎたり小さすぎたりするのを防ぎます。これには、消失勾配や爆発勾配などの勾配関連の問題が生じる可能性があります。この安定性は非常に深いトランスフォーマーモデルを効果的にトレーニングするために重要です。
- スキップ接続:ResNetアーキテクチャのように、消失勾配問題を緩和し、トレーニングの安定性を向上させるために、残差接続が使用されます。
変形器アーキテクチャは導入以来ほぼ一定のままですが、レイヤー正規化ブロックの配置は変わることがあります。最初のアーキテクチャ、現在ではポストレイヤーノームとして知られているものは以下の通りです:
最近のアーキテクチャでは、一般的な配置(下図参照)はプレレイヤーノームです。この配置では、自己注意とFFNブロックの前に正規化ブロックを配置し、スキップ接続内に配置します。
トランスフォーマーのさまざまなタイプは何ですか?
さまざまなトランスフォーマーアーキテクチャは現在存在しますが、多くは3つの主要なタイプに分類されます。
エンコーダーアーキテクチャ
エンコーダーモデルは、注意メカニズムが入力シーケンス全体にアテンドできるため、分類や名前付きエンティティ認識などの下流タスクに使用できる文脈埋め込みを生成することを目指しています。この記事では、このタイプのアーキテクチャを探索してきました。エンコーダー専用の最も人気のあるファミリーはBERTとその派生モデルです。
1つまたは複数のトランスフォーマーブロックを通過した後、シーケンスの各トークンに対する複雑な文脈埋め込み行列が得られます。ただし、分類などの下流のタスクに使用する場合、1つの予測のみが必要です。通常、最初のトークンを取り出し、分類ヘッドを通過させます。分類ヘッドには通常、ドロップアウト層と線形層が含まれます。これらの層の出力は、SoftMax関数を通じてクラスの確率に変換されることがあります。以下に、これがどのように見えるかの例を示します。
デコーダーアーキテクチャ
エンコーダーアーキテクチャとほぼ同じですが、デコーダーアーキテクチャでは、マスク(または因果)セルフアテンション層が使用されるため、アテンションメカニズムは現在の要素と前の要素にのみアテンドできます。これにより、生成される文脈埋め込みは前のコンテキストのみを考慮に入れます。人気のあるデコーダー専用モデルにはGPTファミリーがあります。
これは、注意スコアをバイナリー下三角行列でマスクし、マスクされていない要素を負の無限大に置き換えることで実現されます。次に、SoftMax操作を経てこれらの位置の注意スコアがゼロになるようにします。このように前のセルフアテンション図を次のように更新できます。
デコーダーアーキテクチャは、現在の位置および以前の位置からのみアテンドできるため、通常はシーケンスの生成などの自己回帰タスクに使用されます。ただし、コンテキスト埋め込みを使用してシーケンスを生成する場合、エンコーダーを使用する場合と比較してさらに考慮すべき事項があります。以下にその例を示します。
デコーダーは、入力シーケンスの各トークンに対する文脈埋め込みを生成しますが、通常は生成されたシーケンスの後続の層への入力として最後のトークンに対応する埋め込みを使用します。
また、ロジットにSoftMax関数を適用した後、フィルタリングが適用されない場合は、モデルの語彙全体にわたるトークンごとの確率分布が得られます。これは非常に大きな数になる可能性があります。多くの場合、さまざまなフィルタリング戦略を使用して潜在的なオプションの数を削減することを希望します。最も一般的な方法のいくつかは次のとおりです:
- 温度調整:温度は、SoftMax処理の内部で適用されるパラメータです。これは生成されるテキストのランダム性に影響を与えます。出力単語の確率分布を変更することで、モデルの出力がどれだけ創造的または焦点を絞っているかを決定します。高い温度は確率分布を平坦化し、より多様な出力を生成します。
- Top-Pサンプリング:この手法は、与えられた確率のしきい値に基づいて次のトークンの候補の数をフィルタリングし、このしきい値を上回る候補に基づいて確率分布を再配分します。
- Top-Kサンプリング:この手法は、推論(logit)または確率スコアに基づいて、最も可能性の高いトークンの候補の数をKに制限します(実装により異なる)
これらの手法の詳細は、こちらで確認することができます。
次のトークンの候補に対する確率分布を変更または削減した後、この確率分布からサンプリングして予測を行います。これは単に多項分布からのサンプリングです。予測されたトークンは、入力シーケンスに追加され、モデルに再度入力されます。このプロセスが、生成するトークンの数が目的の数に達するか、モデルが停止トークン(シーケンスの終了を示す特殊トークン)を生成するまで繰り返されます。
エンコーダーデコーダーアーキテクチャ
元々、トランスフォーマーは機械翻訳のためのアーキテクチャとして発表され、エンコーダーとデコーダーの両方を使用してこの目標を達成しました。エンコーダーを使用して中間表現を作成し、デコーダーを使用して目的の出力形式に翻訳する方法です。エンコーダーデコーダートランスフォーマーは、一般的ではなくなりましたが、T5などのアーキテクチャは、質問応答、要約、分類などのタスクをシーケンス対シーケンスの問題としてフレーム化し、このアプローチを使用して解決する方法を示しています。
エンコーダーデコーダーアーキテクチャの主な違いは、デコーダーがエンコーダーデコーダーの注意機構を使用することです。この注意機構は、アテンションの計算中にエンコーダーの出力(KおよびVとして)とデコーダーブロックの入力(Qとして)の両方を使用します。これはセルフアテンションとは異なり、すべての入力に同じ入力埋め込み行列が使用される点が異なります。それ以外は、全体的な生成プロセスはデコーダーのみのアーキテクチャを使用する場合と非常に似ています。
以下の図に示すように、エンコーダーデコーダーアーキテクチャを想像してみることができます。ここでは、図を単純化するために、元の論文で見られるポストレイヤーノルムバリアントのトランスフォーマーを描画しました。トランスフォーマーでは、レイヤーノームレイヤーはアテンションブロックの後に配置されます。
結論
これによって、トランスフォーマーの動作原理についての直感を提供し、いくつかの詳細をわかりやすく分解し、モダンなトランスフォーマーアーキテクチャの神秘性を解明するための良い出発点となれば幸いです!
Chris HughesはLinkedIn上にいます
特に明記されていない限り、すべての画像は著者によって作成されました。
参考文献
- [1706.03762] Attention Is All You Need (arxiv.org)
- Recent Advances in Google Translate — Google Research Blog
- How GitHub Copilot is getting better at understanding your code — The GitHub Blog
- Introducing ChatGPT (openai.com)
- gpt-4.pdf (openai.com)
- Introducing LLaMA: A foundational, 65-billion-parameter language model (meta.com)
- The Illustrated Transformer — Jay Alammar — Visualizing machine learning one concept at a time. (jalammar.github.io)
- Byte-Pair Encoding tokenization — Hugging Face NLP Course
- Drenai series | David Gemmell Wiki | Fandom
- bert-base-uncased · Hugging Face
- 🤗 Transformers (huggingface.co)
- [2010.11929v2] An Image is Worth 16×16 Words: Transformers for Image Recognition at Scale (arxiv.org)
- Getting Started With Embeddings (huggingface.co)
- A Gentle Introduction to the Bag-of-Words Model — MachineLearningMastery.com
- [2104.09864] RoFormer: Enhanced Transformer with Rotary Position Embedding (arxiv.org)
- Scaled Dot-Product Attention
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles