で、個人的にはDiTって何なのか分からなくなってきた。潜在表現をシーケンス化し、プロンプトや時刻情報など条件をそこに追記し、Self AttentionすることがDiTなのかと思ってたが、どうもそうじゃないらしい。
U-Netを使わなければDiT、というわけでもないらしい。
条件のKVとCross AttentionしなければDiT、というわけでもない。(そもそもDiTの論文には、DiT Block with Cross Attentionというのがあって、Sanaもこれに近いように思う)
結局、まだ理解が足りてない。もっとがんばりましょう。
https://qiita.com/Yosemat1/items/802a41588e8bffaca992
ふむふむ。O(n^2)をO(n)の計算で近似するというんじゃないんだな。O(n^2)な類似度算出計算を、O(n)な計算に分解する「逆カーネルトリック」なる手法を使うらしい。
ただし、Attention機構で使われるsoftmax関数を分解すると、無限大に発散する関数になってしまい適用できない。だったら逆に、分解先の関数をまず決めて、カーネルトリックにより導出される関数をsoftmax関数の代わりに使えばいいじゃない、という発想のようだ。
人類はほんといろんなことを考えるな。
いや、Latent Diffusion ModelのようなU-Net構造を取らず、latentとconditionを入力してなんらかのAttention処理して、noiseを出力するブロックを直列に繋いだものなら、DiTの定義を満たすのかなぁ。