とにかく僕は開発言語には拘ってない。
外部の助言はあるけど、やってることを説明するのが大変なので
けっこうスルーしてるかな・・・。
こういうネットでデモやるならJavaScriptみたいのでいいし、
ある程度の骨格がつかめたらPythonに落とす。
普段の実験ならPythonでいいし。
ガンガン回して実験結果を見て判断するのはPythonとC++かな。
C++は大規模ノードでどうなるか、長時間回したときの安定性、数値誤差の影響、つまりは現実条件での検証に最適なんだよね。
今のところ、JavaScriptで思想作って、Pythonで回して、C++が現実みたいな。
Atronは
成長
-
不可逆性
-
体験の蓄積
-
長時間の変化
つまり短いテストでは分からないんだよね
Python:探索 C++:時間を回す
それと、数式をcodeに落とし込むならC++は理想だよ。
ロボット研究者に多い。
例えばAtron的な式:
これをC++にすると
--------C++--------
for (int i = 0; i < N; i++) { double sum = 0.0; for (int j = 0; j < N; j++) { sum += W[i][j] * x[j]; } x_next[i] = f(sum); }
ほぼ、そのままじゃん。
微分方程式系もそのまま書ける
オイラー法なら
for (int i = 0; i < N; i++) {
dx[i] = -x[i] + f(input[i]);
x[i] += dt * dx[i];
}
C++は研究者向きなんだよね。
森田先生の非単調
--------C++--------
double f(double x) { if (x > theta) return 1.0; if (x < -theta) return -1.0; return x; }
エネルギー関数
--------C++--------
double energy = 0.0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { energy -= W[i][j] * x[i] * x[j]; } }
Atronは数式の時間発展が人格になるのでC++は理想かな。
Pythonは使うよ。ただ、長い時間回すとなるとさ、
--------Python--------
for i in range(N): for j in range(N): sum += W[i][j] * x[j]
ループで死ぬ。
このタイプじゃない方法があれば教えてほしいんだけど、C++の 10〜100倍遅くなる。
(マジで誰かいい方法あったら教えて)
いきなり完成品を作れよ!とか言われたらそりゃCとか選ぶんだろうけど、研究室で試行錯誤を回すための言語とは思えない。今から畑耕して土触って今年の気候判断して「植えるもの変えよう!」とか、やってられない。
けっこうCを助言してくる人多いけど、
ほれ、こういうの説明するのめんどくさいから「流石ですね、そうですね」で終える。
C / C++ / Python の思想比較
| 言語 | 世界観 |
|---|---|
| C | 自由。責任は全部あんたさ |
| C++ | 自由+秩序。選ぶ |
| Python | 秩序。危険はさせない |
この前、TurboC触った時に計算資源が少ないからさ、「ルールで済ませちゃおうか!」って思考が働くわけよ。あれは危ないと思ったよ。うかうかしてたらアルゴリズムになってしまう。僕の研究はアルゴリズムじゃないからね。3人称とか入れられないのよ。Atronの「一人称の競合・揺れ、正解が無い」なので、それを潰すわけにはいかないのよ。デバックが大変だしね。
ただ、あれのいいところは"何が本質か"がはっきり出るところだよね。
なので、場面場面で使う言語は変わる。
本当はさ、昔のHypercardみたいのでもいいと思ってるだ。
漢字talk6.7くらいの覚えてるけど、めちゃくちゃ楽しかった。
大規模数値計算つーか、ポッピーみたいな(Hopfield的な連続計算)ものとか、
行列演算・エネルギー最小化、高速な反復シュミレーションが出来ないだけで、それが出来たら、全部やめてHypercardでいいと思うくらい(笑)
スタックという概念が最高にいい
stack=経験
script=内部力学
card=状態
button=行動
Link=連想
とか出来るじゃん。
本当は、こういうのでガンガン回して収束比較とかしたい。
たぶん実験成果が上がると思うんだよね
でも、カメラ駄目、センサー駄目、外部危機駄目じゃん。
だから、本当にオシイと思う。
あんないいものを、なんで終わらせたのか、よく分からない。
CPUやGPUを意識せず、世界と記憶だけを作れるHyperCardあったら買います!
開発言語とは関係ないけど、FileMakerも実験室のように、ある程度外部データを送り込むものに使っているけど、Webビューアーのボトルネックとか、なんかクラリス・スタジオとか更新される機能がよく分からなく、かえってPython単体より構造が複雑になる傾向があるので少し離れてる。だから、FileMakerはGanttと論文や資料のPDFのフォルダ管理、文献管理、気になったらFMから立ち上げて・・・みたいな。
頭の整理にはObsidianと両方使ってる
普段使うエディタなんてnotepad++とかVSとか
共同研究者とまではいかないけど、テキスト書くのもnotepad++使ってるよ。
Emacsまでは要らないし・・・
でも、ゆくゆくは3Dゲーム屋さんとの連携があるので、
ゲームエンジンとIDE
3Dワールド(Unity / Unreal)
↓ センサー情報
Atron Core(Python / C++)
↓ 行動決定
3Dワールドに返す
つまりは、3Dがシーンによって外界になるってこと。
アソシアトロンと3Dは、一体化させるつもりはないよ。
だって別物だもの。3人称に引きずられたら、Atronは終わるからね。
NavMeshで最短経路とかState Machineで行動制御とかやっちゃったらもう僕の研究じゃなくなる。
Atron = 内部(意味・記憶)で、外界(3D)の中で経験を積むみたいなシーンもあれば
現実の映像や風景、人の会話での経験も積む。
これを守れてるかで、一人称か三人称かが分かれる。
-
3D側に「賢さ」が入ってないか?
-
3D側が「正解の行動」を持ってないか?
-
Atronが迷ってる時に、3Dが助けてないか?
-
行動が“目的最適化”に寄ってないか?
-
誤学習や固執が、そのまま世界に出ているか?
だから、自律が完成しても自律はスタートであって、その先を間違えたらただの鉄屑で終わってしまうわけ。
---------------追記----------------
Pythonは NumPyだ。これで速くなる
x = np.array(現在の状態ベクトル, dtype=np.float32)
new_x = W @ x
0 件のコメント:
コメントを投稿