HUOXIU

トランスフォーマーの簡単な理解(4):デコーダと出力部

編集後記:優れた性能を誇るTransformerは、自然言語処理分野における代表的なモデルアーキテクチャとなっています。しかしながら、Transformerの内部構造は非常に複雑であり、多くの読者にとって依然として難解な点が多いかもしれません。本シリーズでは、Transformerの各コンポーネントを一つずつ分析することで、このモデルアーキテクチャ全体の動作ロジックをより直感的に理解できるよう支援します。この記事は「Transformerをやさしく理解する」シリーズの最終回であり、主にTransformerのデコーダー部分と出力部分について紹介します。

この記事はまず、Transformerがエンコーダー・デコーダーアーキテクチャに属していることを指摘することから始まります。このアーキテクチャでは、入力データはエンコーダーによって数学的表現に変換され、デコーダーに入力されて最終出力が生成されます。次に、Teacher Forcingをガイドとして用い、マスクされたデコーダーがエンコーダーの出力に基づいて段階的にターゲット言語を生成する様子を分析します。各コンポーネントの役割を説明する際に、著者は読者がTransformerをより深く理解できるよう、明確な例や類推を用いています。

分かりやすさ、体系的なアプローチ、そして洞察に満ちた分析を融合させたこの文章スタイルにより、この記事はTransformerモデルを理解するための非常に貴重なリソースとなっています。この非常に代表的なモデルアーキテクチャを包括的に理解したい方にとって、この記事は優れた学習リソースとなるでしょう。読者の皆様のディープラーニングの旅が、今後も成功し続けることをお祈り申し上げます。

翻訳はこちらです、お楽しみください!

著者 | チェン・マルガリット

編纂者:岳陽

この記事は、原著者の許可を得てBaihai IDPによって翻訳されました。翻訳の転載をご希望の場合は、お問い合わせください。



🚢🚢🚢AIテクノロジーソフトウェアと技術交流グループへのご参加をお待ちしております!最新のトレンドを把握し、一緒に技術的な課題を探求しましょう!

Vaswani, A. et al.の論文[1]からの画像

このシリーズの以前の記事を読んでおらず、上記のアーキテクチャ図の左側にあるコンポーネントの動作がよくわからない場合は、まずこのシリーズの他の記事を読むことをお勧めします。この記事で説明されていない用語は、このシリーズの以前の記事で説明されている可能性があります。

このシリーズの以前の記事:

トランスフォーマーの簡単な理解(1):入力部

トランスフォーマーを理解する(2):注意点

トランスフォーマーを理解する(3):フィードフォワード層

01 デコーダー

トランスフォーマーはエンコーダー・デコーダーアーキテクチャです。入力データは数学的表現(何らかの数値形式、通常はベクトル)にエンコード(変換)されます。その後、デコーダーと呼ばれる別の処理ユニットに渡され、そこで数値は目的の出力に再変換されます。言語モデルにおいては、これは最終的な出力として単語を生成することを意味します。

デコーダーの主な役割は、ターゲットシーケンス(提供したい回答)に基づいて値行列を作成することです。デコーダーはターゲットシーケンス全体を受け取り、それを埋め込み情報に変換し、エンコーダーと同様に位置エンコーディングを追加します。次に、埋め込み情報をマスクされたマルチヘッドアテンション層に渡し、そこで値行列が作成されます。この行列は、モデルがユーザーのプロンプトと望ましい結果をどのように連携させるかを判断するのに役立ちます。

Transformerの仕組みを説明する際には、矛盾が生じます。最終結果がどのように生成されるかを理解するには、個々のコンポーネントを理解する必要がありますが、個々のコンポーネントを理解するには、最終結果がどのように生成されるかを理解する必要もあります。Transformerのトレーニングプロセスを説明するにあたり、現在の理解を超えて、将来の視点から解釈することで、Transformerがどのようにトレーニングされるかをより深く理解します。

まず、エンコーダーでは、ユーザーのプロンプトが埋め込みベクトルに変換され、次に位置エンコーディングが追加されます。エンコーダーグループ(原論文では6つ)はデータを処理し、テキストの数値表現を生成します。次に、デコーダーでは、目的の出力(モデルに応答してほしいもの)に、それが各文の最初のマーカーであることを示す特別なマーカーが与えられます。これは<BOS>(文頭)のようなマーカーである場合もありますが、モデルのトレーニング中に使用される他の記号である場合もあります。この入力は埋め込みベクトルに変換され、位置エンコーディングが追加されます。デコーダーグループ(これも最初は6つ)はこれらのベクトルを受け取り、エンコーダーの出力と組み合わせて新しい単語表現を生成します。次に、この単語表現は確率分布に変換され、モデルのデータセット全体から最も確率の高い単語が選択されます。最後に、モデルによって選択された単語とモデルの目的の出力との差に基づいて損失関数が計算されます。この損失関数は、バックプロパゲーション アルゴリズム (全体のエラーに対するそれぞれの寄与に基づいて重みをどのように変更するかを計算するアルゴリズム) にとって重要な勾配を生成するために使用されます。

全体的なプロセスがわかったので、小さいながらも重要な詳細、つまり「Teacher Forcing」と呼ばれる手法について見てみましょう。

02 教師の強制

次の 3 つの質問がある数学のテストを受けていると想像してください。

  1. 4 という数字に 5 を加えて、その分数を記録します。

  2. 最初の質問の結果を 2 倍にして、スコアを記録します。

  3. 2 番目の質問の結果を 2 で割ります。

