iTransformerと変量方向の注意 ― 時系列Transformerを『反転』して変量間の関係を学ぶ

多変量時系列をTransformerで扱うとき、ふつうは「各時刻のスナップショット(その瞬間の全変量の値)」を1つのトークンにして、時間方向に自己注意をかけます。ところが2024年に登場した iTransformer(Inverted Transformer) は、この常識をひっくり返しました。「各変量の系列全体」を1つのトークンにして、変量方向に自己注意をかけるのです。

たったこれだけの発想の転換で、Transformerは「変量と変量の関係(相関)」を直接学べるようになり、多変量時系列予測で最先端の性能を出しました。そしてこの「変量方向の注意」は、予測だけでなく多変量時系列の異常検知でも中心的な道具になっています(変量間の関係の崩れを異常とみなす手法など)。

この発想を理解すると、次のような場面で効いてきます。

  • 多変量予測モデルの設計 — 変量間の相関が効くデータで、何をトークンにすべきか判断できる
  • 関係ベースの異常検知を読む — 「変量間の注意=関係」という見方が、現代の手法群の共通言語になる

本記事の内容

  • 従来の時刻トークンと、iTransformerの変量トークンの違い
  • なぜ反転するのか(時刻トークンの弱点)
  • 変量注意行列が相関構造を捉えることのPyTorch実測
  • アーキテクチャ、チャネル独立との違い、利点と位置づけ

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

何をトークンにするか ― 時刻トークン vs 変量トークン

Transformerは「トークンの列」を受け取り、トークン間に自己注意をかける仕組みです。だから何を1トークンにするかで、注意が何を捉えるかが決まります。多変量時系列($L$ 時刻 × $M$ 変量)には、トークンの切り方が2通りあります。

Transformerの反転:トークンを時間から変量へ

左が従来型です。各時刻の縦スライス(その瞬間の全変量ベクトル)を1トークンにするので、トークン数は時刻数に等しく、自己注意は時間方向に働きます。右がiTransformerです。各変量の横スライス(その変量の系列全体)を1トークンにするので、トークン数は変量数に等しく、自己注意は変量方向に働きます。

トークン化の違い(時刻トークン縦切り vs 変量トークン横切り)

模式的に言えば、従来は時系列の「板」を縦に切る、iTransformerは横に切る。この切り方の違いが、後で見るように「注意が変量間の関係を学べるかどうか」を決定づけます。では、なぜ従来の縦切りでは不都合があるのでしょうか。

なぜ反転するのか ― 時刻トークンの弱点

従来の時刻トークンには、多変量時系列ならではの不都合がいくつもあります。

従来の時刻トークンの弱点

第一に、1つのトークンに温度・圧力・流量といった意味の異なる物理量を詰め込むため、トークンの中身が混ざって意味が薄くなります。第二に、各トークンの「受容野」がたった1時刻なので、時間的なパターン(周期やトレンド)をトークン単位では表しにくい。第三に、自己注意が時間方向にしか働かないので、変量と変量の相関を注意で直接モデル化できません。さらに、変量数が変わると埋め込み層を作り直す必要があります。

iTransformerはトークンを反転することでこれらを解消します。各変量の系列全体を1トークンにすれば、トークンは「その変量の時間パターン全体」という意味のまとまりになり、注意は変量間に働いて相関を直接学べます。次に、その中身(アーキテクチャ)を見ましょう。

アーキテクチャ ― 変量を埋め込み、変量間に注意をかける

iTransformerのデータフローは、実はとてもシンプルです。標準的なTransformerエンコーダを、トークンの向きだけ変えて使います。

iTransformerのデータフロー(変量埋め込み→変量自己注意→FFN→予測)

流れは4段階です。まず各変量の系列(長さ $L$)を1本のベクトルに埋め込みます(変量トークン)。次に変量トークン間に自己注意をかけ、変量同士の関係を捉えます。続いて各変量トークンにFFN(フィードフォワード)を当て、時間的な表現を作ります。最後に各変量について予測(長さ $H$)を出力します。

