前回: 雑記 - クッキーの日記
- Understanding the Differences in Foundation Models: Attention, State Space Models, and Recurrent Neural Networks | OpenReview : NeurIPS 2024 のポスターで、Self-Attention と状態空間モデルと RNN をすべて状態空間モデルに近い形式 (DSF: 動的システムフレームワーク) で統一的に定式化した研究。
- [1409.0473] Neural Machine Translation by Jointly Learning to Align and Translate
- From GRU to Transformer - Sewade Ogun's Website : GRU を徐々に Self-Attention に近づけていく 2020 年のブログ記事。
- LSTM — PyTorch 2.9 documentation
- GRU — PyTorch 2.9 documentation
副部長、NeurIPS 2024 のポスターに「Attention と状態空間モデルと RNN の構造の違いの理解」なるものがあったのですが [1]、「違いの理解」とは何をもって「違いの理解」なのでしょうか。
要旨によると、動的システムフレームワーク (DSF) という統一的な枠組みを導入した上で、それらのモデルがどう違うのか、どのような条件下で等価になるのか論じているみたいだね。
なるほど。統一的に理解することはよいことだと思いますが、それが具体的に何につながるのでしょうか? Attention の改良策を RNN に輸入したり、その逆をしたりでしょうか? あるいは、Attention の性質と RNN の性質のいいとこどりを目指すとか?
要旨の書きぶりでは、「Softmax Attention は強力だが計算コストがかかるために扱える入力系列の長さに限界がある」「そのため、線形 Attention や、状態空間モデルや、RNN で代替することが考慮されてきた」とあるから、計算コストは抑えつつ長い入力系列の特徴をよく捉えることを目指したさそうな感じはする。それが「いいとこどり」といえばそうか。実際に何ができたかは本編を読まないとわからないけど。
えっ、最近の若い人は状態空間モデルや RNN を、Attention の計算コスト削減手段として習うのですか!? Attention なんてちょっと前までなかったのに……。
いやどう習うかは知らないし、Attention は 10 年以上前からあるけど……。
あれ、Attention はこのブログ (今日で作成日から 10 年 🎉) より先輩なのですか? このブログを作成した当時はまだ Attention is All You Need などといわれていなかったと思いますが。
Attention is All You Need が導入したのは Self-Attention――入力系列内トークン間の Attention だね (いやこれだって 8 年前だけど)。ただ元々 Attention は「RNN ベースの機械翻訳向け Seq2Seq モデルにおいて、ステップ t の単語 y_t をデコードするときに、入力系列の各ステップに対応する隠れ状態 [h_1, h_2, ..., h_T] を重みづけて足したものを参照する」やり方として登場したよ [2]。最終出力局面で「次の単語を出すのには入力系列のどのステップが強く関連しているか」とやる Attention だから、Self (系列内) でなく Nonself (別系列) を向いた Attention だね。もっとも [2] は [1] に参照されていないし、[1] における Attention は Self-Attention みたいけど、もしかしたら Nonself-Attention も DSF で扱えるかもしれないね。
そうだったのですね。それにしても、RNN と Self-Attention の関係といったブログ記事がこの間にもあって、少し読みませんでしたっけ……あ、このブログ記事 [3] で、こちらで読んでいました。
それ 5 年前じゃないか……さっきから時間間隔がフリーレン過ぎる……。それに、その記事 [3] は GRU を徐々に Self-Attention に寄せていっているけど、[1] は Self-Attention を状態空間モデルの形にしようとしているようにみえるから寄せる方向が逆かな。まあ Self-Attention 側に寄せるとトークン数の 2 乗の Attention weight が出てきちゃって比較しづらいだろし、ちゃんと議論するときは状態空間モデル側に寄せた方がいいんじゃないかな。記事 [3] の方は「(当時) 新興の Attention が何者かをこれまでのモデルから地続きに理解してみよう」といった感じだと思うけど。
そうなのですか? せっかくなので記事 [3] に何を書いてあったか復習しましょう。復習にあたり、LSTM や GRU の絵があった方が個人的に便利なので描いておきます。ネットワーク構造は Pytorch のドキュメント [4] [5] を参考にしました。記事 [3] の Notation とは異なります。

記事 [3] ではまず導入で、「LSTM や GRU は Vanilla RNN にみられる勾配消失問題を大幅に解決し、長く系列モデリングに用いられてきた」といっていますね。勾配消失とはどういうことでどうして起きるのでしたっけ。
上の絵でいうと
を更新するときに、
を減らすことを考えるだけじゃなくて、
と全て減らすことを考えないといけないよね。ただ遠い未来の
に伝わる頃には
は何度も掛け合わされて
の遠い未来への影響は往々にして消えやすいって感じかな。
ああ、そんな感じでしたね……ただなんというか、「Vanilla RNN は勾配が消失 (爆発) する可能性が高い」というより、Vanilla RNN が元々長い系列を想定した造りになっていないじゃないですか。
に乗じる重みを小さくしたらステップを経て情報を伝達する能力は制限されるし、かといって大きくしたら出力が壊れるし。だから、「Vanilla RNN の勾配消失問題」って、ニワトリに向かって「ニワトリはほとんど飛べない」って言っているように聞こえるんですよね。
いやその喩えはよくわからない……。
n 年後につづく