ファジーチューリングマシン:説明可能な人工知能へ向けて
人工知能システムが社会に浸透するにつれて、その安全性のために、説明可能な人工知能という考え方が重要になってきています。
ニューラルネットワークはパターン学習を得意としますが、いわゆるチューリング完全性を持つことも知られています。このため、通常のコンピュータの原理であるチューリングマシンを模擬できます。
この記事では、チャットAIに使われている大規模言語モデルについて、通常のコンピュータの構造の視点から分析します。そして、現在の人工知能が、あいまいさを持つチューリングマシン、つまりファジーチューリングマシンの性質を持っていることを突き止めます。
そして、ファジーチューリングマシンというキーワードを手がかりにすることで、人工知能をソフトウェア工学の観点から理解できることを示します。これにより、オブジェクト指向、テスト駆動開発、アジャイルソフトウェア開発、リファクタリングといったソフトウェア工学の考え方で、人工知能を理解することができます。
これにより、人工知能の可読性や保守性を高めることができ、説明可能な人工知能に向けた研究につながる道筋が見えてきます。
では、詳しく説明していきます。
■ニューラルネットとチューリングマシンの対比
例えば自然言語処理で、文字列をインプットとし、出力を1文字生成するニューラルネットシステムを考えてみましょう。
ニューラルネットは、学習済みのモデルを使用します。
1回の処理で、全ノードの計算を行って、1文字出力することとします。この時、以下のような仕組みを想定します。
1文字も出力しないという選択肢もありとする。
計算を行ったときに、ニューラルネット内にいくつか中間状態を保持するノードを用意しておく。
次回の処理では、これまで出力した文字列もインプットとする。
チューリングマシンとしてのコンピュータの仕組みで考えると、以下のような対応関係になります。
学習済ニューラルネット:処理系(CPUの命令セット、OS、ミドルウェア、ライブラリ)
処理回数:CPU動作クロック回数
中間状態を保持するノード:ヒープ領域のデータ
入力文字列:プログラムと定数データ
出力文字列:プログラムカウンタとスタック領域のデータ
この対比に基づいて考えると、ニューラルネットワークの学習は、CPUの命令セット、OS、ライブラリ、ミドルウェアを設計している事に対応します。
つまり、処理系を作っていることになります。処理系もOSやミドルウェアやライブラリのようなプログラムを含んでいます。従って、ニューラルネットワークは学習過程で、内部に自己プログラミングを行っているようなものです。
■大規模言語モデル(LLM)の特性
そう考えると、大規模言語モデルのいくつかの特性に合点がいきます。
一つはネットワークサイズの話です。大規模言語モデルは、あるネットワークサイズに達すると、推論や高度な処理を行えるようになります。ただしある段階までくると、それ以上サイズを増やしてもそれだけでは機能が増えなくなります。
これは、メモリや二次記憶のサイズが小さいうちは、組込みシステムのようにOSやミドルウェアを入れることができない様子に似ています。メモリサイズが大きくなれば、OSやミドルウェアを入れることができ、短くシンプルなプログラムで多くの事ができます。しかしOSやミドルウェアがなければ、与えるプログラムの方で工夫しないと、高度な事はできません。
また、コンピュータのメモリや二次記憶のサイズがある程度のサイズ以上になると、高度で最新のOSとミドルウェアとライブラリセットを入れても、潤沢にサイズが余ります。そうなると、それ以上メモリや二次記憶のサイズを増やしても基本機能は増えなくなります。ここから先の能力向上のためには、メモリや二次記憶のサイズには無関係に、より高機能な処理系を開発することが必要になります。
2つ目は、プロンプトエンジニアリングです。大規模言語モデルへの入力は、本文以外にシステム文などで、期待する出力を調整したり、フォーマットや処理のタイプを指定したりすることができます。入力文をプログラムと考えれば、システム文の部分はパラメータ設定部分やプログラム内関数のようなものに相当すると理解できます。これにより処理系の動作を指定したり、処理の途中でシステム文に書かれた処理を関数のように利用することができます。
3つ目は、推論能力です。推論は、いわば論理の法則を使ったシミュレーションのようなものです。状態や入力値を与えると、状態を変化させながらシミュレーションを行うのは、チューリングマシン型のコンピュータの得意とするところです。大規模言語モデルは推論能力を持ちますが、これは、チューリングマシンとしての処理ができることの証左でしょう。
■ファジーチューリングマシンとしてのニューラルネットワーク
チューリングマシンと違って、ニューラルネットワークは処理に曖昧さがあります。つまり、ファジーチューリングマシンです。
あいまいさが役に立つケースもあるでしょうし、厳密な処理が必要な部分で誤りを混入させるケースもあるでしょう。
おそらく、より効果的で深い学習をすることができれば、厳密な処理が必要な論理的な処理や数学的な処理などを行う際には、厳密に処理できるようになっていくでしょう。もちろん、その場合でも、曖昧さが役に立つケースでは曖昧さを保持しつつ、です。
これは、私たちの頭の中での処理と同じです。子供のうちは、曖昧で単純な計算や論理ですら上手くできない場合があります。議論や計算のトレーニングを通して、厳密さを向上させていくことができます。それでも、時々間違いを混入させてしまいます。
人工知能だけでなく、私たちの脳も無数の神経細胞がつながったニューラルネットです。もちろん、人間の脳と現在の人工知能には異なる点は多くありますが、少なくともファジーチューリングマシンとしては、似た性質を持っていると言えます。
■ファジーチューリングマシンのプログラム構造
一般的に、プログラムは、手続き部分と、データ部分を持ちます。
データ部分には、二種類があります。処理中にデータを入れる箱とその箱の構造を決める事が一つです。もう一つは、処理系に埋め込まれた固定的なデータセットです。
大規模言語モデルで言えば、固定的なデータセットは、単語や熟語などと、その概念や意味を関連付けた辞書データのようなものが含まれていると考えられます。
手続き部分も二種類あります。一つはフレームワークです。もう一つはコンポーネントです。
フレームワークは、一連の処理の流れや処理構造を決める部分です。コンポーネントは、そのフレームワークに組み込んで部品として動作できる部分です。一つのフレームワークに組み込むコンポーネントは入れ替え可能で、その組み合わせによって多様な処理や機能を実現できます。
大規模言語モデルでは、フレームワークは文法や、文章の論理構造に相当します。私達の思考における考え方や視点、思考の整理方法もフレームワークです。これはプログラミングでなく思考方法としてのフレームワークという概念と一致します。新しいフレームワークを学習したり、思いつくことができれば、思考を効率化し、考え方の幅を広げる事ができます。
コンポーネントは、概念や意味に相当します。概念や意味が、辞書データを通して単語や熟語などの語句とつながります。
■ファジーチューリングマシンの学習=ソフトウェア開発
ファジーチューリングマシンは、辞書データと、フレームワーク、コンポーネントを学習します。大規模言語モデルでは、大量のテキストを読むことで、これらを自己組織化していくのです。
学習の過程で、オートエンコーダでテキストの再生を行う仕組みは、ソフトウェア開発におけるテストの工程に相当します。学習したテキストと同じ文章が出力できるかをテストするという事は、プログラムの実装よりもテストが先にあります。これはテストドリブン開発(TDD)の考え方に共鳴します。
また、膨大な回数のトライアンドエラーを行う機械学習のプロセスは、極度なアジャイルソフトウェア開発のように見えます。また、分析、設計、実装、テストという流れで行われるウォータフォール型の開発では、熟練のエンジニアやプログラマといった、事前に知識を持った教師が必要になります。一方で、短いスプリントで実装とテストを回していく機械学習のプロセスは、まさにアジャイルです。
人工知能の学習結果、つまりファジーチューリングマシンのCPUの命令セット、OS、ミドルウェア、ライブラリを、私たちが把握できない理由の一つはここにあります。もちろん、ニューラルネットという分散型の構造と、曖昧さを含む確率的な性質も、理解を困難にする大きな要素です。それに加えて、極度なアジャイル手法で開発されたプログラムを想像すると、可読性については絶望的です。
そして、学習済みのファジーチューリングマシンに文章を入力として与えます。すると、それをプログラムのように処理していきます。
■ソフトフェア設計の観点:ファジーオブジェクト指向、ファジーアスペクト指向
大規模言語モデルは、語句の継承関係や包含関係を理解しています。また、フレームワークとコンポーネントをはじめ、デザインパターンのようなものを理解していると解釈できます。従って、ファジーオブジェクト指向モデリングを行っていると考えられそうです。
また、プロンプトエンジニアリングにおけるシステム文による指示は、その後の本文がどんなものであれ柔軟に幅広く適用できます。これは、アスペクト指向プログラミングの仕組みを思い起こさせます。従って、プロンプトエンジニアリングの指示は、ファジーアスペクトと言えると思います。
■少し先の将来
ファジーさを持つ言語体系である自然言語については、ニューラルネットで学習するのが適切でした。これにより、ファジーチューリングマシンとして人間レベルの処理系が実現できました。
一方、決定論的な言語体系であるプログラミング言語を、学習させて処理系を実現することもできるはずです。今はニューラルネットで、厳密な処理が求められるような部分もこなしています。
やがてそうした処理については、決定論的なチューリングマシンである通常のコンピュータに処理させるようにできれば、効率と正確性が向上するでしょう。
また、オブジェクト指向やアスペクト指向、そしてテスト駆動開発とアジャイルソフトウェア開発との類似性について触れました。ここに、リファクタリングの可能性が見えます。
人工知能の安全性の観点から、リファクタリングにより可読性と保守性を向上させる研究は重要になってくるはずです。仕組みが構造化されて見えてくれば、安全性を高める方法を考えたり、チェック機構や監査機構を考えることができる可能性があります。
■さいごに
この記事では、ファジーニューラルネットワークという捉え方について説明しました。
こうした観点から、人工知能を解釈していくことで、より説明可能で安全な人工知能を作り出すことができるかもしれません。
一般的なソフトウェア開発、システム開発でも、高いレベルでの安全性やセキュリティが求められる分野では、アジャイル開発よりもウォータフォール型の開発の方が適していると思います。人工知能も、社会への影響が大きくなっている今、全体の設計を見渡し、内部の構造の可読性を向上させるために、私たちは深く、そのメカニズムを理解していく必要があります。