なぜ自己注意が「関係」になるのかは、注意の式を見るとわかります。変量トークンを並べた行列を $Z\in\mathbb{R}^{M\times d}$($M$ 変量 × 埋め込み次元 $d$)とすると、自己注意のスコアは

$$ A = \mathrm{softmax}\!\left(\frac{QK^\top}{\sqrt{d}}\right), \qquad Q = ZW_Q,\ K = ZW_K $$

で、$QK^\top$ は $M\times M$ 行列、つまり変量 $i$ と変量 $j$ の組ごとの類似度になります。従来の時刻トークンでは $QK^\top$ が「時刻×時刻」でしたが、反転したことで「変量×変量」=変量間の関係行列に変わる。これがiTransformerの核心です。

ここで役割分担が明確です。自己注意は「変量間の関係」を、FFNは「変量内の時間表現」を担当します。従来は時間方向の注意が時間も変量もまとめて扱おうとして無理が出ていましたが、iTransformerは関係の学習(注意)と時間表現(FFN)を分業させたわけです。なお各層は残差接続とLayerNormで包まれており($Z \leftarrow \mathrm{LN}(Z+\mathrm{Attn})$、$Z\leftarrow\mathrm{LN}(Z+\mathrm{FFN})$)、構造そのものは標準的なTransformerエンコーダと同じで、トークンの向きだけが違う点に注意してください。だからこそ「Inverted(反転)」と呼ばれます。最小実装の核は次の通りです。

import torch, torch.nn as nn

class InvertedAttn(nn.Module):
    def __init__(self, L, H, d=64, heads=4):
        super().__init__()
        self.embed = nn.Linear(L, d)                  # 各変量の系列→ベクトル
        self.attn  = nn.MultiheadAttention(d, heads, batch_first=True)
        self.ln    = nn.LayerNorm(d)
        self.ffn   = nn.Sequential(nn.Linear(d, d), nn.ReLU(), nn.Linear(d, d))
        self.head  = nn.Linear(d, H)
    def forward(self, x):                             # x: (B, L, M)
        z = self.embed(x.transpose(1, 2))             # → (B, M, d) 変量トークン
        a, w = self.attn(z, z, z)                     # 変量間の自己注意
        z = self.ln(z + a)
        z = self.ln(z + self.ffn(z))
        return self.head(z).transpose(1, 2)           # → (B, H, M)

x.transpose(1, 2) の一行が肝で、ここで「時刻×変量」を「変量×時刻」に転置し、変量をトークンにしています。では、この変量注意は本当に「変量間の関係」を学ぶのでしょうか。実測で確かめます。

変量注意は相関構造を捉える ― PyTorch実測

検証のため、2つのグループに分かれた10変量の合成データを作ります。変量0〜4は共通の潜在因子から、変量5〜9は別の潜在因子から生成し、群内では強く相関、群間ではほぼ無相関にします。さらに各群の一部を高ノイズにして、「相関のある綺麗な仲間から補える」状況を作ります。このデータでiTransformer-lite を学習し、学習された変量注意行列を取り出します。

変量注意行列が真の相関ブロック構造を捉える(実測)

左が真の変量間相関で、はっきりと2つのブロック(変量0–4と5–9)に分かれています。右が学習された変量注意行列です。注目すべきは、注意行列が真の相関と同じ2ブロック構造を自分で発見していること。変量0–4は群1の中に、変量5–9は群2の中に強く注意を向け、群をまたいだ注意はほとんどありません。自己注意の行列 $A\in\mathbb{R}^{M\times M}$ が、そのまま「学習された変量間の関係」になっているのです。これをグラフで描くと一目瞭然です。

変量注意=学習された変量間の関係グラフ

ノードが変量、辺の太さ・色が注意の強さです。群1(青)と群2(赤)がそれぞれ内部で強く結ばれ、群間はつながっていません。注意行列が変量間の関係グラフそのものになっている——この性質が、解釈性の高さと、後述する関係ベース異常検知への橋渡しになります。

では、この相関を捉える能力は予測精度に効くのでしょうか。

予測精度の比較 ― 相関を活かせるか

