2014/08/30

協調しつつも各自の判断で

自律分散処理という概念があるのだ。
中央で一括処理するのではなく、処理を分散させて並行処理をさせるんだけど、勝手にばらばらと処理するのではなく、全体がちょうわするようにそれぞれが自律的に処理するようにするのだ。
というとなんだか難しいけど、こういうシステムは意外と身近にあるのだ。

例えば、人間の場合、脳で情報処理をしているわけだけどこういうシステムが採用されているんだよね。
膝のあたりをたたくと足がぴんと伸びる「膝蓋腱反射」というのがあるけど、これって意識して動かしているわけではなくて、刺激に応じて勝手に体が動いているのだ。
いわゆる「脊髄反射」みたいなもので、一番低レベルの情報処理でA=>Bというプログラムを実行するもの。
感知した刺激がAなのかそうでないのかだけを区別すればよいだけなので、脳の高次機能を使わず、あらかじめ組み込まれたプログラムに従って刺激が来たら無条件に動くので、「無条件反射」とも呼ばれるよ。
これは熱いものを触ったら手を引っ込める、転びそうになると手をつこうとする、というのと同じ。

ちょっと複雑になると、自転車に乗るためにバランスをとる動作というのがあるんだよね。
最初のうちは意識して苦労しながらバランスをとるんだけど、慣れると自然にバランスがとれるようになって、「バランスをとらなくてはいけない」なんてことは意識しなくて済むようになるのだ。
これは小脳の記憶によるもので、いったん小脳で細かいバランスをとる動きが記憶されると、以降はその記憶をもとに無意識で体が動くようになるんだって。
これは水泳でも同じで、泳げないうちは意識していないと体が沈むけど、いったん泳げるようになるとそんなことはまったく気にならなくなるのだ。

もうちょっと複雑なのは「パブロフの犬」の条件反射。
梅干しを診るとつばが出る、みたいなのだけど、これは先天的に備わっているプログラムではなく、後天的に獲得されたプログラムによる反射なのだ。
なので、まず最初にプログラムを条件付けとして記憶に書き込むことが必要で、「えさを与えるときは必ずベルを鳴らす」なんてことを繰り返すわけ。
これはAという刺激が来たときに過去に条件付けされたBという記憶と照らし合わせ、その二つが合致するときにCという反応をするプログラムなのだ。
なので、A+B=>Cみたいな感じ。
刺激が来てから条件が満たされているかどうかを判断する部分があるので、ちょっと高度な判断をしているんだよね。

でも、条件反射までは意識下で体が反応しているのだ。
もっと高次の反応になると、ある刺激に対して、過去の記憶に照らしてそれが好ましいものかどうか、危険なものでないかどうかなどを判断して反応するんだけど、この場合は意識的にああでもない、こうでもないと考えた末に行動するのだ。
それだけに時間がかかるわけだけど、プログラムとして自動的に答えが出せるようなものではない場合に多様な臨機応変に多様な反応が導き出せる点が有利なのだ。
悩むだけで先に進まないこともあるけど・・・。

これらはおそらく進化の過程で獲得してきたもので、無条件反射のようなものはそれこそ生存競争で生き抜くために必要だったもの。
条件反射は刻々と変わる環境の変化に適用する上で必要となるから、より生存が有利になるものとして身につけてきたもの。
そして、最後の意識的な反応は、群れを作る、子孫を残すパートナーを見つけるなどの社会性のある行動をとるために必要なのものとして手に入れたものと考えられるよね。

実はコンピュータのデータ処理も似たようなもので、最初はあらかじめ入ったプログラムに従ってインプットを入れるとアウトプットを出すだけ。
電子計算機がまさにそれだよね。
もう少し進化すると、インプットを入れたときの条件次第で反応が変わるというもの。
エアコンのスイッチを入れると室温によって暖房と冷房を切り替えるみたいな話だよね。
初期のパソコンのサブルーチン・プログラムなんかは、インプットがある条件を満たす場合はこういうアウトプット、そうでない場合はこういうアウトプットという形式のもので、これを複層的に積み重ねてファミコンのゲームなんかは作られていたんだよね。

で、今必要とされているのは、インプット又は処理すべきデータの種類によってどの階層で処理するかを自立的に判断し、末端から中央までの適切なところで処理を行うことで、全体の処理の効率化を上げる、というシステムなのだ。
例えば、クレジットカードの決済は必ず中央で処理をするので数分かかるんだけど、SUICAのような電子マネーは端末又はそのすぐ上のノードでデータを蓄積しておいて、一定期間ごとに中央に集めて整合性を検証するシステムになっているのだ。
これにより決裁スピードがほぼリアルタイムになっているし、例え中央サーバが落ちても端末が生きているとシステムは一定期間動き続けるんだよ!

ただし、これらはそれぞれ処理形式も含めてあらかじめ決められていて、データを見てその場でどの階層で処理するかを決めているわけではないのだ。
それには、データのタグ付けやデータの評価などをしてどの階層での処理が適しているかを振り分ける技術がいるわけで、しかも、その振り分け方によって全体が調和をもって運用できるシステムにならないといけないのだ。
でも、地理空間情報をリアルタイムで把握して自動車を無人走行させたりする場合、全部を中央処理にしてしまうとプラレールのように決まった動きしかできないのだ。
それぞれがいろんな動きをするんだけど全体としては調和がとれていて、仮に何かトラブルがあっても適切に処理できる、ということを考えると、自律分散処理にしないとダメなんだよね。

信号を守る、自分の速度・進行方向を適切に把握する、というのは一番低層の処理でよいのだけど、それをある程度集約して一定範囲内で自動車同士が衝突しないように調整する、という次の階層があって、さらにそれでいて効率的な交通・流通システムになるように自動車が動くという最も高次な調整を行う階層があるはずなのだ。
でも、一台一台全部の動きをミクロに解析して調和的に動かそうとするとどんなに処理速度の速いスパコンでもリアルタイムではできないし、そもそも各自動車からのデータの吸い上げにも時間がかかるので、機能しないシステムになるのだ。
処理するデータが増え、複雑になるほどこうやって処理しないと回せないのが現実で、ビッグデータがはやっているけど、次にはこの技術がないとけっきょく使えないということになるんだ。
なので、これから熱くなる言葉だよ!

0 件のコメント: