nvlabs.github.io/Sana/
Sana、DiTでTransformerにLinear Attention機構を採用することで、計算量O(n^2)をO(n)に落とし込んだこと、VAEの代わりにDeep compression autoencoderという高圧縮率な変換をかけていること、テキストエンコーダーの前段にLLMによるユーザープロンプト強化を行っていることが新しいみたい。構造としてはシンプルに見える。

で、個人的にはDiTって何なのか分からなくなってきた。潜在表現をシーケンス化し、プロンプトや時刻情報など条件をそこに追記し、Self AttentionすることがDiTなのかと思ってたが、どうもそうじゃないらしい。

U-Netを使わなければDiT、というわけでもないらしい。
条件のKVとCross AttentionしなければDiT、というわけでもない。(そもそもDiTの論文には、DiT Block with Cross Attentionというのがあって、Sanaもこれに近いように思う)

結局、まだ理解が足りてない。もっとがんばりましょう。

フォロー

いや、Latent Diffusion ModelのようなU-Net構造を取らず、latentとconditionを入力してなんらかのAttention処理して、noiseを出力するブロックを直列に繋いだものなら、DiTの定義を満たすのかなぁ。

ともかく、SanaはDiTとしての構造がシンプルだし、シンプルなものはだいたい強い法則がある[要出典]ので、きっと高性能なんだろうなあ。(FluxやSD3は複雑すぎてよくわかんないけど、複雑なのは確かだ)

Linear Attentionがどんなものか、まだよく調べてないけど、O(n^2)をO(n)にするには、何らかの近似が行われているはずで、そのことによる性能劣化がどの程度あるかによるな。

qiita.com/Yosemat1/items/802a4
ふむふむ。O(n^2)をO(n)の計算で近似するというんじゃないんだな。O(n^2)な類似度算出計算を、O(n)な計算に分解する「逆カーネルトリック」なる手法を使うらしい。

ただし、Attention機構で使われるsoftmax関数を分解すると、無限大に発散する関数になってしまい適用できない。だったら逆に、分解先の関数をまず決めて、カーネルトリックにより導出される関数をsoftmax関数の代わりに使えばいいじゃない、という発想のようだ。

人類はほんといろんなことを考えるな。

Linear Attentionでの学習は、通常のAttention(softmax関数利用)に比べると収束速度は緩やかだけど、その分O(n)の圧倒的速度でsteps数を稼いでカバーできるから問題ない、みたいな感じか。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。