直線Flow Matchingの実装
ちょうど山岡さんもやっていたのでかなり真似して直線Flow Matchingの実装およびMNIST~STL10データでの学習を行った。
両端を固定しているわけではない、かつReFlowは行っていないので、これをRectified Flowと呼ぶべきなのかどうかはよくわからない。個人的には直線Flow Matchingと呼んだ方が良い気がしているのでここではそのように記述する。
一応Classifier-Free Guidanceがそのまま使えるだろうということでそれも(もとのDiTの実装から残したまま)やってみた。おそらく効果はあるのだと思っている。
STL-10のtrainデータだけを使って2000エポック学習させた。
- 10 classes: airplane, bird, car, cat, deer, dog, horse, monkey, ship, truck.
- image_size : 96 x 96
cfg_scale | STL-10での生成結果 |
---|---|
0.0 | |
1.0 | |
2.0 | |
4.0 | |
8.0 |
8.0まで強めると崩壊してしまった。そこまでは適度な強度で入れた方がまだマシな結果には見える。
感触として、画像サイズが大きくなると急激に学習難易度が上がるように見えるので、Minecraftで学習させる際も最初はもっと大胆に画像サイズを小さくした方が良いのかもしれない。
あとはやはり条件付けの与え方が課題で、そこについては良い参照実装を見つけられていないまま……。
コントローラーについての断想
なんとなく生成モデルの発展により、世界モデル自体の学習はできてくるのではないかという予感がしてきている。
一方、将棋ソフトを作っている人ならよくわかることとして、世界モデル(遷移モデル)が作れたところで、それをどう駆動させて探索を行うか/打ち切るかということは別の問題として大きく存在している。
どのような分野をサーベイすると良いのかどうかもよくわからない。たとえば松尾豊さんなどは『知能の2階建てアーキテクチャ』という考え方を提唱している。これだと低レイヤの方に世界モデルがあったりして、そこに言語アプリが乗っかるとなっていて若干よくわからなかったりするのだが、
言語アプリは,OS の提供する API(アプリケーションプログラムインタフェース) を利用するように,動物 OS の機能を利用し,外界のパターン認識やアクチュエータの制御を,より高次なレベルで行う.
とまとめられる。
毎回言語的に駆動させることに納得できるかはともかく、一歩方針としては具体的になって「テキスト条件付けできる世界モデル + そこにテキスト条件を与えるLLM」という構成を実装しろと言われれば形は見える。
アラヤの金井良太さんだとグローバル・ワークスペースを想定することになる。https://www.araya.org/randd/consciousness3/
こちらの方がややそれっぽい気はするが、具体的にどう実装するかと言われると若干まだ腑に落ちていないところがある。世界モデルと協働した思考や、そこから目の前のことへの切り替えなどが、上手く実現できるのかどうかわからない。
Yann LeCunだとA Path Towards Autonomous Machine Intelligenceというアイデアを示す論文がある。まぁこっちも世界モデルを使うタイミング/使わないタイミングの切り替えが上手くできるのかどうかが理解できていない。
結局よくわからないことだらけだが、いろいろ調べつつという感じで。