https://nvlabs.github.io/Sana/
Sana、DiTでTransformerにLinear Attention機構を採用することで、計算量O(n^2)をO(n)に落とし込んだこと、VAEの代わりにDeep compression autoencoderという高圧縮率な変換をかけていること、テキストエンコーダーの前段にLLMによるユーザープロンプト強化を行っていることが新しいみたい。構造としてはシンプルに見える。
https://qiita.com/Yosemat1/items/802a41588e8bffaca992
ふむふむ。O(n^2)をO(n)の計算で近似するというんじゃないんだな。O(n^2)な類似度算出計算を、O(n)な計算に分解する「逆カーネルトリック」なる手法を使うらしい。
ただし、Attention機構で使われるsoftmax関数を分解すると、無限大に発散する関数になってしまい適用できない。だったら逆に、分解先の関数をまず決めて、カーネルトリックにより導出される関数をsoftmax関数の代わりに使えばいいじゃない、という発想のようだ。
人類はほんといろんなことを考えるな。
で、個人的にはDiTって何なのか分からなくなってきた。潜在表現をシーケンス化し、プロンプトや時刻情報など条件をそこに追記し、Self AttentionすることがDiTなのかと思ってたが、どうもそうじゃないらしい。
U-Netを使わなければDiT、というわけでもないらしい。
条件のKVとCross AttentionしなければDiT、というわけでもない。(そもそもDiTの論文には、DiT Block with Cross Attentionというのがあって、Sanaもこれに近いように思う)
結局、まだ理解が足りてない。もっとがんばりましょう。