▼ なぜ私がGoogleを始めとする検索エンジンにこだわるかというと、 検索エンジンが人工的な知能のテストグラウンドないしプロトタイプに なると思うからだ。 古典的な人工知能が対象にしたようなToy world、 たとえば言葉で記載された数百のルールの世界や、 チェスゲームのような完全に記号化された小さな世界と 現実の物質的世界のちょうど中間ぐらいの複雑さと大きさとノイズを もっていると思うんだ、webの世界というのは。
それについて書きかけたのが、去年のこれ。
▼ この日記の7月1日分に 「圏外からのひとこと」のessaさんからの 言及があった。
「巨大データ+シンプルなアルゴリズム=知能?」 というタイトルがつけられていた。 こういう「おいしそう」な引き文句をつけられるessa氏の才能に感心した。 私にはできない。 もっとも、誰に取っても自分の考えと言うのはどろどろした物であって、 割り切れない要素があるので、 簡単な言葉にまとめることは当人にはやりにくい物ではある。
▼ さて、これにencourageされて、さらにGoogleの話を。 page rankという単純なアルゴリズムこそがGoogleの発祥なわけだけども、 想像するに今ではすでにその単純さは失われているだろう。 page rankはサーチエンジン最適化(SEO)におそらく影響されやすかったはずで、 SEOに対する対策から付加的なアルゴリズムを加えることが始まった のだと思う。 さらに種々の付加的なアルゴリズムによって結果のrefineをしているうちに、 いまでは付加的なアルゴリズムの方が大きくなっているに違いない。
このようなアドホックなアルゴリズムは単純なアルゴリズムにくらべると 不安定で、人間による調整を常に必要とするものだ。 そうしないと空中分解を起こすだろう。それが単純なアルゴリズムとの違いだ。 一時期Google danceといってページの順位が激しく変動する現象が 見られたけど、あれがそのチューニングの過程だと理解している。
その結果、リンクの相互接続によって順位を決定するというpage rankは すでに相対的に大きな役割を持たなくなっている可能性がある。
私はこれはGoogleの危機だと思う。 もともとのGoogleの優位はアルゴリズムの単純さから始まったことなのに、 すでに単純さが失われているとしたら、 次に勝つのは多数のアドホックなアルゴリズムのもろい集合体を 空中分解しないように維持し続けるために沢山の人手を 動員できる企業だ。
ここでするべきことは、もう一度アルゴリズムを再定義して単純にすることだ。 その方法は全面的な確率論の採用だ。 「良いページからリンクされたら良いページ」というのは 第一に次元が一つしかないのが問題だ。 しかし、同様に「学術系のページからリンクされるのは学術系」だし 「エロいページからリンクされるのはエロいページ」だし 「内容のないSEOページからリンクされるのは内容のないSEOページ」だ。 確率論ならこのような多次元の尺度を無理なく取り入れることができる。 第二に、「良いページからリンクされたら良いページ」というのを スコアの伝播で定義しているはずであるが、これをきちんとした 確率によって置き換える。 「とても良いページからリンクされたら60%の確率でとても良いページ」 「とても悪いページからリンクされたら10%の確率でとても良いページ」 とかという具合だ。
きちんとした確率論を使うと、 多くの場合、問題は安定で、式が簡単な形になる。 特にサンプル数が非常に多いときには、式は非常に単純な形になり、 解への収束は非常に速くなる。 これは中心極限定理によるユニバーサリティの現れである。 このように大サンプル数の確率論的な機械学習はほとんど確実に成功する。
(参考:4月5日 なぜGoogleはうまく行ったのか)
▼ 予言ができないような理屈など、後付けの議論に過ぎない。
環境省は家庭から出る包装容器やレジ袋などプラスチックごみを「燃えるごみ(可燃ごみ)」とし、自治体に焼却処分を原則義務付ける。うむ。プラスチックの分別は洗わなきゃならないし、 シールをはがしたり手間がかかる割には、 どうせ大抵はマテリアルとしてはリサイクルできなくてRDFとして燃やすだけだし。 ここみたいに結局「燃えるごみ」と一緒に燃やしたりするところもある。 こういう費用対効果の小さな「環境に優しい行為」には なんか理不尽なものを感じている。
ここ和光市がどう処理しているかは分からないけど、 あんなに面倒くさいことをやらせるからにはどのように処理しているのかは 公開するべきだよな。
▼ 有楽町のおしゃれな町並みのなかでシャツの片肌が脱げた人をみた。 誰かに裾を引っ張られて左肩だけだらしなく脱げたような感じ。 下には白いTシャツを着ていた。 彼女らしい美人さんが一緒にいたので、単にうっかりした人と 言うわけではないのだろう。
バカな、これが最新のオシャレだというのか!?
▼ とあるレビューに出てきた "Although attention and reward are distinct concepts," という一節に引っ掛かりを感じた。最近問題になりつつある話題でもある。
脳の中に報酬に関連した活動が見られる。 また注意に関連した活動もみられる。 多くの実験ではこの二者が混同されている。 報酬が予測されれば注意レベルが上がるわけで、この両者が 区別しがたいくらい相関しているのは当然だ。だから区別しにくい。 しかし、これらは違うものなのだからきちんと分離することは大切だという のが先の一節の意味な訳で、まったくその通りだとは認めざるを得ないけど、 やっぱり違和感を感じる。
さて、科学は積み重ねの業であって、その中でも最も長い 積み重ねによって最も遠くまできたものが物理学である。 なぜ積み重ねが出来たかというと、 それはソリッドなそして明白な定義による区別しか認めないからだ。 誰でもわかるようなそして即物的な区別しか理論体系の中で認めないのだ。
しかし、件の注意と報酬(の予期)の区別には、 即物的な実体も無ければ、誰にでも分かるようなソリッドさもない。 このような明解に定義できない事柄に対して区別をすることを 強要し続けるのは、むしろ科学としては不健全なことになる可能性がある。 かといって、明解に定義できない区別を一切認めないという立場をとってしまうと 記憶、感情、予測、評価などの明らかに存在するものを無視した 行動主義の猖獗の間違いがまた再現するわけだし、 どうもこのあたりには歯切れのよいことは言いにくい。
望むらくは、今は明確な基準のない区別がそのうちきちんとした 基準のある区別になっていくことであるが、脳にはそれは期待出来なさそうな 気もする。
▼ 例えばエアコンを考えてみよう。 人間のスイッチの操作によって動くのだが、 温度を検出してモータ出力を変えたりするような複雑さをもっている。 スイッチからの入力は沢山のトランジスタを通って 温度や電源電圧などもろもろを加味して加工されて 初めてモータの駆動に使われる。 途中には沢山のトランジスタを含む複雑な回路が挟まれている。
たしかに、人間のスイッチ操作とモータの動きはかなり強く相関しているだろう。 しかし、スイッチ信号とモータ駆動信号は違うものだ。 二者が強く相関していて、一方が他方を駆動して、しかし異なったもので あるという点で、これは脳の中の報酬と注意の例に似ていないだろうか。
中間のあたりの回路からとりだした信号は 当然スイッチ信号とモータ駆動信号の中間的性質をもっているが、 それをみて技術者が「これはスイッチ操作を表す信号なのだろうか、 それともモータ駆動を表す信号なのだろうか」と悩むことはない。
つまり、その種の疑問に答える必要はない。 技術者は別の方法で対象を理解してる。 「この信号が、この回路でこうなって次に・・・」 という即物的な事実と因果だけで思考している。 機械を理解し、また設計するには、先の疑問のような機械を外からみた人が 言葉で考えるような疑問と区別はなんら必要ではない。 異なった方法で思考するのだ。
▼
ただいま所内にコンピュータウィルスが蔓延しております、
ただいまコンピュータセンターのスタッフが防戦中です(意訳)、
というような意味の所内アナウンスが流れていた。
普通の会社でも同様なんだろう。
なんだかサイバーな世の中になった物だなと変に感心した。
ミラーシェードのハッカー達ではなく ネクタイ締めたリーマン風の人たちが電子攻防戦をやっている という点が現実とフィクションの違いというものなのだろう。
▼ 最近、予告通り更新が滞っていますが、仕事に打ち込んでいるのだと理解して下さいな。 先週はサマースクールの講義を聞いたり、それ関係で飲みに行ったりで 時間がますます足りなくなった。
▼ cipherでmemoize。
例えばFibonacci数をもとめる関数を考える。
fib(n) = if(n==0) 1
else if(n==1) 1
else fib(n-1)+fib(n-2)
これは計算量が2のn乗に比例して、時間がかかってしまう。
で、
define Memo(fn){
mem=assoc()
x -> if( inassoc(mem, x) ) mem[x]
else mem[x] = fn(x)
}
この関数Memoは凄いぜ。どんな関数でも
fib = Memo(fib)
とMemoを通すと、一度計算した値は記憶して二度計算しない関数に生まれ変わる。
で、Fibonacciならば、線形の時間で終わってしまうんだ。
(7月18日追記:計算量は2のn乗ではありませんね。 確かに、この処理系でこんなに速いはずはないとは思ったんだ。)
▼ 最近cipherの開発が進んでいますが、これは仕事をしている証拠だと思って下さいな。 実験の解析をすればするほど、Matlabに嫌気が差して、 それでやり切れない気分になったときに、息抜きとして自分の言語の開発をして気を紛らわすと。
▼ 東大の宮下○司先生のレクチャーがあった。久しぶりに見たら茶髪になっていた。
▼ たらい回し関数をcipher(自作言語)で書いてみた。
tarai(x,y,z) = if(x<=y) y else tarai( tarai(x-1,y,z), tarai(y-1,z,x), tarai(z-1, x, y))「あおきにっき」による、 たらい回し関数の記述に刺激されたのだ。 たらい回し関数は竹内関数(なんだかしらない)の本来の形であり、 非常に計算的にインテンスでありかつ、遅延評価が 計算効率を非常に上げる(めずらしい)例になっているらしい。
tarai(12,6,0)を計算したところ、2分ほどで終わった。 数年前のコンピュータであるうえ全く最適化していない処理系なのに意外なくらい早いことにおどろいた。 というかそれ以前にスタックがあふれたりリークしてヒープ不足になったりせずに正常に終わったことをほめてあげたい。
しかし遅延評価しなくとも、 こうやったら100倍くらい早く終わった。
tarai2(x,y,z) = if(x<=y) y else { x1=tarai2(x-1,y,z) y1=tarai2(y-1,z,x) if(x1<y1) return y1 z1=tarai2(z-1, x, y) tarai2(x1,y1,z1) }これって遅延評価と同じなのでは?
(3日追記:ちょびっとソースを単純化。)
▼ どうも話がまとまらないけど、うだうだといってみます。
梅田望夫ブログの 「『Google PC世代』という考え方」中に "when e-mail travels within Gmail rather than across the Internet" という一文があって、この一文に衝撃を受けた。 もちろん本文の趣旨とは違うところで、反応していることは分かっている。
分散的な構造をもつインターネットを飛び石づたいに伝搬するというのが 私のメールのイメージだったけど、 一つ所のサーバで完結するGmailのようなイメージというのを 考えたことがなかったので意外な感じがしたのだ。 そして考えたことがなかったと言うことにも驚きを感じたのだ。 そしてそれは実は案外トラフィックの意味でもそれほど悪くない。
さて話変わって、 もし仮に全世界のユーザの何割かがgoogleの検索エンジンをつかっているように、 もし全世界のユーザの何割かが単一のメールサービスを使う日が来たとする。 すると、単に「あらかじめメーリングリストの許可を得ずに 1万人以上にメールを出したものはスパム」というような 機械的なルールでスパムを排除できる。 この方法はいろいろ提案されているスパム対策のどれよりも強力でかつ正確だ。 複雑なスパムフィルタのアルゴリズムよりも単純なあし切りのほうが より正確だということは面白い。
これは、サンプル数が巨大であれば単純なアルゴリズムのほうが、 サンプル数の少ない場合の人工知能的な複雑なアルゴリズムよりも ずっとうまく働くということだ。 一方、ページランクがうまくいった理由もサンプル数の巨大さである。 つまりgoogleのふるさととも言える。 Gmailがスパムフィルタをするかどうかは知らないけれど、 それはgoogleの本質とすごく近いことなんじゃないかな。
さて、さらに思考は流れて、知能の本質などにも考えが及ぶ。 google検索を初めて使ったとき 「確かにこのアルゴリズムはページの価値を判断できているように見える」 と思ったものだ。しかしそのアルゴリズム自体は価値を見ているわけではない。 自分で考えているわけじゃなくてリンクなどの外的な手がかりを つかってもっともらしい行動をしているだけなのだ。 これがgoogleのアルゴリズムがうまくいったもう一つの理由である。
この二つは一見知的な振る舞いを機械的なアルゴリズムで実現する 秘密のようなものな訳だけど、 人間の脳も案外その程度のものかもしれない。