クレタ人の踵

AIならびにRobotに関する雑記。 世迷言など。

クレタ人の踵aibo Owner's WEBRINGに参加してます。
【ID:120 所有者:FebruaryMarch
[ 二つ前へもどる | 前へもどる | 次へ | 次の次へ ]
[ 前の5サイトを表示 | 次の5サイトを表示 | ランダムで移動 | リストを表示 ]

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2本足で歩こう[2]

2本足で歩こう[2]
フィードバックしないで歩行する


関連 2本足で歩こう[1]

 FMの家はかなりの田舎にある。最寄り駅に最近やっとエスカレーターがついたくらいだ。FMはじじいで運動がキライなので、階段でなく、当然、エスカレーターを利用している。
 このエスカレーター、もちろん省エネ型である。人が乗っていないときは止まっているヤツで、誰かがやってくると乗り口手前にあるセンサーが感知して動きだす。で、何かの都合でセンサーが働かなかったらしい。いつもどおりにエスカレーターに乗ろうとしたFMは乗り口で「カックン」してしまったわけである。
この「カックン」経験した人はそこそこ多いかなと思う。
 動いているハズのエスカレーターに向かって出した足が、エスカレーターが止まっていたため、予想着地点がずれてその落差分「カックン」するわけである。ようはそれだけなのだが、よく考えてみるとこれは少し不思議だ。

人間は意識せずに適切な歩行パターンを切り替えている

 止まっているエレベーターは段差の少し大きな階段と一緒である。ところが、何かの都合で止まっているエレベーターを上るときに、我々は非常な違和感を覚える。我々はエレベーターにあまりにも慣れてしまっているので、階段とエレベーターで我々自身が歩き方を変化させていることを普段は忘れてしまっている。エレベーターが止まることで、はからずも、そのギャップが露呈してしまうのである。
 幼児をはじめてエスカレーターに乗せるときは、大人が手を繋いでいても大変である。たぶん、FMだって最初にエスカレーターに乗ったときは、かなり苦労したはずだ。しかし、いったん乗り方を覚えてしまうと、後は普段歩行しているのと大差なくなってしまう。
 このエスカレーターの件では、もう二点、重要なことがある。我々はエスカレーターに乗る前に、動作しているかどうかのチェックをかなり怠っているということである。一連のシーケンスでチェックポイントを省略するというのは、ロボットやコンピュータでは、まずありえないことだ。
 あと一点は、基本的に人間の歩行では接地情報をフィードバックしていないらしい、ということである。「カックン」したあとはびっくりして、動作が一瞬止まってしまう。もしも接地情報が人間の歩行シーケンスに組み込まれてフィードバックがかかっていれば、接地した時点で何ごともなかったかのごとく続けて歩行できるハズなのにである。

人間はリアルタイムのフィードバック情報を有効利用できない

 人間の運動制御は基本的にフィードフォワードである。これには理由がある。知覚側の神経伝達速度が遅く、運動制御に使うには遅延が大きすぎるのである。以下の表を見て欲しい。

分類
直径(マイクロメートル)
有髄
速度(m/秒)
機能
12-20
70-120
運動神経
5-12
30-70
触覚、圧覚
3-6
15-30
筋紡錘に関する
2-5
12-30
痛覚、触覚
B
<3
3-15
自律神経
C
0.4-1.2
-
0.5-2
痛覚、反射、嗅覚

「ビジュアル生理学」より
http://bunseiri.hp.infoseek.co.jp/

 筋肉を動かす運動神経に比べて、知覚神経の伝達速度は一桁落ちる。数十ミリ秒のオーダーで信号遅延が起こってしまい、これだけでも制御ではかなりつらい。
 アウトプット側の運動神経との落差も問題である。伝達速度の差だけではない。人間の神経線維網は電気回路と異なり、信号を転送中でも次信号を送出できる。いわばバースト転送みたいなもので、コマンド送出量を飛躍的に増加できる。結局、アウトプット側とインプット側の単位時間当たりの情報伝達量に圧倒的な差があって、フィードバック制御など最初から望めない状況なのだ。
 「考えるな、体で覚えろ」と言われる所以はここにある。訓練で体得した一連のシーケンスコマンドの大量投入で、人間は俊敏な動作を実現できるが、間に知覚情報による環境認識を挟むと、途端に、スピードがガタ落ちになるのである。
 環境認識は適切なシーケンスへのトリガーでしかない。このトリガーを適所に挟みながら、個々のシーケンスをシームレスに繋ぐ、これが人間の運動機能の秘密である。

オンオフセンサーとしてではなく観測機としての知覚

 人間の知覚神経の伝達速度は確かに遅い。しかし、運動神経にはない優位点も持つ。
 運動神経は一本の神経索では基本的にオンオフ情報だけを伝達すれば良い。一個の筋肉細胞を収縮させるかどうかの情報を送るだけで良いからである。
 知覚神経系は伝達速度が遅い代わりに広いダイナミックレンジを持っている。人間の知覚はオンオフセンサーではなく観測機として外界の把握を行う。それは、リアルタイム制御には使えないが「経験」となって蓄積されていくのである。
(つづく)

まとめ
 人間が運動制御をフィードフォワードで行っているのはフィードバックができないからだ。
 神経伝達速度は体の大きさに関係ないので、「大男総身に知恵がまわりかね」は本当。
 FMが「カックン」したのは年のせいではない(と思う)。
スポンサーサイト

2本足で歩こう[1]

2本足で歩こう[1]
ロボットが人間の歩行を真似しない理由


 実は頼まれ仕事ができたのだ。Robo-pups created with curiosity in mindの解説をせよ、とのお達しである。依頼主のおっさんには日頃から世話になっていることもあるし、興味のある話題なので、やる気はマンマンなのだが、なにしろ英文だし、最近サボっていたこともあって、少し下調べをしないと読むだけでも大変である。
 概要としては、「好奇心を付加した知能」モデルの実証実験のひとつらしく、AIBO(ERS-7)の動作を「頭を回す」「叩く」「噛む」に限定して、モーター位置などの低レベルセンサーとハイレベル視聴覚センサーのバイナリーデータを接続して、メタ学習を行う、というのが趣旨らしい。
 も少し、きちんと読んでから取り上げたいので、しばし、お預けとする。

 さっそく文献の和訳でも始めるのがスジだろうが、あまりこのブログをほったらかしにしておくと、ただでさえ読者の少ないこともあり、あっという間に忘れられてしまいそうである。
 ま、忘れ去られたところで、多勢に影響はまったくない。難点と言えばFMがちょと寂しいというくらいである。そうは言っても、もともとFMのわがままでやっているブログなのだから、メインスポンサーのFMが寂しいのは困る。
 そんなわけで、つなぎに、二足歩行の話をする。

ロボットにとっての二足歩行

 一昔前まで、滑らかな二足歩行を行うのは、ロボットにとって、かなり酷な課題だった。今だってそうなのだが、ASIMOだのQRIOだのが見た目、普通に歩いていたりすると、なんだか慣れっこになってしまって、たいしたことでないかのような錯覚をしてしまう。
 ロボットにとっての二足歩行というのは、移動方法の一つである。ところがこの方法、制御という観点からはやっかいな特徴を持っている。二足歩行時のロボットの重心は基底よりかなり高い。ポテンシャルエネルギーが高い状態であるので、制御としてはグローバルミニマムに安定点を置いてはいけないわけで、ポテンシャル障壁をつくってローカルミニマムで安定させなければならない。
 ごちゃごちゃ書いたが、ようするに転倒せずに歩くのは難しいということだ。

ロボットの歩行は人間のマネをしているわけではない

 制御系の伝達関数が負であれば系は安定する、というのが、まあ、大雑把な古典制御の話だが、単純なわりに強力なので、複雑な制御系の場合でも基本的にはこれの応用となる。負のフィードバックはローカルミニマムに安定するため、ちょっと見、うまくいくようにも見える。実際のロボットの二足歩行はもう少し複雑だが、ほとんどの場合、ある種のローカルミニマムを取るように制御系が構成されている。
 制御技術の発達の歴史からすると、この方向はそんなにおかしくない。ロボットなのだから、どう歩いても歩ければそれで良しとするのが、本来、妥当だろう。ただ、やはり、もともとのモデルが人間なので、人間の歩行もやはり気になるものだ。
 ぶっちゃけで言うと人間はローカルミニマムなんか気にせずに歩行している。これは公然の秘密である。

人間は重心を安定させるような歩き方をしない

 人間の歩行(あるいは走行)では重心は常にふらついている。意外に思われるかもしれないが、人間は転ばないように努力して歩いているわけではない。どちらかというと、常に転びながら前進しているというのに近い。フィードバックによる重心安定など毛ほども気にかけていない。
 にもかかわらず、人間は転ぶこともなく二足で移動する。この歩行を完成させるのに人間は生まれてから数年の修行期間を要する。身体の発達が必要という側面もあるが、それ以外にも、これだけの時間を必要とする理由がある。
 人間の歩行パターンは実は極めて多岐にわたる。条件に応じた歩行パターンを覚えるのに膨大な時間が必要で、なおかつ、適正な歩行パターンを選択する環境認識の学習にさらに膨大な時間を要するのである。
(つづく)

まとめ
 ほぼ同年代なので、おっさん呼ばわりで妥当と思われる。
 二足で歩いているからといって、皆、同じなわけではない。
 足の裏がでかいのは反則だろう、とか時々口走ったりはするが、それでも大変だということぐらいはわかっている。
 転びながら歩くというよりは、歩きながら転んでいる人もたまにいる。

