注意: これはあくまでノリで構想したものであり、実装される保証はありません。
YakiUdonNNとは
VRChat内で積み木のようにモデルを組み、PyTorchモデルにエクスポートするツールです。
このツールを使うことで視覚的にモデルを作成することが可能になり、より多くのぶいちゃ民に
機械学習(NN関係のみ)を布教できるようになります。
ベースとなる技術
VRChat上で動的にシェーダを組めるGraphilia
というツールを参考に作っていこうと思います。
名称の由来
Torch🔥Udon Neural Network の略称です。
Torch → 松明 → 炎 → 焼く → やきうどん!
という流れです。
VRChat上で実装するのでもちろんUdonを用います。
開発フェーズ
やきうどんは理想が高いです。なのでフェーズを分けて着実に開発していきます。
1st, "Layers"
最初はただレイヤーの名称を書いた箱を用意するだけです。これだけでも人に説明するのに役立ちます。
各レイヤー間の繋がりや関係は QvPenというVRChat上で空中にかけるペンを用いて記述します。一番最初なのでこれくらい簡単にします。
懸念としては、レイヤーブロックのスポーン数でどれだけ重くなるかですね。
2nd, "Flows"
1stフェーズで実装したブロックを今度はつなげられるようにします。Graphiliaのような形がベストです。実装頑張ります。
3rd, "Hyper Parameters"
ここまで作ってきて、まだレイヤーのハイパーパラメータ(kernel_size
やin_features
など)を調整することができません。なので、実装します。調整したパラメータはグローバルに同期するようにしましょう。
4th, "Run"
第3フェーズまででおそらく実装したレイヤーの数によってはいくつかモデルを組めるようになったのではないでしょうか。ここでそのモデルをPyTorchを使用した際のモデル形式でエクスポートします。と言ってもローカル環境に.pyファイルを生成するだけですが。こんなファイルを生成したいですね。
"""
This files was generated by `Yaki Udon NN v0.0.0`!
"""
import torch
import torch.nn as nn
import yakiudon.nn as yknn
class Model(nn.Module):
def __init__(self):
super().__init__():
self.layer1 = nn.Linear(100,200)
self.layer2 = yknn.Reshape((200,), (20,10))
def forward(self, x):
h = x
h = self.layer1(h)
h = self.layer2(h)
o = h
return o
そしてMNIST分類問題でも解くテンプレートノートブックを作成して、そこのレイヤー定義の部分をこの生成されたファイルで置き換えれば良いのです!
最後に
とりあえず構想だけまとめたので、実装するかは怪しいです。強化学習とかでよくシミュレーターを扱うのでVRChatなどのメタバース環境とAIは深い関係を持つことになりそうです。そうなると思いますし、機械学習は知能の真髄に迫るメチャクチャ面白い分野なので多くの人に関心を持っていただけるようにしたい限りです。