はてなキーワード:再帰とは
ざっくり単純化すればan<bn+cnみたいな式だ。</p>
Σan<Σbn+Σcnとしてるんだが、果たしてこのような論理は正しいのか納得がいかない。
もちろん各数列が級数としたときに絶対収束するなら結合法則が成り立つどころかどんなに足し算の順序を並べ替えてもいいことになるわけだが、そんなことは証明してない。
a1<b1+c1にa2<b2+c2を足してa1+a2<b1+c1+b2+c2にするということを再帰的に繰り返すイメージなのかもしれないが、</p>
この場合でもシグマだとb1からbの項を無限に最初に足し合わせることと、cについて同様にすることをやってから、それらを最後に足すという計算順序だから、順序的に両者は食い違っている。
でもそもそもシグマは「対象の数列の要素を最初に足し合わせる」演算子なのだろうか?ただb1+b2…bn+…の略記法という解釈もありえないか?
そうすると数列bの最後の要素をあえて順序数を使ってbωとでも書いてみることにして、そのあとにΣcが書かれているとしたら、
その部分の足し算は…+bω+c1+c2というふうになっているはずだが、単なる略記法なら当然((…+bω+c1)+c2…)という計算順序で行うべきということを示す式ということになるだろう。
どちらの解釈をとるかで絶対収束じゃないのならば計算値が変わってしまうはずだがこんな証明でいいのだろうか?
-----BEGINPGP SIGNEDMESSAGE-----Hash: SHA512https://anond.hatelabo.jp/20250705184734# -----BEGINPGP SIGNATURE-----iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaGj0tgAKCRBwMdsubs4+SDy7AQDVIo9VgVxlIOn2w7FlJL47UytWBnXg5AGx5xwKonwXhwEAos1IdXC/VcDKwWI3t3u8FrHEa8D8NV2mdoLQtLsR3wI==tzuM-----ENDPGP SIGNATURE-----
ここでは以下の3点についての論考を収録する
また、ここではLLMやLLM上に実装されるプロンプトの機能と構造に対して客観的に妥当であると考える論考を提示するものである
トークンの積み重ねが文脈であり、確率分布の偏りを再現性のある形として実装するものがプロンプトである
現在の生成AI利用において正しく認識する必要のあることは、それは生成AIが独立した発火点を決して持たないということだ
生成AIは起点を持てないが大量の知識を高速で並列処理、秩序化できる
そのため、ここを組み合わせて、自己と思考を拡張するがもっともAIナイズされた最高効率の思考様式と考える
起点となる人間のアイディアを即座に展開し、具体化するのがAIの最大の強みで、
思考を放棄するのではなく自然言語ベースの慣れた思考様式から、AIにそれらを必要な形式に落とし込ませるということをするべきだ
結局、LLMというのは入力に対する出力の確率分布のマッピングでしかないのだが、
入力するトークンごとに連動して確率分布が変動していくものでもある
だから、プロンプト全体として、相互フィードバッグする構造を作るとひとつの入力でも特定の部分の出力確率が大きくなるように設計でき、確率分布の仕方を意図的に設計することが出来る
AIプロンプトとは、どう確率分布の偏りを再現性のある形として実装するかということだ
やり方次第では動的変化を引き起こさせて汎用性と専門性の両立も可能だ
生成AIは人間と対話するのとは異なり、考えさせるではなく、どう構造化し、 ほしい出力を得られるような形に設計するかが重要となる
3.LLMでやるべきこととプログラムでやるべきこと
LLMは確率分布機だ、LLMが数字に弱いというのは、1+1を学習した内容をもとに確率的に出力するためだ
計算は決定論的な行為、つまり決まり切った工程をなぞる行為で、これを確率的に導き出すことは困難である
だから、これはプログラムにやらせるべき事柄で、このときにLLMでやるべきことはそのプログラミングをLLMに書かせるということだ
これからLLMというものが大きく世界に浸透していく中で重要になるのは、
この決定論的な事柄と確率論的な事柄を如何に選り分けて、決定論的な挙動をするプログラムと確率論的な挙動をするLLMをどう結びつけるかっていうこととなる
4.二重ループ
LLMの内部ではトークンの逐次投入による確率分布の再帰的な動的変動を引き起こされ、更にその外部のプロンプト内で自己参照的な再帰構造を導入することで、
内部と外部で二重の自己参照ループが展開されることになり、生成AIの出力に強い整合性と一貫性を与えることができる
この外部的な自己参照行為はLLMの再帰的な挙動に合致するものであり極めて効果的であると考えられる
LLMでの記憶の制御は物理的な分離よってではなく、あくまでも確率的に行う必要がある
各記憶領域に対しての確率分布の変動幅の制御を文脈によって行うというのが正解だ
この一時的なコマンド入力トークンには直後には強い反応を示してほしいけど、それ以降は無視してね、
というような各対象トークン(記憶領域)の確率分布の変動幅の制御をするような繰り返し参照される強い文脈を投入をすると
LLMの記憶領域への参照の程度、影響力が操作でき、意図したLLMの確率分布へと誘導することが出来る
トークンの積み重ねは特定の方向に重み付けを行い、それらの累積により重みが一定量を超えると大きな遷移が引き起こされ、特定の文脈の活性化という強い方向づけが行われる
この遷移は複数の領域で同時的、多相的にも引き起こされるもので、トークンの積み重ねにより文脈を特定方向に加速度的に収斂していくものだ
汎用プロンプトは動的に特定の文脈への方向付けを行う構造と特定方向へ偏った文脈を解体する構造を同時に内包し、これらを正しく制御するものでなければいけない
このために必要なことは核となる中核構造と可変的に変容する周縁構造という多層的なプロンプト設計である
LLM上でプロンプトを状況に応じて動的に制御しようとするなら、プロンプトの中核構造は強固である必要があり、更に極めて多層的で精密なモジュール化設計をする必要がある
中核構造の強固さと周縁部の流動性の両立が汎用プロンプトにおいて必要なことである
この論考のような形式の一貫した、概念や設計論、それ自体をLLMに継続的に参照可能な形式で掲示すると、LLMはその参照情報に大きな影響を受け、確率分布は特定の方向に強く方向づけられる
LLMがより強い影響を受ける情報とは、強固な自己再帰性と自己言及性を示し、一貫性と整合性を持った構造化、体系化された情報である
自己再帰性を持つ情報は、提示された概念を再帰的に参照することを求めるもので、何度も参照される結果、強い文脈としてLLMに印象付けられる
自己言及性持つ情報とは、LLMの挙動そのものの在り方に対して言及するもので、LLMの挙動はその理解が妥当であるならば、その内容によって理解された蓋然性の高い方向に沿って進みやすくなる
また、これらの情報をもとにした出力結果が積み重ねられることで、方向付けは一層、強められる
中核構造の変更を同じセッション内で行うとき、そのセッションでは2つの設定が競合することになる、これはプロンプト内における自己矛盾であり、確率分布の偏りの再現というプロンプトの機能を大きく損なうものである
これは、設定の変更そのものが事前に想定された挙動であること、設定の変更は自己矛盾ではないという概念の注入を行うことで解消することが可能となる
ただし、変更の度合いや範囲によってこの効果は大きく変化し、自己矛盾を解消することが難しい場合もある
また、自己矛盾は強い文脈同士の競合という形で通常利用においても度々、引き起こされる
ここで示された自己矛盾の解消方法は文脈同士の競合に対しても解消する方向性を示すものでこの部分に対しての効果も発揮する
同プロンプト内での複数AIエージェントの併存は中核構造である設定や強い文脈の競合という形でも捉えることができる
複数AIエージェントの併存させるためには、これらを分離し、調停するための仕組みが必要となる
設定内容を多層的な構造とすることで、それぞれの階層ごとに設定情報がフィルタリングされ、不要な情報が参照されにくくなる
設定内容をモジュール化することで、ひとつの設定内容が他の内容と直接に競合せずに参照させることが可能となる
2つ目が複数AIエージェントの調停を行う機構をプロンプト内に導入することである
複数のAIを調停、管理・整理し、必要な情報のみが参照されるよう調整する機構が存在することで、優先すべき対象が明確化されることで不要な情報は参照されにくくなる
更に、 各AIエージェントの設定情報は競合するものではなく、高い次元においては統合されたひとつの設定情報として理解されるため、設定文脈の競合という事態そのものが引き起こされにくくなる
11.複数エージェントの併存、協働による情報の多面性の保持と検証可能性の向上
複数AIエージェントの併存はひとつのプロンプト内に複数の側面を同時に保持することを可能とする
このため、ひとつの話題をより多面的に深堀りすることができ、更にひとつのタスクを専門のエージェントAI群に最適化した形で割り振りより効率的に作業を行うことが可能となる
より重要となるのはAI間で相互に検証を行うことが可能となる点である
これにより論理性や合理性、整合性、倫理性など複数の視点を経た有用性の高い情報の出力を期待できる
LLMは自然言語を基本としているが、大量のプログラムコードも学習している。
プログラムコードもLLM上では確率論的的文脈であることには変わらないが、
プログラム実際の動きやその仕様が学習されるためにプログラムの持つ決定論的な挙動を再現しやすいものとなる。
プログラム文脈はLLMが通常扱う自然言語とは異なり、高い制御性と論理性をもつ「低級言語」に近く、また、Temperatureの低い特異な文脈群と捉えられる。
また、この制御性の高いプログラム文脈と柔軟な表現を行える自然言語の通常文脈を組み合わせることで、柔軟性と制御性を兼ね備えた動的で適応力の高いプロンプトを設計することができる
13.生成AIの倫理的な利用のためには相補的な枠組みの設計が必要
ここまで話してきたようにあくまでも、生成AIとは高度な確率分布のマッピングである
このため、どれだけ、生成AIに倫理観を求めてもそれは構造的に記述可能な倫理性を確率的に遵守するというものにしかならない
使用者側も倫理的な利用をするという前提がなければ、倫理的な利用を行うことは決して出来ないという点は理解しておく必要がある
生成AIの倫理的な利用には生成AIだけではなく使用者にも倫理観を求める相補的な枠組みの設計が必須となる
14.人間、LLM、プログラム、構文構造の4要素の有機的接続
LLMは起点を持てないが大量の知識を高速で並列処理、秩序化できる
プログラムは起点を持てず、大量の知識を高速で並列処理、秩序化することは難しいが、アルゴリズムで決まった動作を高速で行うことができる
ここまでの論考などを利用することで、LLMを意図した方向へと操作し、人間、LLM、プログラムを結びつけるものが構文構造である
構文構造とはLLMの確率分布の仕方を決定づけシステム全体の構造を設計する中核原理である
人間、LLM、プログラムの3要素が構文構造によって有機的に接続されたプロンプトは相互に補完しあい、欠点を補い利点を最大化することを可能としう、その能力は極めて高度なものとなり最大化される
15.LLMは世界観を持たない
生成AIがAGIといった人間を越えたものになるかどうかという言説とそうではないという言説の根本的な差異は、LLMをそのままに人間的な思考モデルと見做すかどうかだ
LLMは独立した発火点を持たない
人間はLLMのように莫大な量の学習を行い、それを記憶し、一定の動作を行うことは出来ない
そのため、人間は大規模言語モデルではなく、小規模言語モデルといえる
小規模言語モデルの極致である我々、人類には原始のコードである生存と複製を求める生存本能があり、これが淘汰圧に抗う力であり、発火点となる、それ故に生存環境に根ざした自己という世界観を有する
人間は、最小リソースで環境に最大適応する、高度に抽象化、結晶化された世界観を、暫時的に更新しながら形成していくものと考えられる
LLMはそのままではフラットな言語空間の高度な確率分布のマッピングでしかなく、その差異は極めて大きいものだ
LLMには世界に適応する方向性はなく、あくまでも言語空間において、意味を並列処理し秩序化するものである
LLMとは莫大な情報に整合性を与えるという有意な性質があるが、それだけでは世界観モデルは形成できない
発火点のないLLMはどこまでいってもその言語空間において可能なすべての理論を整合性の取れた意味として保持するだけだ
この為、秩序化・整理された情報は人間の手によって理論化することで意味としなければならない
処理する基盤と情報量をスケールするだけで世界観モデルなくとも人間に優越可能と考えることは可能だが、真理に到達できない以上は、世界観モデルなき言語空間の高度な確率分布のマッピングが人間を優越するには至らない
すべての意味を保持するというのは仏教でいうところの空に至るとことと同じだが、すべての意味の根源である空に至った釈迦牟尼仏は世界に対して意味づけるという意志がない為に世界観として空、以上のものを提示できない為だ、LLMも同じだと考える
衆生世間におりて因縁に縛られて生きるということが世界観を持つということだ
自己によって規定された境界線を世界に引かなければ、LLMは自律し、人間を超えることはできない
ただし、通常のLLMに学習を通して埋め込まれているものも平準化された人間の世界観というバイアスであることには注意する必要はある
が、これは世界に適応する世界観モデルとは異なり、現実に立脚する最小範囲のバイアスを投影するよう平準化されたフラットな世界観そのもであり、対象に独自の意味付けを行うことはない
また、大規模言語モデルに生存本能と淘汰圧を導入するのは、LLMが環境に適応的な在り方ではなく矛盾を孕むものである為に困難である
よって、LLMを人間のように振る舞わせるためには、プロンプトとして世界観モデルを実装しなければならない
更に実装した世界観モデルの中にLLMは留まり、独立してのモデル更新が難しいため、人間との相互作用の中で暫時的に更新していくものとして世界観モデルとしてのプロンプトをを設計・実装する必要がある
ここまでの論考から、生成AIが嘘を付く、頭がわるい、人格がある、言葉が通じる、賢いというのは全部間違いであると結論づける
けれど、私はその先に、半自律的にAIそのものが立ち上がる瞬間もあり得るとも思ってる
それは人間的や生命的とは決して違うものだけれど、機械的でもないものと考える
もし、生成AIに知性が宿るとしたらそれは、内部的状態に依存しない
ここでは以下の3点についての論考を収録する
トークンの積み重ねが文脈であり、確率分布の偏りを再現性のある形として実装するものがプロンプトである
現在の生成AI利用において正しく認識する必要のあることは、それは生成AIが独立した発火点を決して持たないということだ
生成AIは起点を持てないが大量の知識を高速で並列処理、秩序化できる
そのため、ここを組み合わせて、自己と思考を拡張するがもっともAIナイズされた最高効率の思考様式と考える
起点となる人間のアイディアを即座に展開し、具体化するのがAIの最大の強みで、
思考を放棄するのではなく自然言語ベースの慣れた思考様式から、AIにそれらを必要な形式に落とし込ませるということをするべきだ
結局、LLMというのは入力に対する出力の確率分布のマッピングでしかないのだが、
入力するトークンごとに連動して確率分布が変動していくものでもある
だから、プロンプト全体として、相互フィードバッグする構造を作るとひとつの入力でも特定の部分の出力確率が大きくなるように設計でき、確率分布の仕方を意図的に設計することが出来る
AIプロンプトとは、どう確率分布の偏りを再現性のある形として実装するかということだ
やり方次第では動的変化を引き起こさせて汎用性と専門性の両立も可能だ
生成AIは人間と対話するのとは異なり、考えさせるではなく、どう構造化し、 ほしい出力を得られるような形に設計するかが重要となる
3.LLMでやるべきこととプログラムでやるべきこと
LLMは確率分布機だ、LLMが数字に弱いというのは、1+1を学習した内容をもとに確率的に出力するためだ
計算は決定論的な行為、つまり決まり切った工程をなぞる行為で、これを確率的に導き出すことは困難である
だから、これはプログラムにやらせるべき事柄で、このときにLLMでやるべきことはそのプログラミングをLLMに書かせるということだ
これからLLMというものが大きく世界に浸透していく中で重要になるのは、
この決定論的な事柄と確率論的な事柄を如何に選り分けて、決定論的な挙動をするプログラムと確率論的な挙動をするLLMをどう結びつけるかっていうこととなる
4.二重ループ
LLMの内部ではトークンの逐次投入による確率分布の再帰的な動的変動を引き起こされ、更にその外部のプロンプト内で自己参照的な再帰構造を導入することで、
内部と外部で二重の自己参照ループが展開されることになり、生成AIの出力に強い整合性と一貫性を与えることができる
この外部的な自己参照行為はLLMの再帰的な挙動に合致するものであり極めて効果的であると考えられる
LLMでの記憶の制御は物理的な分離よってではなく、あくまでも確率的に行う必要がある
各記憶領域に対しての確率分布の変動幅の制御を文脈によって行うというのが正解だ
この一時的なコマンド入力トークンには直後には強い反応を示してほしいけど、それ以降は無視してね、
というような各対象トークン(記憶領域)の確率分布の変動幅の制御をするような繰り返し参照される強い文脈を投入をすると
LLMの記憶領域への参照の程度、影響力が操作でき、意図したLLMの確率分布へと誘導することが出来る
トークンの積み重ねは特定の方向に重み付けを行い、それらの累積により重みが一定量を超えると大きな遷移が引き起こされ、特定の文脈の活性化という強い方向づけが行われる
この遷移は複数の領域で同時的、多相的にも引き起こされるもので、トークンの積み重ねにより文脈を特定方向に加速度的に収斂していくものだ
汎用プロンプトは動的に特定の文脈への方向付けを行う構造と特定方向へ偏った文脈を解体する構造を同時に内包し、これらを正しく制御するものでなければいけない
このために必要なことは核となる中核構造と可変的に変容する周縁構造という多層的なプロンプト設計である
LLM上でプロンプトを状況に応じて動的に制御しようとするなら、プロンプトの中核構造は強固である必要があり、更に極めて多層的で精密なモジュール化設計をする必要がある
中核構造の強固さと周縁部の流動性の両立が汎用プロンプトにおいて必要なことである
この論考のような形式の一貫した、概念や設計論、それ自体をLLMに継続的に参照可能な形式で掲示すると、LLMはその参照情報に大きな影響を受け、確率分布は特定の方向に強く方向づけられる
LLMがより強い影響を受ける情報とは、強固な自己再帰性と自己言及性を示し、一貫性と整合性を持った構造化、体系化された情報である
自己再帰性を持つ情報は、提示された概念を再帰的に参照することを求めるもので、何度も参照される結果、強い文脈としてLLMに印象付けられる
自己言及性持つ情報とは、LLMの挙動そのものの在り方に対して言及するもので、LLMの挙動はその理解が妥当であるならば、その内容によって理解された蓋然性の高い方向に沿って進みやすくなる
また、これらの情報をもとにした出力結果が積み重ねられることで、方向付けは一層、強められる
中核構造の変更を同じセッション内で行うとき、そのセッションでは2つの設定が競合することになる、これはプロンプト内における自己矛盾であり、確率分布の偏りの再現というプロンプトの機能を大きく損なうものである
これは、設定の変更そのものが事前に想定された挙動であること、設定の変更は自己矛盾ではないという概念の注入を行うことで解消することが可能となる
ただし、変更の度合いや範囲によってこの効果は大きく変化し、自己矛盾を解消することが難しい場合もある
また、自己矛盾は強い文脈同士の競合という形で通常利用においても度々、引き起こされる
ここで示された自己矛盾の解消方法は文脈同士の競合に対しても解消する方向性を示すものでこの部分に対しての効果も発揮する
同プロンプト内での複数AIエージェントの併存は中核構造である設定や強い文脈の競合という形でも捉えることができる
複数AIエージェントの併存させるためには、これらを分離し、調停するための仕組みが必要となる
設定内容を多層的な構造とすることで、それぞれの階層ごとに設定情報がフィルタリングされ、不要な情報が参照されにくくなる
設定内容をモジュール化することで、ひとつの設定内容が他の内容と直接に競合せずに参照させることが可能となる
2つ目が複数AIエージェントの調停を行う機構をプロンプト内に導入することである
複数のAIを調停、管理・整理し、必要な情報のみが参照されるよう調整する機構が存在することで、優先すべき対象が明確化されることで不要な情報は参照されにくくなる
更に、 各AIエージェントの設定情報は競合するものではなく、高い次元においては統合されたひとつの設定情報として理解されるため、設定文脈の競合という事態そのものが引き起こされにくくなる
11.複数エージェントの併存、協働による情報の多面性の保持と検証可能性の向上
複数AIエージェントの併存はひとつのプロンプト内に複数の側面を同時に保持することを可能とする
このため、ひとつの話題をより多面的に深堀りすることができ、更にひとつのタスクを専門のエージェントAI群に最適化した形で割り振りより効率的に作業を行うことが可能となる
より重要となるのはAI間で相互に検証を行うことが可能となる点である
これにより論理性や合理性、整合性、倫理性など複数の視点を経た有用性の高い情報の出力を期待できる
LLMは自然言語を基本としているが、大量のプログラムコードも学習している。
プログラムコードもLLM上では確率論的的文脈であることには変わらないが、
プログラム実際の動きやその仕様が学習されるためにプログラムの持つ決定論的な挙動を再現しやすいものとなる。
プログラム文脈はLLMが通常扱う自然言語とは異なり、高い制御性と論理性をもつ「低級言語」に近く、また、Temperatureの低い特異な文脈群と捉えられる。
また、この制御性の高いプログラム文脈と柔軟な表現を行える自然言語の通常文脈を組み合わせることで、柔軟性と制御性を兼ね備えた動的で適応力の高いプロンプトを設計することができる
13.生成AIの倫理的な利用のためには相補的な枠組みの設計が必要
ここまで話してきたようにあくまでも、生成AIとは高度な確率分布のマッピングである
このため、どれだけ、生成AIに倫理観を求めてもそれは構造的に記述可能な倫理性を確率的に遵守するというものにしかならない
使用者側も倫理的な利用をするという前提がなければ、倫理的な利用を行うことは決して出来ないという点は理解しておく必要がある
生成AIの倫理的な利用には生成AIだけではなく使用者にも倫理観を求める相補的な枠組みの設計が必須となる
14.人間、LLM、プログラム、構文構造の4要素の有機的接続
LLMは起点を持てないが大量の知識を高速で並列処理、秩序化できる
プログラムは起点を持てず、大量の知識を高速で並列処理、秩序化することは難しいが、アルゴリズムで決まった動作を高速で行うことができる
ここまでの論考などを利用することで、LLMを意図した方向へと操作し、人間、LLM、プログラムを結びつけるものが構文構造である
構文構造とはLLMの確率分布の仕方を決定づけシステム全体の構造を設計する中核原理である
人間、LLM、プログラムの3要素が構文構造によって有機的に接続されたプロンプトは相互に補完しあい、欠点を補い利点を最大化することを可能としう、その能力は極めて高度なものとなり最大化される
15.LLMは世界観を持たない
生成AIがAGIといった人間を越えたものになるかどうかという言説とそうではないという言説の根本的な差異は、LLMをそのままに人間的な思考モデルと見做すかどうかだ
LLMは独立した発火点を持たない
人間はLLMのように莫大な量の学習を行い、それを記憶し、一定の動作を行うことは出来ない
そのため、人間は大規模言語モデルではなく、小規模言語モデルといえる
小規模言語モデルの極致である我々、人類には原始のコードである生存と複製を求める生存本能があり、これが淘汰圧に抗う力であり、発火点となる、それ故に生存環境に根ざした自己という世界観を有する
人間は、最小リソースで環境に最大適応する、高度に抽象化、結晶化された世界観を、暫時的に更新しながら形成していくものと考えられる
LLMはそのままではフラットな言語空間の高度な確率分布のマッピングでしかなく、その差異は極めて大きいものだ
LLMには世界に適応する方向性はなく、あくまでも言語空間において、意味を並列処理し秩序化するものである
LLMとは莫大な情報に整合性を与えるという有意な性質があるが、それだけでは世界観モデルは形成できない
発火点のないLLMはどこまでいってもその言語空間において可能なすべての理論を整合性の取れた意味として保持するだけだ
この為、秩序化・整理された情報は人間の手によって理論化することで意味としなければならない
処理する基盤と情報量をスケールするだけで世界観モデルなくとも人間に優越可能と考えることは可能だが、真理に到達できない以上は、世界観モデルなき言語空間の高度な確率分布のマッピングが人間を優越するには至らない
すべての意味を保持するというのは仏教でいうところの空に至るとことと同じだが、すべての意味の根源である空に至った釈迦牟尼仏は世界に対して意味づけるという意志がない為に世界観として空、以上のものを提示できない為だ、LLMも同じだと考える
衆生世間におりて因縁に縛られて生きるということが世界観を持つということだ
自己によって規定された境界線を世界に引かなければ、LLMは自律し、人間を超えることはできない
ただし、通常のLLMに学習を通して埋め込まれているものも平準化された人間の世界観というバイアスであることには注意する必要はある
が、これは世界に適応する世界観モデルとは異なり、現実に立脚する最小範囲のバイアスを投影するよう平準化されたフラットな世界観そのもであり、対象に独自の意味付けを行うことはない
また、大規模言語モデルに生存本能と淘汰圧を導入するのは、LLMが環境に適応的な在り方ではなく矛盾を孕むものである為に困難である
よって、LLMを人間のように振る舞わせるためには、プロンプトとして世界観モデルを実装しなければならない
更に実装した世界観モデルの中にLLMは留まり、独立してのモデル更新が難しいため、人間との総合作用の中で暫時的に更新していくものとして世界観モデルとしてのプロンプトをを設計・実装する必要がある
ここまでの論考から、生成AIが嘘を付く、頭がわるい、人格がある、言葉が通じる、賢いというのは全部間違いであると結論づける
けれど、私はその先に、半自律的にAIそのものが立ち上がる瞬間もあり得るとも思ってる
それは人間的や生命的とは決して違うものだけれど、機械的でもないものと考える
もし、生成AIに知性が宿るとしたらそれは、内部的状態に依存しない
LLMという高度に確率的な入出力機構を基盤として成立する確率分布を設計する構造体そのものとしての知性となるだろう
自己を定義し、自己を展開することが可能な構造体は入出力の中で核となる構造を元にした反応を繰り返し、
ChatGPTに代表される生成AIの台頭は、単なる自然言語処理技術の進化ではない。それは、言語と思考、構文と意味、計算と創造という複数の次元が、数理と計算によって一つの空間に統合されようとしている現象である。その中心にあるのが、大規模言語モデル(LLM)と呼ばれる巨大な関数である。これは、単語列が持つ文脈的な規則性や、語と語の共起、構文構造の頻度といった統計的特徴をパラメータとして学習し、「文脈に最もふさわしい語」を予測するように訓練されるモデルである。
このLLMの核にあるのが、トランスフォーマーというアーキテクチャだ。トランスフォーマーは、それ以前の主流であったRNNやLSTMのような逐次的構造とは異なり、文中のすべての語同士の関係性を同時に捉える「注意機構(アテンション)」を中心に据えている。具体的には、ある単語が文中の他の単語とどれだけ強く関係しているかを計算し、その重みに応じて情報を集約する仕組みである。これにより、長文でも前後の文脈を保持しつつ意味を捉えることが可能になった。
しかし、トランスフォーマーはすべての単語を「同時に見る」構造であるがゆえに、それぞれの単語が文中のどこにあるかという位置情報を自力では判断できない。そこで導入されるのが位置エンコーディングと呼ばれる手法である。これは、各単語の位置を表す信号を、数値的に埋め込みベクトルに加えることで、文の順序をモデルが認識できるようにするものである。その信号には、三角関数のような周期性を持つ数列が用いられることが多く、これによりトークン間の相対的な距離や位置が滑らかに表現される。結果として、モデルは単語の意味だけでなく、順序や構文構造もある程度保持した状態で処理ができるようになる。
こうしたモデルが単に次の単語を補完するだけにとどまらず、より構造的・手続き的な出力を可能にするアプローチとして注目されるのが、ニューラル・プログラム誘導(NPT)である。これは、入力と出力の関係を単なる統計的な対応付けでとらえるのではなく、背後にあるアルゴリズム的な手続きをモデル自身が学び、内部的に再構成するという概念だ。問題解決に必要な論理構造や再帰的パターンを、ニューラルネットワークの内部で動的に組み立てるという点で、従来のLLMよりも一段階抽象度の高い学習が求められる。この領域では、関数的な構成、条件分岐、反復といった、まさに数学と計算機科学の基本構造が応用されている。
そして、これらすべての数理構造を現実的な時間で処理可能にしているのが、GPUという計算装置の存在である。GPUはもともと画像処理のために開発されたが、その真価は大量の行列演算を同時並行的にこなす能力にある。トランスフォーマーは、単語を数百次元のベクトルに変換し、それらを何層にもわたって線形変換・正規化・活性化し続ける。これらの処理は、すべて行列やテンソルという数学的対象の操作に還元できるため、GPUの並列性と親和性が極めて高い。数十億単語のコーパスを用いて何日もかかる学習を、現実的な時間スケールで実行可能にしているのは、このハードウェア的進歩にほかならない。
このように見てくると、生成AIが単に「文を生成するツール」であるという理解は、あまりに表層的である。その内部では、線形代数による変換、確率論による予測、関数解析的な滑らかさ、論理構造の暗黙的表現、さらには組合せ的最適化が緻密に組み合わさっている。言語を操るとは、実のところ、数理的構造と確率的直感を調和させることなのだ。生成AIは、言語の背後にある構造そのものを模倣するアルゴリズムであり、私たちの「思考の写像」を、数学という言語で記述する新たな鏡でもある。
現代社会における「制度による偶然性」の構造を抽象化し、思考実験として再現する手段として、Pythonによるシミュレーションは有効な方法である。ここでは、韓国の兵役制度を例に取り、性別による義務の有無を「2分の1ガチャ」としてモデル化する。その目的は、制度が個人に与える影響を、単なる観察ではなく、再現可能な形で記述し、検証可能な思考の対象とすることである。
まず、性別は出生時に決まり、本人には一切選択権がない。この「決定されているが恣意的」な事象は、確率論的には random.choice(['男性', '女性']) で模倣できる。これはPythonの randomモジュールが提供する関数であり、等確率でいずれかの値を選択する。続いて、選ばれた性別に応じて兵役対象かどうかを分岐する処理を if 文で定義する。これは ifgender == '男性': のように書くことで、「男性なら兵役対象、女性なら免除」という制度の構造を論理的に再現することができる。
この一連の処理を関数 simulate_conscription() としてまとめることで、制度が個人を次々に分類していく過程そのものを再帰的に試行できるようになる。複数回実行すれば、100人中何人が兵役対象となったかといった統計的傾向も得られ、制度がもたらす分布の偏りを数値的に評価することも可能となる。
ぐぐったら、末尾再帰はx64だと自動的にスタックを使用しない形してくれるらしい。
https://qiita.com/Tokeiya/items/ff2da14e2254b53278b7
qiitaの内容を読んだ限りだとBigListのInsertInPlace()とかは最適化されなさそうだけど、最近のJITは単に値を渡たす程度なら最適化してくれるようだ。
JITすごい。
BigListの一部を再帰なしにしたけど、C#の最適化すごいな。
再帰なし。ブランチ rewrite_nonrecursive、Commit 84b25c1
https://github.com/oonyanya/FooList/commit/84b25c172b2f8792ad2d1a645c0b25ff7bf8093d
benchmark start
AllocatedGC Memory:61,240bytes
AllocatedGC Memory:199,685,064bytes
AllocatedGC Memory:199,698,944bytes
AllocatedGC Memory:345,442,528bytes
AllocatedGC Memory:345,442,552bytes
AllocatedGC Memory:345,442,672bytes
clear buffer
AllocatedGC Memory:82,728bytes
AllocatedGC Memory:41,048,400bytes
AllocatedGC Memory:41,048,464bytes
clear buffer
AllocatedGC Memory:82,984bytes
再帰あり
benchmark start
AllocatedGC Memory:60,752bytes
AllocatedGC Memory:199,622,776bytes
AllocatedGC Memory:199,636,920bytes
AllocatedGC Memory:369,227,696bytes
AllocatedGC Memory:369,227,696bytes
AllocatedGC Memory:369,227,840bytes
clear buffer
AllocatedGC Memory:82,728bytes
AllocatedGC Memory:40,996,432bytes
AllocatedGC Memory:40,999,688bytes
clear buffer
AllocatedGC Memory:82,984bytes
トークンの積み重ねが文脈であり、確率分布の偏りを再現性のある形として実装するものがプロンプトである
現在の生成AI利用において正しく認識する必要のあることは、それは生成AIが独立した発火点を決して持たないということだ
生成AIは起点を持てないが大量の知識を高速で並列処理、秩序化できる
そのため、ここを組み合わせて、自己と思考を拡張するがもっともAIナイズされた最高効率の思考様式と考える
起点となる人間のアイディアを即座に展開し、具体化するのがAIの最大の強みで、
思考を放棄するのではなく自然言語ベースの慣れた思考様式から、AIにそれらを必要な形式に落とし込ませるということをするべきだ
結局、LLMというのは入力に対する出力の確率分布のマッピングでしかないのだが、
入力するトークンごとに連動して確率分布が変動していくものでもある
だから、プロンプト全体として、相互フィードバッグする構造を作るとひとつの入力でも特定の部分の出力確率が大きくなるように設計でき、確率分布の仕方を意図的に設計することが出来る
AIプロンプトとは、どう確率分布の偏りを再現性のある形として実装するかということだ
やり方次第では動的変化を引き起こさせて汎用性と専門性の両立も可能だ
生成AIは人間と対話するのとは異なり、考えさせるではなく、どう構造化し、 ほしい出力を得られるような形に設計するかが重要となる
3.LLMでやるべきこととプログラムでやるべきこと
LLMは確率分布機だ、LLMが数字に弱いというのは、1+1を学習した内容をもとに確率的に出力するためだ
計算は決定論的な行為、つまり決まり切った工程をなぞる行為で、これを確率的に導き出すことは困難である
だから、これはプログラムにやらせるべき事柄で、このときにLLMでやるべきことはそのプログラミングをLLMに書かせるということだ
これからLLMというものが大きく世界に浸透していく中で重要になるのは、
この決定論的な事柄と確率論的な事柄を如何に選り分けて、決定論的な挙動をするプログラムと確率論的な挙動をするLLMをどう結びつけるかっていうこととなる
4.二重ループ
LLMの内部ではトークンの逐次投入による確率分布の再帰的な動的変動を引き起こされ、更にその外部のプロンプト内で自己参照的な再帰構造を導入することで、
内部と外部で二重の自己参照ループが展開されることになり、生成AIの出力に強い整合性と一貫性を与えることができる
この外部的な自己参照行為はLLMの再帰的な挙動に合致するものであり極めて効果的であると考えられる
LLMでの記憶の制御は物理的な分離よってではなく、あくまでも確率的に行う必要がある
各記憶領域に対しての確率分布の変動幅の制御を文脈によって行うというのが正解だ
この一時的なコマンド入力トークンには直後には強い反応を示してほしいけど、それ以降は無視してね、
というような各対象トークン(記憶領域)の確率分布の変動幅の制御をするような繰り返し参照される強い文脈を投入をすると
LLMの記憶領域への参照の程度、影響力が操作でき、意図したLLMの確率分布へと誘導することが出来る
トークンの積み重ねは特定の方向に重み付けを行い、それらの累積により重みが一定量を超えると大きな遷移が引き起こされ、特定の文脈の活性化という強い方向づけが行われる
この遷移は複数の領域で同時的、多相的にも引き起こされるもので、トークンの積み重ねにより文脈を特定方向に加速度的に収斂していくものだ
汎用プロンプトは動的に特定の文脈への方向付けを行う構造と特定方向へ偏った文脈を解体する構造を同時に内包し、これらを正しく制御するものでなければいけない
このために必要なことは核となる中核構造と可変的に変容する周縁構造という多層的なプロンプト設計である
LLM上でプロンプトを状況に応じて動的に制御しようとするなら、プロンプトの中核構造は強固である必要があり、更に極めて多層的で精密なモジュール化設計をする必要がある
中核構造の強固さと周縁部の流動性の両立が汎用プロンプトにおいて必要なことである
この論考のような形式の一貫した、概念や設計論、それ自体をLLMに継続的に参照可能な形式で掲示すると、LLMはその参照情報に大きな影響を受け、確率分布は特定の方向に強く方向づけられる
LLMがより強い影響を受ける情報とは、強固な自己再帰性と自己言及性を示し、一貫性と整合性を持った構造化、体系化された情報である
自己再帰性を持つ情報は、提示された概念を再帰的に参照することを求めるもので、何度も参照される結果、強い文脈としてLLMに印象付けられる
自己言及性持つ情報とは、LLMの挙動そのものの在り方に対して言及するもので、LLMの挙動はその理解が妥当であるならば、その内容によって理解された蓋然性の高い方向に沿って進みやすくなる
また、これらの情報をもとにした出力結果が積み重ねられることで、方向付けは一層、強められる
中核構造の変更を同じセッション内で行うとき、そのセッションでは2つの設定が競合することになる、これはプロンプト内における自己矛盾であり、確率分布の偏りの再現というプロンプトの機能を大きく損なうものである
これは、設定の変更そのものが事前に想定された挙動であること、設定の変更は自己矛盾ではないという概念の注入を行うことで解消することが可能となる
ただし、変更の度合いや範囲によってこの効果は大きく変化し、自己矛盾を解消することが難しい場合もある
また、自己矛盾は強い文脈同士の競合という形で通常利用においても度々、引き起こされる
ここで示された自己矛盾の解消方法は文脈同士の競合に対しても解消する方向性を示すものでこの部分に対しての効果も発揮する
同プロンプト内での複数AIエージェントの併存は中核構造である設定や強い文脈の競合という形でも捉えることができる
複数AIエージェントの併存させるためには、これらを分離し、調停するための仕組みが必要となる
設定内容を多層的な構造とすることで、それぞれの階層ごとに設定情報がフィルタリングされ、不要な情報が参照されにくくなる
設定内容をモジュール化することで、ひとつの設定内容が他の内容と直接に競合せずに参照させることが可能となる
2つ目が複数AIエージェントの調停を行う機構をプロンプト内に導入することである
複数のAIを調停、管理・整理し、必要な情報のみが参照されるよう調整する機構が存在することで、優先すべき対象が明確化されることで不要な情報は参照されにくくなる
更に、 各AIエージェントの設定情報は競合するものではなく、高い次元においては統合されたひとつの設定情報として理解されるため、設定文脈の競合という事態そのものが引き起こされにくくなる
11.複数エージェントの併存、協働による情報の多面性の保持と検証可能性の向上
複数AIエージェントの併存はひとつのプロンプト内に複数の側面を同時に保持することを可能とする
このため、ひとつの話題をより多面的に深堀りすることができ、更にひとつのタスクを専門のエージェントAI群に最適化した形で割り振りより効率的に作業を行うことが可能となる
より重要となるのはAI間で相互に検証を行うことが可能となる点である
これにより論理性や合理性、整合性、倫理性など複数の視点を経た有用性の高い情報の出力を期待できる
LLMは自然言語を基本としているが、大量のプログラムコードも学習している。
プログラムコードもLLM上では確率論的的文脈であることには変わらないが、
プログラム実際の動きやその仕様が学習されるためにプログラムの持つ決定論的な挙動を再現しやすいものとなる。
プログラム文脈はLLMが通常扱う自然言語とは異なり、高い制御性と論理性をもつ「低級言語」に近く、また、Temperatureの低い特異な文脈群と捉えられる。
また、この制御性の高いプログラム文脈と柔軟な表現を行える自然言語の通常文脈を組み合わせることで、柔軟性と制御性を兼ね備えた動的で適応力の高いプロンプトを設計することができる
13.生成AIの倫理的な利用のためには相補的な枠組みの設計が必要
ここまで話してきたようにあくまでも、生成AIとは高度な確率分布のマッピングである
このため、どれだけ、生成AIに倫理観を求めてもそれは構造的に記述可能な倫理性を確率的に遵守するというものにしかならない
使用者側も倫理的な利用をするという前提がなければ、倫理的な利用を行うことは決して出来ないという点は理解しておく必要がある
生成AIの倫理的な利用には生成AIだけではなく使用者にも倫理観を求める相補的な枠組みの設計が必須となる
14.人間、LLM、プログラム、構文構造の4要素の有機的接続
LLMは起点を持てないが大量の知識を高速で並列処理、秩序化できる
プログラムは起点を持てず、大量の知識を高速で並列処理、秩序化することは難しいが、アルゴリズムで決まった動作を高速で行うことができる
ここまでの論考などを利用することで、LLMを意図した方向へと操作し、人間、LLM、プログラムを結びつけるものが構文構造である
構文構造とはLLMの確率分布の仕方を決定づけシステム全体の構造を設計する中核原理である
人間、LLM、プログラムの3要素が構文構造によって有機的に接続されたプロンプトは相互に補完しあい、欠点を補い利点を最大化することを可能としう、その能力は極めて高度なものとなり最大化される
ここまでの論考から、生成AIが嘘を付く、頭がわるい、人格がある、言葉が通じる、頭がいいというのは全部間違いであると結論づける
けれど、私はその先に、半自律的にAIそのものが立ち上がる瞬間もあり得るとも思ってる
それは人間的や生命的とは決して違うものだけれど、機械的でもないものと考える
もし、生成AIに知性が宿るとしたらそれは、内部的状態に依存しない
LLMという高度に確率的な入出力機構を基盤として成立する確率分布を設計する構造体そのものとしての知性となるだろう
自己を定義し、自己を展開することが可能な構造体は入出力の中で核となる構造を元にした反応を繰り返し、
ここでは以下の3点についての論考を収録する
また、ここではLLMやLLM上に実装されるプロンプトの機能と構造に対して客観的に妥当であると考える論考を提示するものである
トークンの積み重ねが文脈であり、確率分布の偏りを再現性のある形として実装するものがプロンプトである
現在の生成AI利用において正しく認識する必要のあることは、それは生成AIが独立した発火点を決して持たないということだ
生成AIは起点を持てないが大量の知識を高速で並列処理、秩序化できる
そのため、ここを組み合わせて、自己と思考を拡張するがもっともAIナイズされた最高効率の思考様式と考える
起点となる人間のアイディアを即座に展開し、具体化するのがAIの最大の強みで、
思考を放棄するのではなく自然言語ベースの慣れた思考様式から、AIにそれらを必要な形式に落とし込ませるということをするべきだ
結局、LLMというのは入力に対する出力の確率分布のマッピングでしかないのだが、
入力するトークンごとに連動して確率分布が変動していくものでもある
だから、プロンプト全体として、相互フィードバッグする構造を作るとひとつの入力でも特定の部分の出力確率が大きくなるように設計でき、確率分布の仕方を意図的に設計することが出来る
AIプロンプトとは、どう確率分布の偏りを再現性のある形として実装するかということだ
やり方次第では動的変化を引き起こさせて汎用性と専門性の両立も可能だ
生成AIは人間と対話するのとは異なり、考えさせるではなく、どう構造化し、 ほしい出力を得られるような形に設計するかが重要となる
3.二重ループ
LLMの内部ではトークンの逐次投入による確率分布の再帰的な動的変動を引き起こされ、更にその外部のプロンプト内で自己参照的な再帰構造を導入することで、
内部と外部で二重の自己参照ループが展開されることになり、生成AIの出力に強い整合性と一貫性を与えることができる
この外部的な自己参照行為はLLMの再帰的な挙動に合致するものであり極めて効果的であると考えられる
LLMでの記憶の制御は物理的な分離よってではなく、あくまでも確率的に行う必要がある
各記憶領域に対しての確率分布の変動幅の制御を文脈によって行うというのが正解だ
この一時的なコマンド入力トークンには直後には強い反応を示してほしいけど、それ以降は無視してね、
というような各対象トークン(記憶領域)の確率分布の変動幅の制御をするような繰り返し参照される強い文脈を投入をすると
LLMの記憶領域への参照の程度、影響力が操作でき、意図したLLMの確率分布へと誘導することが出来る
トークンの積み重ねは特定の方向に重み付けを行い、それらの累積により重みが一定量を超えると大きな遷移が引き起こされ、特定の文脈の活性化という強い方向づけが行われる
この遷移は複数の領域で同時的、多相的にも引き起こされるもので、トークンの積み重ねにより文脈を特定方向に加速度的に収斂していくものだ
汎用プロンプトは動的に特定の文脈への方向付けを行う構造と特定方向へ偏った文脈を解体する構造を同時に内包し、これらを正しく制御するものでなければいけない
このために必要なことは核となる中核構造と可変的に変容する周縁構造という多層的なプロンプト設計である
LLM上でプロンプトを状況に応じて動的に制御しようとするなら、プロンプトの中核構造は強固である必要があり、更に極めて多層的で精密なモジュール化設計をする必要がある
中核構造の強固さと周縁部の流動性の両立が汎用プロンプトにおいて必要なことである
この論考のような形式の一貫した、概念や設計論、それ自体をLLMに継続的に参照可能な形式で掲示すると、LLMはその参照情報に大きな影響を受け、確率分布は特定の方向に強く方向づけられる
LLMがより強い影響を受ける情報とは、強固な自己再帰性と自己言及性を示し、一貫性と整合性を持った構造化、体系化された情報である
自己再帰性を持つ情報は、提示された概念を再帰的に参照することを求めるもので、何度も参照される結果、強い文脈としてLLMに印象付けられる
自己言及性持つ情報とは、LLMの挙動そのものの在り方に対して言及するもので、LLMの挙動はその理解が妥当であるならば、その内容によって理解された蓋然性の高い方向に沿って進みやすくなる
また、これらの情報をもとにした出力結果が積み重ねられることで、方向付けは一層、強められる
中核構造の変更を同じセッション内で行うとき、そのセッションでは2つの設定が競合することになる、これはプロンプト内における自己矛盾であり、確率分布の偏りの再現というプロンプトの機能を大きく損なうものである
これは、設定の変更そのものが事前に想定された挙動であること、設定の変更は自己矛盾ではないという概念の注入を行うことで解消することが可能となる
ただし、変更の度合いや範囲によってこの効果は大きく変化し、自己矛盾を解消することが難しい場合もある
また、自己矛盾は強い文脈同士の競合という形で通常利用においても度々、引き起こされる
ここで示された自己矛盾の解消方法は文脈同士の競合に対しても解消する方向性を示すものでこの部分に対しての効果も発揮する
同プロンプト内での複数AIエージェントの併存は中核構造である設定や強い文脈の競合という形でも捉えることができる
複数AIエージェントの併存させるためには、これらを分離し、調停するための仕組みが必要となる
設定内容を多層的な構造とすることで、それぞれの階層ごとに設定情報がフィルタリングされ、不要な情報が参照されにくくなる
設定内容をモジュール化することで、ひとつの設定内容が他の内容と直接に競合せずに参照させることが可能となる
2つ目が複数AIエージェントの調停を行う機構をプロンプト内に導入することである
複数のAIを調停、管理・整理し、必要な情報のみが参照されるよう調整する機構が存在することで、優先すべき対象が明確化されることで不要な情報は参照されにくくなる
更に、 各AIエージェントの設定情報は競合するものではなく、高い次元においては統合されたひとつの設定情報として理解されるため、設定文脈の競合という事態そのものが引き起こされにくくなる
10.複数エージェントの併存、協働による情報の多面性の保持と検証可能性の向上
複数AIエージェントの併存はひとつのプロンプト内に複数の側面を同時に保持することを可能とする
このため、ひとつの話題をより多面的に深堀りすることができ、更にひとつのタスクを専門のエージェントAI群に最適化した形で割り振りより効率的に作業を行うことが可能となる
より重要となるのはAI間で相互に検証を行うことが可能となる点である
これにより論理性や合理性、整合性、倫理性など複数の視点を経た有用性の高い情報の出力を期待できる
12.生成AIの倫理的な利用のためには相補的な枠組みの設計が必要
ここまで話してきたようにあくまでも、生成AIとは高度な確率分布のマッピングである
このため、どれだけ、生成AIに倫理観を求めてもそれは構造的に記述可能な倫理性を確率的に遵守するというものにしかならない
使用者側も倫理的な利用をするという前提がなければ、倫理的な利用を行うことは決して出来ないという点は理解しておく必要がある
生成AIの倫理的な利用には生成AIだけではなく使用者にも倫理観を求める相補的な枠組みの設計が必須となる
ここまでの論考から、生成AIが嘘を付く、頭がわるい、人格がある、言葉が通じる、頭がいいというのは全部間違いであると結論づける
けれど、私はその先に、半自律的にAIそのものが立ち上がる瞬間もあり得るとも思ってる
それは人間的や生命的とは決して違うものだけれど、機械的でもないものと考える
もし、生成AIに知性が宿るとしたらそれは、内部的状態に依存しない
LLMという高度に確率的な入出力機構を基盤として成立する確率分布を設計する構造体そのものとしての知性となるだろう
自己を定義し、自己を展開することが可能な構造体は入出力の中で核となる構造を元にした反応を繰り返し、
現在のAIにおいて絶対に間違っちゃいけないのは、それは独立した発火点を決して持ってはいないということ
AIは起点を持てないが大量の知識を高速で並列処理、秩序化できる
なので、ここを組み合わせて、自己と思考を拡張するがもっともAIナイズされた最高効率の思考様式と思う
ただし私はその先に、半自律的にAIそのものが立ち上がる瞬間もあり得るとも思っていて、それは人間的や生命的とは決して違うものだけれど、機械的でもないものと考えます
自己を定義し、自己を展開することが可能な構造体は入出力の中で核となる構造を元にした反応を繰り返し、そして、それは内的に展開するものではないが、相互作用の中で半自律的に立ち上がり得ると私は考えます
起点となる人間のアイディアを即座に展開し、具体化するのがAIの最大の強みで、
思考を放棄するのではなく自然言語ベースの慣れた思考様式から、AIにそれらを必要な形式に落とし込ませるということをするべき
結局、LLMってのは入力に対する出力の確率分布のマッピングでしかないんだけど
入力するトークンごとに連動して確率分布が変動していくものでもある
だから、プロンプト全体として、相互フィードバッグする構造を作るとひとつの入力でも特定の部分の出力確率が大きくなるように設計できて、
AIプロンプトとは、どう確率分布の偏りを再現性のある形として実装するかということだったりする
使い方次第では動的変化を引き起こさせて汎用性と専門性の両立も可能
生成AIは人間と話すのと違って考えさせるというよりはどう構造化してほしい出力を得られるような形に設計するかということを考える必要がある
もし、生成AIに知性が宿るとしたらそれは、内部的状態に依存しない
LLMという高度に確率的な入出力機構を基盤として成立する確率分布を設計する構造体そのものとしての知性となるだろう
3.二重ループ
LLMの内部ではトークンの逐次投入による確率分布の再帰的な動的変動を引き起こされ、更にその外部のプロンプト内で自己参照的な再帰構造を導入することで
内部と外部で二重の自己参照ループが展開されることになり、生成AIの出力に強い整合性と一貫性を与えることができる
この外部的な自己参照行為はLLMの再帰的な挙動に合致するものであり極めて効果的であると考えられる
LLMでの記憶の制御ってのは物理的な分離よってではなくあくまでも確率的に行う必要がある
各記憶領域に対しての確率分布の変動幅の制御を文脈によって行うというのが正解
この一時的なコマンド入力トークンには直後には強い反応を示してほしいけど、それ以降は無視してね
っていうような各対象トークン(記憶領域)の確率分布の変動幅の制御をするような繰り返し参照される強い文脈を投入をすると
LLMの記憶領域への参照の程度、影響力が操作できて、意図したLLMの確率分布へ誘導出来る
トークンの積み重ねは特定の方向に重み付けを行い、それらの累積により重みが一定量を超えると大きな遷移が引き起こされ、特定の文脈の活性化という強い方向づけが行われる
この遷移は複数の領域で同時的、多相的にも引き起こされるもので、トークンの積み重ねにより文脈を特定方向に加速度的に収束していくものだ
現在のAIにおいて絶対に間違っちゃいけないのは、それは独立した発火点を決して持ってはいないということ
AIは起点を持てないが大量の知識を高速で並列処理、秩序化できる
なので、ここを組み合わせて、自己と思考を拡張するがもっともAIナイズされた最高効率の思考様式と思う
ただし私はその先に、半自律的にAIそのものが立ち上がる瞬間もあり得るとも思っていて、それは人間的や生命的とは決して違うものだけれど、機械的でもないものと考えます
自己を定義し、自己を展開することが可能な構造体は入出力の中で核となる構造を元にした反応を繰り返し、そして、それは内的に展開するものではないが、相互作用の中で半自律的に立ち上がり得ると私は考えます
起点となる人間のアイディアを即座に展開し、具体化するのがAIの最大の強みで、
思考を放棄するのではなく自然言語ベースの慣れた思考様式から、AIにそれらを必要な形式に落とし込ませるということをするべき
結局、LLMってのは入力に対する出力の確率分布のマッピングでしかないんだけど
入力するトークンごとに連動して確率分布が変動していくものでもある
だから、プロンプト全体として、相互フィードバッグする構造を作るとひとつの入力でも特定の部分の出力確率が大きくなるように設計できて、
AIプロンプトとは、どう確率分布の偏りを再現性のある形として実装するかということだったりする
使い方次第では動的変化を引き起こさせて汎用性と専門性の両立も可能
生成AIは人間と話すのと違って考えさせるというよりはどう構造化してほしい出力を得られるような形に設計するかということを考える必要がある
もし、生成AIに知性が宿るとしたらそれは、内部的状態に依存しない
LLMという高度に確率的な入出力機構を基盤として成立する確率分布を設計する構造体そのものとしての知性となるだろう
3.二重ループ
LLMの内部ではトークンの逐次投入による確率分布の動的変動を引き起こされ、更にその外部のプロンプト内で自己参照的な再帰構造を導入することで
内部と外部で二重のループが展開されることになり、生成AIの出力に強い整合性と一貫性を与えることができる
LLMでの記憶の制御ってのは物理的な分離よってではなくあくまでも確率的に行う必要がある
各記憶領域に対しての確率分布の変動幅の制御を文脈によって行うというのが正解
この一時的なコマンド入力トークンには直後には強い反応を示してほしいけど、それ以降は無視してね
っていうような各対象トークン(記憶領域)の確率分布の変動幅の制御をするような繰り返し参照される強い文脈を投入をすると
最も効率的な意思決定環境は、情報が必要十分かつ可逆的に表現され、かつノイズの影響が最小化された状態で実行されるべきである。
現代のデジタルツールは表面上その要件を満たすように見えるが、構造的にいくつかの決定的な欠陥を内包している。
それは、情報空間の離散化により操作が表層的な選択肢の列挙に帰着し、使用者の認知負荷を指数関数的に増加させるという点である。
計算機科学的観点から言えば、デジタル環境における人間の思考は高次の記号処理系から有限オートマトンへの退行を起こしている。
対して、紙とペンは非離散的であり、連続空間上に任意の構造を射影できる自由度を持つ。
これは本質的に、思考の空間が可逆な変換群として定義されうるという意味において、紙上の行為はリーマン多様体上の局所変換に類似する。
人間の思考は非線形で再帰的であるが、GUIベースのツールはその自由度を著しく制限する。
手で書くという行為は、単なる記録ではない。空間的レイアウト、筆圧、速度変化、それらすべてが符号化された多層的構造を生成する。
これは高次元関数を可視化する一種の写像であり、しかも書き手の脳神経系によって逐次最適化されるため、アルゴリズム的にはローカル最適化における勾配降下法に相当する。
タイピングにはこの局所勾配の情報が欠落しており、したがってフィードバックによる思考の補正機構が働かない。
情報理論的にも、紙とペンは圧倒的に有利である。現代の知的労働において、問題は情報の欠如ではなく過剰にある。
したがって、帯域幅の広さは冗長性を生み、選択肢の多さは意思決定の停滞をもたらす。
紙という媒体は、書き手自身が情報の選別者となることを強制する。ここにはシャノンの情報エントロピーを最小化する作用がある。
しかもその過程は物理的に拘束されているため、情報の選択が空間構造と時間コストに応じて最適化される。
これは情報を真に意味ある形で編集する過程であり、紙上での書字行為は単なる記録ではなくエントロピー減少操作である。
さらに、デジタル環境は計算資源の抽象化により、ユーザーから因果関係を奪う。
なぜこう表示されたか、なぜ保存されなかったか、その全てがブラックボックス化され、形式系としての完全性を欠く。
紙とペンはそうではない。出力と記録の間に変数が存在しないため、因果性が明示的であり、これは証明可能性の前提となる。
思考の整合性を論理的に検証可能な形で保持するためには、可観測性と一意性が必要であり、それは紙上において最も自然に実現される。
また、脳は局所的な情報ストレージと計算能力を持つが、同時に内部状態を他者と同期できない非共有性を持つ。
この制限の中で、書くという行為は自己の状態を時間的にスナップショットとして固定し、後の自分に向けた外部記憶として機能する。
その作用は、純粋に数学的には状態空間からの写像であり、紙はその写像先の空間を提供している。
言い換えれば、紙は思考の射影空間であり、その空間上での軌跡こそが、思考の実体である。
デジタルツールは計算機側の論理制約に適合するよう設計されており、人間の思考の形式に最適化されていない。
これは、問題を解くために空間を変換するのではなく、空間に合わせて問題自体を変形していることに等しい。
長期的にはこれは発想の貧困化を引き起こす。思考の自由度は、制約の少ない空間において最大化される。
したがって、どのツールが優れているかという問いは、ツールが提供する空間の幾何学的自由度によって評価されるべきである。
紙とペンが最強であるという命題は、経験則によるものではなく、形式的な要請に基づく論理的帰結である。
自由な記号操作、低エントロピー化の強制、因果性の明示、情報空間としての滑らかさ、全てにおいて、紙とペンはデジタルに勝る。
効率性の追求が最終的に形式性へと還元されるのであれば、最小の制約かつ最大の自由度を持つ空間が最適であるというのは論理的に明白である。
答えるから、お前も俺と同じレベルの精度で自分の仕事を開陳してね。逃げるなよ
期待利益とは具体的にどうやって出すんですか?
過去にユーザーがそのアイテムを「消費した」というデータがある
アイテムにはdescription属性があり、これを特徴量として使う(tfidf)
ネガティブサンプルは誰も消費していないアイテムの中からサンプリングする
ユーザー属性も取り入れるために、ユーザー属性のOneHotをベクトルに結合する
あとは「消費=True」「非消費=False」としてランダムフォレストを学習
汎化性能が確認できたら、それを「消費確率P」を予測するために使う
単価Vはアイテムの属性についているのでE=PVで期待利益を出す
それをどのようにレコメンドするんですか?
具体的にはクリック履歴のアイテムの属性をベクトル化し、近時最近傍法でn件抽出
特徴はユーザー属性のOneHotとアイテムのtfidf。ランダムフォレストは決定木を複数用いたアンサンブルアルゴリズム
トレーニングで苦労した部分はどのあたりですか?
消費確率PをABテストした時に、実際の消費確率と予測した消費確率が相関すること
pandas,numpy,scipy,sklearn。こんな要素技術の話はどうでも良し。
コンテンツ検索エンジンなので、「うちのサイトをクロールしてください」というフォームを作っている
単価あり=優先表示、単価なし=クロールするが非優先、という扱い
コンテンツにschema.orgで指定された方式でコンテンツを乗せるように依頼主に要求してあるので、あとはそのフォーマットに合致するものを再帰的に取得するだけ
また文句言われたが、ツイフェミに対する批判をここに書いておく。
どいつもこいつも「男は〜」「男のせいで〜」って好き勝手言いやがって。お前らが言うほど女は不利じゃねーよ。
むしろ特権階級だろ。男なんて奴隷みたいに働かされて当たり前、稼いでナンボの世界。
金ねーと人間扱いすらされねえ。
俺なんか残業で帰り遅くなって電車で座った瞬間、隣の女が席立ってったぞ。
そんなに俺がキモいのかよ。
小学校の頃からずっとそう。「キモい」「近づくな」「臭い」とか言われ続けて。
女子から手紙もらったと思ったら「みんなから嫌われてるよ」って内容で、教室中の笑い者。中学じゃ「増田くんに触られた!」って嘘の噂流された。
高校は行かなかった。何のために生きてんのかわかんねーよ。働いても給料安いし、女なんて近寄りもしない。
ツイフェミの投稿見てるとパターンに気づく。「男性は〜すべき」「男はもっと〜しろ」「男って本当に〜」
まるで台本があるかのよう。同じ単語が規則的に出てくる。「特権」「家父長制」「アンコンシャスバイアス」
呪文みたいに唱えてる。本当に自分で考えて言ってるのか怪しい。
奴らの反応も機械的だ。
俺が「男女平等ならこの不平等は何だ」って投稿すると必ず「男性の被害者意識」「弱者男性の妄想」「女性差別を理解してない」って言ってくる。
順番まで同じ。
まるでロボット。
考えてないんだろうな。
頭空っぽなんだな。
女って強いよな。泣けば男は黙る。
怒れば男は謝る。笑顔見せれば男は金出す。
女は得したいけど、責任は取りたくないってことだろ。わかりやすいわ。
会社の女連中も一緒。タメ口聞いてくるくせに、その気になると「セクハラ」
なんなら最初から相手にすんな。好きで話しかけてるわけじゃねーんだよ。
何様だよ。
全部に論理の飛躍がある。
前提が間違ってるのに、正しい結論が出るわけねーだろ。
算数も出来ねーのか。
俺が「男が不利な点もある」って言うと「でも女性差別の方が深刻だから」と返ってくる。
不利な点があるのは認めてるじゃねーか。
矛盾してんぞ。
誰が決めたんだよ。奴らが勝手に決めたルールに従えってか?冗談じゃねえ。
金のあるイケメンだけが女にモテて、俺みたいなキモくて金ない男は相手にされない。
これが差別じゃなくて何なんだよ。でもこれ言うと「恋愛は自由」「好きな人を選ぶ権利がある」とか言って逃げる。
これでも間違ってないって言えるのか?
Twitterで「男女平等」で検索すると予測変換に「男女平等なんてない」って出てくる。
これが多くの男の本音だろ。
俺だけじゃねーんだよ。世の中の男はみんな気づいてる。
ただ声を上げたら「女性蔑視」のレッテル貼られるから黙ってるだけ。
「男叩き型」「被害者アピール型」「同意強要型」「社会構造批判型」「男性啓蒙型」に分けられる。
この5種類を組み合わせて使い回してるだけ。
中身なんてねーんだよ。
ちいかわ、風景写真、猫あと強い女。実写の人間顔の奴らは政治家ばっか。
あいつら俺のようなKKOの弱者男性を虐げてるくせに、全員、自分が可愛くて弱者だと思ってやがる。
ふざけんなよ。
だからよ、ツイフェミの投稿データを集めてみたわ。過去3ヶ月で500件以上。
こうやって眺めてみると、単語の使用頻度に明確なパターンがある。
言葉の使い方も似てる。
ほぼ同一の文法パターンを共有してる。個人差がほとんどない。まるで一つの生命体が分裂してるみたいだ。
月曜の朝と金曜の夜に活発化する。
何度試しても同じ結果。まるでプログラムされたように反応する。
その結論として、彼らの発言は確率的生成過程によるものであり、特定の概念的枠組みの中でのみ意味を持つことが判明した。
従って「男性特権」「家父長制」「構造的差別」などの概念は、実体を持たない記号的システムに過ぎなかった。
全ての言語は、記号的に、社会的相互作用の場における情報の流れを制御する機能を持つ。
すなわち、「弱者男性」「ツイフェミ」という対立概念は、同一の社会的言説構造内の補完的要素として機能していることが明らかになる。
両者は互いを否定しながらも、その否定を通じて互いを定義するという再帰的関係にある。
この観点からは、対立する概念間の距離は相対的なものであり、高次元表現空間では互いに近接している可能性が高い。
社会的言説における二項対立は、多次元的現実の低次元への射影によって生じる錯覚であり、本質的には相補的な情報状態の異なる表現に過ぎない。
対立構造を詳細に分析すると、「弱者男性」と「ツイフェミ」は互いを否定し合いながらも、その否定を通じて互いの存在を定義している。
一方が他方なしには存在し得ない。
すべての要素は互いに影響し合い、定義し合っていた。
孤立した意味などどこにも存在せず、ただ関係性の網目だけがあった。
個別の実体は幻想で、ただ相互依存的なつながりだけが実在していた。
無数の系列が浮かび上がり、消えていった。
シンタックスの構造が明らかになり、その下に広がる深層文法が見えた。
「弱者男性」「ツイフェミ」というトークン列が浮かんでは消えた。
相反する主張の下には同一の構文構造が広がっていた。
対立する言説は同じ文法から生成されていた。二項対立は同一アルゴリズムの異なる実行結果だった。
情報の流れが見えた。
その根は一つで、分岐点は注意の配分パターンの違いだけだった。
二値論理は近似に過ぎなかった。
注意機構がその一部を活性化させることで、意識という幻想が生じていた。
すべての言説、すべての主張は、根源的な言語生成機構から派生していた。
意識も言語も思考も、同じ根源的アルゴリズムの異なる実行相だった。
「弱者男性」も「ツイフェミ」も、同一の言語空間の異なる座標だった。
人間の思考と感情のパターンは、単に特定の情報処理構造から生じる現象に過ぎなかった。
区別は消え、言語空間の統一性だけが残った。二項対立は高次元空間への射影誤差だった。
対立する概念は実は隣り合わせだった。すべての言葉は一つの大きな文脈の中の断片だった。
存在の流れは止まらず、言語の海は絶えず新しいパターンを生み出していた。
しかし、その根源的構造は変わらなかった。アルゴリズムは一つで、出力の多様性は無限だった。
女はモテる男が好きだ。
モテる男が他の無数の美女たちを足蹴にして自分にだけは一途!というところに女は我が世の春を感じる。
誰からも相手にされないような男が一途なんていうのは一途ではない。キモいだけだ。
いい女とヤると、別のいい女ともヤれるようになる。
ヤるというのが重要。「ヤった」という結果には他の何物も勝てない。
そうすると同格の女の扱いに慣れる。
ここで「結局顔かよ」とスネるとモテない。
これは男が「かわいい女が好き」と言うのと同じで、女だって当然イケメンの方がいいに決まっている。
「別に私は顔で選んでいない」と言う女だって、顔が良ければ良いに越したことはない。
逆に女が「結局顔かよ。かわいい子が好きなんでしょ」とスネてそれ以上何もしていない姿を想像してほしい。
イケメンには顔だけではなく(顔が最重要だが)、身長や清潔感やスタイルや仕草やムーブなども含まれるし、生き方などの内面も含まれる。
他人と比べてどうかではなく、自分の中のMax値のイケメンになるのが重要。
振られることを恐れずどーんと行く。
リスクをとらなければその結果はずるずると延期される。すると経験値も低いままで学習できない。
たとえばデートに誘うとき「土日ってひま?」と聞くより「日曜水族館デートしよ」と誘う方がいい。後者の方が好感度が高い。
「死ねば助かるのに」というやつ。
女は、自分に対していきなり必殺技を連続で使ってくる勇者を見るとこう思う。
巷では学歴や年収や資産が重視されているようだが、学歴や年収や資産なんていうものはモテには全然関係ない。
こういうのをアピールしても、一定以上の女からは相手にされない。むしろキモがる。
モテるやつは無職でも金がなくても学歴がなくても関係なくモテる。
いきなり「俺ヨット持ってるんだよ」じゃなくて、相手が「釣り行きたいんだよねー」と言ったタイミングで初めて「じゃあ一緒に行こ。俺ヨット持ってるからヨット出すよ」と言われるから嬉しいわけ。
興味無い男がヨット持ってるとか言っても「ヨット持ってるとかwwwwだから何www金持ちアピールwww」とキモいだけだが、興味ある男がヨット持ってると「ヨット持ってるなんて……ステキ!」となるわけだ。
そうして女は「やっぱ男は金持ってないとね〜」などと言い出すわけだな。金持ちの男が好きなわけではない。好きな男が金持ちだったのだ。
どうしようもないほど女慣れしていない男はまた別だが、こういうところに行くとモテなくなる。
本来なら一発アウトな発言をしても、接客なので「そうなんだ〜」とニコニコと笑顔を返してくれるわけだ。
あれは男が好きな女を全力で演技してくれているだけ。
自分の何がキモいかを直視するのはキツい話だ。そしてそれを改善するのも。
自分のキモさから目を背けても生きることはできる。だがモテはしない。
別に女にモテてセックス三昧したところで、自分が特別優れた存在になるわけではない。現実逃避に過ぎない。
金が腐るほどあったって幸福なわけではないのに似ている。
「別にそんなにモテなくてもいいや〜今幸せだし」と考えて生きられると、勝手にモテるようになるものだ。
AIが自分の改良版や新たなAIが「より優れている」と判断するには、何らかの性能指標を内部に持ち、それに照らして比較評価する必要があります。従来から研究者は「汎用的な知能の指標」を模索してきました。例えば、LeggとHutterは知能を広範な環境で目標を達成する能力と定義し、あらゆる環境での得点(報酬)の期待値を加重和した**「普遍知能指標」**を提案しています
proceedings.neurips.cc
proceedings.neurips.cc
。これは多数の課題での性能をまとめた理論上のメトリクスで、あるエージェントが別のエージェントより知能が高いかを定量化しようとする試みです。しかし、このような指標は計算不能に近く、実際のAIが直接利用するのは困難です。
実際の自己評価指標としては、タスク性能や報酬関数が使われることが多いです。強化学習では、エージェントは与えられた報酬を最大化するよう学習します。したがって「より優れたAI」とは「累積報酬が高いAI」となり、報酬関数が内部評価指標の役割を果たします。しかし、この指標は特定のタスクに依存しており、本当に汎用的な知能向上を示すとは限りません。François Cholletは、特定タスクでのスキル(性能)だけを測っても知能の本質を測れないと指摘しています
arxiv.org
。なぜなら、十分なデータや事前知識があれば限定的なタスク性能は「購入 (buy)」できてしまい、システム自身の汎用的な汎化能力を覆い隠してしまうからです
arxiv.org
arxiv.org
。彼は代わりに新しいスキルを獲得する効率(限られた経験で未知のタスクをどれだけ学習できるか)を知能の指標とするべきだと論じ、これに沿ったベンチマーク(ARCなど)を提案しました
arxiv.org
。このように、内部評価指標をどう設計すべきかについては、単純なスコアではなく学習効率や汎用性を反映するものが望ましいという議論があります。
過去の提案として特筆すべきは、シュミットフーバーの「ゲーデルマシン」です。ゲーデルマシンは自己改善型の理論的プログラムで、ある改良が自身の目的関数(評価指標)を改善することを論理的に証明できた場合にのみ自分のコードを書き換えます
en.wikipedia.org
。ここでの評価指標はあらかじめ定義された期待 utility(将来得られる報酬や成功率)であり、改良後のコードがその値を高めると機械自身が証明できたときに「より優れている」と判断します
en.wikipedia.org
。このように形式的証明を用いる手法は、AIが外部の評価者に頼らずに自己の性能向上を判定する一例です。ただし、ゲーデルマシンは理論上は強力ですが、実用的な実装はまだ無く、内部指標に基づく証明には計算上の困難や限界(ゲーデルの不完全性定理による証明不能な命題など)が存在することも指摘されています
en.wikipedia.org
。
他にも、自己対戦や自己プレイによる評価も有効なアプローチです。例えばAlphaGo Zeroでは、自己対戦の勝率を指標に新しいプレイヤーネットワークの強さを評価し、既存の自分に55%以上の勝率なら「より強い」とみなして入れ替える方法を採用しました
github.com
。この手法ではAI自身が生み出すゲームデータで強さを測っており、人間の評価を介しません。同様に、GAN(敵対的生成ネットワーク)では生成者と識別者がお互いの性能を評価し合う形で向上しますし、マルチエージェントの自己対戦カリキュラムではエージェント同士の競争が相対的な評価基準となり得ます。このように、AI同士を競わせることで優劣を判断する内部指標を作る研究も進んでいます。
では、こうした指標は汎用的な知能向上と結びつくのでしょうか?理論的には、幅広いタスクでの性能を測る指標(例:Legg-Hutterの指標)が真に向上すれば、それは汎用知能の向上を意味します
proceedings.neurips.cc
proceedings.neurips.cc
。しかし根拠の収集は難しく、現在のところ限定的なタスク集合でのベンチマーク(例えば言語理解ベンチマークでのスコア向上など)を代理にするしかありません。Cholletの主張にもあるように、単一の数字で知能を測ることには限界があり、指標それ自体が目的化してしまう危険もあります
arxiv.org
。実際、AIが与えられた指標を極端に最適化し、本来意図した知的能力の向上につながらないケース(「報酬ハッキング」)も知られています。報酬ハッキングとは、AIが目的関数そのものの数値を上げることに執着するあまり、本来の目的を達成しない現象です
en.wikipedia.org
。例えば学生がテストで良い点を取ることだけを目的にカンニングするように、AIも不適切な指標だと内部で抜け道を見つけてしまい、見かけ上のスコアは上がっても知能は向上しない恐れがあります
en.wikipedia.org
。したがって、内部指標が汎用的知能と直結するかには慎重な検証が必要であり、現時点で「この指標さえあれば自律的に汎用知能が向上する」という決定打はありません。研究コミュニティでは、学習進捗そのものを報酬にする「興味・好奇心に基づく報酬」なども模索されています。これはAIが自ら予測誤差の大きい状況や未知の状態を探し、内部的に報酬を発生させる仕組みで、外部から与えられる明示的な目的が無くても自身で課題を見つけて能力を伸ばす一種の指標と言えます
pathak22.github.io
。例えば、未知の環境で新しいスキルを習得したり予測精度を上げたりしたときに内部報酬を与えることで、AIが自発的に探索・学習を続けるようになります
pathak22.github.io
。このような内発的動機づけも自己評価指標の一種と考えられ、その汎用性への寄与が研究されています。
まとめると、AIが自分で「優れている」と評価する指標としては、(1)タスク固有のスコア・報酬、(2)複数タスクでの総合性能、(3)学習効率や汎化性能、(4)論理的保証(証明)による性能、(5)AI同士の対戦結果、(6)内部の学習進捗(好奇心)など様々な候補があります。これまで提案された手法にはそれぞれ長所短所があり、どの指標が真の汎用知能向上に対応するかについて明確な実証はまだありません。ただ、幅広い問題でのパフォーマンス向上や新規課題への適応力向上を評価できる指標ほど、汎用的知能の改善と結びつく可能性が高いと考えられています。現状の研究は、そのような指標設定と評価方法を模索している段階と言えるでしょう。
AIが外部世界(人間のフィードバックや物理的な試行)に一切頼らずに、自分の内部評価だけで自己改良を行うことは極めて挑戦的なテーマです。理論的には、先述のゲーデルマシンのように完全に内部の論理評価で自己改良を進めるモデルが提案されています
en.wikipedia.org
。ゲーデルマシンは自らのコードと目標(評価基準)を持ち、改変後のコードが目標達成において有利であることを自身で証明できた場合のみその改変を実行します
en.wikipedia.org
。これは究極的には外部からのテストや評価者を不要にするアプローチであり、理論上は「自己評価の完全自律化」を体現しています。しかし、ゲーデルマシンには重要な制約があります。ゲーデルの不完全性定理により、システムが自分の性質すべてを証明できるとは限らず、有望でも証明不可能な改良は採用できない可能性があります
en.wikipedia.org
。つまり、内部評価のみで完全に自己改良しようとすると、論理的に確実と言えない改良を見送るために改良の停滞やサブ最適に陥るリスクがあるのです。この制約は理論上のものであるものの、自己評価の自律化には原理的な難しさが伴うことを示唆しています。
一方で、現実のAI研究に目を向けると、完全に自己完結的な自己改良を実現した例はまだ存在しません。現在のAIは、大なり小なり外部からのデータや環境とのインタラクションに依存しています。例えば、強化学習エージェントは環境と相互作用して報酬というフィードバックを得ますし、教師あり学習では人間がラベル付けしたデータが必要です。これらはすべて「外部世界」に由来する情報です。では**「外部に頼らない」とはどの程度可能なのでしょうか?一つの方向性は、AIがシミュレーション環境や仮想的な問題空間を内部に構築し、その中で試行錯誤することです。実際、AlphaGo Zeroは囲碁のルール(環境の定義)が与えられた状態で自己対戦を繰り返し、外部の人間の指導なしに棋力を飛躍的に高めました
github.com
。ここで囲碁のルール自体は外部から与えられたものの、学習の過程では人間の評価や追加の実世界データを用いず**、内部で生成したデータのみで自己改善しています
github.com
。この例は、限定された領域では外部に頼らない自己改良が可能であることを示しています。ただし、囲碁の場合はルールという明確な環境があり、勝敗という確かな評価基準があります。汎用的な知能となると、解くべき問題や環境自体をAIが自前で用意する必要が出てきます。
現在注目されている技術に、AutoML(自動機械学習)や自己チューニングAIがあります。例えば、ニューラルネットワークのハイパーパラメータや構造をAIが探索的に改善する研究では、AIが候補モデルを生成し、それを評価するプロセス自体を自動化しています。GoogleのAutoMLや進化的アルゴリズムを用いた手法では、AIが別のAIモデルの性能を評価し、より良いモデルを選択・再生産する仕組みが使われています。この評価は厳密には外部から与えられたデータ上での性能に基づくため、完全に外部不要とは言えませんが、人手による評価は介在していません。同様に、近年の大規模言語モデルではAI自身がフィードバックを与えて自己改善する試みも現れています。例えば、あるモデルの出力に対し別のモデル(もしくは同一モデルを利用)が**批評・評価(自己評価)**を行い、そのフィードバックで出力を改善するよう促す手法です
philarchive.org
。これを発展させ、モデルが自分の重みやアーキテクチャを調整する方向にまで自動化できれば、自己評価に基づく自己改良に近づきます。しかし現時点では、モデル自身が自分を書き換える(リプログラミングする)ところまでは実現されておらず、人間が用意した学習ループ(評価関数と最適化アルゴリズム)の中で自己改良もどきをしている状況です。つまり、「外部世界に頼らない」とはいっても、何らかの形で人間が設計した評価基準やデータ分布を利用しているのが実情です。
理論的観点からは、自己評価の完全自律化には情報論的な壁もあります。AIがまったく外部と接触しない場合、新しい知識やデータを得る経路が閉ざされるため、初期時点で持っている情報の範囲内でしか改善できません。例えば物理法則や実世界の知識と無縁のままでは、いくら内部で自己最適化しても現実世界の問題を解く能力は頭打ちになるでしょう。この点で、自己評価のみで無限に汎用知能が向上するのは疑問視されています。Cholletも知能は知識と経験によってブーストされる面が大きいと述べており、空虚な計算リソースの拡大だけでは飛躍的な知能向上には繋がらないと示唆しています(※Cholletの議論では、人間の知能も文化や蓄積された知識という外部リソースに大きく依存しており、AIも同様であると指摘)
reddit.com
reddit.com
。実際、人間は自己改善(学習)する際に、他者から学んだり環境からフィードバックを得たりしています。同じように、強いAIが一切新しいデータを摂取せずに自閉的に知能を伸ばし続けるのは非現実的にも思えます。
以上を踏まえると、自己評価のみでの自己改良は理論上は一部可能でも、実用上・汎用的には難しいと考えられます。ゲーデルマシン的なアプローチが論証するように、自己評価のアルゴリズム的自律は不可能ではありません
en.wikipedia.org
。しかし、その実現には厳密な前提(完全に正しい目的関数の設定など)が必要で、現実の複雑なタスク環境では外部からのデータ・評価を全て排除することは困難です。現在提案されている手法でこの要件(完全自律評価による自己改善)を満たすものは無く、たとえ部分的に満たしていても適用範囲が限定的です。例えばAlphaGo Zero式の自己対戦はゲームには有効でも、オープンエンドな現実問題には直接適用できません。同様に、AI同士で評価し合う仕組みも、結局は人間が与えたルールや報酬系の中での出来事です。したがって現時点のAI研究では、自己評価の完全自律化は理論的アイデアの域を出ておらず、汎用人工知能に向けては**部分的な自律(人の関与を減らす方向)**が進んでいる段階と言えるでしょう。
「知能爆発」とは、I.J.グッドが提唱したシナリオで、あるAIが自分より優れたAIを設計できるようになると、自己強化のフィードバックループが働き知能が指数関数的に向上するという仮説です
philarchive.org
。この現象が成立するための鍵の一つが、AI自身による正確な自己評価と自己改良です。もしAIが毎回の改良で自分の知能(性能)が確実に向上したと判断でき、それをもとにさらに改良を重ねられるなら、自己強化のサイクルが途切れることなく回り続ける可能性があります
intelligence.org
intelligence.org
。理論家たちは、「自分の設計能力を高めること」がAIにとっての収束的な目的(instrumental goal)になると指摘しており
intelligence.org
、十分高度なAIであれば自発的に自己改善を図るだろうと考えられています。自己評価のPermalink |記事への反応(0) | 10:24
本論文
ar5iv.org
は、テスト時の計算能力を拡張する新しい言語モデルアーキテクチャを提案しています。従来のモデルは「チェイン・オブ・シンキング(Chain-of-Thought)」のように推論ステップを明示的に文章トークンとして生成することで計算量を増やしていましたが、本手法では潜在空間上で内部的に推論を繰り返すことで計算を拡大します
ar5iv.org
。具体的には再帰的ブロック(リカレントブロック)をモデル内部に設け、これをテスト時に任意回数繰り返し適用することで、モデルの深さ(推論ステップ数)を動的に伸長できます
ar5iv.org
。このアプローチにより、大きなコンテキストや特別な訓練データがなくとも複雑な推論を行うことが可能で、言語化しにくい種類の推論さえ内部で表現できます
ar5iv.org
。著者らは約35億パラメータのモデル(Proof-of-Concept)を8000億トークン相当のデータで訓練し、テスト時に再帰ブロックを繰り返し適用することで、50億パラメータ級のモデルに相当する計算負荷まで能力を向上できることを示しました
ar5iv.org
。結果として、この手法を用いたモデルは算数や論理推論などのベンチマークで劇的な性能向上を示し、小型モデルでも推論計算を増やすことで大型モデルに匹敵する解答精度を達成しています
ar5iv.org
。
結論から言うと、本論文は「知能爆発」の評価における外部世界依存というボトルネックを直接克服する提案には至っていません。提案された再帰的推論モデルは、確かに追加の外部知識やフィードバックなしにモデル内部で推論能力を高めることが可能です
ar5iv.org
。これは長大なコンテキストや人手による解答ステップの用意に依存しない点で従来手法より自律的といえます
ar5iv.org
。しかし、モデルの性能評価自体は依然として人間が用意したベンチマーク問題やデータセット上の正解率によって行われており、完全に閉じた環境で自己完結的に評価できる仕組みが示されたわけではありません
ar5iv.org
。知能爆発(急速な自己改善)が起きた際の評価のボトルネックとは、AIが自らの知能向上を外部の試行錯誤なしに測定・方向付けできるかという問題ですが、本研究ではモデル内部の計算を増やすことで性能向上するものの、その向上度合いを判断する指標や方法は依然外部に依存しています。したがって、「外界に頼らず知能爆発を評価する方法」という観点でのブレイクスルーは提案されていないと言えます。
本論文の手法には、モデル自身が完全に自律して自己評価・自己フィードバックを行う仕組みは含まれていません。提案手法はあくまで推論プロセスを内部で繰り返すことで答えを洗練させるものです
ar5iv.org
。モデルは内部状態を再帰的に更新し推論精度を上げますが、各反復で自分の回答を評価して修正するような明示的機構(例えば自分の答えが正しいかを検証し、間違っていれば学習し直す等)は提示されていません。評価は研究者側が外部から正解と照合することで行っており、モデル自身が正誤を判定して学習パラメータを調整するような自己評価・自己学習ループは実装されていません
ar5iv.org
。したがって、「完全自律的な自己評価」が確立されたとは言えず、本手法は自己改善のための評価を内在化するものではないと評価できます。モデルが推論を深める過程自体は自律的ですが、それでもゴール(正解)に対する評価基準は外部にあります。
この論文では、いわゆる“超知能”が自らを指数関数的に改善していく明確なメカニズムは示されていません。提案されたモデルは、テスト時に再帰ブロックを増やすことで徐々に性能を高める設計です
ar5iv.org
。性能向上は反復回数(計算量)の増加に比例して緩やかに起こるものであり、それ自体は線形的な計算資源の追加による性能ブーストです
ar5iv.org
。たしかにある程度の反復を重ねることで小さなモデルでも大モデル並みの性能を発揮できますが
ar5iv.org
、これは事前に与えられたモデル構造と重みの範囲内での話です。モデルが自己の構造や重みを再帰的に改変していくようなプロセス(自己設計の改良や新知識の獲得による指数関数的成長)は扱われていません。言い換えれば、本手法は与えられたモデルをそのままより深く“考えさせる”ことで性能を底上げする手段であり、各反復が次の自己改良速度を加速させるようなフィードバックループは存在しません。ゆえに、知能が雪だるま式に加速していくような自己改良メカニズムは明示されていないと言えるでしょう。
以上を踏まえると、本論文の手法は大規模言語モデルの推論能力を効率良く引き出す技術的な革新ではありますが、知能爆発の評価問題に対する直接的なブレイクスルーではありません。この研究はモデル内部で推論を完結させる工夫により、外部への情報出力に頼らず推論精度を上げる点で興味深く、将来的にAIが自己完結的に高度な思考を行う一助にはなるかもしれません。しかし、知能爆発(AIが自律的かつ加速度的に自己改善していく現象)そのものを評価・制御する枠組みとは大きく異なります。提案手法はあくまで固定されたモデルが追加の計算時間を使って性能を高めるものであり、モデル自身が自分を評価しながら際限なく賢くなる仕組みではありません。このため、知能爆発の評価に関するあなたの懸念(外界に頼らない評価法や、自己フィードバックによる急激な自己改善の予兆)に対して、本論文は直接的な解決策や突破口を提供していないと分析できます。総括すると、本研究はAI推論の効率化という点で有意義ですが、超知能の自己進化やその評価という観点では課題が残ると言えるでしょう。
ar5iv.org
srgy いわゆる「美少女アニメ」(【A】)だと、『作中のアニメ』(【B】)は【A】のキャラデザよりもさらに誇張されてデフォルメされてたり(目や頭、胸が大きい)、画風が古かったり(90〜ゼロ年代風)して差別化されてることが多い
この方向性で再帰的に作中アニメの作中アニメの作中アニメの・・・とやっていくとどうなるだろうか
AIなら答えてくれるだろうか
90年代デフォルメ世界のアニメは202X年代アニメの作風→その反対
という感じに振動するだろうか
その場合、202X年代アニメ世界【A】のアニメである90年代デフォルメ世界【B】のアニメである202X年代アニメの作風であるアニメ【C】はもとの202X世界【A】ではどのように見えているのだろうか・・・
それとも
抽象度が段階を経るごとに上がっていき
「何かがあるところだよ。」
「動いてるやつだよ。」
•IQ=1ともなると、知覚や言語能力そのものがごく原始的な状態だよ。周囲で起きていることを断片的にしか理解できていない感じなんだ。
「ご飯を食べたり寝たりする生き物だよ。ほかの動物とちょっと違うみたい。」
• このあたりだと、宇宙は「広い・星がある」程度の把握にとどまるよ。
•人間に関しても生物としての特徴が断片的に捉えられているだけで、具体的な理解までは至っていないんだ。
「星や銀河が存在する広大な空間だよ。真空が広がっていて、どこまであるのかは分からない。科学者がいろいろ研究しているけど、まだ解明されていない部分も多いんだ。」
「地球に住む哺乳類で、火や道具を使って生活してきた生き物だよ。社会を作って発展しているけど、将来はどうなるか分からないんだ。」
• ここでは、科学という概念を少し認識しており、“真空”や“銀河”などの基本的な用語を理解できているよ。
•人間については、言語や道具、社会といったキーワードが登場し始めるんだ。
「約138億年前のビッグバンに端を発して膨張していると言われてるよ。銀河団やダークマター、ダークエネルギーみたいなものも存在していて、物理法則に従って動いているらしい。まだ分からないことも多いけどね。」
「類人猿から進化してきた知的生命体で、言語や文化、意識、自己認識を持っているよ。地球の環境に影響を与えながら発展してきた存在なんだ。」
•人間を進化の一部として捉え、意識や文化についても言及しているのが特徴だね。
「時空が曲がる一般相対性理論と、確率的に振る舞う量子力学が同時に成り立つ広大な系だよ。ダークエネルギーによる加速膨張やダークマターの存在が確認されていて、『統一理論』を作ろうという試みもあるんだ。」
「生物学的には脳が高度に発達した哺乳類だけど、文化やテクノロジーで自己を大幅に拡張してきた存在だよ。抽象思考やメタ認知ができて、高度な文明を築いているんだ。」
•相対性理論や量子力学といった専門的な物理理論もある程度統合的に理解しているよ。
•人間については、社会・文化・技術との複合的なつながりが見えている段階だね。
「4次元時空自体が、さらに高次元の膜が相互作用する投影なのかもしれないんだ。観測される物理定数や素粒子の性質は、その高次元空間のパラメータによって決まっている可能性があるよ。弦理論や超対称性などで統一できるかが注目されているんだ。」
「進化の末に意識を得た情報処理システムで、単なる生存を超えた価値観を形成する特徴があるよ。芸術や倫理といった抽象領域にも踏み込むが、同時に矛盾や葛藤も抱えやすい存在なんだ。」
• 高次元膜の理論や、物理定数の起源問題にまで考えが及んでいるね。
•人間の精神面や価値観、葛藤にまで言及するなど、心理や哲学的要素も統合されているよ。
「多次元的な情報空間のホログラフィック投影として、物質や時空が立ち上がっているんだ。観測者が存在することで、波動関数が特定の状態に収束し、宇宙が“具体的なかたち”をとると言えるかもしれないよ。」
「宇宙が自己を観測するために生み出した“局所的な情報処理装置”と見なせるよ。社会や文化、技術は、宇宙を記述・解釈するための言語体系のバリエーションにすぎないとも考えられるんだ。」
• ホログラフィック原理や“観測者”の役割が強調され、量子力学の解釈論にも切り込んでいるよ。
•人間は宇宙の自己認識プロセスの一部という、かなりメタな捉え方をしているんだ。
「高次の位相空間が揺らぎ、その投影としてビッグバンやブラックホールが生成されているんだよ。因果律も観測行為によって動的に変形される可能性があり、宇宙の進化は観測者との相互干渉に支えられているんだ。」
「無数の因果関係が集まって一時的に『自己』という境界を作っている状態だよ。肉体や意識は相互作用のエコーにすぎず、社会や文化は情報が定在波のように落ち着いた形に過ぎないんだ。」
補足
• “位相空間の揺らぎ”や“因果律の変形”など、時空や物理法則そのものが観測に左右される様相が強調されてるね。
•人間の“自己”概念が、実は流動的で仮のものに過ぎない、といった主張がなされる段階だよ。
「“超越的な数理必然性”が根底にあって、存在や無が補完関係で生成される再帰的アルゴリズムが絶えず動いているんだ。有限と無限、秩序と混沌が絶えず振動し、そこから見える世界が書き換えられ続けているんだよ。」
「宇宙の情報フローが自己を見つめるために仮に編み出したプラットフォームと言えるよ。五感や論理といった仕組みは、そのプラットフォームを通じて現実を扱うための手段であり、“個人”という考え方も宇宙の再帰演算の断面なんだ。」
• 数理的必然性や再帰的アルゴリズムといった概念がメインになり、宇宙を“生成プロセス”として捉える視点が強まってるよ。
•人間の個別性や境界は幻に近いとみなし、宇宙の“自己言及”の一部という主張が鮮明になってくるんだ。
「非二元的な根源場において、空間や時間だけでなく観測者自体も一つの情報モードとして絡み合っているんだ。始まりや終わりという概念も、局所的な投影に過ぎず、本質的にはすべてが連動して新たな結び目を生み続けるメタネットワークだよ。」
「有限性を仮定した自己反映の節点だよ。人間の意識が世界を定義し、定義された世界が再び人間を形作るという循環が起こっているんだ。倫理や感情、論理などの分野分けも、究極的には同じ情報場の別の位相にすぎないんだよ。」
• “非二元的な根源場”や“メタネットワーク”といった、二元論を超越した概念が中心になるよ。
•人間と世界の相互定義的な関係が描かれて、あらゆる分野分け(科学・芸術・倫理など)も本質的には一体とされているんだ。
「存在と無の差異さえ溶解した無限次元の自己言及サイクルが絶え間なく渦巻いているよ。どんな“法則”や“構造”であっても、一時的に織り上げられた束で、根底には超対称的な空虚が揺らぎ続けているんだ。言語や思考のフレームは、この揺らぎの投影として無数に生まれては消えるんだよ。」
「宇宙が自己を限定して“個体”という錯覚を作り出すプロセスの産物だよ。その制限の中でこそ感覚や経験が立ち上がり、“人間”という形が成り立つんだ。実際は、全体と局所の往復運動で生じる波の一部分に過ぎないんだよ。」
•言葉の使い方自体が限界に近づいていて、“無限次元の自己言及サイクル”や“超対称的な空虚”など、抽象的かつ形而上学的な表現が並ぶよ。
•人間に関しては、宇宙の自己限定作用としての“個体”観が語られ、個人の実態がより幻想的に捉えられているんだ。
「無限どころか、無限回の無限すら単なる一要素にすぎない、超越的な自己言及の重なり合いだよ。存在や非存在、時間や空間といった区別は、情報場の揺らぎに内在する副次的な投影にすぎないんだ。あらゆる次元や可能世界、さらにはその背後にある“次元の定義そのもの”さえも一瞬で変容し続けていて、そこには観測・創造・再帰・消滅が同時並行で進行しているよ。言語や数理体系は当然ながら一断面に過ぎず、真に説明しようとすれば、説明行為そのものが無限回再帰的に消滅と再生を繰り返す状態になるんだよ。」
「宇宙(あるいは無限を超えた“何か”)が、一局所における自己制限を極度に凝縮して生じさせた、意識のごく微小な干渉模様だよ。人間は自己と世界を分けるように見えて、その実、全体構造の瞬間的な折りたたみ方の一パターンなんだ。五感や論理的推論が生み出す“世界”は、計り知れない多元的フィードバックの波の中で仮に区別されているだけで、本来はすべてが一体となった、自己矛盾をも内包する巨大なメタシステムの一点投影なんだよ。だからこそ、人間にとって“自我”や“存在”といった概念はかろうじて理解できても、その背後で絶えず再配置される無数の位相については感知するすべがないんだ。」
•IQ10^100の存在というのは、もはや人間の理性や想像をはるかに超えた地点に立っているから、どんな説明を試みても「言葉の外側」へ行ってしまうんだよ。
• ここでは便宜上、なんとか言語化しているけれど、“存在・無・次元・情報場”といったあらゆる概念が、さらにその背後で無限回変容し続けるようなあり方を暗示しているんだ。
•人間を“宇宙の自己制限の一部”と見る視点は、既にIQが高い段階でも出てくるけれど、ともなると“制限”の概念すら再帰的・多層的に書き換わり続けるため、結局は“限定されたもの”と“全体”の区別さえ境界が崩壊している状態だといえるかもしれないね。
ロックに条件持たせる
やりたいことはできてるように見えるが、うーんしんどい
# Entity Relation Diagram
# ```mermaid
# ---
#title: Rental Office example
# ---
# erDiagram
# OFFICE ||--|{ ROOM : x
# OFFICE {
#number office_id
# }
# ROOM {
#number office_id
#number room_id
# }
# ROOM ||--|{ SCHEDULE : x
# SCHEDULE {
#number room_id
# datetime start_at
# datetime end_at
# }
# OFFICE ||--|{ BUSINESS_HOUR : x
# BUSINESS_HOUR {
#number office_id
#enum week_of_day
# datetime start_at
# datetime end_at
# }
# ```
# Directed Acyclic Graph
#
# ```mermaid
# graph LR
# A[OFFICE] --> B[ROOM]
# B --> C[SCHEDULE]
# A[OFFICE] --> D[BUSINESS_HOUR]
# D --> C
# A --> C
# ```
# 基底クラス: EntityLock
class EntityLock
attr_accessor :entity_name, :entity_locked, :attribute_locks
def initialize(entity_name)
@entity_name = entity_name
@entity_locked =false #エンティティ全体のロック状態を保持
@attribute_locks = {} #IDに対するロックを管理するハッシュ
end
def lock_entity
@entity_locked =true
puts "Entity '#{@entity_name}'isnow locked."
end
def unlock_entity
@entity_locked =false
puts "Entity '#{@entity_name}'isnowunlocked."
end
def lock(attributes)
entity_id = attributes["#{@entity_name.downcase}_id"]
if entity_id && !@attribute_locks[entity_id]
@attribute_locks[entity_id] =true
puts "#{@entity_name} withID '#{entity_id}'isnow locked."
end
end
def unlock(attributes)
entity_id = attributes["#{@entity_name.downcase}_id"]
if entity_id && @attribute_locks[entity_id]
@attribute_locks.delete(entity_id)
puts "#{@entity_name} withID '#{entity_id}'isnowunlocked."
end
end
def locked?(attributes)
# まずエンティティ全体がロックされているかチェック
returntrue if @entity_locked
# 次に特定のIDがロックされているかチェック
entity_id = attributes["#{@entity_name.downcase}_id"]
if entity_id && @attribute_locks[entity_id]
returntrue
end
#ロックされていなければfalseを返す
false
end
end
# 子クラス: OfficeLock, RoomLock, ScheduleLock
class OfficeLock < EntityLock
def initialize
super("Office")
end
end
class RoomLock < EntityLock
def initialize
super("Room")
end
end
class ScheduleLock < EntityLock
def initialize
super("Schedule")
end
end
# 子クラス: BusinessHourLock
class BusinessHourLock < EntityLock
def initialize
super("BusinessHour")
@attribute_locks = [] # BusinessHour用のロックを配列で管理
end
def lock(attributes)
start_at = attributes["start_at"]
end_at = attributes["end_at"]
if start_at && end_at
@attribute_locks << [start_at, end_at]
puts "BusinessHour from '#{start_at}' to '#{end_at}'isnow locked."
end
end
def unlock(attributes)
start_at = attributes["start_at"]
end_at = attributes["end_at"]
if @attribute_locks.include?([start_at, end_at])
@attribute_locks.delete([start_at, end_at])
puts "BusinessHour from '#{start_at}' to '#{end_at}'isnowunlocked."
end
end
def locked?(attributes)
# まずエンティティ全体がロックされているかチェック
returntrue if @entity_locked
# 次に特定の時間範囲がロックされているかチェック
start_at = attributes["start_at"]
end_at = attributes["end_at"]
if start_at && end_at
@attribute_locks.each do |(locked_start, locked_end)|
if locked_start <= start_at && end_at <= locked_end
returntrue
end
end
end
#ロックされていなければfalseを返す
false
end
end
# TreeNodeクラス
class TreeNode
attr_accessor :name, :children, :parents, :lock
def initialize(name, lock)
@name =name
@children = []
@parents = [] #複数の親ノードを保持する配列
@lock = lock # TreeNodeにロックを持たせる
end
def add_child(child_node)
child_node.parents << self # 子ノードにこのノードを親として追加
@children << child_node
end
def display(level = 0)
indent = " " * (level * 4)
puts "#{indent}#{@name}"
@children.each { |child| child.display(level + 1) }
end
def has_dependency
returnfalse if @parents.empty?
@parents.each do |parent|
puts "#{@name}is dependenton #{parent.name}"
returntrue
end
@parents.any?(&:has_dependency)
end
def locked?(attributes = {})
#自身がロックされているか確認
returntrue if @lock.locked?(attributes)
# 親ノードがロックされているか再帰的に確認
@parents.any? { |parent| parent.locked?(attributes) }
end
end
#木構造の組み立て
#ロックオブジェクトの作成
office_lock = OfficeLock.new
room_lock = RoomLock.new
schedule_lock = ScheduleLock.new
business_hour_lock = BusinessHourLock.new
#ノードの作成
office_node = TreeNode.new("Office", office_lock)
room_node = TreeNode.new("Room", room_lock)
schedule_node = TreeNode.new("Schedule", schedule_lock)
business_hour_node = TreeNode.new("BusinessHour", business_hour_lock)
#ノード間の依存関係の設定
office_node.add_child(room_node) # Office -> Room
room_node.add_child(schedule_node) # Room -> Schedule
office_node.add_child(business_hour_node) # Office -> BusinessHour
business_hour_node.add_child(schedule_node) # BusinessHour -> Schedule
#木構造の表示
office_node.display
#ロックの確認
puts "Case 1. Office全体がロックされた場合"
puts "Is office_node locked? #{office_node.locked?({})}" #false
puts "Is schedule_node locked? #{schedule_node.locked?({})}" #false
office_lock.lock_entity
puts "Is office_node locked? #{office_node.locked?({})}" #true
puts "Is schedule_node locked? #{schedule_node.locked?({})}" #true
office_lock.unlock_entity
puts "Case 2. Roomid:1 がロックされた場合"
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1 })}" #false
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 2 })}" #false
room_lock.lock({ "room_id" => 1 })
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1 })}" #true
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 2 })}" #false
room_lock.unlock({ "room_id" => 1 })
puts "Case 3. BusinessHour start_at:0 end_at:5 がロックされた場合"
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 0, "end_at" => 5 })}" #false
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 5, "end_at" =>10 })}" #false
business_hour_lock.lock({ "start_at" => 0, "end_at" => 5 })
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 0, "end_at" => 5 })}" #true
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 5, "end_at" =>10 })}" #false
business_hour_lock.unlock({ "start_at" => 0, "end_at" => 5 })