見出し画像

複雑系を生む反復:loop( x = f(x) )の世界

私はシステムエンジニアの視点から、生命や知性について考えています。個人研究として最近の大きな気づきとしては、時間に沿って逐次的な繰り返し処理を行うことが、生命や知性の重要な特徴である、というものがあります。

この反復処理に着目することで、生命や知性の共通点や特徴、その成り立ちについて理解を深めて行くことができます。そこで、この記事では、反復処理により生物や知性のような複雑な仕組みが現れることを説明するために、複雑反復というものを定義して、考えていくことにします。

そして、この複雑反復により、最終的には物理的な反復が化学的な反復、生物的な反復、そして知能や言語処理、社会システムの反復へと、階層的な構造が生み出されます。これを、スパースオニオンと呼んでモデル化します。

長文の記事になってしまいましたが、以下、本文に入ります。

■複雑反復の性質

例えば0から1までの実数のようなアナログな値を与えると、同じ範囲の値に変換して出力する関数は、出力を次の計算では引数に与えて計算を反復することができます。

このような関数が、単調増加でなく一部減少する部分を含んでいると、反復によって値が収束せず、変化し続けます。

そして、直線的でなく曲線で構成されていれば、反復の間に同じパターン繰り返すことがなく、様々な値に変化します。

こうしたカオスなパターンは複雑ですが、関数と初期値の組み合わせで、同じパターンを再現できます。

この特性を利用すると、折り返しを持つ曲線関数のパラメータと初期値だけで、無数のパターンを作り出すことができます。

このような反復を複雑反復と呼ぶことにします。

■複雑反復の定式化

複雑反復は非常にシンプルな形で定式化できます。反復を表現しつつ、関数の出力を次の関数の入力するために同じ変数を使うため、一般的な数学の式ではなく、疑似プログラムとして表現すると、以下のようになります。

loop( x = f(x) )

ここでloop()部分は、その間にある処理を繰り返すという事を意味します。そして、x := f(x)がこの定式化の要点です。これは関数fの入力として変数xを与え、その結果を変数xに代入するということを表現しています。

変数xは1つの値でも構いませんし、複数のパラメータを複合したものでも構いません。また、この後に議論するより深い内容を含むことを考えると、このxの中には別の関数を含むことも可能です。

■自己組織化の共通原理としての複雑反復

複雑反復のこの性質は、進化や学習に利用した場合、僅かなパラメータの記憶と再生だけで、非常に多数の複雑なパターンの獲得や学習ができることを意味します。

実際、生物の細胞は外界からの刺激や内部状態への反応として特定パターンの化学反応の連鎖を発生させることで、生命活動を維持することができます。刺激と反応は無数の組み合わせがあり、それを進化の過程で獲得していったと考えられます。

脳も同様に、外部からの情報と内部の知識に応じて、特定のパターンで処理をすることで、必要な行動の実施や文章の作成ができます。情報や内部状態に応じた処理のパターンは、学習の過程で身につけていったはずです。

大規模言語モデルも、リカレントニューラルネットワークの一種であり、前回までの出力をフィードバックしながら1トークンずつ出力する仕組みは、反復によるパターンの学習を利用しています。

このように捉えると、生物の細胞や脳、そして人工知能は、複雑反復を利用して、進化や学習の過程で、刺激や状況に対する適切な反応や処理のパターンを獲得していることが分かります。

つまり、複雑反復は、生物の進化と脳や人工知能の学習の根底にある、自己組織化の共通原理です。

■スレッド

生物や知能において、反復は最初に与えられた初期の刺激や状態への適切な一連の反応や処理のパターンを生成するために利用されます。この一連の反応や処理パターンを生成するまでのひとまとまりの反復を、スレッドと呼ぶことにします。

■状態

反応や処理は、単に次の反復に直接フィードバックされるわけではありません。反応や処理は状態を変化させ、その状態が刺激や状況の変化となって次の反復にフィードバックされます。

