えちょ記

語らないブログ

モンテカルロ法とシェフの気まぐれニューロン系シミュレーション(1)

並列演算を偽AIに適用できないかと興味を持ったのは良いんですが、適用方法がしばらく思いつかなくて放置していました。ようやくビジョンが浮かんだのでとりあえずコンセプトメモ。

現在のコンピュータを脳と比較した場合、並列処理を考慮すればもう十分な処理速度があるはずで。それでも脳に全く追いつかないのは、並列演算とアルゴリズムに問題があるのでしょう。ニューロン自体は十数個〜最大で万単位の入力から、1出力を出すか出さないかを決定するもの、というところまではわかっていますが、本質は単体のニューロンではなく、全体が群として動いたときの効果的なエミュレーションモデルができあがっていないところにあります。

沢山まとめた時の計算能力はそろそろ追いつきそうなところにきてると思うんで、後は演算の並列度を何とかすればいいと思うのです。並列演算のキモは「同期を減らすこと」「通信量に対する演算量をなるべく大きくすること」「演算の依存関係を極力排除すること」。

従来型コンピュータは逐次計算は得意ですが超並列の干渉モデル構築が苦手です。なので、単体のコンピュータを見たときに逐次演算モデルで動かすことが出来るやり方であれば、計算量そのものは割り増しでも実現可能性そのものは高くなるはず。このあたりを満たすモデルはあるのかな?

さて、究極の並列処理モデルは「量子コンピュータ」と言われています。すべての可能性の組み合わせを重ね合わせた状態で演算して、最後に出力を「観測」すれば結果がわかるそうなんです。なんか想像できないすごさなのですが、技術的にも想像できないすごさのハードルを乗り越える必要があるので、ちょっとその辺の話は素人研究では追いつきません。

で、量子コンピュータをエミュレートする方法が無いのかというと、超割り切って良いのならあります。「モンテカルロ法」。ていうか確率演算の重ね合わせをする代わりに、さいころ振った結果を可能な限り足しあわせて積分するという豪快な手法。円周率の計算方法などで有名です。

モンテカルロ法の何が良いのかというと、演算精度がサイコロを振った回数にのみ依存することです。これは実時間に結果を求めなければならない思考処理において重要な特徴です。エミューレート対象が小さいなら回数振ることが出来ますし、どうしても大きくならざるを得ないのなら、その分サイコロを振る回数を減らすことでとりあえずやってみることは出来ます。
もう一つ大事なことは、サイコロを振る行為そのものには、前後に依存する計算がありません。つまり、サイコロを振るという最も重要かつ負荷の高い演算行為について、並列度を極限まで上げることが出来ることです。

ようは、並行処理で問題となる計算の相互依存と広帯域通信を排除するために、乱数を使って、「入力があったことにして計算してみる」わけで。この計算は1つ1つは全く意味不明となりますが、すべての結果を積分して群として観測することにより、「何故か全体として入力の相互依存があったことになる」効果を得ることは出来ないか?というのが基本的な発想です。この考え方は量子演算に似ています。ちょっとググったら論文っぽいものもあるようなので、割と外していないモデルでしょう‥‥多分。

全体の同期単位は現実に存在する脳のモデルを考えると10Hz前後でいけるはずなので、全体の演算に対する同期負荷も割と小さめで済むはず‥‥。後は、とりあえずおおざっぱにニューロン群の演算モデルを決めちまえばそれっぽく動くような気がします。というところで今日はここまで。偽ニューロン群の実現に関する考察は次回。