改め Objective Technician

はぐれ技術者のやりたい放題

Objective Vaulting

2007-11-17 00:18:03 | 勉強
今日の生体情報の授業。

周期的な運動のパターン形成が興奮性と抑制性の神経細胞で同期とることで実現できて、その経路が出来てると意識しなくても運動ができるという話だった。

いままで情報系の勉強をしてきたもんで、どうしても神経とコンピュータとの対応付けを考えてしまう。以下、授業中に連鎖的に妄想してたこと。

コンピュータで行う演算でよく使うものは、普通は回路作ってそれ専用のハードウェアで行っている。乗算器とか微分器とかフーリエ変換回路とか。これを毎回ソフトウェアでやってたらCPUに負荷がかかってすごく遅くなる。つまり、よく使う機能は、高速でCPUに負荷がかからない回路で実装されている。
生物の神経系にこの考え方を当てはめてみると、考えなくてもできるような習慣化された動作は、制御系がすでに神経回路としてハードウェアで出来上がっているということになる。「歩く」とか「箸を持つ」とか、陸上選手で言えば「踏み切り動作」とか「空中動作」とか。考えてやってるうちはまだ専用回路が形成されてなくて、つまりは「ソフトウェアで処理してる」状態。ソフトでやってる間はいろいろ動きを修正できるけど、「ハードウェア」で処理系が形成されると考えなくてもできる代わりに動きの修正が難しくなる。

さて、この神経回路ハードウェアはそれぞれの処理(動き)について全く別々に形成されているというよりは、グローバルな基本的な機能をそれぞれ独自に拡張して形成されていると考えるほうがつじつまが合う。これはまさにオブジェクト指向の考え方で、モジュールの再利用という意味でもとても効率が良い。ここでは、「回路」「ハードウェア」「クラス」「モジュール」という言葉を同じ意味として扱うことにする。

棒高跳びで言うと、「走る」クラスを継承して新たに「踏み切り」メソッドなどを実装した「助走」クラスを作る。
ここで、棒高跳びの動作をクラスの拡張で完成させようとすると、ちょっとひっかかることがある。何かというと、「多重継承」をしないと棒高跳びは完成しない、ということに気付く。多重継承ってのは、複数のクラスを継承してサブクラスを作ること。多重継承をしないとクラス図は木構造になるけど多重継承を使って設計するとクラス図にループができて木じゃなくなる。

オブジェクト指向でプログラムが出来る言語として一般的なのはC++とJavaだけど、C++では多重継承ができるがJavaではこれが禁止されている。何でかって言うと、多重継承を使って実装したものをクラス図に起こすと、木構造になってなくて複雑怪奇な迷宮ができてたりと訳が分からなくなるから。Javaではクラス図がきれいな木になるように多重継承が出来なくなってる。つまりは構造化、分かりやすさの問題。分かりにくくなるけど多重継承するといろんなことが出来るようになるのは確か。

話を棒高跳びに戻す。普通は、助走踏み切りとポール専門の動作は別々に練習する。だから、「幅跳び」クラスを拡張して「棒高跳び」クラスを作ろうとするのは構造的でない。つまり、それぞれ独自に派生した「ポール」クラスと「幅跳び」クラス(の助走踏み切りメソッドのところ)を多重継承して初めて「棒高跳び」クラスができると考えたほうが自然。

結論。
生物の神経系は基本的な体の動きや外界の物体を回路で形成してパターン化する。それ以降にパターン化される機能は全てこれらの基本的なクラスを多重継承して形成される。神経系が木構造じゃないことの正体は多重継承。多重継承によってネットワークが形成されるために神経回路はすごく複雑で分かりにくい。視覚情報処理でいうパターン認識もこうなってるんじゃないか。


注:以上の考えは全て自分が突発的に考えたことなので、厳密に検証したわけでもないし、決してこのモデルが正しい考え方とは言えない。ただ、こんなふうにモデル化すると「つじつまが合う」っていう話。