Quantcast
Channel: 長文日記
Viewing all articles
Browse latest Browse all 511

人類の妄想が生み出した数学は最強の道具である

$
0
0

https://i.gyazo.com/f0482cc3dbf7e4f508fd4c48cf9a8b7b.png

 昨夜はARCの風雲児こと、坂口和彦くんをゲストに迎えて、「【定理証明スペシャル】Congruence Closureアルゴリズムによる等式の自動証明」と題したニコ生を放送した。(タイムシフトはこちら→http://live.nicovideo.jp/watch/lv290429623#1:06:20)


 ムチャクチャ専門的な話だと言うのにいつも以上に来場者が来て盛り上がった。まあ世界には自動証明業界というのが存在してるらしいから、自動証明にアツい眼差しを送る人たちが見に来てくれたんだろうと思う。


 実は坂口くんとの付き合いはかれこれ6年にもなる。

 彼が最初にUEIにやってきたのは2011年で、その時ぼくは当時の優秀な若者を集めて、仕事は与えず好きにさせるという育成プログラムをスタートさせた。


 その結果、enchant.jsが生まれ、9leapがうまれ、enchantMOONが生まれたわけだけど、全てのメンバーがなにかお金になる成果を出せたかというともちろんそんなことはなかった。これらの製品群は彼らがのびのびと自分の好きなことに打ち込む姿を見ながら、僕がある程度はマネタイズに関してコントロールしていった結果である。


 その中でも坂口くんは異端中の異端だった。

 彼は最初、型推論が好きだ、という話をしにやってきた。

 筑波大学に進学したばかりで、型推論の同人誌を書いているという変わった人だった。


 X-Windowのウィンドウマネージャですら自らHaskellで書いてた(Xmonadというツールを使う)。


 坂口くんの言ってることは抜群に難しくて、僕はとりあえず「世の中には(当然)僕に理解できないことがあるんだなあ」ということを確認させてくれるという役割を果たしてくれる彼のことを大事に思っていた。


 それからも時々やってきては、社員を相手にムチャクチャ難しい話をしてくれて、その度に受講した社員一同が「ああ、この人はこんなに頭がいいのに、僕達に必死で自分の専門分野がいかに面白いか伝えようとしてくれてるんだなあ」と思った。



 彼の今の専門は自動証明である。


 自動証明とは、数学的概念を自動的に証明する一連の技術のことだ。

 

 技術であるのにもかかわらず、我々には本質的に何が起きているか、この五年間全く理解できなかった。

 というよりも、それが一体どんなことに応用可能なのかさっぱりわからなかったのだ。


 春から博士課程に進む坂口くんは、よくわからないが国からなにかの給金を貰う立場になったらしく、春以降は不定期のアルバイトであったARCでの勤務を続けられなくなった。


 それで、彼は最後のご奉公とばかりに熱心に筑波からARCに通ってきて、「まだお役に立てることがあると思う」といろいろな話を僕らにしてくれたのだけれども、残念ながらあまりにも高度すぎて僕らにはチンプンカンプンだった。


 ああ、頭が良すぎるってそういうことだよね、と思った。

 僕は一生、彼の言ってることが分からないんだろうと思っていたのだが、一所懸命、高度な知識を授けてくれようとしてくれる坂口くんには感謝していた。悪いのは我々の頭の方なのだ。


 そして坂口くんが最後に示した「お役に立てそうな知識リスト」として4つくらいのリストが渡された。残念ながらどれを見てもなにが有用で、なにがそうでないのか、僕の頭にはまったく浮かばなかった。まがりなりにもこれまで五年間、断続的とはいえ給料を払ってきてるわけだから、少しでもマネタイズに繋がることを考えるのが僕の仕事である。しかしほとんどなにも思い浮かばなかった。


 「もうこれはニコ生だな」


 それくらいしかなかった。


 そこで坂口くんはゴトーと一緒にニコ生の準備に取り掛かり、テキストとメモを用意した。


 果たして、定理証明で二時間の番組は成立するのか。

 

 すると奇跡が起きた。

 それはもう、ほとんど奇跡と言ってよかった。


 なにせ、この五年間、何度聞いても想像の範疇の外にあった定理の自動証明のアルゴリズムが、これ以上無いくらい明快に説明された結果、僕達全員が、坂口くんがこれまで何に打ち込んできたのか。どのように実装されてきたのか、どうしてそれを研究する意味があるのか、ということがこれまでで一番良く理解できたのだ。


 これは、坂口くん本人が成長したという要素が大きい。

 彼は最初、全く無意識に数学の、しかも記号論の数学記号や用語を使って説明するということを繰り返してきた。しかし我々は数学の専門家ではないので、そもそも用語も概念も記号の読み方さえわからない。そういうレベルの人間を相手にしているということが彼はわかってなかった。たぶん大人というものに対してある種の期待があったんだろう。でもごめんな、俺たちはそういう話題はなにもわからないんだ。


 坂口くんの説明は年々わかりやすくなっていった。


 ただしそのわかりやすさは、初年度が1%だとすると二年目は2%とか、そのレベルの進捗なので、本当に僕らの理解度が進んだかというと疑問である。



 昨年、つまり4年目の説明は飛躍的にわかりやすくなり、彼の説明する「プレスバーガー算術の決定可能性 - 有限オートマトンを使う証明の形式化(http://logic.cs.tsukuba.ac.jp/~sakaguchi/slides/tpp2015.pdf)」は50%くらいはわかった気がした。これはもう大躍進と言っていい。


 まあ彼自身にとってそれは2015年の研究で、2016年の年末の段階では本人的にも説明がこなれてきたという面もあったのだろう。


 しかし昨日のニコ生の説明は、理解できた度を言うとすれば、90%くらいだ。いやほんとは100%と言いたいところだけど、本当に100%か確認しようがないので90%としておく。


 僕は昨日の説明を聞いて、少なくともUnion-Findアルゴリズムは自分で実装できると思ったし、自分で証明式から有向グラフを描いて自動証明することもできそうだと思った。坂口くんの説明を聞いていて、自分で実装できそうだと思ったのは初めてだったし、プログラマーにとって自分でアルゴリズムを実装できるというのは、その理論をある程度は理解したことを意味するので、僕にとっては大きな前進と言えた。


 そしてUnion-Findアルゴリズムと、その応用である合同閉包(Congruence Closure)アルゴリズムを何か実用的なことに応用できそうな予感がした。


 そしてこの五年間、坂口くんが夢中になり、そしてどうにかして僕達にその有用性を伝えたかったことが一体なんだったのか、その全貌が半分くらいは分かった気がした。


 数学的知識が全くない人間たちに、ごくわずかなルールの説明だけで自動証明とは何たるかということを理解させる。これは成人ゴリラに絵の描き方を教えるくらいには難しい仕事で、坂口くんにとってはいかに僕らの(低い)知的レベルに合わせられるか、僕らにとってはいかに坂口くんの展開する高度な理論を理解するか、という、ボトムアップとトップダウンの知恵比べであり、それが五年の歳月を経てついに完結したのだ。



 今日、僕は彼がARCの門を叩いてくれたことをとても感謝している。

 坂口くんの研究についてもっと知りたい人はぜひ彼のWebページを見て欲しい。

Kazuhiko Sakaguchi

http://logic.cs.tsukuba.ac.jp/~sakaguchi/

 そして改めて、人類が自らの妄想の中だけで生み出した数学という宗教体系が、かくも強力なツールであることを思い知った。


 僕達プログラマーは数学が得意と思われているが、実はぜんぜんそんなことはない。

 良いプログラムを書く能力と、数学的スキルは全く関係性がない。賢い主婦は訓練次第で良いプログラマーになる可能性があるが、それまで全く数学的経験のない主婦が訓練を積んで数学的才能を獲得して数学者になるのは極めて難しい。


 プログラムというのは基本的に極めて原始的なものなので、小学生でも作れる。実際にぼくも作ってきたし、今、秋葉原プログラミング教室には沢山の小学生がいる。


 犬の調教ができる程度の知能があれば誰でもプログラムを書くことはできる。しかもいいプログラムを書くことさえできるだろう。



 誰でも書けるからこそ、レベルの低いプログラムを書く人も現れる。しかし良いプログラマーになるために必要なことは数学的才能があることというよりも、プログラムそのものを書き、メンテナンスした経験があるかどうかという問題で、これはきちんと継続すれば才能の有無に関わらず殆どの人が身につけることのできる能力である。



 僕はプログラマーの中では比較的数学を使う、3Dプログラミングやディープラーニングを専門にしている。が、ここで扱う数式はぜんぜん難しくない。非常に単純なもので、プログラムに落とすとびっくりするくらい単純で驚く。


 例を挙げると、ディープラーニングで使うソフトマックス関数を数式で書くとこんな感じ


https://i.gyazo.com/2c922592944ddd248c7c722e7fbdf8e1.png


 数学が苦手な人はもうシグマ記号とかギリシャ文字がでてきた段階で「うえええ」となって脳が読むことを拒否する。


 さて、プログラムでのソフトマックス関数の実装をChainerから引用すると(コメントは筆者)

    def forward_cpu(self, x):
        #与えられた入力ベクトルx[0]の最大値を他の全てのベクトル成分から引いてベクトルyを作る
        self.y = x[0] - numpy.amax(x[0], axis=1, keepdims=True) 
        #ベクトルyの全ての成分について指数を求めてベクトルyを更新
        numpy.exp(self.y, out=self.y) 
        #ベクトルyの合計値でベクトルyを割る
        self.y /= self.y.sum(axis=1, keepdims=True) 
        #ベクトルyを返す
        return self.y, 

http://docs.chainer.org/en/v1.2.0/_modules/chainer/functions/softmax.html


 このようにシンプルに書ける。

 なぜ数式よりもプログラムの方がシンプルになるのかというと、数式というのはだいたいにおいてまず「状態」や「関係性」を示し、その上でその状態や関係性がどのような振る舞いをする可能性があるか、ということを「解く」か「仮説を証明する」ことを目的としている。


 要するに数式は、すなわち読み取る側に相当な知性を要求する。


 プログラムが示すのは単純な手順なので、ある数式をプログラムに変換できるとき、そのプログラマーは数式を解いたのと同じことになる。


 数式の面白い性質は、見る側に知性を要求するのは間違いないが、読み取れるようになると読み取る側は単なるマシーンと化すところだ。


 当然ながら数式というのは全世界で全く同じルールで運用されなければ意味をなさない。したがって数式を読み解くとき、その式の意味するところは絶対不変であり、読み解くという動作そのものは高度な知的理解や数学的前提知識を要求するが、結果や過程はほぼ誰が解いても同じになる。


 つまり数学的素養があるというのは、まず第一に、数式を読み解くマシーンになれる人間、いわば非常に生物的ではない、マシーンとしての人間になる必要がある。ほかの下等生物も本能というプログラムに従うマシーンであると見做すことが出来なくないが、犬は猫の真似をしたりしないし、計算機の真似はもっとできない。数学者は数学という妄想上の理論体系を完璧に理解し、過去の数学者と数式に関する前提知識や見解を完全に一致させたところから数学者としての人生がスタートし、その上でまだ見ぬ深淵の世界を探っていく。


 しかしルールに完全に従うというマシーンとしての性質を人間に要求する理論体系でありながら、実際に数式を理解するコンピュータを作るのは至難の技である。その「至難の業」に至る過程のひとつが、おそらく「自動証明器」なるものになるのだろう。


 コンピュータと人間と数学の間に位置するのが自動証明器で、自動証明器の研究が進めば、人間が生み出した最強の思考ツールである数学をコンピュータが自在に使えるようになる。


 もうひとつ付け加えるとすれば、今のコンピュータは数学を応用することはできるが、数学を道具として使うことはできない。それはディープラーニングだろうが同じである。


 どういうことかというと、いまの小学生はスマホのGPSで現在地を把握できる。これは、相対性理論の応用例であるが、応用を使うのは非常に簡単である。誰かがややこしいところを考えてくれたからこそ、小学生はGoogleMapを開くだけで現在地がわかる。


 しかし、もちろん彼らが相対性理論そのものを道具として使って、なにかを生み出すのはとても難しい。ピタゴラスの定理くらいなら小学生でも理解できるし道具として使うこともできるが、相対性理論を応用して現在地を割り出すにはもっと高度な数学的前提知識が必要になる。


 プログラムは、あらゆる知識の応用手法を提供する。プログラムになった時点で誰にでも応用可能な形式になっていると言い換えてもいい。それがプログラムの強さであり、誰でもプログラミングできる世界の出現が、誰でも数学的素養を持つ世界の出現よりも容易であると僕が考える根拠でもある。


 しかし、あるアルゴリズムを作り出すときに、数学的素養が必要になる場合がある。先程のソフトマックス関数の式を見せられたときに数学的素養がないとプログラムへと変換できない。プログラムに変換された瞬間からそれは数式の応用手法のひとつとなり、誰でも使うことが出来る。つまりソフトマックス関数の数式が理解できなかったとしてもソフトマックス関数を呼び出して応用成果を得ることは簡単にできる。小学生にさえできるだろう。


 仮にいつの日か完全な自動証明器が完成したとしよう。

 そのときコンピュータは、ついに道具として人類が生み出した最強の宗教体系である数学を自分のものにできる。


 機械学習の対極にある考え方が数学であると言い換えてもいい。


 機械学習の根底にあるアイデアは生物学だ。生物の神経細胞を単に模倣しただけなんだから。それが深層化することで爆発的に進化したのが今のディープラーニングである。


 一方で、ディープラーニングにも限界がある。それは、生物のようにしか振る舞えないということだ。つまりディープラーニングだけでは、犬猫や九官鳥程度の知性を獲得することはどうやらできそうだということは分かっているが、論理的な知識構成や理論構成をすることはほとんど不可能である。


 論理的な話を「しているかのように振る舞う」ことはもしかしたらできるかもしれないが、実際にその論理が正しいかどうか検証する仕組みがないし、それを解明できる段階にはまだ来ていない。


 もちろん人間の頭を構成する自然知能が、後天的学習によってそれを獲得できているのだから、長い目で見れば深層学習でも論理的な概念獲得ができる可能性はゼロではない。実際に、プログラムのソースコードを読ませてその結果を学習させるというムチャクチャなタスクでもそれなりの精度が出るらしい。


 しかし数学は、大半の人間が苦手意識を持つように、そもそも非人間的、非自然的な概念体系であり、それは数千年に渡る論理的妄想の積み重ねによって成立している。少なくとも自動証明器の研究は単なる数式の応用ではなく、数学そのものを機械が応用可能にするかもしれないという点で非常に価値が高い。


 要はこういうことだ。

 ある人がなにか言っている。


 「女ってのはだいたいさあ、わけのわからないもんなんだよ」


 「でもそうとは限らないでしょ」


 「そうとは限らないけど、だいたいわけわかんないんだよ」


 「それで、チョコレートいるの?いらないの?」


 「いや、そりゃもちろん欲しいけどさ、ホワイトデーにどうせまた無駄に高いもの寄越せっていうんでしょ」


 「んー、ちょっとお財布がさあ、前に買い変えたのって随分昔で、ちょっと古くなってきちゃったんだよね。・・・ねえ、こんど海外出張行くって言ってたよね。2万円くらいの安いのでいいからさ」


 「なんで200円のチョコレートと引き換えに免税品で財布買ってやらにゃならんのだ」



 このろくでもない会話をAIが聞くとする。

 

 この会話を聞き取るのはディープラーニングの仕事だろう。完璧には聞き取れないだろうが、まさしく完璧に聞き取れないからこそ、自動証明器が矛盾を発見して、聞き返したりすることもあるだろう。


 次にこの会話を自動証明器を持つAIが数式化する。なぜなら自動証明器を持つAIは数学を道具として実際に使用することができるからだ。


 女✕200円 = 男✕20000円

 女 = 男✕100 


 つまり女は男の100倍の価値があることがわかる。いや、こんなこと分かっても仕方ないけど。もしかするともっと高度なAIは、この男と女の収入格差などから相対的には女の200円と男の2万円にはそれほど大きな差がないことをみつけ、証明するかもしれない。


 男はそれを証明されると仕方なく従うしかない。

 数学が苦手な女性は多いが、こういうAIがスマホに入っていれば数学を利用してチョコレートの価値を100倍化できるようになるかもしれない。しかも極めて論理的に。詳しい説明はAIにしてもらえばいいのだ。


 ともあれ、長年の謎がとけたという喜びと、この分野が切り拓くであろう将来性への期待と、両方が得られてとても良い日になった。


 ちなみに数学を理解したくなくても数学にはどんな考え方があるのか知りたいという人には、数学史を学ぶのがオススメである。


 簡単なものから本格的なものまであるが、そもそもなんで数学にはこれほど沢山の道具やジャンルがあるのかということを知っているだけでも、なにか得をする気がする。


 この二冊は僕も買った



Viewing all articles
Browse latest Browse all 511

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>