05年11月 diary

最新の日記へ  前の月へ  次の月へ  日記INDEX  HOME

11月18日 

私が使っている自作の検定プログラムを公開します。誰かの役に立てばいいな。

Matlabによる初歩の検定

11月17日 

image statisticsについて。ちょっとNatural image statistics and neural representation, Simoncelli & Olshausen (2001) や baysian model of object perception, Kersten and Yille (2003) を読んでみる。

で、予想以上にimage statisticsは進んでいないという印象を受けたが、それは何故なのだろう? 隣り合うpixel同士は相関しているとか、時間的にも相関しているとか、そういう自明な事を除くと確実に固まっているのは、一次視覚や(V1)の単純細胞のような線形の1オクターブフィルタ(waveletみたいなもの)を使うとさらによく圧縮できるというところまでに過ぎない。

あと、2次とかの非線形性を加えるとcoaxialなフィルタの相関などが取り除けるということとか。しかしこれはまだ関数の形までは決まらない程度だし。これはV1の単純細胞相当に過ぎない。 あと動きとか複雑形状に対する試みが散発的になされて決定版にはまだ遠いと思う。

総じて言うと、実験で分かっているのでさえcortexに見られる選択性の一部であるのに、その実験的に分かっているV1の全てにも届かない状態のようだ。

考えてみるとimage statisticsがあまり進んでいない事は不思議なことだ。我々が目で見るとホワイトノイズなどのランダムな画像と自然画像の差は歴然としている。余りに自明すぎるくらいだ。簡単に言えばimage statisticsというのはこの「自然画像とノイズとの差は何か?」を調べる研究だが、この自明な差がなにか分からないと言っているに等しいわけだ。

11月14日 

学術論文がgeneral publicにとってaccessibleでないのは問題だと思う

学術論文は誰であろうと読みたいと思えば読めるようになっているべきである。なぜか。

第一に、結果を秘匿せずに全ての結果を一般に公開するようになった事こそが近代学術の発展を促した。結果を公開する事によって知識を前提に知識を積み上げたり、間違いを指摘しするダイナミズムが生まれた。いやむしろ、公開は学術を促したと言うよりは、これが近代の学術の定義であり本質そのものといってもよい。従って成果は公開されるべきである。

そして第二の理由は現代の学術研究の大半は税金によってまかなわれており、知識が全ての納税者に還元されるべきだからである。

しかし結果の公開に関して、学術出版をする企業が存在することの意味がこの十年で逆転してしまった。そしてその事にまだ気がついていない人は多い。

18世紀からコピー機が普及するまでの間、学術出版社たちは学術論文を多くの人に公開する為に最善の存在だった。我々はすでに反対向きに考える事に慣れてしまったが、コピー機ができるまでは最善のコピー法は印刷をする事だった。だから出版業者は情報を広くコピーし配付するための最善の存在であった。そして出版社に著作権を譲り渡す習慣は、著者に許可を得ずにコピーを量産できるために、general publicに情報を広めるための良い習慣であった。

コピー機が普及してからこの関係は微妙な変質をしたが、まだ何となくなんとかなっていた。

しかし、インターネットが普及した今や、ネットにくらべて印刷は最悪のコピー・配付方法と言える。そして業者たちは著作権の譲渡を強要しその著作権を盾に論文を私有財産のように扱い一般への公開を拒否する。

いまや反対に情報の流通をさまたげる存在となってしまっている。

一次視覚野(V1)には比較的単純な反応選択性をもつ細胞しかないと考えられている。「比較的」の意味にもよるけど。

視覚野の膨大さの理由が多くは並進、伸縮、回転の不変性に対応するためであると考えているという話はした。 これが正しいとすると、反対に視野上の非常に小さな区画の中に限って良いのならば、並進対称などの処理が必要なくなるので、意外と小さな回路で結構複雑な形状の表現が形成されても良いと考える事ができる。つまりもしかしてV1にも結構複雑な形の表現がある可能性があるかもしれない。IT並みは無理かもしれないけど、V4並みなら・・とか。