コンピュータは人間のように考えられるか?[4]

コンピュータは人間のように考えられるか?[4]
返事をしないプログラムを許容できるか?


関連
ロボットは心を持つか?
コンピュータは人間のように考えられるか?[1]
コンピュータは人間のように考えられるか?[2]
コンピュータは人間のように考えられるか?[3]

 前々回、concurrent_solve関数に若干の問題があると言ったが、実際に問題があるのはconcurrent_solve関数に渡される実行コードである。無作為に自動生成されるコードは停止するかどうかよくわからない。ここが一番の問題である。答えが出るかどうかわからないコードを実行するということを現在の商業プログラムは非常に嫌う。
 とりあえず動かしてみないと良くわかりませんけど、うまくいったらお客様のご要望どおりの結果が出ると思います。まあ、ダメなときもあるとは思いますけどね。とりあえず、御代は先払いでお願いします、というような有能(?)でガッツのあるセールスマンはいないのだ。

商業プログラムは規定時間内にレスポンスのないプログラムをバグありと認定する

 普通にパソコンなど使っていると、即時でアクションに対するリプライができない場合には、プログレスバーみたいなものが登場したりする。プログレスバーが出ない場合も、処理が何分かかりますなどよいう表示が出るし、最悪でも処理中であることを示すダイアログやアイコン変化があったりする。
 人間は気が短い、みたいな話から説明されることが多いレスポンスの問題だが、実は問題の根はもう少し深い。我々は、常にコンピュータは何らかの正しい解を返すものだということを暗黙に期待している。これは実際には単なる神話にすぎないし、コンピュータで解けない問題が存在するにもかかわらずである。
 コンピュータが何の返答もせずにいると故障(バグ)ではないかと疑ってしまう。通常の動作をしたのにもかかわらず故障(バグ)だとすればクレームの対称だ。クレームなど御免こうむりたいということで、商業的には規定時間内に解決可能な問題しかコンピュータで処理しないように制限をかけている。
 コンピュータにとってもプログラマにとっても不幸なことだが、コンピュータが商業的に成功するために、これは必須条件だったのである。コンピュータが実際に解ける問題の集合よりも現実のコンピュータ上で動かすプログラムの集合は明らかに小さい。「いつ停止するかわからないし、そもそも停止するかどうかもわからない」ようなプログラムは、少なくとも商売としては成り立たない。

AIなんて別に商売でやってるわけじゃなし

 AIの場合にはこれはちと困る。解のあるなし、プログラムの停止するしないに関わらず、知的そうなプログラムはすべて動いてもらわないと困る。一般再帰関数すべての集合を計算できないと、人間と同等に考えるというには貧弱すぎるからである。
 商業プログラムの作法がそうなっているからと言って、AIプログラムがそのしきたりに従わなければならない理由はない。理由はないのだが、今、普通にプログラムの勉強をすると、知らず知らずのうちにこの作法が身につくようなシステムになっている。FMみたいに30年近くAIだなんだとほざいている人間には関係ないことだが、まかりまちがって、いまからAIに目覚めてくれるような奇特な新人さんの場合に、このへんがネックになって、「人間のように考えるプログラムなんてできない」とヘンに誤解されてしまうと寂しいな、とか思っているわけである。
 ま、このへんの事情は、自分で興味を持って調べれば、たいして手間もなく理解できる範囲であるから、実質的には、さほど障害になることではないのだけれど。

プログラムの死

 こういう制限はAIプログラムには害のあるものなのだが、他方、「いつ停止するかわからないし、そもそも停止するかどうかもわからない」ようなプログラムとつきあうのは、それなりにガッツがいる。
 非常に大胆な仮定だが、そこそこうまく動いているように見えるAIプログラムが出来たとしよう。何らかの方法で外部情報から内部モデルを構築してそれにしたがって環境を変革していけるようなプログラムである。
 なんとなーく、うまくいっているようにみえたプログラムがある日突然に応答しなくなる。彼がなんらかの究極解を見つけて停止したのか、はたまた、重要な問題を熟考するために瞑想に入ったのか、単なるバグで止まってしまったのか。おそらく、プログラムの作成者もわからないだろう。たとえバックアップがとってあったとしても、再起動した彼は、いつまた「頓死」してしまうかもしれない。不安定な彼は、まさしく人間そのものと言ってもよいかもしれないが、彼の「死」を前にしてプログラム作成者はなすすべもなく途方にくれる。
 完璧なAIが出来たとして、彼がいつ停止するかというのはそのAI自身にもわからない。
 思うに、神もそれほど自分の思うとおりには人間を造れなったのだろう。

まとめ
 金になりそうなプログラムを書いて何が悪い。
 行儀の悪い人間というのはどこにでもいるものだ。
 だいたい神様の話など持ち出すヤツは、皆、胡散臭い。
 昼食後、庭の草取りの予定だが、雨が降りそうで困っている。

