▼ 送別会。酒は飲まないつもりだったのだが、つい一杯のつもりで何杯も飲んでしまう。 一般に、パーティでお酒を勧められるのは、飲むと口が軽くなって 普段言わないようなことが出て会話が弾むからだろうけど、 私は反対に酔っ払うと口が重くなって普段言うようなことも言わなくなる。 だから飲まないように心掛けているのだ。
そんで、例によって紙にサインさせられた挙句、fMRIをやりながらの知能検査。これがまたやりづらいったらない。ひたすら数字が羅列されてそれを覚えろとか、いかにも、behavioral neuroscience。 なんとなくワーキングメモリタスク臭い。
なんか映像が出されてそれのなかで映像として映らなかったアイテムを挙げろとか。なんとなく、delayed nonmatch to sampleみたいに見える。あるいはrecency testとかっぽく見える。
あと何か性格診断みたいなもの。「では、この映像をご覧ください」とか言われて、血圧を測る。ぼんやり見てたら、目の前で人が車に跳ねられる直前のところまでの映像。おいおい。血沸き肉踊るぜ。あとなんか男女が殴り合ってるのとか。とっても刺激的である。田園風景の、美しい山岳地帯を荷馬車がごろごろ走ってて、馬とかもいて、何か和むねと思ってしばらくいった草むらのところに死体が転がってるとか。ふーざけんなよって感じ。これはもうDamasioのソマティックマーカー関係のスキャンにしか見えない。 検査のふりして、一日人をこき使って論文の被験者をただでやってもらう陰謀にしかみえない。 最初にサインさせられた書類にはこっそり 「結果を論文に使うけど、いいよね?」とか 書いてあるに違いないと思った。
▼ 11月1日から導入された新札。 2日にコンビニで他の客が1000円札使っているところを始めてみた。 次に見たのは12日にATMから1万円の新券が出てきたとき。 14日には自分の札入れの中から1000円札が出てきて驚いた、 知らない間におつりでもらっていたらしい。 17日に同じATMからお金を出した時には一万円の旧券だった。 18日におつりで始めて5千円の新券を見る。
こういうことは、記録しておくと後で面白いから書いておく。
▼
'if' statement considered harmful
Dijkstraに倣って、「Ifステートメントは使うな」と言ってみるTEST。
ループ終端以外のif文にはふた種類ある。悪if文と良if文だ。 (さらにあげれば中立if文と本質的if文があるが数は少ない。)
良if文の例としては、 ネットワークでエラーを起こした時リトライするためのif文や、 sin関数で定義域によってif文で分岐して異なる多項式を計算するときのそのif文などがある。 これらは、物理層のエラーを回復したり、演算誤差をさけるなど、 そのif文をふくむプログラムの下層のもつ不安定性を吸収して、 プログラムのユーザ(多分ほかのプログラム)に対して首尾一貫して安定した振る舞いを提供する。
一方、悪if文は反対に下層の安定した振る舞いをダメにして、 ユーザに対して首尾一貫しない振る舞いを提供する。
例えばMatlabのplot文。 Aが(m,n)行列とした時、plot(A)はmが1でない時は n個のm次元列ベクトルが来た物として、n本のtraceを描く。 しかし、mが1の時は1個の行ベクトルが来た物とみなして 1本のtraceを描く。(n本の1点からならトレースでなく。) この振る舞いの分岐にif文が使われているが、これは悪if文である。 確かに人間が使う分には、プロットしようとするベクトルが列ベクトルか行ベクトルか区別しなくて良いので、便利な振る舞いである。 しかし、他のプログラムがこの仕様を使おうとすると、 首尾一貫しない振る舞いを起こす。たまたま、データの長さnが1に なることもあるからだ。 (plotでm=n=0のときerrorが出るのも悪if文。 人間が直接使うのではなくコードがこれを使う事を考えると何も描かないのが望ましい。 errorが出る仕様を実装するためにはループ終端とerror用のif文の二つがいるが、 望ましい仕様は単にループの先頭に終端条件を持ってくるだけで実装できる。 このように望ましい仕様のほうがif文の数が少なくなるのだ。)
この種の「便利な」ふるまいをするコードの上にプログラムを構築することは、 動く地盤の上に建物をたてるようなもので危険である。 プログラムが他のプログラムから使われるときは、そのプログラムは できるだけ首尾一貫した振る舞いをしなくてはならない。 「便利な」ふるまいは禁物である。
このほかにも、特殊値に特別な意味を持たせたり、 APIを増やせばいいところで面倒なので、ほかのAPIの 使われていなかった値域に全く違った機能を持たせたりするときにも、 我々は悪if文のお世話にならなくてはならない。 我々が憎む意味不明の仕様の全ては悪if文の利用無しには、実装し得ない。 また、意味不明の仕様の源泉を辿っていけば必ず悪if文に辿り着くだろう。
私の経験から言えば多くのプログラムに含まれるループ終端以外の if文の9割以上は悪if文である。良if文は稀である。 我々は、それが、良if文であることを確認できない限りはif文の 使用を差し控えるべきである。
* 悪if文の効果は、すぐに良if文によって打ち消されない限り、APIやライブラリの階層を何階層でも伝搬していき、階層を下る程にその効果は予測不能になりまた広範に広がる。
* 二つの悪if文が相互作用した時におこる事は予測不能である。(三つの時はどうかって?聞かないでくれ。)
* 悪if文はプログラマーのちょっとした親切(「こうしたら便利だろう」)によって生まれる。
* 「バッドノウハウ」を生み出すような仕様の源泉をだどっていくと悪if文に辿り着く。
* 「グッドラッパー」は悪if文の効果を打ち消すための良if文を多く含むが、100%効果を打ち消す事ができなければ、「ほとんど成功するのに予測不能タイミングで失敗をする」という結果になり、予測不能の程度を上昇させる。何階層もまたいで伝搬した悪if文の効果や複数の悪if文の相互作用の結果をうちけすことは極めて難しい。
現実に存在するコードのほとんどは実はデータ処理をしない。 ただデータを単に他のコードに渡したり、 精々パックしなおすくらいの事しかしていない。 またデータを処理するプログラムでも 演算の本質に関わるif文は極めてわずかしかない。 コードは多くの場合他のコードに利用されるためにあるのであり、 コードは処理の本質に関わる部分以外では 乱流を作らないように整然とデータを流すべきである。
goto文は制御の流れを不規則に変える構文であるが、 if文はデータの処理に不規則さを加える構文である。 一つ加えるごとに計算論的な複雑さが組み合わせ爆発を起こすと言う点で 同じ程度の厄介さを持っている。
▼ 「春と修羅」の冒頭
わたくしといふ現象は
假定された有機交流電燈の
ひとつの青い照明です
(あらゆる透明な幽霊の複合体)
風景やみんなといっしょに
せはしくせはしく明滅しながら
いかにもたしかにともりつづける
因果交流電燈の
ひとつの青い照明です
(ひかりはたもち、その電燈は失はれ)
私の解釈はこんなふうだ:
「有機交流電燈」とはニューロンの事で 「有機」はニューロンが有機物でできていること、 「交流」は電位を素早く変化させながら活動していること 「電燈」は電気的な活動であることを意味している。 あと普通でもニューロンの活動を「発火」というし、 科学番組のアニメーションでもニューロンの活動を青白い閃光で表したりするので、 これを「電燈」で比喩するのは自然だと思う。
「青い照明」は先のニューロン活動をイメージでもあると同時に、 精神の暗喩であろう。精神を青白い光に例えるのは比較的普通の隠喩だと思う。 (このあいだ見た映画の中でも死にかけた人から抜けていく 精神を青白い光として描いていた。 っていうか、精神を映像として描くには青白い光以外の表現はあり得ないと思う。)
さて、コンピュータのコンピュータ性つまりコンピュータであるということは、 チューリング的な完全性がその本質である。 だから、チューリングマシンもIBM360もx86もVirtual PCも、バベッジの解析機関も非ノイマン型コンピュータもコンピュータとしては等価なのだ。 ハードウェアとしての類似性の全くの欠如にも関わらず(PCエミュレータはハードですら無い)コンピュータとしては同じ物であり得ると言うことは、 コンピュータというものがハードに立脚しながらも、 その存在の本質は物理的次元にはないということを意味する。 では、何の次元に存在するかと言うと、数学的モデルとしての等価性の次元である。 数学的モデルは、何かと何かを仮定として等価とみなして理解する主体によってのみ了解しうる。 その意味でコンピュータの存在というのは「仮定された」あるいは「仮想上の」ものである。
精神の存在も同様に「仮定された」ものである。 その存在は物質に立脚しながらも物質の次元にはなく、 その本質は「仮定」「仮想」の上にある。 (しかしこれは二元論では無い。なんら超越的な要素はない。 それを言うために先にコンピュータの例を示したのである。) これが最初の「仮定された」の意味だろう。
「透明な幽霊の複合体」の意味は私には良く分からない。
ありそうなのは
1、精神はサブモジュールの複合体であり、
それぞれは仮想上(〜透明)(〜幽霊)のものでしかない。
また(Maxwell的なまたはUNIX的な意味での)デーモンを意味するために「幽霊」という言葉を使っているのかも知れない。
2、先ほど精神は「仮定された」存在であると言ったが、
その「仮定する」者もまた精神である。
このように我々の精神の存在は
私をみる私と、私を見る他者と、他者をみる私が作るネットワークの
中でしか証し得ないということを意味している。
という二つの可能性が考えられる。
「風景やみんなといっしょに
せはしくせはしく明滅しながら
いかにもたしかにともりつづける」
これは脳とニューロンが外界の事象にあわせて
せわしなく活動しているが、
それにも関わらず、精神と自己は安定して存在し続けることだろう。
「因果交流電燈」の 「因果」の意味は良く分からない。 精神の活動は脳の活動であり、それは物理的な因果律に従っていることや、 外界の変化を因として活動(果)することを、あるいは意味しているのかも。
「(ひかりはたもち、その電燈は失はれ) 」
電燈がなくなったのに光は残ると言うのはあり得ないが、
これは「私とその宿りたる脳はいずれ死んで消えるが、
知識、善意、そして精神性は他の人に受け継がれるだろう」という意味だろう。
ずっと前から大体以上のように私は理解していて、 あまりに意味が通るので、これ以外の解釈はないとひとり合点していた。 で、この はてなの解答らをみて、 「人によって様々な解釈があるものだな」と感心した。 だから自分の解釈も書いてみたくなった。
▼ むかし3次元集積回路というものが研究されていた。 トランジスタを多層に積層するものだった。 でも、今でもLSIのトランジスタは一層のままだ。 しかし、配線層は10層に達するような物もある。 一般にコネクションの数は素子の数の二乗までは行かないにせよ 素子数よりも早く増える傾向があるし、 当時でもスケーリングの傾向を延長すれば将来、トランジスタではなく 配線の積層の方が重要になることは分かったはずではないのか。
▼ ふと、心理のチューニングとプロザックの関係などについて考える。
怒りにせよ、悲しみにせよ、劣等感や憎しみのようなものでさえ、 全ての感情には適応的な意味があって存在している。 しかし、人によって陽気な人もいれば陰気な人もいるように 感情の配合比は異なっている。 しかし人間全体を見ればおそらく最適値の周りにチューニングされているのだろう。
しかし、そのチューニングは数万年前の人間の生活にあわせてできているのだろう。 現代に至って社会は巨大化し複雑な産業技術が成立し、 安全で安楽な生活が可能になっている。 この社会の変化によってチューニングの最適点は変わっているはずである。 その現代に合わなくなってしまった部分とはどこだろう という疑問を前から考えていた。
考えるに、それを見つけるヒントは、 恒常的に使用されることが当たり前になった向精神物質だろう。 つまり酒、タバコ、そしてもっとも最近でてきて最も目立つプロザックである。 それぞれ違いはあるが、共通している点が一つある。不安の抑制である。
要するに不安を抑制してもよいということが意味しているのは、 現代社会では身体に危害が加わるような実体のある危険がほとんど無くなったという事だろう。 一方、抑制したくなると言うことが意味しているのは、 不安の源泉は身の回りに溢れていると言うことだ。 もうそれはズバリ、広義の対人関係以外にはあり得ないわな。 (「広義の対人関係」とは友人の関係から、会社の命令、社会の抑圧までなんでも含む。)
対人関係はどちらかと言うと悩まないバカの方が上手にやれる傾向が あるわけで、対人関係で悩む私のような人はつまり、 進化の置き土産である不安傾向の為に不適応と。
▼ 昨日10時に寝て午後三時に起きる。なにか一日損した感じ。まあ、疲れていなければそんなに眠れないはずなので、必要な眠りだったんだろうけど。
▼ テレビとかwebサイトでやっている知能テストの結果をみんなweb日記とかに気楽に書いてるねえ。「120だった!」とか。自分は100以下だったらどうしようとか思うと恐くて出来ない。
それはともかく、どうも書いている人は皆120以上だな。なんか変だ。 どうも、テストの方も10くらい甘く作ってるんじゃないかという感じがする。
▼ 「日本語は論理的でない」とか「日本人は論理的でない」とか言う人は多いが、 実証に基づいてこれらの命題を論理的に証明している人は見たことがない。 そういうことを言う人が非論理的なんじゃないかといつも思う。
▼ 理想を追うと言う考え方は不適応なんだけど、 なぜ多くの人はそのことを知らないのだろうか。
▼ バカとは「自分ってバカかも」と思ったことのない人のことだ。
▼ Technological Singularity (4)
面白い記事なのだけど、野暮を承知で突っ込む必要は感じる。大脳のニューロンの数は1千万ではなくおよそ100億だから見積もりが数桁違う。
次に、この指数関数的発展はどこまでも続くわけでは無い。 ここでの見積もりは消費エネルギーは一定と仮定しているようだ。 これは性能がのびる度に単位演算当たりの消費エネルギーが下がることを 意味しているが、確か大体現状の10の5乗倍くらいで熱力学リミットが来る。 つまり、一つの信号の担体のエネルギーがkTに接近して、それ以上性能をあげることはできなくなる。※ また(私もよく理解していないのだが)1ビットの情報を消去するエントロピー消費はおよそ k である。このエントロピーの熱力学限界に達した後は、演算量と言うのはひたすらエントロピーとの取り引きになるだろう。
だからKurzweil 氏の描いていたほど話は単純ではない。
(※可逆演算にすれば本質的に演算のエネルギー消費は必要無いのだが、 そのためには巨大なメモリストレージが必要になり、現実的ではない。 そのため、コンピュータのアーキテクチャを改革してできるところだけ可逆演算にすること言うことになるが、 おそらくそれで節約できても1/1000くらいだろう。)