人間の理解やものづくりと、進化が生み出す物について考えていたこと

この記事は、ISer Advent Calender 2022 12/19の記事になります。

adventar.org

とは言っても、実は書いたのは結構昔になります。下書きにたまっていました。書いただけで自分としては満たされて公開しなかったパターンですね。さすがに2日連続で記事を書くのはきつかったので(連投してる人すごすぎる)、ちょっと直しつつこれを放出しようと思います(前日の記事はこちらです)。ポエムなのですがどうか許してください…。

みなさんこんにちは。お久しぶりです。
2Sセメスターももう終わろうとしていますね。

このセメスターは取った授業は少ないもののiGEMや未踏で本当にバタバタしていました。このことについてはまた今度書くかもしれません(書かない気がします)(12/19注: 書きませんでした)。

本当はこんな記事も書いている時間も無いはずなんですが、進振りも近いですし「自分が何をやりたいのか/やるべきなのか」を考える機会が多く、この辺りで一回まとめて、自分でも自分のことを分かっておいたほうがいいだろうと思って書くことにしました。

また、このようにブログ記事として公開するのは、他の人とも共有したいという気持ちもあるからです(12/19注: 公開してなかった人が何を言っているんだ)。私としては自分が興味を持っていることはもっと多くの分野で普遍的/本質的なことかもしれないと思っています。文学部に行った友人と話してみたら話が合ってしまったこともありました。この記事を通じて、異分野の人でも興味を持っていただけると嬉しいです。

「硬いプログラム」と「やわらかいプログラム」

私は「硬いプログラム」と「やわらかいプログラム」を対比的に捉えるのが好きです。どちらかというと、やわらかいプログラムのほうが好きで、それを硬いプログラムと比較することで、それがどんな性質を持っているものなのか浮かび上がらせることに興味があります。まずは「硬いプログラム」「やわらかいプログラム」が何を指しているのかについて説明しようと思います。大まかに言うと「硬いプログラム」はコンピューターで「やわらかいプログラム」は生物に当たると考えていただいて構いませんが、少し違う面もあります。

硬いプログラム

「硬い」という言葉で私が想定しているのは、物事を分解的に見て、できるだけ厳密な論理で理解しようとしたり、何かを作り上げようとしたりすることです。コンピューターはこのような営みの最たる成果だと思います。チューリングマシンは「計算」という人間の行為を厳密に観察し、定義したものです。それを元に緻密に設計し、正確に動くよう作られたものがコンピューターだと思います。少し範囲を広げると、形式論理や型理論も「硬い」という言葉で捉えています。情報科学との関連もそうですが、自然言語などにみられる論理構造を分解し、厳密に理解しようとしたものが形式論理でしょうし、型理論は数学を厳密な論理で構築していく上で有用になっていると思います。

やわらかいプログラム

「やわらかい」という言葉で私が思い浮かべているのは、誰が設計したわけでもなくて、よくわからないものだけど、なんか上手くいっているようなものです。更に、環境との相互作用を活発に行い、それ自体が変容していくようなものです。生物が最たる例でしょう。生物と言ってもいろんなレベルで当てはまると思いますが、私が一番思い浮かべやすいのはDNAレベルです。iGEMでは合成生物学をやっていて、今年は酵母のゲノムを「プログラム」して目的の機能を実現させようとしています。合成生物学の場合はこのように目的を持って生物をプログラムをしようとするのですが(その意味では生物を「硬い」設計論理に従わせようと頑張っているのですが)、本来酵母のゲノムは誰が設計したわけでもありません。厳密に、正確に、パーツを組み上げて設計されたコンピューターとは大違いです。それなのに生物が上手くいっていることは身の回りでよく分かることで、大変興味深いです。またそのように設計者はいないものの、塩基配列はまさに「プログラム」と言えるような制御構造が現れており、下のツイートで述べたようにある意味でイベントドリブンプログラミングだともいえ、面白いです。

自然言語も同じように、「日本語とは、これこれこういうものとする」と誰かが定義したようなものでもないのにこれほど豊かで、さらに言葉のやり取りによってどんどん変容していく対象であり、面白いと思います。