BBP Blue Brain Project

BBP Blue Brain Project
シミュレーションでGO!


リンク
BBP Blue Brain Project

 この話題を取り上げるかどうか、実はしばらく悩んだ。
 「脳」、「シミュレーション」、「IBM」と三拍子揃ってしまっているので、いかにもである。おまけにFMは、コンピュータは人間のように考えられるか?[1]なんてのを6月5日にあげている。BBPのプレス発表が6月6日であるので、そのまま突っ込んだら、非常に誤解されやすい状況だった。
 もともとヤクザなブログなので誤解されたってそれまで、と言えばそれまでなのだが、BBPの趣旨から言って不要な誤解電波を飛ばすのはどうかと、FMなりに配慮したわけである。
 簡単に言うと、BBPはAIとあまり関係はない。

BBPはAIとあまり関係がない

It is not our goal to build an intelligent neural network.

 BBPのホームページのQ&Aの中にはっきりと書かれている。世界最速のスーパーコンピュータで脳をシミュレートするのだが、あくまで脳の仕組みを解明するためであって、知的なニューラルネットの構築が目標ではない、ということである。これは、人間の脳と同等のレスポンスをするのかという問いに対する答えとして出てくる文なので、この点から見ても、BBPが比較的まっとうな取り組みであることが見て取れる。
 これだけ、はっきり書いてあるのだから、BBPがAIとほとんど関係ないのは明らかである。
 関係ないのだが、「脳」だし「シミュレート」で「世界最速コンピュータ」なのだから、FM的には興味津々なわけである。で、まぁ、ここで取り上げたということは、このブログの性格からいって、あまり褒めないということでもある。正直、そんなに役にたたないと思う。
 コンピュータシミュレーションは、よくわかっていることに対してはそれなりに有用な情報をもたらすが、あまりよくわかっていないことには、なんだかよくわからない結果を返す。コンピュータを使っている以上、ある意味やむをえないことなので、これはコンピュータのせいではない。
 したがって、「人間の脳」などという、本当にわからないものを真面目にシミュレートした場合には、まったくわけのわからない結果しかでない(と思う)。
 役に立ちそうもないものに、そんな大金つぎ込むなんてありえんわボケ、というお叱りはごもっともだが、それに対してもいちおう反論らしきものはある。
他に良い方法がない

人体実験するわけにもいかないのでシミュレートする

 このプロジェクトには、脳の仕組みを知るという純粋に知的な要求に対して答える、という側面以外にも、心の病をなんとかしたいという、至って現実的な問題に回答をもたらしたいという要求がある。で、まあ、倫理的な問題を抜きにすると、後者の解決には、誰かの頭に電極でも突っ込んで薬漬けにしたほうが、話としては早いわけである。
 もちろん、そんなことはできない。二酸化炭素濃度が増加したときに地球環境がどう変化するか確かめるには、実際に二酸化炭素を増やしてみるのが、「科学的には」正当だが、そんなことするわけにもいかないので、地球シミュレーターを使うのと同じことである。
 方法論としてはまっとうだと、FMもすでに趣旨には賛同済みだ。賛同はするけれども、だからといって、方法が有効かどうかは話が別だ。ただ、限りなくダメっぽそうだが、絶対ダメというわけでもないし、うまくいったら効果は絶大、失敗しても金がなくなるだけなら、まあ、いいか。
 そんなわけでBBPはAIとほとんど関係がない。勧進元のEPFLもそう言っているし、納入するIBMもそう言っている。FMだってそう言っている。だから、断じて関係はないのである。

まとめ
 このブログはデフォルトで他人の仕事の揚げ足をとる嫌なブログである。
 やっきになって否定するところを見ると裏がありそうだ、とか考えるのを下衆の勘繰りと言う。
 っていうか10000個のニューロンを10の八乗のシナプスで繋ぐって「まんま」じゃん(笑)。
 常に逃げ道を確保せよ。

コンピュータは人間のように考えられるか?[3]

コンピュータは人間のように考えられるか?[3]
エレガントな回答を求めて


関連
ロボットは心を持つか?
コンピュータは人間のように考えられるか?[1]
コンピュータは人間のように考えられるか?[2]

 数学の問題を解くのに、端から並べて全部解く、などというのは、いかにもブルートフォースなわけで、あまり評判は芳しくない。四色問題の証明に対して、いまだにしっくりこない一部の人々がいるというのも、心情としては理解できる。エレガントな回答を求める、というのは「数学セミナー」の読者にかぎらず、数学好きな人の一般的な傾向と言ってもいいだろう。
 ところが、この問題、心情としては理解できるが、数学的に扱うと、はなはだ痛し痒しだ。
 前回、取り上げたプログラムもどきは、ブルートフォースの典型で、これ以上はないというほど(いろんな意味)痛烈なものである。もっとエレガントな解が欲しいというのは言わば人情であって、チャーチ提唱の信望者であるFMにしたって、正直、多少の手間ですむのなら、もう少しマシなものを例に出したかったくらいである。
 しかし、これは、それほど単純な話ではない。「エレガントな回答」のようなメンタリティが持ち込めるほど、実は、数学という学問は人に優しいものではなかったのである。