各質問の回答を、正解か不正解かに関わらず個別にランク付けすると、問題に気づきますか?最初の質問を間違えると、2番目と3番目の質問も間違える可能性が高くなります。Teacher Forcingはこの問題を解決します。言語モデルもシーケンスベースであるため(たとえば、2番目の単語を予測する方法は最初の単語によって異なります)、後続の内容が正しいためには、前のコンテンツが正しくなければなりません。上記の例では、Teacher Forcingは2番目の質問の正解を出し、次に3番目の質問の正解を出します。これは実質的に、足し算のテストではなく、掛け算/割り算のテストになります。各質問は個別に採点されますが、最初の質問を間違えても2番目の質問のスコアには影響しません。

具体的には、Teacher Forcing はトレーニングの完了を早めるのに役立ちます。各ステップでモデルに正しいラベルを提供することで、x 番目の単語の予測が正確であることを保証します。例えば、4 番目の単語は、誤っている可能性のある予測ラベルではなく、最初の 3 つの正しいラベルに基づいて予測されるため、以前のエラーによってモデルが正しく実行を継続できなくなることはありません。

さて、本題に戻りましょう。入力を埋め込みベクトルに変換し、位置エンコーディングを追加した後、マスク付きのマルチヘッドアテンション層を通して入力を処理します。

03 マスクされたマルチヘッドアテンション

このシリーズの前半では、アテンション層の役割と存在理由について既に紹介しました。マスク付きのアテンション層は、基本的に同じ理由で同じことを行いますが、重要な違いが1つあります。デコーダーは期待される出力全体を処理するため、モデルはアテンションスコアを構築する際にシーケンス全体を簡単に使用できます。これらのアテンションスコアはTransformerの動作において非常に重要な部分であるため、正しく処理する必要があります。「Amazing technology, I love it.(素晴らしい技術、大好きです)」という文を生成する必要があるとします。この段階では、「technology」という単語を予測しようとしています。しかし、推論時(実際にモデルを使用する時)には、モデルは出力を段階的に生成することしかできず、文全体の情報を一度に取得することはできません。したがって、モデルのトレーニング中に実世界での使用に適したものにするには、モデルが既に生成された先行する単語のみに依存し、後続の単語に直接アクセスできないようにする必要があります。このステップは、後続の単語をマスク(隠蔽)することで実現されます。

ご想像のとおり、機械学習は数学と密接に関連しているため、単語を隠すだけでなく、より優れたアプローチがあります。具体的には、注目度スコアを計算する際に、負の無限大(-86131676513135468のような非常に小さな負の数)を追加します。これにより、次の段階のソフトマックス関数によってこれらの負の数が0に変換されます。この手法により、モデルが許可なく次の単語にアクセスできなくなります。

画像は著者より提供されたものです。

マスクされたアテンションスコアが計算された後、入力は「Add & Normalize」レイヤー(注:「Add & Normalize」レイヤーは主に加算と正規化演算を行います)を通過します。このレイヤーは、本シリーズの第2回の記事で説明したのと同じ動作と理由で使用されます。また、アテンション計算前のレイヤーからスキップ接続も受け取ります(注:スキップ接続技術は、本シリーズの第2回の記事のセクション6で紹介されています)。その後、値マトリックスは次の段階に進みます。次に、エンコーダーからQ(クエリ)マトリックスとK(キー)マトリックスが取得されます。これらはそれぞれ、ユーザーのプロンプトと、特定のクエリに対する可能な提案または推奨を表します。(注:エンコーダーは、デコーダーが適切な出力を生成するのに役立つクエリ関連の提案を提供します。これらの提案は、クエリに関連する関連単語、フレーズ、または文であり、デコーダーが出力を生成する際により正確な判断を下すのに役立ちます。)デコーダーは、エンコーダー入力のどの部分に焦点を当てるかを決定するために、独自の値マトリックスを保持しています。これら 3 つの行列 (エンコーダーから 2 つ、デコーダーから 1 つ) を使用して、「通常の」注意スコアを計算します。

次に、もう 1 つのフィードフォワード ネットワークと、前に説明したように別のスキップ接続を受信する「追加と正規化」レイヤーがあり、これでデコーダー セクションは完了です。

いよいよ最終ステップです。デコーダースタック(翻訳者注:Transformersアーキテクチャでは、デコーダーは通常、同じ構造を持つ複数のデコーダー層で構成されます。積み重ねられたデコーダー層は、情報と特徴を層ごとに渡すことで段階的に出力を生成できるため、より正確な予測と生成が可能になります)の最後(6番目)のデコーダーは、出力を線形層に渡します。線形層を通して、任意の数の数値表現を生成できます。言語モデルでは、表現の数はモデルの語彙サイズに一致させる必要があります。モデルの総語彙数(モデルがこれまでに学習したすべての単語)が1000の場合、語彙内の各単語を表すのに1000個の数値が必要です。これをすべての単語のすべての位置に対して行う必要があります。最終出力が10単語の場合、それぞれに対して1000個の数値を計算する必要があります(翻訳者注:つまり、単語ごとに1000次元の数値ベクトルを生成する必要があります)。次に、これをソフトマックス層に渡します。ソフトマックス層は各単語の確率を計算します。最も確率の高い単語が、使用したい単語です。ソフトマックス層はインデックス(例えば3)を返します。モデルは語彙の中でインデックス3の単語を出力します。語彙が['a', 'man', 'works', 'nice', 'go']の場合、出力される単語は「nice」になります。

一連の記事はこれで終了です。ご協力ありがとうございました!このシリーズをお読みいただくことで、Transformers アーキテクチャの仕組みをより深く理解していただけたことを願っています。

楽しい時間をお過ごしください。


終わり



🚢🚢🚢AIテクノロジーソフトウェアと技術交流グループへのご参加をお待ちしております!最新のトレンドを把握し、一緒に技術的な課題を探求しましょう!