Open7

M-RoPE(Multimodal RoPE) multimodal Rotary Positional Embedding のメモ

syoyosyoyo

RoPE はまずテキスト(1D)で考案された. テキストトークンの次元は 1D でトークン位置は n で表現する

[吾輩, は, 猫, である]

は [吾輩: 1, は: 2, 猫: 3, である: 4] のように(非常に明白).
各トークンの隣接距離(相対位置)も一定(1. これも明白)

画像は 2D(x, y) で表現して 2D-RoPE を適用することは可能

ではテキストと画像(さらには動画(3D))と混在したい場合は?

syoyosyoyo

https://spaces.ac.cn/archives/10040

中国語なので読解に苦労するが...

次元を下げて 1D RoPE で表現

画像のトークン(画像パッチ) を y * w + x で flatten(画像の各行には sep 入れる) して 1D にして対応. いくつか既存の取り組みがある.

これだとテキストだけで train されたモデルに対して画像を拡張して扱うことがやりやすい

ただしこれだと画像パッチの (x + 1, y) と (x, y + 1) は画像(2D)では距離 1 になるが, 1 D sequence にすると (x, y + 1) は w だけ離れてしまうので表現が柔軟ではない

syoyosyoyo

テキストも 2D で表現

通常の書類のように, テキストは行情報つけて 2D で表現する.

人間からすれば直感的である.

ただし学習はやり直しとなる.

また, 画像が多くテキスト成分が少ないと表現に問題ありそう

syoyosyoyo

2 D にスケールの導入

2D で表現するのは理に叶っているので, 2D での表現にしたいが, テキストだけの時は 1D RoPE となるように互換性を持たせたい.

テキストは対角で表現し, 画像パッチ(画像トークン)の id にテキストのトークンの終端の位置 (L, L) を与えるとする. つまり画像パッチの最初は (L + x, L + y) となる.

トークンの終わり位置 (L, L) と画像パッチの開始位置(L + 1, L + 1) は (1, 1) 離れている.

画像の後にテキストが続く場合, その開始トークン位置は (K, K) となるが, 画像が正方形出ない場合 (w != h) とき, (L + w, L + h) の次である (K, K) との距離が (1, 1) にならず非対称性が生まれてしまう. これはよくない

syoyosyoyo

そこで画像 token 位置にスケール (s, t) をかけ, テキスト終端位置(L, L)と画像開始との距離, 及び画像終端と次のテキスト開始位置(K, K)との距離を一定(s, t)にする

s = w + 1, t = h + 1 が一番簡単であり, これだと位置を全て整数で扱える

ちなみに画像パッチ間の距離はその分離れることになる(テキストだと 1). Attention 的には問題ないかもであるが, そのぶん周期のスケーリング項を大きく取らないといけなくなるきもするがどうかしらん?
(実際 rope_theta は llama は 10,000(1 万)であるが, Qwen2-VL は 1,000,000(100 万))

syoyosyoyo

さらなる高みへ

先に述べたように (s, t) を決めると, K=L+(w+1)(h+1) となり, 画像 token もテキスト token と考え他場合, 画像の間隔は (w + 1) x (h + 1) - 1 となり, 画像 token 数(w x h)より多い

理想は (w x h)個であるが, 整数位置にしたい場合はこの理想の個数にするのは無理なので受け入れるしかない.
もし整数位置でなくてもよければ

s = (wh + 1) / (h + 1), t = (wh + 1) / (w + w)

とすることができる

syoyosyoyo

サイズの異なる画像が隣接していた場合は?

<img> </img> などの special token を導入し, 各画像をそれで囲うことで, 直接に画像が隣接することを避けることができる

いずれにせよ, 入力にテキストと画像が混在する場合は special token で画像を囲うとよいでしょう.

1D の時に出てきた sep は, 画像を生成しない(画像を output しない)のであれば冗長であるのでなくてもよいでしょう.