状態には、波のように発生しても一瞬で形が変わってやがて自然に霧散するようなもの、次の反復が行われると消失されるもの、そして、触媒や記憶のように一定の時間や一定の反復の回数の間は残り続けるものとがあります。

消滅の条件が時間経過か反復に利用されるかによって細かく分類することもできすが、一瞬や1回の反復で消失するか、複数回の反復で持続に利用されるかという観点で分類することにします。

まず、一瞬や1回の反復で消失する状態を揮発状態、複数回の反復で持続に利用される状態を、持続状態と呼ぶことにします。

反応や処理による状態変化によって形成される状態は、その時点で揮発状態か持続状態かが絶対的に決まるわけではありません。フィードバックされる反復との関連性によって、揮発状態か、持続状態かが決まります。

スレッド内の1回の反復でのみ入力となる状態はそのスレッドに対しては揮発状態となります。また、持続状態は、1スレッド中で持続的に入力されてスレッドが終わると消失する状態を短期状態、そして、複数のスレッドにまたがって持続的に入力される状態を長期状態と分類できます。

■スレッド間の入れ子構造

状態を仲介することで、複数のスレッドが入れ子構造を取る事ができます。

より短い時間で反復するスレッドがあり、それをスレッドAとします。このスレッドAを複数回反復することもでき、それをスレッドBとします。スレッドBの1回の反復は、1回のスレッドAになっているという関係です。これは一般的なプログラムにおける関数呼び出しの関係と同じです。関数Bの内部で関数Aで繰り返し呼び出す様子と同じように、スレッドBがスレッドAを繰り返し反復しているという入れ子型の構造です。

この場合、スレッドAの内部では揮発状態と短期状態をフィードバックしながら、スレッドAの内部の反復が進行します。そして、その結果として形成された状態のうち、スレッドAからスレッドBに受け渡される状態があります。その状態はスレッドAから見れば長期状態に相当します。

一方で、スレッドBは、スレッドAから受け渡された状態は、揮発状態、短期状態、長期状態の何れかの状態として扱う事になります。このため、スレッドAから見た状態の分類と、スレッドBから見た状態の関係は、一致しません。これはプログラムで考えても、関数Aの結果を関数Bに渡した後、その結果がどのように扱われるかは関数Aには無関係であることと同じです。

この様子は、大規模言語モデルを使った会話型AIによるチャットシステムの仕組みで考えると分かりやすいと思います。チャットシステムの場合、ユーザの入力文と会話型AIの出力文の生成の繰り返しは、チャットスレッドと呼ばれています。このチャットスレッドは、上記のスレッドBに相当します。そして、1回の入力文に対する会話型AIが1つの出力分を生成する部分がスレッドAに相当します。スレッドBがスレッドAを反復しています。

そして、スレッドAの中でも、1つの出力文を生成するために会話型AIの内部的には1文字あるいは1単語ずつ出力を生成するという反復が行われます。スレッドA内では揮発状態はなく、1回の反復での出力は短期状態としてスレッドA内で保持されており、次の反復にはスレッドA内の出力は全てフィードバックされます。それだけでなく、スレッドBから呼び出される際に、ユーザからの入力文が与えられており、これもスレッドA内の全ての反復への入力となっています。さらには、スレッドBからは、スレッドB内部の過去のユーザ入力文と会話型AIの出力文の履歴も与えられており、これらのすべて、スレッドAの全ての反復へ入力されています。

そして、スレッドAが出力文を生成し終えると、その結果をスレッドBに引き渡します。スレッドBから見ると、スレッドAからの出力文は短期状態としてスレッドB内部の反復にのみ利用されます。スレッドBが終われば、これらの全ての状態は破棄されます。

同じように、細胞内でも、外部からの刺激によってDNAから特定の部分がRNAに転写、それがタンパク質に翻訳、そしてタンパク質が別の化学反応を引き起こす、という処理が反復されます。これにより、その刺激へ反応として必要な一連の化学物質とその化学反応が生成されます。この中で、RNAへの転写やタンパク質への翻訳も内部的な反復処理が行われています。タンパク質が化学反応を引き起こす部分にも内部的な反復がある場合もあるでしょう。