玉石混合は「玉」も含む

 ほぼ無限大のメモリやほぼ無限大の処理能力とかいうトンデモ設定にはこのさい目をつむるとして、件のプログラムの出力結果を眺めてみることにしよう。答えの出ない命題はいくつかあるにしても、いくつかの興味深い定理は証明されているだろう。
 いや、この言い回しはあまりに不正確である。実際には、興味深い定理も、無視してしまいたくなるようなことがらも、否定的か、肯定的か、はたまた、それ以外の形で、すべて証明されているのである。
 具体的にどういうことかと言えば、我々の熱望している「エレガントな回答」すらその中にふくまれているということである。我々の欲しいものはすべてその中にあるのだが、欲しいものだけで構成されているのではない。一滴の甘露を濁った沼の中に落としたようなむなしさが、そこにはある。

良いとこ取りのプログラムは存在するか?

 これらすべてを踏まえたうえで、チャーチはこのプログラムが人間の(というか、少なくとも数学者の)思考パターンに酷似している、と、のたまったわけだ。
 数学の定理の証明や、新しい概念の導出というのは、試行錯誤の連続であって、そういった意味では、「端からすべて試してみる」というのは、きわめてまっとうな思考法と言える。ラマヌジャンの天賦の才もこの枠組みから逸脱するものではなかった、と彼の最上の理解者であるハーディも言っている。
 無駄なことはしたくない、誰だってそう思うのだが、無駄なものと無駄でないものをわけるアルゴリズムが存在しないことは、いまいましいことに既に証明ずみである。プログラムが停止するかどうか事前に知る方法はないのであって、答えが出る問題だけを重点的に解くことはできない。そして答えの出ない問題にぶちあたっているのか、解くのが非常に難しいだけで本当は解ける問題なのかは、問題を解いている間は知ることができない。
 人間であれコンピュータであれ、数学をする以上、効率的に解を求めることはできない。「数学に王道なし」というのは教訓でもなんでもなくて、単なる冷徹な事実なのである。

悠久の彼方からの帰還

 ほぼ無限大のメモリとほぼ無限大の計算能力、というのは言い方をかえれば、「無限に近い時間が経過した後で」という考え方とおなじである。
 無限に近い時間経過の後では、宇宙が寿命を終えていたり、エントロピーが極大値に達していたり、すべての素粒子が崩壊して光の海になっていたり、弥勒菩薩が降ってきたりと、とにかくいろんなことが起こる(らしい)。
 そんな大変な状況の中では、人間とコンピュータがごちゃまぜに扱われようがたいした問題ではないような気もする。我々の興味の対象は、ここ何十年かのうちにロボットが知的な会話をそつなくこなしたり、ワールドカップでロボットチームが優勝できるかどうか、などという、極めてせせこましい事象についてである。
 数学の問題は数学で解くべきであり、カエサルのものはカエサルに返すべきだ。当然、せせこましいことは、せせこましく解決しなければならない。
 理想ばかり唱えていても仕方がない、「あるもの」でなんとかすべきなのは判っている。そして、「あるもの」でなんとかする場合、「あるもの」の能力をフルに利用すべきであって、いらぬ制限は付け加えるべきではない。
 「あるもの」とはノイマン型コンピュータのことである。そして我々はノイマン型コンピュータに手枷足枷をはめたまでで使っている。その枷を取り払うことから始めねばならないだろう。
(つづくのだ)

まとめ
 世の中にうまい話というのはない。
 王道がないのは数学に限ったことではない。
 FMは小学生のころ、弥勒菩薩に似ていると言われたことがある。
 恐竜博2005に行ってきたので疲れた。もう寝る。
 

コンピュータは人間のように考えられるか?[2]

コンピュータは人間のように考えられるか?[2]
数学をする万能チューリングマシン


関連
ロボットは心を持つか?
コンピュータは人間のように考えられるか?[1]

 チャーチのテーゼでコンピュータは考える、と言ってみたところで、このままでは単なるおまじないである。鰯の頭も信心だが、信心するにしてももう少し裏づけは欲しい。
 そんなわけで、とりあえず、数学をするアルゴリズムの具体例をひとつ取り上げてみたい。ところで、これを読んでいる方にお願いがある。今回は他の回に比べても格段に手抜きをするつもりなので、申し訳ないが「ゲーデル数」について自分で調べて欲しいのだ。これを説明するのはけっこう骨が折れるので、普通は本を一冊書くことになっている。とてもじゃないが、FMは、そんなめんどくさいことをやる気はない。今回必要なのはゲーデル数が数学のすべての命題と一対一対応で相互に変換可能であることだけである。興味のある人は不完全性定理とかゲーデルの他の業績について勉強してもらってもかまわないが、そこいらへんは個人の好みでどうぞ、といった感じだ。