cortexの中で情報を密にやり取りできるのは400μmくらいだけど、400μmに相当する視野上の距離はいくらだ?近くにあったマカクのretinotopyの写真からいいかげんに読み取ったところでは中心窩で1度で1cm位か。だとすると、0.04度くらいか。つまりそれ以下だと意外と複雑な形の選択性が存在する可能性があるかもかも。(そんなに受容野の小さい細胞はあんまり見つかってないけど。)

11月12日 

善とは無自覚な偽善の事である。

無能は悪い事では無い。自分が有能だと勘違いしていない限りは。

録画しておいた何週間かまえの「ガイアの夜明け」を見た。医療についての回だ。 脳外科では(もしかすると外科一般かも)学閥を超えて技術を研修する事ができないらしい、ごく一部の新しい試みをしているところを除いて。なんたる後進性。

(番組とは関係ないけどそれよりも、脳外科の人口当たりの数が日本は欧米の4倍になるらしい事も気になる。向こうは規制しているらしいですよ。)

Matlab sucksみたいなことをしょっちゅう言ってましたが、昨日時間があったので、ゆっくりrefactoringしながらプログラムを書いていたらそれほど腹が立ちませんでした。自分のプログラムの悪いところに腹を立ててたのかも知れませんね。

しかし、一関数一ファイルでローカル変数が使いたければファイルを増やさなきゃならないとことか、マクロがない事とか、imperativeな書き方を強制されること(配列操作関数をもう少し工夫してくれればimperativeな部分を減らせる)とか、操作が直交しない事(関数の戻り値にindexをかけられないとか)とか、総じて言えば抽象化と汎化に欠ける言語だと思う。

スカラーは1x1の行列だったりするのも変だ。それはC言語で言えば double a; と double a[1]; が混同されているみたいな物で、危険だ。静的言語ならsegmentation faultだ。動的型の言語なので処理系内部のif文でなんとかなっちゃってるけど。けど、それは悪if文の温床になっている。

自分の仕事の生産性を落としていると思われる要因

*難しい事から始める。先に簡単な事を片付けてからやるべき。 簡単な仕事をやっていると気分が良いしだんだんと集中が高まってくる。対して難しい仕事からはじめると集中とモティベーションの維持が難しいし、待ちリストの後ろにたくさん並んでいるとそれが簡単な仕事であっても心を悩ませるもとになる。

*一度始めた仕事をわきに置く事ができない。割り込まれた仕事でも早く終わるやつは先にやれば良いのに。

今日はゼータ関数三昧でした。Epstein-Hurwitz zetaね。

11月11日 

