HeadlinesBriefing favicon HeadlinesBriefing.com

時系列におけるトランスフォーマーの位置エンコーディング

Towards Data Science •
×

時系列の基盤モデルを深く掘り下げる中で、私はまずトランスフォーマーを理解しなければそれらを本当に理解できないことに気づいた。これらのモデルをブラックボックスとして使いたくなかったので、基盤モデルからトランスフォーマーへ、そしてトランスフォーマーから自己注意へと、アイデアを逆順にたどり始めた。この移行を面白くしたのは、トランスフォーマーは本来言語のために構築されたものの、その中核となるアイデアが自然に時系列に適用できるということだった。二つのモダリティは非常に異なるが、ある根本的なものを共有している。どちらもシーケンスであり、どちらの場合も順序が意味を変えるということだ。言語では、犬が人を噛むは人が犬を噛むとは大きく異なる。時系列も同様だ。昨日30°で今日20°の温度は、昨日20°で今日30°とは異なる物語を語る。値は同じでも、その順序がシーケンスの意味を変える。問題は、自己注意がすべての観測を一度に見る場合、トランスフォーマーはどの観測が最初に来たか、どれが後に来たか、または二つの観測がどれくらい離れているかをどうやって知るのかということだ。その疑問が私を位置エンコーディングへと導いた。最も驚いたのは、それほど単純な数学的アイデアがトランスフォーマーに順序の感覚を与えられることだった。それ以来、具体的な手法は大きく進化したが、根本的な問題は同じままである。この記事は、単純な時系列から始め、生の観測から自己注意、そして最終的に位置エンコーディングへの道をたどって、その直感をゼロから構築する私の試みである。

スカラー観測からベクトル表現へ 5つの平日にわたって記録された温度を含む単純な時系列を考えてみよう:時系列の例:5日間の温度履歴 各観測x_tはスカラーにすぎない。しかし、トランスフォーマーは次元数d_modelのベクトルで動作する。したがって、スカラー観測はまずその表現空間にマッピングされる必要がある。これを行う簡単な方法は、学習された線形投影、すなわち埋め込みを通すことだ:e_t = W_e x_t + b_e これによりベクトル表現のシーケンスが得られる:e_1, e_2, e_3, e_4, e_5 埋め込みは、その特徴をエンコードし、モデルが理解する多次元数値ベクトルの形による系列の深く抽象的な表現である。各時系列トークンは学習された埋め込みによって表される。各e_tはそのタイムステップでの観測値に関する情報を捉えるが、この時点では、それは単なる観測の表現である。ここでの重要な言葉は学習されたである。モデルには18°のような温度に対して事前定義されたベクトル表現は与えられない。パラメータW_eとb_eは、結果として得られる表現がタスクに有用になるように訓練中に学習される。この時点で、e_tは観測されたものを表す。それはまだモデルにその観測がシーケンス内のどこで発生したかを伝えていない。

自己注意はどのようにコンテキストを構築するか?自己注意は各観測がシーケンスの残りの部分からの情報を使用することを可能にする。金曜日の表現を更新したいと仮定しよう。モデルはまず各e_tから3つの学習された投影を作成する:q_t = W_Q e_t, k_t = W_K e_t, v_t = W_V e_t クエリ、キー、値のベクトルは自己注意ブロックで学習される。行列W_Q、W_K、W_Vも訓練中に学習される。モデルには有用なクエリ、キー、値がどのようなものか事前には教えられない。金曜日について、そのクエリq_5はすべての観測のキーと比較される:k_1, k_2, k_3, k_4, k_5。各比較は...を生成する