構文だけC風に書いてみる


#define WORKSIZE VERY_LARGE_ MEMORY_SIZE

mathmatical_turing_machine()
{
unlimited long g;
/* 無限多倍長整数 g を定義 */
propositional function* one_turing_machine;
/* デコードした命題を格納する変数(ポインタ) */

g = 0; /* 0から始める */

while( 0 == 0 ) /* 常に真、ようするに無限ループ */
{

if( is_gödel_number( g ) )
/* gがゲーデル数かどうかの判定、ゲーデル数ならデコードして解く */
{
one_turing_machine = decode_gödel_number( g );
/* ゲーデル数のデコード */
concurrent_solve( g , one_turing_machine, WORKSIZE );
/* 各命題を並列に解く */
}
else
{
/* ゲーデル数でなければ、なにもしない */
}

g++; /* gに1を加えて繰り返し */

}
}

 

 いきなり無限多倍長整数とか出てくるのでCでも何でもないのだが、雰囲気だけ感じてもらえれば良い。ゲーデル数の判定はデコードと一緒にしたほうが効率は良いが、あまり本質的な問題ではないので見易さを優先している。is_gödel_numberとかdecode_gödel_numberとかいった関数が実際に書けるのはゲーデルが説明してくれているので、そちらを参照して欲しい(公式さぼりモード)。
 若干、問題があるのはconcurent_solve関数だ。チューリングマシンなどの仮想コンピュータであればこういう関数は作って良いことになっている。というか、作れないと計算可能性問題にたいして何かしら意味のある発言を行うことができない。
 ざっくばらんに言うとこの関数、与えられた命題を実行するプロセスを発行したらすぐに帰ってくるOSのexec処理みたいなものなのだが、現実のコンピュータとは以下の2点で異なっている。
  1. ほぼ無限大のメモリをプロセスに割り当てられる
  2. 実行したプロセスが無限ループに入っても気にしない
 無限ループに入っても気にしないでいられるのは、実質的に1のおかげなので、ほぼ無限のメモリを使えるのが、この関数の仮想的な所以である。
 なんでこんなものが必要なのかというと、数学の問題の中には、答えがないものが含まれているからだ。答えが出たところで個々のプロセスは停止するが、「答えのない」プログラムは停止せずに動き続ける。これはバグではない。バグではないが無限に動き続ける(つまり帰ってこない)。
こういったゾンビっぽいプロセスをほぼ無限に容認し続ける必要があるので、このプログラムを動かすコンピュータは、ほぼ無限のメモリを有すると同時に、ほぼ無限大の処理能力を要求されることになる。
 さて、注意書きはこの程度にして、このプログラムの意味を考えてみよう。ほぼ無限大のメモリと無限大の処理能力を持つコンピュータでこのプログラムを動かすとどんなことになるのか?
 答えのある命題とその答えがすべて出力されます
 ようするに数学はこれで全部、ということになる。
 数学の問題を端から順序良く並べて「全部解く」だけのプログラムである。

数学者が失業しない理由

 チャーチのテーゼをもとにした場合、この「ほぼ無限大の処理能力とほぼ無限大のメモリ」を持つコンピュータが必要となるため、実際問題として、こんなものが「考えている」とか言われてもなかなかピンとこない。ただ、これを数学用語でいうと「有限の処理時間と有限のメモリ」となる。
 なんだ、ぜんぜん反対じゃないか、と思われるかもしれない。しかし、数学では「無限」と「ほぼ無限」とはまったく別物である。いくら大きな数であっても「本当の無限」でない以上は有限であるというのが数学の立場である。
 ただ、この主義をどこまでも貫くのは現実のコンピュータではかなり辛い。そこで計算可能性だけではなくて、P≠NP問題のような「実質的な」計算可能性も研究しようということで計算機科学という分野が生まれたわけである。
 ロボットの場合はもっとシビアで、実時間応答性という問題も考慮に入れなければならない。数学という天上の世界では「ほぼ無限大の処理能力とほぼ無限大のメモリを持つコンピュータ」というトンデモ概念を持ち出して人間と同等に考えられるモデルが提案されたわけだが、実時間応答性まで含めた思考モデルはいまだ提案できていないのが現状である。
 もうおわかりかと思うが、本シリーズだけテーマが「コンピュータ~」になっているのはFMの気まぐれではない。「ロボット~」だと実時間応答性の問題が出てくるので、明快に「YES」などと答えられないのだ。この点だけとってもFMは姑息であることがよくわかると思う。ついでに言えば「(仮想)コンピュータ~」なのであって、意図的に省略しているのだから、姑息というより卑怯である。