このように、刺激や状態による反応や処理は、状態の受け渡しを利用した複雑な入れ子構造を持つことができます。

■スレッド間のネットワーク構造

状態を仲介することで、複数のスレッドはネットワーク構造を取る事もできます。この場合、あるスレッドが生成した状態を、別のスレッドが無作為に利用する形になります。この場合、何らかの形で状態を受け渡す共有手段が必要になります。

工場での生産のイメージで例えると、ベルトコンベアのような形で受け渡しができれば、あるスレッドから特定のスレッドにのみ状態を正確に受け渡すことができます。一方で、あるスレッドが生成した状態を倉庫のようなところに置くようなやり方の場合、その状態は別のどのスレッドでも自由にアクセスできます。この場合、タイミングや状況により、受け渡されるスレッドは異なる物になります。さらに、別のスレッドの使用されても状態が変わらないような長期状態の場合は、工場の生産性改善のために新しく便利な道具を作っておく道具箱のようなものです。その道具箱の中の状態は、複数のスレッドが常に入力として利用可能です。

このように、状態を仲介することで、複数のスレッドがネットワーク状に影響を及ぼし合う構造を取ることもできます。

この様子は、先ほど挙げた細胞の中の反応の様子を考えると良く分かります。DNAの一部から翻訳されたRNAは、ベルトコンベアのように移動してタンパク質を翻訳するためのスレッドへと引き渡されます。一方で、翻訳されたタンパク質は細胞に満たされている液体である細胞質の中に拡散されます。それは倉庫に置かれた在庫のようにタイミングによって異なるスレッドでの化学反応で使われて消失するか、道具箱のように残り続けて繰り返し化学反応の触媒として使われます。

人間であれ会話型AIであれ、自然言語を介したコミュニケーションは、会話やメールやメッセージのやり取りであれば特定の相手とのやり取りであり、お互いにやり取りした文章を入力として次の文章を考えるスレッドのネットワークです。また、書類や本、ブログ記事は道具箱のように多数の人の思考というスレッドへ入力されます。また、人間は長期記憶の中に過去に見聞きした文章や自分が考えた文章を記憶することで、それを別の文章を考えたり一人で思考を巡らせるというスレッドの入力に使用することができます。

また、生物の進化の過程や人工知能の学習の過程も、長い反復のスレッドによるDNA配列やモデルのパラメータという長期状態を形成する過程と捉えることができます。この進化や学習の反復的なスレッドから生成されたDNA配列やモデルのパラメータは、個々の反応や処理で常に入力として利用されていると考える事ができます。従って、進化や学習のスレッドと、個々の反応や処理のスレッドも、時間のスケールが大きく異なりますが、ネットワーク状のスレッド間構造の一種です。

このような形で、生物の細胞も脳も、人工知能も、さまざまな時間スケールやタイミング、個体や個人の組合せによって、複雑に絡まり合った複雑反復によるスレッドのネットワーク構造を形成しています。その中で、生物種の進化、個体や個人の短期的な学習や長期的な学習、そして社会としての集合知の形成、技術の発展と便利な道具の生成という形で、長期状態が蓄積され、進歩や繁栄が着実に進行していきます。

■複雑反復のスレッド構造の進化

道具箱のような場所に生成された長期状態は、既存の複雑反復のスレッドで利用されるだけでなく、それ自体が新しい複雑反復を生み出すことが可能です。

長期状態が複雑反復の関数のパラメータとして与えられ、その関数の性質を明確に変化させてしまう場合、それを既存の複雑反復の変化と見ることもできますし、新しい複雑反復へと進化したと捉える事もできます。DNAは知識が書かれた書物を道具箱と捉えた場合、そこに新しく非常に画期的で有用なパターンが記録された場合は、進化と見なすことができるでしょう。