硬いプログラムとやわらかいプログラムの対比

この2つを対比的に捉えている分野は様々あると思います。いくつかを挙げたいと思います。

コンピューターと生物

コンピューターと生物がこの対比に重ねられることは先ほど書いた通りです。ここではそれらを融合したアプローチをいくつか紹介したいと思います。コンピューターで生物を模倣するものは、機械学習遺伝的アルゴリズムなど有名なものが多いと思うので詳しくは省略します。生物でコンピューターを模倣する、つまり生物に「硬さ」を持ち込もうとするものは、合成生物学がまさにそうですが、より私が詳しく興味を持っているものだと次のようなものがあります。

CRISPR-Cas9という生物のシステムがあり、ゲノム編集などに活用されているのですが、それを少し改変したものでdCas9というものがあり、これは遺伝子の転写制御に使えます。モジュール性が高く、これにより複雑な回路をシンプルなパーツの組み合わせで構築することができます。NORゲートを比較的簡単に構築することができ、これを組み合わせることでAND, OR, NAND等の様々なゲートを生物の中で構築することが出来ます。このアウトプットは「遺伝子の発現」にすることができるので、「こういう環境の条件の時に、この機能を生物に持たせたい」といったことをより精密に行うことが可能になります。

(このツイートはXORでなくNORでした、ごめんなさい)
このツイートの画像ではアウトプットはGFP(緑色蛍光タンパク質)の発現なので、電子工作で言えばLEDを光らせるみたいな感じです。

元論文はNature Communicationsにあるので、どなたでも読むことが出来ます。
Digital logic circuits in yeast with CRISPR-dCas9 NOR gates | Nature Communications

「これで加算器をつくれないか」と友人に言われました。現段階では組み合わせられるゲート数に制限がある(徐々に誤差が溜まってしまう)ためできませんが、将来的にはできるようになるかもしれません。夢がありますね。

他にも、生物の遺伝子発現を記述するプログラミング言語を作るという取り組みもあります。MITのVoigt研などがやっているそうです。紹介ページにも「The first is focused on the development of a programming language for cells.」と書かれています。私もiGEMで生物版スクラッチのようなものを開発中で、とある高校向けの授業で用いたり、iGEMで知り合った方と協力して開発したりしています(これについては今度書くかもしれません、書かないかもしれない)(12/19注: これはいずれ書こうという意志があります)。

この前退官された理学部情報科学科の萩谷先生が専門の「自然計算」も近いのかもしれません。DNAコンピューターなどを研究されていたそうです。ただ、「生物で」というより「DNA分子で」と計算をするという印象があります。

情報認知科学

2Sで取っていた授業ですが、そこでも知能を「硬いもの」として捉えるか「やわらかいもの」として捉えるか、に近い話題がありました。前者は「計算と表象」に基づいた古典的なフレームワークで、知能をコンピューターメタファーの中で捉えます。脳の中に記憶装置、処理装置などがあると仮定していく立場でした。そして固定された表象に計算を施していくという風に人間の知能をとらえていました。この立場だと、「環境との相互作用」や「知能が変化していくさま」が上手く掴めないので「生物学的シフト」が生じて、後者のように考えられるようになりました。知識は予めStaticに貯蔵されているのではなく、使われるたびに環境との相互作用の中で構築されるという「生成性」や、またその構築のされ方も「もの」として作られるというより、様々な感覚の活性パターンによって生じるという「イベント的な知識観」などが印象的でした。

自然言語処理

自然言語にもこの対比は当てはまると思います。自然言語処理の界隈では「古典的計算主義⇔コネクショニズム」という軸があるようです。昔の人工知能研究では、「自然言語の諸現象は形式的な論理で説明できる」と考えられていることが多いイメージがあります。ですがそれだとなかなかうまくいかないことが判明したようです。膨大な数の規則が必要という問題もあるほか、言葉の意味はどんどん変わっていくので、そのような変化に対しいちいち「各単語固有の文法規則」をアップデートしていくのは無理があります。また、そもそも自然言語で形式的に表現できる部分はサブセットに過ぎなかったという話もあるそうです。そのため、統計的な自然言語処理ディープラーニングベースの、コネクショニズム的な手法が今の主流なのだと思います。ですがそれだと今度は論理的な意味の把握に弱くなってしまったので、「硬いアプローチ」と「やわらかいアプローチ」の融合が模索されている、と聞きます。

