5 ポイント 投稿者 GN⁺ 2024-01-04 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-01-04
Hacker Newsの意見
  • トランスフォーマーの「ミステリー」は、各レイヤーで静的な重みと値の線形シーケンスを使う代わりに、同じ入力に対して学習済みの重みの乗算によって得られた3つの異なる行列を使い、それらの行列同士を掛け合わせる点にある。これによって並列処理はより可能になるが、attention の式が静的であるため非常に制約が大きい。

    • 計算グラフを学習可能なパラメータへ一般化する方法が出てくるまでは、これ以上の進展を見るのは難しい。
    • 従来の勾配ベースの手法では、小さな変化が性能に大きな変動を引き起こすカオス的効果のため、伝統的な意味で可能なのか確信が持てない。
    • おそらく遺伝的アルゴリズムや PSO のような形が内部的に起こる必要があるだろう。
  • もっとドライで、形式的で、簡潔なアプローチを望むなら、John Thickstun の "The Transformer Model in Equations" を参照するとよい。内容全体が標準的な数学記法を使ってわずか1ページに収まっている。

  • この記事を読んでいると疑問が湧く。

    • "Hello" と "World" に対応するベクトルはランダムに見える一方で、何らかのパターンもあるように見える。
    • ベクトル内で 2 が重複していることに意味があるのか、それとも集合全体として一意なのかが気になる。
  • トランスフォーマーが単なる「次トークン予測器」として動作しながらも、訓練データセットに存在しない単語やサブワード/トークンを扱える理由についての論文や記事を見つけたい。

    • たとえば pandas で "sdsfs_ff"、"fsdf_value" という列を持つテーブルを作成する場合や、訓練データセットにない例を作って LLM に類似の出力を求める場合など。
    • 位置埋め込みについて議論しているリンクもあるとうれしい。サイン/コサインの使用や、(乗算 対 比較)について納得のいく答えがまだ得られていない。
  • トランスフォーマーのチュートリアルは、新しいモナドのチュートリアルなのかもしれない。理解しにくい概念だが、コンピュータサイエンスの多くの事柄と同じく、理解するには苦闘し、例をこなす必要がある。

  • いくつかの単語は知っている。

  • TensorFlow を使わずにスクラッチで ANN を書いたことがある者としても、この説明はなお混乱する。

    • ChatGPT に、行列やベクトルという用語を使わずに、基本的な ANN を修正して自己注意(self-attention)を実装する方法を説明してほしいと頼んだところ、本当にシンプルな説明をしてくれた。
    • ノード、重み、レイヤーという観点ですべてを考えるほうを好む。行列とベクトルは、ANN で何が起きているのかを結び付けて考えにくくする。
    • ANN を書く際に慣れているやり方では、各入力ノードはスカラーだが、feed forward アルゴリズムがベクトル-行列積のように見えるのは、すべての入力ノードを重みに掛けてから合計しているためだ。
  • 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 がニューラルネットワークを使っているのか、そして「ニューロン」を構成しているものが何なのか気になる。つまり、ニューロンを支えるコード構造があるのか、それとも「単に」複雑な数学にすぎないのかという疑問だ。