また、そもそもその道具箱であるDNAや書物は、どこから来たのかと考えると、それは元になる別の複雑反復の進化や学習の過程で生み出されたと考える事ができるでしょう。これは道具箱だけでなく、倉庫やベルトコンベアのような短期状態を保管したり輸送したりする仕組みも同様です。こうした状態の保管や輸送の方法自体も、元になる別の複雑反復のスレッドの進化や学習の過程で生成されたはずです。すると、そこに新しい複雑反復が生成されたり、スレッド間の新しい関係が構築されたりする事に繋がります。

入れ子状のスレッド構造も同様です。小さな複雑反復のスレッドがあり、その同じスレッド間で状態を受け渡すことができるベルトコンベアや倉庫が生成されれば、小さな複雑反復のスレッドを反復する、大きなスレッドが生成される可能性があります。

これはチャットAIのように、初めは一問一答型のやり取りだったものが、複数の会話をつなげられるようになった、というようなイメージです。

■駆動構造の進化

このように整理すると、複雑反復が新しい長期状態を生成することで、次々に新しい複雑反復スレッド間の構造が形成されていく様子が理解できます。

この複雑反復を駆動するためには、駆動構造と駆動させるためのエネルギーが必要になります。

人工知能はコンピュータで動作していますので、コンピュータとプログラムが駆動構造であり、エネルギーは電気です。生物の知能は、脳が駆動構造であり、エネルギー源はブドウ糖などの化学エネルギーであり、それが神経細胞で使用され、電気信号や神経伝達物質の生成ややり取りに使用されます。

生物の細胞は、エネルギー源は化学エネルギーや熱エネルギーや光のエネルギーです。これらを使って細胞全体の構造を駆動構造と複雑反復を行います。内部の構造は、これまでの説明した通り、DNAの一部をRNAを経由してタンパク質を生成し、そのタンパク質の作用で化学反応が引き起こされるというメカニズムを実現するための構造が基本となっています。

生物の細胞が、多細胞生物の身体を形成し、高度な多細胞生物が脳を持ち、人間はその中でも最も高度な脳を持っています。そして人間の脳は集団で高度な社会を形成し、言語やコンピュータや人工知能を発明しました。

ここには単細胞生物から人間までの進化、社会の形成、学問や技術の発展の過程があります。その進化や発展も、複雑反復によって支えられています。そしてその過程の中で、複雑反復のスレッド構造だけでなく、駆動構造も進化していることが分かります。

また、細胞が登場する以前の地球環境でも、無生物の化学物質による化学反応の反復が起きており、それが細胞の登場、つまり生命の起源に繋がったと考えられます。そこでの駆動構造は地球の構造そのものであり、エネルギー源は太陽光や太陽熱、地熱、化学エネルギーと考えられます。

駆動構造としての地球は、単に池の中での局所的な化学物質の拡散によるものだけでなく、池の中の水の対流もあります。そして水が川を流れ、海から蒸発し、雲となって陸に雨を降らせるという地球規模の水の循環も含みます。これらは単に化学物質を移動させるだけでなく、再度同じ場所に戻ってい来る形で、ミクロなスケールからマクロなスケールまで様々なレベルの反復構造を形作ります。

このように、反復される場所は地球上に多数あり、それらを駆動構造として、気の遠くなるような年月をかけて、化学進化を徐々に進行させて、細胞を誕生させることができたと考えることができます。

■反復を越えたフィードバック

基本的な複雑反復が繰り返されているうちに、入れ子状に多層的な複雑反復構造やネットワーク状の反復スレッドの構造を形成したり、新しい駆動構造が形成されたりする、という説明をしました。

しかし、なぜそのような複雑なスレッド構造や駆動構造が形成されるのかと言えば、そこにも重要なメカニズムがあります。それは、新しく形成されたスレッド構造や駆動構造が、下位のスレッドや関連するスレッドの反復にとって有利に働く場合があるということです。