(この分野については知らないことが多すぎたので、自然言語処理専門の先輩に教えていただきました。)

ウィトゲンシュタイン?

ウィトゲンシュタインの思想にも、「硬い理解」⇔「やわらかい理解」という対比が見て取れる気がします。そんな書けるほど詳しくないので出しゃばりすぎないようにしますが、前期の思想では自然言語の文は(自然言語処理の古典的計算主義に似てる気がしますが)世界を記述する命題として捉えられているイメージがあります。その上「論理空間」などの概念を緻密に定めて「語りえないもの」を導出しようとしている印象があります。そのため「硬い」イメージがします。後期の思想は「言語ゲーム」という、日常での言語使用の場面場面を重視し、その中で習得していくものとして言語を捉えているような気がして、環境との相互作用などを重視しているイメージから「やわらかい」感じがします。

まとめ

今よくやっていること等の関係で情報と生物の内容が多くなってしまいましたが、それ以外の分野でもこの対比は当てはまるということが分かっていただけたのではないでしょうか。

ほかの分野の専門の方にはあまりにも緩いアナロジーになってしまったかもしれず、申し訳ないです。興味はあるので、詳しく教えていただけると嬉しいです。

12/19追記

今読み返すと、対比だけ構築しておいてあとは何するつもりなんだ…!みたいな感じで、ちょっと消化不良の方もいるかもしれません。ごめんなさい。

今の私の興味としては、「硬い」「やわらかい」のどちらかにつくというよりは、両方を通貫するようなことを研究してみたいなという興味があります。

具体的には、「記号列」はまさにそうだと思います。プログラミング言語のように厳密に定義されたもの(硬いもの)もそうですが、やわらかそうな自然言語やDNAも同様に形式言語として捉えられる側面が大きいです(塩基配列でいうとRNAの構造解析などに役立つらしく、「実用的」でもありちょっと驚きました)。形式言語理論の授業が始まってみると、思いのほか面白かったというのは大きいです。今リアルタイムでは群論の言語の話がかなり自分の中で来ています(昨日書いたMuller-Schuppの定理はアツいですね、本当に)。これは「硬い」方だと自分では思います。

また、(「硬い」設計論理で重要になってくる)「理解」とは何なのか、必要なことなのか、といったことにも興味があります。これは最近もよく考えていることなので、考えがまとまったら記事にしたいです。進化は「理解する」主体者のようなもの無しで物を生み出しているわけで、それでもこんなに上手くいっているのはやはり不思議です。理解するという営みは、高次元の現象を低次元に圧縮してコンパクトにするようなことなのかなあ、という風に考えています。だから、高次元のまま何かができればそれに越したことはないのかもしれないです。私としても、頭で理解しようとして逆に動きや直観が悪くなるようなことはたまにあります。ここら辺のことは今頭に浮かんだことを書き連ねているだけであまり論理的ではないですが、いずれうまく言語化できるようになってきたらまとめたいです(それも低次元化して理解しようとした結果ということではあるのですが)。

理解と記号列の話は別々の話ではないです。記号列の形でものを認識するということは人間が何かを理解するということと深くつながっているような気がします。プログラムや自然言語など人間の生み出すものや認識するものが記号列の形を成しているのは人間の理解可能な範囲に収まる必要性からなのかもしれない("1次元"の記号列として)と考えていて、そのように考えることは可能なのかとちょっと考えています。ですがDNAも1次元の記号列の形をとっているのは不思議ですよね。もっと複雑な構造で塩基配列を記憶していても良かったのに。これらのものが1次元の記号列の形になっているのは、もっと他の制約(理解などとは別)からきていることも多いのかもしれません。

今までのブログなどの記事では書かないくらいのスピードで頭の中に浮かんだことを書いたので、だいぶ色んなことが飛んで行ったりしているかもしれないのですが、ここら辺のことはまたいずれ整理して書きたいです。その時はまた、お付き合いいただきたいです。