Encoder
- テキストをベクトルに変換する過程と、そこから得られた埋め込みに位置情報を追加する過程を説明する。
- 入力テキストの意味情報を捉える埋め込みを生成することが目的である。
1. テキスト埋め込み
- "Hello World" をベクトルに変換して埋め込みを生成する。
- 各トークンに対して任意の値を割り当ててベクトルを生成する。
2. 位置エンコーディング
- 埋め込みに単語の位置情報を追加するため、位置エンコーディングを加える。
- 固定ベクトルを用いて、各位置に固有かつ一貫したパターンの数値を割り当てる。
3. 位置エンコーディングと埋め込みの結合
- 位置エンコーディングと埋め込みを加算し、エンコーダの入力として使う新しい行列を生成する。
Self-attention
- モデルが入力の特定部分に集中できるようにするメカニズムであるアテンションを説明する。
- マルチヘッドアテンションを用いることで、さまざまな表現空間で情報に同時に集中できる。
4.1 行列の定義
- 各アテンションヘッドに対する K、V、Q 行列を定義する。
4.2 キー、クエリ、バリューの計算
- 入力埋め込みと重み行列を掛け合わせて、キー、クエリ、バリュー行列を計算する。
4.3 アテンションの計算
- クエリと各キーベクトルの内積を計算し、その結果をキーベクトル次元の平方根で割る。
- ソフトマックス関数を適用してアテンション重みを得る。
- 各バリューベクトルにアテンション重みを掛ける。
Feed-forward layer
- エンコーダには自己注意レイヤーの後にフィードフォワードニューラルネットワークがある。
- このネットワークは 2 つの線形変換と ReLU 活性化関数を用いる。
5.1 基本的なフィードフォワードレイヤー
- 1 つ目の線形レイヤーは入力の次元を拡張し、ReLU 活性化関数を適用した後、2 つ目の線形レイヤーが次元を元に戻す。
5.2 エンコーダの全工程の結合
- マルチヘッドアテンションとフィードフォワードレイヤーを含むエンコーダブロックをコードで記述する。
5.3 残差接続とレイヤー正規化
- 残差接続はレイヤーの入力を出力に加えることであり、レイヤー正規化はレイヤーの入力を正規化する技術である。
GN⁺の見解
- この記事は、トランスフォーマーモデルの数学的理解を助けるために、複雑な数学を単純化して説明している。
- とりわけ、自己注意メカニズムとフィードフォワードニューラルネットワークの動作原理を理解するのに役立つ。
- 残差接続やレイヤー正規化のような技術が、ニューラルネットワークの安定性と性能にどのように寄与するかを示すことで、深層ニューラルネットワークの学習課題を解決する方法への洞察を与える。
1件のコメント
Hacker Newsの意見
トランスフォーマーの「ミステリー」は、各レイヤーで静的な重みと値の線形シーケンスを使う代わりに、同じ入力に対して学習済みの重みの乗算によって得られた3つの異なる行列を使い、それらの行列同士を掛け合わせる点にある。これによって並列処理はより可能になるが、attention の式が静的であるため非常に制約が大きい。
もっとドライで、形式的で、簡潔なアプローチを望むなら、John Thickstun の "The Transformer Model in Equations" を参照するとよい。内容全体が標準的な数学記法を使ってわずか1ページに収まっている。
この記事を読んでいると疑問が湧く。
トランスフォーマーが単なる「次トークン予測器」として動作しながらも、訓練データセットに存在しない単語やサブワード/トークンを扱える理由についての論文や記事を見つけたい。
トランスフォーマーのチュートリアルは、新しいモナドのチュートリアルなのかもしれない。理解しにくい概念だが、コンピュータサイエンスの多くの事柄と同じく、理解するには苦闘し、例をこなす必要がある。
いくつかの単語は知っている。
TensorFlow を使わずにスクラッチで ANN を書いたことがある者としても、この説明はなお混乱する。
Quarto のウェブサイトが気に入った。出版のために Quarto を使う Python ユーザーがもっと増えているのを見かける。
デコーダの7段階で
Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z)ではなくZ_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention)になるべきなのか、またデコーダの8段階では layer_norm が欠けているのではないかと気になる。LLM がニューラルネットワークを使っているのか、そして「ニューロン」を構成しているものが何なのか気になる。つまり、ニューロンを支えるコード構造があるのか、それとも「単に」複雑な数学にすぎないのかという疑問だ。