(つづくよ~)

まとめ
 ほぼ無限の数学者がいれば、数学の問題はほとんど解ける。
 ほぼ無限のラーメン職人がいれば、究極のラーメンができるかもしれない。
 誰が食べるかはまた別問題。
 FMは姑息で卑怯。

コンピュータは人間のように考えられるか?[1]

コンピュータは人間のように考えられるか?[1]
コンピュータは数学の問題が解ける


関連
ロボットは心を持つか?

 ロボットの心については、ちょいと、お茶を濁した感がある。人間、得手不得手はあるものだ。まあ、このあたりは我慢してもらうよりない。
 今度は「コンピュータは考えるか?」である。次々と似通ったどうでもいいような話題ばかり出してくるものだと、読むほうはウンザリだろうが、書くほうは趣味でやっているわけだから、そんなことはおかまいなしだ。
 で、コンピュータは考えるかどうかなのだが、これについて、FMの立場というのは、はっきりしている。答えはYESだ。コンピュータは考えることができる。なんとなれば、FMはチャーチのテーゼの熱烈な信望者だからである。

チャーチのテーゼとは何か?

 信望者だ、なんてことを言うと、まるで宗教みたいだと思われるかもしれないが、はっきり言ってその通りである。数学だの科学だのいうものは、ある一線を超えると(あるいは超えなくても)ほとんど宗教みたいなものである。入れ込みようによって、解釈もだいぶ違ってくる。FMは、どちらかと言えば、チャーチテーゼに関しては過激派なので、結論もそれなりにビビッドなものになるというだけだ。
 そもそも、チャーチのテーゼ自体はさほど大変なものではない。このテーゼがなされた背景としては、万能チューリングマシン一般再帰関数ならびにLambda-Calculusのクラスが同一であることが証明されたことにある(証明は同時ではなくて別々だが)。これらは別々に定義されたものだが、計算可能性を論じる場合にはどれも重要な役割を担っており、実は、それらが同一のものであった、というのは非常に面白い話なのだ。
 それで気を良くした(かどうかは知らないが)チャーチが以下の提案をした。

数学の取り扱う問題は、すべて一般再帰関数で記述できる


一般再帰関数は万能チューリングマシンと同等、万能チューリングマシンは言わずと知れたコンピュータの数学モデルである。したがって、チャーチのテーゼを言い換えると以下のようになる。

コンピュータは数学ができる


 あたりまえじゃん、と思われたかも知れない。コンピュータは計算する機械である。数学など出来て当たり前だ、というのが一般の感覚だろう。しかし、数学者にとって計算と数学というのはまったく違う。これをごっちゃにすることは、数学者にとって、ピッチングマシンは最高の野球選手だ、と言うに等しい。
 数学者が「コンピュータは数学ができる」と言った場合には、コンピュータは数学者と同等であると言っているのと同じことである。数学者というのは数学以外には他に取り得がない人間なのだから、(数学者にとっては)チャーチのテーゼは「コンピュータは考える」というのと全く同等である。

そうは言っても若干の問題はある

 FMは数学者ではない。数学ができるできないという問題以前に、数学以外にいくつか取り得があるからだ。しかしチャーチのテーゼを狂信的に信望する以上、以下の結論に到達せざるをえないのである。

数学者はコンピュータで代用可能である


 さあ、あと一息だ。数学者だって人間の一種なのだから、あとはジワジワ枠を広げていけばよい。理論物理学者なんてのが次のターゲットには良さそうだ。計算化学や分子生物学者もいけるかもしれない。そうやって、なしくずしにいけば、フライト・アテンダントがリストに上るのも時間の問題だろう。
 ただ、この論証には若干のキズはある。「数学者なんか人間じゃない」と言われてしまうと、反論がなかなか難しいのである。前述のとおりFMは数学者ではないので、数学者が人間かどうか、なんてのは所詮他人事である。数学者の友人もいない。この件に関しては有力な反証の持ち合わせがないのだ。

 そんなわけで、コンピュータが考えられるのは、ほぼ確実なのだが、話はそれほど簡単ではない。
 理論上は一般再帰関数のクラスの記述能力をもつハズのコンピュータなのだが、現実には原始再帰関数クラスの記述性しか許されていないのである。
 窓口規制みたいなものと思ってもらえれば良い。
 プログラム生産性という呪縛がプログラマーの上に重くのしかかっているのだ。
(つづく)

まとめ
 コンピュータは数学の問題を解くことができる。
 数学ができるかどうかなんて人間の本質には関係ない、とかいうやつに限って、数学どころか全く取り得がなかったりする。
 星飛雄馬は失踪中、ピッチングマシンしか友達がいなかったらしい。
 土日更新ぐらいが限界らしい。