この反復の構造を越えて及ぼされるポジティブなフィードバックが働くと、その新しいスレッド構造や駆動構造と、既存のスレッド構造や駆動構造は、いわばWinWinの関係になります。

こうした反復を越えたポジティブなフィードバックが働くような形で、新しいスレッド構造や駆動構造が形成されていくことで、新旧の構造が相互に強化しあうという強力なメカニズムが働きます。このメカニズムに基づいて、スレッド構造や駆動構造は、シンプルな物から複雑な物へと段階的に進化していくことになります。

■会話における入れ子構造の分析

自然言語での会話や思考は、外形的な反復の仕組みは変化しなくても、言語の発明や習得の過程にも、この入れ子構造のような階層的な進化があったと考えられます。

最初は単発的な音や音の変化を使ったコミュニケーションから、音を連結した単語、文法を伴って単語をつなげた文、文脈を伴って文をつなげた文章、という形で言語が進化していき、おそらく既存の言語を学習する過程でも、同様に階層的に学習が進んでいると考えられます。

そこには、前の音から次の音への繋ぎを頭の中で状態として短期的に記憶してその言語特有のリズムを加味して次の音を生成する仕組み、その時点までの単語を短期的に記憶しておき、その言語特有の文法を加味して次の単語を生成する仕組み、そして、その時点までの文の意味を短期的に記憶しておき、文章構造のパターンに沿って次の文を生成する仕組みがあると考えられます。さらに会話の中の文章のやり取りによるさらに広範な文脈を記憶しながら、会話構造パターンに沿って会話を生成していくという仕組みに広がります。

このように、状態と複雑反復を多層的に組み合わせて、自然言語による会話や思考は成立します。このように整理すると、音や文字、単語、文、文章、会話という形で言語に階層構造が現れるのは、内部の複雑反復のスレッドの階層構造の性質を利用するためであると理解できます。そして、それぞれの階層では状態と反復関数が異なっていることが分かります。

上位層になると音や単語自体ではなく意味や文脈のような要約された状態を引き継ぎながら反復が進みます。そして複雑反復の関数も、それぞれの階層で、音の並び、文法、文章構造、会話構造といった異なるパターンを学習して利用しています。

■会話型AI

大規模言語モデルによる会話型AIが、人間と同じように自然言語で会話ができるという事実は、コンピュータによるニューラルネットワークの仕組みにより、人間の言語習得能力は実現できていることを意味します。

そして、自然言語を習得して扱うことは、反復による学習と、反復による文章の生成という形で実現できることが明らかになりました。そして会話型AIが、既に論理的な推論能力や限定的な創作的な能力を持っているという事実は、これらの能力も反復による学習の中で獲得され、反復による会話文の生成という過程の中で発揮されるということも言えます。

自然言語による会話が、先ほど説明したように複雑反復スレッドの入れ子構造を反映している点を考慮すると、自然言語を学習する過程で、会話型AI内のニューラルネットワークの中で、この自然言語の入れ子構造を反映した複雑反復スレッドの入れ子構造が形成されている可能性を示唆します。

ニューラルネットワークは、多数のノードの持つパラメータを長期状態として保持し続けることができるため、その長期状態が擬似的な道具箱や倉庫のような作用を形成したり、そうした長期状態を利用して擬似的に上位の複雑反復スレッドに相当する作用が形成されたりすることも十分に考えられます。

ニューラルネットワーク内に、長期状態が擬似的な道具箱や倉庫のような作用が形成され、それにより擬似的なスレッドも形成されるのであれば、入れ子構造だけでなくネットワーク構造が形成されても不思議ではありません。

また、こうして擬似的なスレッド群が形成される中で、新しいスレッドが他の既存のスレッドを基礎として形成され、既存のスレッドに対してポジティブな作用をするというWinWinの関係も生じ得るでしょう。