同じデータで、変量注意(iTransformer型)と時刻注意(従来型)の予測精度を比べます。一部の変量が高ノイズなので、相関のある仲間から情報を借りられるかが鍵になります。

予測MSE比較:変量注意が相関を活かし高精度(実測)

実測の結果、変量注意のテストMSEは約0.36、従来の時刻注意は約0.42で、変量注意が明確に低い(精度が高い)という結果になりました。高ノイズの変量を、同じ群の綺麗な変量に注意を向けて補えるため、相関を直接モデル化できる変量注意が有利になります。変量間の相関が予測に効くデータでは、トークンを反転するだけでこれだけ差が出るのです。

もちろん、すべての多変量データで変量を混ぜるのが正解とは限りません。次に、その対比を見ます。

チャネル独立との違い

多変量時系列の扱い方には、大きく2つの系統があります。

チャネル独立vs変量混合

一つはチャネル独立(PatchTSTやDLinearなど)で、各変量を完全に別々に処理します。変量間の相関を使わない代わりに、ノイズの多い相関に振り回されず頑健、という利点があります。実際、チャネル独立は多くの予測ベンチマークで強く、「相関を使わない方がかえって良い」場面もあることが知られています。もう一つが変量混合で、iTransformerはこちらに属します。ただしiTransformerが新しいのは、変量を「1時刻に混ぜる」従来のやり方ではなく、自己注意による相関として混ぜる点です。注意は入力に応じて関係の強さを動的に決めるので、固定的に全変量を混ぜるよりも、効く相関だけを選んで使えます。変量間の関係がはっきりしているデータでは変量混合(iTransformer)が、関係が弱い・不安定なデータではチャネル独立が有利、と覚えておくとよいでしょう。

トークンを反転したことで得られる利点は、精度だけではありません。

変量トークン化の副次的な利点

変量トークン化の利点(可変lookback/未知変量/解釈性)

第一に、各変量の系列を1トークンに埋め込むので、入力の長さ(lookback)を変えても枠組みは変わりません。第二に、変量はトークンの「数」にすぎないので、学習時と異なる数・種類の変量にも適用しやすく、未知の変量への汎化が効きます。第三に、先ほど見たように注意行列がそのまま変量間の関係を表すため、何と何が効いているかを読める解釈性があります。これらは、時刻トークンの従来型では得にくかった性質です。

最後に、この「変量方向の注意」が時系列分野全体のどこに位置づくかを整理します。

位置づけ ― 何をトークンにするか

何をトークンにするか:時刻/パッチ/変量

時系列Transformerは「何をトークンにするか」で性格が大きく変わります。時刻トークン(従来型)は時間方向に注意し、パッチトークン(PatchTST)は時間をパッチに区切って扱い、変量トークン(iTransformer)は変量方向に注意して相関を学びます。

特に重要なのは、この「変量方向の注意」が多変量時系列の異常検知とも地続きだという点です。変量間の関係を注意行列で捉えるという発想は、関係の崩れを異常とみなす手法(SARADのように変量をトークン化して関連を見るアプローチなど)と同じ土台に立っています。予測のために生まれた変量注意が、異常検知でも「正常な関係」を学ぶ道具として使われているわけです。

まとめ

本記事では、iTransformerと変量方向の注意を解説しました。

  • iTransformerはTransformerを反転し、各時刻でなく各変量の系列全体を1トークンにする
  • これにより自己注意が変量方向に働き、変量間の相関を直接モデル化できる
  • 自己注意は変量間の関係を、FFNは変量内の時間表現を担当する分業になる
  • 実測で、変量注意行列は真の相関ブロック構造を復元し、相関が効くデータで予測精度も向上した(MSE 0.36 vs 0.42)
  • チャネル独立との対比、可変lookback・未知変量への汎化・解釈性が利点
  • 「変量間の注意=関係」という見方は、関係ベースの異常検知とも地続き

「何をトークンにするか」を変えるだけで、Transformerが捉えるものが時間から関係へと変わる——iTransformerは、その発想の力を示す好例です。

次のステップとして、以下の記事も参考にしてください。