学習でロボットは賢くなるのか?[3]

学習でロボットは賢くなるのか?[3]
我らに本末を転倒するプログラムを!


関連
学習でロボットは賢くなるのか?[1]
学習でロボットは賢くなるのか?[2]


 このシリーズの本来の目的はロボットが学習で賢くなるかどうかを考察することにあった。一回、二回と続けて三回まできたが、この問いに対して、ほとんど否定的な事例を列挙してきたにもかかわらず、最終的な回答は保留にしてきた。

 理由がある。

 FMは、ロボットに学習して賢くなって欲しいと、心底、思っているからだ。

内部モデルを拡大できるアルゴリズムを学習と呼ぶべきだった

 今回のシリーズではカギカッコつきの「学習」が何度か登場した。この「学習」はForce learn algorithmで置換可能なように配慮してある。教師信号とのからみで微妙なところがあるが、意図は汲み取ってほしい。
 歴史的な事情があって、現状ではAIで言うところの学習は「学習」になってしまっている。そして「学習」では与えられた問題に答えることは可能でも、自分で問題を見つけることができない。
 「学習」によって、秀才と凡才は造ることができるが、天才と馬鹿は造れない。
 実に困ったことであるが、やはり先人の偉業に逆らうのは、AI研究の分野でも並大抵のことではないのだ。

知識の獲得をめざして

 昔、ファービーというおもちゃがあった。ギズモを怖くしたような風貌でモノマネをする。
 内部的にはICレコーダー+人工無能みたいなものなのだが、面白いのはこのファービー、学習して人まねをするというふれこみだったのである。
 実は人工無能タイプのソフトウェアというのは内部に「学習」機能を持っているのだが、不思議なことにAI的な「学習」部分を学習と呼ぶことは少ない。学習型人工無能は、語彙データベースの拡張を学習と呼んでいるのである。そして拡張された語彙データベースの中から特定の文節を選択する段階でAI的な「学習」を行って、会話をスマートに見せかける。
 これは、どちらかと言えば、一般的な意味での学習に近い。原始的ではあるのだが外部情報をもとに、内部モデル=知識を拡張しているのである。
 だからと言って、ファービーを含む人工無能が非常に高度なことをやっている、というわけではない。人工無能は話し言葉や書き言葉のシミュレーションなのだが、「言語」というシステム自体が抽象度が高いため、コンピュータで扱いやすく、なおかつ、見た目が知的に感じられるというだけのことだ。
 センサーの直接情報から、内部モデルを紡ぎだすのが、インテリジェンス・ダイナミクスの醍醐味とすれば、その一番肝心の部分を人工無能は「はしょって」いる。
 それでも、知識の拡充に学習という概念をあてているのは、FMにとってうれしい。これを目標にしろとは、さすがに言わないが、まだ、こちらのほうが自然である。

知識の獲得を行わない理由

 本来、知識拡張を学習と呼ぶべきだったのに、なぜかAIではこれを学習と呼ばない。その代わり、ある種の近似法のことを「学習」などと呼んでいる。「何故?」と聞かれて、この問いに答えるのは、実はさほど難しくはない(若干の恥ずかしさはあるにせよ)。みもふたもない言い方で申し訳ないが、一般的な知識拡張ができるプログラムなど現段階で存在しないからである。今だ無いものに名前をつけるわけにはいかない。
 この手のプログラムが存在しない理由としては、実装できるハードウェアが(いろんな意味で)存在しなかったということもある。この点についてだけは、最近、若干改善されつつある。
 言うまでもないが、QRIOを含む自律型ロボットのハコモノのことである。
 実はもうひとつ、プログラミング技法の点で問題がある。この種の自己拡張型のプログラムが本質的にもつべき特徴が、現在主流の大規模開発型のプログラミング技法にまったく適合しないのである。
 簡単に言えば、構造化プログラミングの否定、例外トラップの排除、無限ループと循環参照の埋め込み、極めつけは、自己改変による大域脱出などで、どれをとっても普通のプログラマーなら気が狂いそうなシロモノである。これらが何故、普段は封印されているのか、どうして、知識獲得型AIでこれらが必要なのかは、これから、おいおい語ってみたいと思っている。
 おおざっぱな話をすると、「JavaやC++でAIなんか書けるかボケ!」というのがFMの主張なのだが、こんなことは大昔から繰り返されていることであって、別にFM独自の観点でもなんでもない。本当のプログラマーはPascalなんか使わないのである。

まとめ
「学習」により賢くなる、のでなく、賢くなるようなアルゴリズムを学習と呼ぶべき。
「本当のプログラマー」どころか、いまどき誰もPascalなんか使わない。
バーレーン戦、勝ててよかった。ガンバレ日本代表。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。