そうなると、大量のテキストを学習させるという反復処理の中で、大規模言語モデルのニューラルネットワーク内では、疑似的な状態の保管場所や、疑似的なスレッドが形成され、WinWinの関係を構築しながら複雑なスレッド構造を形成していくと考える事ができます。

これが、大規模ではあるけれども仕組みそのものはシンプルなニューラルネットワークであっても、自然言語による会話のような複雑な情報処理や知的な処理が行える理由であると、私は考えています。

そして、同じように自然言語で会話をして思考をすることができる人間と会話型AIは、人間とコンピュータ処理という違いはありますが、その本質は複雑反復にあり、どちらも同じように複雑な入れ子やネットワーク状のスレッド構造が、その中に形成されていると考えられます。

■スパースオニオンモデル

複雑反復が繰り返されることで、スレッド構造や駆動構造が段階的に進化し、既存のスレッドと新しいスレッドの間にWinWinの関係が築かれることで構造が強化され、その上にまたさらに新しい構造が作り出されることで、進化や学習が進みます。

一方で、新しいスレッドや新しい構造が、既存のスレッドや過去の構造に頼ることなく自立できてしまうケースもあります。

例えば、細胞が誕生する以前には地球上に多数存在してたと考えられる前細胞的な有機的な組織は、現在では探しても見つけ出すことができません。おそらく、強い繁殖力を持つ細胞が栄養源やエネルギー源として取り込んでしまったために、地球上から姿を消してしまったと考えられます。

これらの前細胞的な有機的な組織が実在したという証拠はなくなってしまいましたが、細胞が存在しているという状況証拠からは、それらの存在していたはずで、それを土台にして進化が進行したことで細胞が誕生できたはずなのです。しかし、それらが地球上から姿を消しても生物が死滅することなく生存できているという事実は、複雑反復の過程で構築されたスレッドやその構造の中には、消失しても問題がないものもあり、そうしたものは実際に消失し得るという事を意味します。

これを、私はスパースオニオンモデルと呼んでいます。前の段階を土台にして進化が多様な広がりを伴って進行する様子は、ちょうど中央から重なりを伴う構造を持つ玉ねぎ(オニオン)を連想させます。そして、その玉ねぎの内側には、部分的に後から隙間が空いているような(スパースな)構造になります。

この構造を理解すると、決して私たちや私たちの文明がこの構造の中の頂点や最奥部にいるわけではないことがイメージできます。現時点でこの構造の最も外側を占めているに過ぎません。

そして、このスパースオニオンの内側で私たちを支えている構造が崩壊した場合や、あるいは私たちのさらに外側に構造ができた場合、私たちが安定して存続できるとは限らないということがイメージできるはずです。

■さいごに:最も外側の関数

この記事の前半分で、以下のように複雑反復を疑似プログラムにより定式化しました。

loop( x = f(x) )

この式は様々な複雑反復に当てはめることができます。そして、それぞれの複雑反復は、さらに外側に複雑反復があり、その外側の関数f(x)の中で呼び出されるという構造になっています。なお、この式の見かけ上の外側とスパースオニオンモデルの外側は異なる概念であることに留意してください。

それぞれの複雑反復は、外側の関数fが反復されている間に生成されたものだと考えれば、その複雑反復のループとループ内の関数は、xに含まれていることになります。ある時点でf(x)の結果としてxに新しい関数を含んだものが代入され、それ以降はf(x)の内部でその複雑反復の関数が実行されるようになる、という構図です。

このように入れ子型の階層構造を持つと考えると、最も外側の関数fとloopは何だろうか、という疑問が沸くでしょう。

私の答えは今のところ、関数fは宇宙空間とそこにある物理法則、loopは時間です。

ただし、これを量子物理学や宇宙スケールの相対性理論の領域まで拡張した場合は、また別の答えがあるかもしれません。


サポートも大変ありがたいですし、コメントや引用、ツイッターでのリポストをいただくことでも、大変励みになります。よろしくおねがいします!