https://nvlabs.github.io/Sana/
Sana、DiTでTransformerにLinear Attention機構を採用することで、計算量O(n^2)をO(n)に落とし込んだこと、VAEの代わりにDeep compression autoencoderという高圧縮率な変換をかけていること、テキストエンコーダーの前段にLLMによるユーザープロンプト強化を行っていることが新しいみたい。構造としてはシンプルに見える。
いや、Latent Diffusion ModelのようなU-Net構造を取らず、latentとconditionを入力してなんらかのAttention処理して、noiseを出力するブロックを直列に繋いだものなら、DiTの定義を満たすのかなぁ。
https://qiita.com/Yosemat1/items/802a41588e8bffaca992
ふむふむ。O(n^2)をO(n)の計算で近似するというんじゃないんだな。O(n^2)な類似度算出計算を、O(n)な計算に分解する「逆カーネルトリック」なる手法を使うらしい。
ただし、Attention機構で使われるsoftmax関数を分解すると、無限大に発散する関数になってしまい適用できない。だったら逆に、分解先の関数をまず決めて、カーネルトリックにより導出される関数をsoftmax関数の代わりに使えばいいじゃない、という発想のようだ。
人類はほんといろんなことを考えるな。
ともかく、SanaはDiTとしての構造がシンプルだし、シンプルなものはだいたい強い法則がある[要出典]ので、きっと高性能なんだろうなあ。(FluxやSD3は複雑すぎてよくわかんないけど、複雑なのは確かだ)
Linear Attentionがどんなものか、まだよく調べてないけど、O(n^2)をO(n)にするには、何らかの近似が行われているはずで、そのことによる性能劣化がどの程度あるかによるな。