このあいだ読んだある論文は視覚刺激の変化があれば運動を変化させるという物だった。(どの論文かは今回の話には大して関係ないけど、Genovesio'05だ。)

で、それを読んでいるうちに、間接度という概念とタスクを記述する記号言語を思い付いた。これを利用するとタスクをシステマティックに分類したり、タスクの難しさを定量化したり、あり得る認知的な戦略を列挙したり、領野の機能分化についてよりクリアに考えたりできるようになるかもしれない。

たとえば、おなじ運動 M をくり返すだけならば、

M
と書く。これは間接度0だ。刺激 S によって運動が指定されるなら、
M←S
と書く。矢印はmap(写像)の意味だ。これは間接度1。刺激の時間変化(200ms以上かかるもの)があるとき特定の動きを要求するなら、刺激の変化を ΔS と書いて、それが運動にmapされるのだから、
M←ΔS
次に、たとえば8方向の動きが可能で、特定の刺激S1が出た時は動きの方向を時計周りの隣のtargetへの動きを選択する、刺激 S0 のときは何もしないならば、刺激 S が運動の変化 ΔM にmapされるので
ΔM←S
と表記する。さきほどの「刺激の変化があれば運動を変化させる」は
ΔM←ΔS
となる。

mapの矢印の数とデルタの数の和が「間接度」で、大体タスクの難しさに見合っていると思う。

動物がたとえば M←S のマップを習得するときに使うwin-stay lose-shiftは、報酬の欠如を ^R と書いて(ほんとはRの上にバー)、こう書ける

ΔM←^R
で、これをやりながら、統計をとって M←S を覚えると。 ΔM←^R の間接度は2なので M←S の1にくらべて大きい。このように一般に学習には実行よりも大きな間接度が要求される。だから新規習得は難しいと。

Wisconsin card sorting testは分類箱を T として、運動は分類箱ごとに異なる

M←T
刺激SからTへのマップ T←S は報酬の不在によって切り替える必要がある。
Δ(T←S)←^R
という感じになる。(Wisconsin card sortingには視覚情報をゲートする戦略もあるかもしれない。)

たとえばDMTS(遅延見本合わせ)はtargetやsampleとなる刺激 S とそれとは独立したinstruction S'がある。instruction S'がsampleを意味している時、working memory W に S を記憶するので

if(S') W = S
とでも書きたくなるが、これもS', Sの状態が一種のマップとしてWに影響するとあえて一般化して書く。
W←(S, S')
次に、test stimulus Tが来る。このときTがSと一致したら指定の運動をする。しなければなにもしない。つまり
if(W==T) M
だけど、これもmapとして
M←(W,T)
となる。

私は以上のmapは大脳基底核によって行われていると考えている。そして、sensoryのSやmotorのMなどは新皮質によって表現や実行が行われている。そして、ΔSなどの(200ms以上の)時間変化の検出を行うのが新皮質の中でも前頭前野である。同時に前頭前野は自らの運動の遂行系列つまりMの時間変化ΔMを検出する機能も持つ。 さらに、進化の中でいつからか前頭前野は、ΔMを検出するのではなく、反対に基底核に指令されると、実際にMの時間変化ΔMを起こす機能を持つようになった。このようにこの表現式はタスクがどのような脳の部位と機能を使っているかも示している。 (ΔM←^Rは前帯状回かも。)

今日同僚のイラン人がexpensiveの意味で"high"と言うのをみた。高価な事を「高い」と言うのは結構世界的に共通なんだろう。

11月10日 

たぶん誰かがやっているだろうから、知りたいと最近思っている事

経路積分

Z[J] = ∫Dφ exp(-i){ Jφ - L[φ]}
が任意の汎関数L[φ]についてわかれば量子力学についてなんでも分かる。ここで Jφは関数の内積∫d4x J(x) φ(x)で∫Dφは全ての関数φ(x)についての和である。これは汎関数Lから汎関数Zへの変換である。

これはフーリエ変換に良く似ている。フーリエ変換は

~f(k) = ∫dx exp(-i){kx - f(x)}
で全ての実数xの和をおこなって関数fから~fに変換を行っている。この実数が関数に、関数が汎関数に置き換わったのが経路積分だ。

問題はこの「全ての関数についての和」という物が何なのか知りたい。全てのC1級関数か、それとも全てのC級関数なのか、それともそれ以外か。また、この関数のクラスの違いが何か結果に差をもたらす事があるのか。またこの和を数学的にwell-definedに定義するにはどうしたら良いのか。

たぶん誰かがやっているだろうから、知りたいと最近思っている事2

任意の古典力学の系は量子化し、h→0の極限で再現することができる。

これと同様に任意の解析学や整数論の問題を、線形オペレータの固有値問題のh→0極限に置き換える方法が存在するのではないかと思う。また同様に任意の問題は経路積分の分配関数Z[J]に置き換えることができるはずである。それはどのような方法なのだろうか?

そして、それを量子コンピュータの汎用アルゴリズムに応用する事はできないのか?

11月5日 

とあるGUIアプリを使っていると、

「ゴミ箱に捨てて良いですか [はい] [いいえ]」
ってな感じのダイアログがでる。何年経っても慣れる事ができず激しくいらだつ。あまりにもゴミ箱の存在意義を無視した、屋上屋をかけるようなインターフェイスだ。

なぜ、GUIで「ゴミ箱」というものが発明されたか。 むかーしむかし、あらゆるCUIアプリは何かを削除する度に

ほんとにやって良いですか?知りませんよ。 (Y/N)

Are you sure? (訳:ファイナルアンサー?) (Y/N)

みたいな確認メッセージがでてウザかった。しかも必ず出る物だから、こっちはYキーを押すのが手癖になってしまって、気がついた時にはすでにYキーを押してファイルは消去されてしまっている。これでは確認が何の役にも立っていない。

そこで、ゴミ箱が発明された。削除は確認しないけど、あとからまずいと思った時は「ゴミ箱」からそのファイルを取り出せばいい。これでうざさから逃れられるだけでなく、手癖でYを押す事(これが非常に悲劇のもとになった)からも逃れることができるようになった。すばらしい発明だ。

で、例えていうとゴミ箱というのは、傘をささなくても良いように作った屋根なのに、屋根の下で傘をさせって言うんですか?

11月4日 

昨日の話に書いた計算論についての悟りによって、確率モデルの獲得の実際のアルゴリズムについて考えはじめた。で、以下の話。

確率的モデルの最適化問題では確率の規格化が問題になる事が多い。 確率的モデルでは全確率が1になっている(∫dx p(x) = 1 )いる事を前提としていることが多いわけね。余りにも当たり前だけど。でも、p(x)はなにか多次元のパラメータaをもった初等関数で表したい訳だけど、初等関数が積分できるってことは少ないわな。それで困っちゃうわけだ。もう、ほとんどのモデルがこの問題に引っ掛かる。

さて、昨日書いたように、考えを確率モデルの獲得に単純化できた訳だが、それで簡単になってもまだ規格化の問題にひっかかって、なかなかモデルづくりがうまく行かない。

というような事に数日悩んでいた。 で、ちょっと気になって調べたら規格化の問題をある程度解決できる方法がありましたよ

Estimation of non-normalized statistical models by score matching, Hyvarinen A., Journal of Machine Learning Research 6 (2005) 695

内容を簡単に言うと観測確率分布p(x)とモデル確率分布q(x)の一致程度の定量化に以下のような"score"を使うという話し。

J(θ) = ∫dx p(x) (∂x log p(x) -∂x log q(x))2

q(x) は確率分布形をきめるパラメータがθに依存する。 こうすると、normalizationに依存しないからいいと。 さらに部分積分をすると、

J(θ) = ∫dx p(x) (∂x log p(x))2 +∫dx p(x) {+2∂x2 log q(y)+ (∂x log q(y))2}

になると。第一項はθに依存しないので不要。第二項は観測確率p(x)の1次になっているので現実的な計算が非常に楽になる。これは一次元xだけじゃなく多次元の場合でもそのまま通用する。

というはなし。私が考えはじめた時にはすでに論文があるというのは彼は私の2歩は先に行っているということだ。これなんかいかにも自分の思い付きそうな話だし。毎度の事ながらHyvarinenには悔しい思いをさせられる。

しかし、やっぱり上の方法は制約が厳しすぎるような気がする。 たとえばq(x) = exp (-|x|)なんていう分布はreal worldの画像データでは良くあるけど、∂x2 log q(y) = δ(x)でsingular過ぎる。 それに(理由をよく理解して無いけど)確率分布間の距離と言うのはKL-divergenceがbestのはずだけど、それが使えないのも気持ち悪い。

というわけで、さらに考えてみる。たとえばKL-divergenceを最小化する問題を考える。

KL(θ) = ∫dx p(x) (log p(x) - log q(x,θ))

θやxは一万次元くらいのベクトルだと思いねえ。 このとき ∫dx q(x,θ) = 1 というconstraintが課されている必要がある。

で、やはりKLの第一項はθに依存しないので無視して、θ→θ+dθと変分して勾配とかを求めることができればなんかの最小化アルゴリズムで最適なθを求められるわな。

(d/dθ) KL(θ) = ∫dx p(x) (d/dθ) (-log q(x,θ))

ここに、拘束条件の変分を加えて最小化問題を解けばいい。

Σii ∫dx (d/dθi) q(x,θ) = 0

で、この拘束条件の中の∫dxはMonte Carlo法で数値積分してしまえばよい。

と、思ったが exp(-|x1|) exp(-|x2|) ...と一万次元ぐらいかかっていると数値積分しようにも、ほとんどの所では値がゼロに近くてまともに数値積分できない。

で、もちろんこれには定石があるんだけど、それに気がつくのに一晩かかっちゃったよ。それには拘束条件を

Σii ∫dx exp(-E) (dE/dθi) = 0

と書き直せばいい。ここでE = -log q(x,θ)ね。 測度exp(-E)がかかった積分は普通にMetropolis法でMonteCarloをやればいいんだよね。

もちろんMetropolis法の利用はMachine learningの分野でも良く知られていてMarkov Chain Monte Carlo (MCMC)と呼ばれているらしい。

で、この方法なら、もとの問題に対してさして計算量が増大しもしないし。いいんじゃないでしょうか。

あとprewhiteningはやっといた方が良いね、Metropolis法でも。

注意: q(x) → p(x)であるから再急降下方向と、constraintに禁止されている方向は近い。平行成分を取り除かなくてはならない。桁落ちとかには注意。

あ、もう一つの解決があるかも。 初等関数で無いけど比較的簡単に数値的に値を求める事ができて、normalizeされていることが保証されているような新しい関数の族を作る事だな。パラメータの数がたくさんあって、必要なら任意関数を近似できるような関数ならば初等関数でなくてもいい訳だし。

あと、量子力学で良く使うような規格直交関数系をつかうというのも手だな。これなら、任意確率分布を近似できるし、規格化も容易だし。ただ、これはovercompleteな表現を使いたい時はあまり役に立たないかも。

11月3日 

ちょっと前だけど、ちょっといい思い付きをした。 これまで新皮質の計算論を符号の圧縮と考えてきたけど、これは実装レベルで結構困難があった。それを単に外界の確率モデルの獲得と考えれば遥かに楽になる事に気がついた。圧縮はそのモデルを利用して楽々できるし。

そもそも圧縮と考えた理由は、
1、行動を生成する回路へは短い符号を入力した方が良い事、
2、リアルタイムに圧縮する事は次に来る物を予測する事だから、
3、パターン認識というのは短い符号を作る事だから、
4、異常な出来事の検出に使えるから、
などなどだけど、異常の検出はモデル獲得でもできるし、パターン認識はモデルのなかの特定の確率の山、あるいは低次featureではありそうも無いcontingencyとして理解できるし、1と2番はいまいちだけどさっき言った通り圧縮はモデルを利用して楽にできる。

上で言う困難とは?:

たとえば一次視覚野を例にする。一次視覚野の細胞の数は外則膝状核の細胞の数の50倍程ある。これは恐らく一次視覚野の出力の数は入力の数よりも遥かに多い事を意味する。

また、出力の次元 n が入力の次元 m よりも大きいのは一般論としては良い事だ。次元が大きいので表現の自由度が大きい。感覚入力は連続でも外世界の構造には離散性があるが、離散性を表すのに都合がよい。そして、スパースな表現ができるからエネルギー的にも得だ。ほかにも理由があるかも。

これらの理由から皮質では出力の次元の方が大きい、つまりovercompleteな表現がなされていると考えられている。

しかし、情報圧縮の考え方に従えば、より大きな次元に写像するのは不利である。それを防ぐためには出力のうち同時にactiveになって良いのはm次元だけであるという条件を入れるしか無い。

しかし、そのような無限回微分可能でない条件をいれることは第一に理論の解析を難しくするし、第二に現実の実装のコストが大きくなる。特に第二の問題が深刻で、厳密にm次元のみの活動しかできないのなら、それはグローバルな条件なので、グローバルな結線または多数回のイテレーションなどが必要であり、コストが大きすぎて現実の脳でも実現可能とは思えない。※

しかし、圧縮はひとまず置いておいて、まずは確率モデルの獲得だけを考えれば問題は遥かに簡単になる。

圧縮と確率モデルの関係:

符号の圧縮は対象の確率的偏りを利用して行う。ハフマン符号なんかは最も分かりやすい例である。 これは対象の確率的モデルの一種である。 ハフマン符号は簡単な例だが、もっとモデルが精密になってモデルの出来が良くなるほど圧縮率はあがる。 したがって、圧縮は必然的に確率的モデル獲得を伴う。 反対に良い確率的モデルは良い圧縮法に利用できる。

(11月10日追記:※コストがかかるということの実例がOlshausen & Field (1996)だ。評価関数が出力0のところでとんがっているので、出力のうちm個以外の次元はみなゼロになる。そして、その条件を満たすためにコストのかかるイテレーションを入力一回ごとにやらなければならない。)

インターネット接続をADSLから光に切り替えるはしで、家から接続できず。 なんか自宅にいると「外の世界に繋がってない感じ」がする。

11月2日 

サンクコストから始まって人間の感情・心理の構成の話

サンクコスト(sunk cost)とはこれまでに使っちゃったコストのことだ。 サンクコストの事を気にしちゃいけない。 たとえば橋を作っている途中で残りの建設費が完成後の収入を上回るようならば、そこまでの完成度が1%だろうが99%だろうが、いくら注ぎ込もうが関係なくプロジェクトを中止しなくてはならない。

サンクコストを気にする行動は不合理である。 それを防ぐには これはただ単に過去を一切気にしなければ良いだけの話だ。

おそらく動物はサンクコストを気にしない。単にこれまでの経過を気にする能力が無いだけの事だけど。

だけど人間はサンクコストを気にする行動をいろいろ取る。何故わざわざそうなったのか?

全部は分析できないし橋の例とも違うけど、サンクコストを気にする行動のうちの一つ「復讐」について考えてみる。 復讐は帰りもしないものの為に破壊や攻撃をすることだ。このゲインのない一見無駄な行動が存在する理由は抑止であろう。「私は、そして人間一般は、必ず復讐をするものなので私に悪い事をしないで下さいね」ということを明らかにするためにも、すでに取り返しがつかなくとも復讐はしなくてはならない。それは未来の当人や人間一般のロスを防ぐためである。 一見、過去に拘泥しているように見えてもこれは本質的には未来を良くするための行動なのだ。

しかし、この「復讐」をあえてとどめるための心理もある。それは「許し」である。 これが存在する理由は実は私にも良く分からないが、例えば復讐の連鎖による被害を止めるためなのかも知れないし、あるいはある種のゲーム理論上の設定で現れるように、敵が未来の協力者になりうる可能性から利益を得るためかもしれない。※

さらに言うと、すでに気持ちは許しているけど、放置するとものの道理として周りに示しがつかないから、あえて罰するという行動もあり得る。

これを上から眺めると最初にサンクコストを気にしないという態度 a があり、復讐と言うそれをoverrideするもの ~a があり、次に許しと言うそれをoverrideするもの ~~a がある。('~' は否定のつもりの記号。)

どうも人間の感情・心理は同様の階層的overrideの構造をどの感情に対してももっているように思われる。

たとえば、行動があり、それをoverrideして差し止める「恐怖」があり、恐怖をoverrideして差し止める「勇気」があり、勇気をoverrideして差し止める蛮勇への戒めがあったりとか。

また一段overrideするごとに、より遠い未来を指向しているように見える。

※そういや、物語で敵を許すシチュエーションは大抵「このような悲しみの連鎖を止める為です」と説明されるか、少年漫画によくあるように説明無しで翌週から仲間になってるかの二つが多いよな。

なんで感情のことを考えるかと言うと、それが知能の本質と関係があると思うから。その話はまたそのうちしますね。


| Home |
T. Mogami
e-mail: mogami@yugiri.bnf.brain.riken.go.jp