(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-03-09
(54)【発明の名称】遺伝的プログラミングを使用した汎用ビルディングブロックの作成
(51)【国際特許分類】
G06N 3/126 20230101AFI20230302BHJP
G06F 8/77 20180101ALI20230302BHJP
G06V 30/24 20220101ALI20230302BHJP
【FI】
G06N3/12 160
G06F8/77
G06V30/24
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2022534371
(86)(22)【出願日】2020-01-30
(85)【翻訳文提出日】2022-07-20
(86)【国際出願番号】 US2020015873
(87)【国際公開番号】W WO2021112899
(87)【国際公開日】2021-06-10
(32)【優先日】2019-12-06
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】522224449
【氏名又は名称】ナチュラル コンピューテイション エルエルシー
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ランダエタ,デイビッド,ジェイムズ
【テーマコード(参考)】
5B064
5B376
【Fターム(参考)】
5B064AB03
5B064AB13
5B064DA27
5B376DA22
5B376DA28
(57)【要約】
方法は、汎用演算ビルディングブロックを進化させる。方法は、ランダムに生成されたプログラムで母集団を初期化する。また、方法は、ランダムに生成されたテスト入力のリストを得る。方法は、ランダムに生成された2進数文字列の入力出力対を含むターゲットデータセットを生成する。また、方法は、ターゲットデータセットの入力出力対に基づいて、各プログラムに適応度スコアを割り当てるために適応度関数を適用する。方法は、遺伝的演算子をプログラムに適用し、新規条件を満たす子孫を選択することによって、シードリストを増大する。新規条件は、ランダムに生成されたテスト入力のリストに対する区別可能な独自の出力をプログラムが生成する能力を表す。方法は、終了条件が満たされるまで反復する。終了条件は、シードリストのプログラムが1つ又は複数の遺伝的プログラミングインスタンスを解く能力を表す。
【特許請求の範囲】
【請求項1】
汎用演算ビルディングブロックを進化させる方法であって、
関数を符号化するランダムに生成されたプログラムで母集団を初期化することと、
ランダムに生成されたテスト入力のリストを得ることと、
ランダムに生成された2進数文字列の入力出力対を含むターゲットデータセットを生成することと、
前記母集団の各プログラムに適応度スコアを割り当てるために適応度関数を適用することであって、前記適応度スコアが、プログラムが前記ターゲットデータセットの前記入力出力対とマッチする能力を少なくとも表す、適用することと、
新規条件を満たす前記母集団の前記プログラムのコピーでシードリストを初期化することであって、前記新規条件が、ランダムに生成されたテスト入力の前記リストに対する区別可能な独自の出力をプログラムが生成する能力を表す、初期化することと、
前記シードリストの終了条件が満たされているかどうかを判断することであって、前記終了条件が、前記シードリストの1つ又は複数のプログラムが1つ又は複数の遺伝的プログラミングインスタンスを解く能力を表す、判断することと、
前記終了条件が満たされていないという決定に従って、
プログラムの現在の子孫集団を得るために、少なくとも1つの遺伝的演算子を前記母集団に適用することであって、前記少なくとも1つの遺伝的演算子が、前記1つ又は複数の遺伝的プログラミングインスタンスを解くために、プログラムの適応度スコアに基づいて、前記シードリストを増大するために前記母集団に適用される演算子を含む、適用することと、
前記終了条件が満たされるまで、
ランダムに生成された2進数文字列の入力出力対を含む新しいターゲットデータセットを生成するステップと、
前記現在の子孫集団の各プログラムに新しい適応度スコアを割り当てるために前記適応度関数を適用するステップであって、前記新しい適応度スコアが、プログラムが前記新しいターゲットデータセットの前記入力出力対とマッチする能力を少なくとも表す、ステップと、
前記新規条件を満たす前記現在の子孫集団の前記プログラムのコピーを前記シードリストに付け加えるステップと、
プログラムの新しい子孫集団を得るために、前記少なくとも1つの遺伝的演算子を前記現在の子孫集団に適用し、プログラムの前記新しい子孫集団を前記現在の子孫集団として設定するステップと
を繰り返すことと
を含む、方法。
【請求項2】
前記シードリストを使用して、多数の問題を表す遺伝的プログラミングインスタンスのテストスイート内の母集団を初期化することと、
前記テストスイートのテスト結果に基づいて、前記終了条件が満たされているかどうかを判断することと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記少なくとも1つの遺伝的演算子を前記現在の子孫集団に適用する際に、ベルヌーイ分布に基づいて、親として、前記現在の子孫集団のプログラムよりも前記シードリストのプログラムを選択することであって、前記シードリストの各プログラムが、同じ確率で親として選択され得る、選択すること
をさらに含む、請求項1に記載の方法。
【請求項4】
プログラムが前記新規条件を満たすかどうかを判断することが、
前記ランダムに生成されたテスト入力に対する前記シードリストのプログラムによって符号化された関数によって生成された出力のシーケンスから区別可能な、前記ランダムに生成されたテスト入力に対する出力のシーケンスを生成する関数をプログラムが符号化するという決定
に基づく、請求項1に記載の方法。
【請求項5】
前記シードリストの各プログラムに対して、前記ランダムに生成されたテスト入力に対する、前記プログラムによって符号化された関数によって生成された出力のシーケンスを含む関数シグネチャを決定して格納することと、
前記関数シグネチャを回収することと
をさらに含む、請求項4に記載の方法であって、
前記シードリストのプログラムによって符号化された関数から区別可能な関数を前記プログラムが符号化するという決定が、
前記関数シグネチャから区別可能な、前記ランダムに生成されたテスト入力に対する出力のシーケンスを生成する関数を前記プログラムが符号化するという決定
にさらに基づく、方法。
【請求項6】
前記終了条件が、前記シードリストのサイズに少なくとも依存する、請求項1に記載の方法。
【請求項7】
前記終了条件が、前記シードリストが既定の増大率で増大しているかどうかの判断に少なくとも依存する、請求項1に記載の方法。
【請求項8】
前記適応度関数を適用する際に、タイブレークを任意に行うことをさらに含む、請求項1に記載の方法。
【請求項9】
前記シードリストを初期化する際及び前記シードリストに付け加える際に、入力を読み取らない自明な関数を符号化するプログラムを前記シードリストから廃棄することをさらに含む、請求項1に記載の方法。
【請求項10】
入力を読み取らない自明な関数を符号化するプログラムを識別するために構文解析を実行することをさらに含む、請求項9に記載の方法。
【請求項11】
前記シードリストを初期化する際及び前記シードリストに付け加える際に、異常な実行時の挙動を有するか又は異常な資源要件を有する関数を符号化するプログラムを前記シードリストから廃棄することをさらに含む、請求項1に記載の方法。
【請求項12】
前記シードリストの既定の数のプログラムを使用して、遺伝的プログラミングの新しいインスタンスに対する初期母集団をシードすることをさらに含む、請求項1に記載の方法。
【請求項13】
前記少なくとも1つの遺伝的演算子が、選択演算子、突然変異演算子及びクロスオーバー演算子のうちの1つ又は複数である、請求項1に記載の方法。
【請求項14】
ランダムに生成された2進数文字列の前記入力出力対の各入力が、入力確率分布に基づいて生成され、ランダムに生成された2進数文字列の前記入力出力対の各出力が、出力確率分布に基づいて生成される、請求項1に記載の方法。
【請求項15】
前記入力確率分布が、ピクセル強度の範囲にわたるガウス分布であり、前記出力確率分布が、[0.0,1.0]にわたるガウス分布である、請求項14に記載の方法。
【請求項16】
前記適応度関数が、同じ入力に対するビット単位での反転出力を生成する関数を符号化するプログラムに同じ適応度スコアを割り当てる、請求項1に記載の方法。
【請求項17】
前記適応度関数が、前記プログラムの出力とターゲットデータセットとの間のマッチ度を測定するために、-1~1の適応度スコアをプログラムに割り当て、値が大きいほど、マッチ度が高いことを示す、請求項1に記載の方法。
【請求項18】
前記1つ又は複数の遺伝的プログラミングインスタンスが、手書き数字の部分分類のための遺伝的プログラミングインスタンスを含み、ランダムに生成された2進数文字列の前記入力出力対が、MNISTデータベースからの画像に基づいて生成される、請求項1に記載の方法であって、2000回反復した後に前記方法を終了することをさらに含む、方法。
【請求項19】
データ視覚表現を生成するためのコンピュータシステムであって、
1つ又は複数のプロセッサと、
メモリと
を含む、コンピュータシステムであり、前記メモリが、前記1つ又は複数のプロセッサによって実行するように構成された1つ又は複数のプログラムを格納し、前記1つ又は複数のプログラムが、
関数を符号化するランダムに生成されたプログラムで母集団を初期化することと、
ランダムに生成されたテスト入力のリストを得ることと、
ランダムに生成された2進数文字列の入力出力対を含むターゲットデータセットを生成することと、
前記母集団の各プログラムに適応度スコアを割り当てるために適応度関数を適用することであって、前記適応度スコアが、プログラムが前記ターゲットデータセットの前記入力出力対とマッチする能力を少なくとも表す、適用することと、
新規条件を満たす前記母集団の前記プログラムのコピーでシードリストを初期化することであって、前記新規条件が、ランダムに生成されたテスト入力の前記リストに対する区別可能な独自の出力をプログラムが生成する能力を表す、初期化することと、
前記シードリストの終了条件が満たされているかどうかを判断することであって、前記終了条件が、前記シードリストの1つ又は複数のプログラムが1つ又は複数の遺伝的プログラミングインスタンスを解く能力を表す、判断することと、
前記終了条件が満たされていないという決定に従って、
プログラムの現在の子孫集団を得るために、少なくとも1つの遺伝的演算子を前記母集団に適用することであって、前記少なくとも1つの遺伝的演算子が、前記1つ又は複数の遺伝的プログラミングインスタンスを解くために、プログラムの適応度スコアに基づいて、前記シードリストを増大するために前記母集団に適用される演算子を含む、適用することと、
前記終了条件が満たされるまで、
ランダムに生成された2進数文字列の入力出力対を含む新しいターゲットデータセットを生成するステップと、
前記現在の子孫集団の各プログラムに新しい適応度スコアを割り当てるために前記適応度関数を適用するステップであって、前記新しい適応度スコアが、プログラムが前記新しいターゲットデータセットの前記入力出力対とマッチする能力を少なくとも表す、ステップと、
前記新規条件を満たす前記現在の子孫集団の前記プログラムのコピーを前記シードリストに付け加えるステップと、
プログラムの新しい子孫集団を得るために、前記少なくとも1つの遺伝的演算子を前記現在の子孫集団に適用し、プログラムの前記新しい子孫集団を前記現在の子孫集団として設定するステップと
を繰り返すことと
を行うための命令を含む、コンピュータシステム。
【請求項20】
ディスプレイ、1つ又は複数のプロセッサ及びメモリを有するコンピュータシステムによって実行するように構成された1つ又は複数のプログラムを格納する非一時的なコンピュータ可読記憶媒体であって、前記1つ又は複数のプログラムが、
関数を符号化するランダムに生成されたプログラムで母集団を初期化することと、
ランダムに生成されたテスト入力のリストを得ることと、
ランダムに生成された2進数文字列の入力出力対を含むターゲットデータセットを生成することと、
前記母集団の各プログラムに適応度スコアを割り当てるために適応度関数を適用することであって、前記適応度スコアが、プログラムが前記ターゲットデータセットの前記入力出力対とマッチする能力を少なくとも表す、適用することと、
新規条件を満たす前記母集団の前記プログラムのコピーでシードリストを初期化することであって、前記新規条件が、ランダムに生成されたテスト入力の前記リストに対する区別可能な独自の出力をプログラムが生成する能力を表す、初期化することと、
前記シードリストの終了条件が満たされているかどうかを判断することであって、前記終了条件が、前記シードリストの1つ又は複数のプログラムが1つ又は複数の遺伝的プログラミングインスタンスを解く能力を表す、判断することと、
前記終了条件が満たされていないという決定に従って、
プログラムの現在の子孫集団を得るために、少なくとも1つの遺伝的演算子を前記母集団に適用することであって、前記少なくとも1つの遺伝的演算子が、前記1つ又は複数の遺伝的プログラミングインスタンスを解くために、プログラムの適応度スコアに基づいて、前記シードリストを増大するために前記母集団に適用される演算子を含む、適用することと、
前記終了条件が満たされるまで、
ランダムに生成された2進数文字列の入力出力対を含む新しいターゲットデータセットを生成するステップと、
前記現在の子孫集団の各プログラムに新しい適応度スコアを割り当てるために前記適応度関数を適用するステップであって、前記新しい適応度スコアが、プログラムが前記新しいターゲットデータセットの前記入力出力対とマッチする能力を少なくとも表す、ステップと、
前記新規条件を満たす前記現在の子孫集団の前記プログラムのコピーを前記シードリストに付け加えるステップと、
プログラムの新しい子孫集団を得るために、前記少なくとも1つの遺伝的演算子を前記現在の子孫集団に適用し、プログラムの前記新しい子孫集団を前記現在の子孫集団として設定するステップと
を繰り返すことと
を行うための命令を含む、非一時的なコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
優先権の主張及び関連出願
[0001] 本出願は、2019年12月6日に出願された米国仮特許出願第62/944468号の利益を主張し、その内容は、その全体が本明細書に組み込まれる。
【0002】
技術分野
[0002] 本開示は、遺伝的プログラミングシステムに関し、具体的には、遺伝的プログラミングを適用して、遺伝的プログラミングインスタンスをシードするための汎用ビルディングブロックを作成するためのシステム、方法及びデバイスに関する。
【背景技術】
【0003】
背景
[0003] 遺伝的プログラミング(GP)は、コンピュータプログラムコードと天然の遺伝コードとの間の類推を活用する生物学的に着想を得た機械学習の形式である。他の形式の機械学習に勝るGPの利点は、生物有機体の複雑な機能性がそのDNAに圧縮される方法と同じ方法で情報を圧縮する能力である。情報を圧縮する能力は、知的に活動することと密接に関連している。GPシステムの別の利点は、そのようなシステムがどのように決定を行うかについて説明できることである。例えば、GPシステムによって生成されるプログラムコードは、人間が読み取れるプログラミング言語で表現することができる。対照的に、ディープニューラルネットワークは、どのように決定が行われるかについての説明を提供しないブラックボックスである。また、ニューラルネットワークは、人間の知能には見られない脆性などの弱点を示す傾向がある。そのようなシステムはそれらの有用な限界に達しており、他の技法の助けを借りずに汎用人工知能の目標を達成することができないという懸念が高まっている。
【0004】
[0004] ビルディングブロック仮説は、なぜGPが実用的であるかを正当化する理由としてよく使用される。直観的に、GPは実用的ではないように思えるが、その理由は、プログラムをランダムに生成してその各々を試してみることによって所定の問題を解くというプログラムの探索に、プログラムサイズの指数関数的な時間を要するように思われるためである。ビルディングブロック仮説は、完璧なプログラムを生成する必要があるというよりむしろ、比較的短いプログラムフラグメント又はビルディングブロックのみを生成する必要があることを主張する。そのようなビルディングブロックは、ソリューションに対する良い近似を与えるプログラムに存在する傾向がある。並列演算を活用することにより、多くのビルディングブロックを同時に見つけることができ、GPで使用される遺伝的演算子は、ビルディングブロックを組み合わせて妥当なソリューションに至るように設計されている。
【0005】
[0005] ビルディングブロック仮説が真であると仮定しても、依然として問題が残っている。すなわち、短いビルディングブロックしか決定する必要はないとしても、新しいGPインスタンスに対して新しいビルディングブロックセットを決定する必要がある。これは、同じビルディングブロックが何度も何度も探索されることを意味し、演算資源を浪費することになる。
【発明の概要】
【発明が解決しようとする課題】
【0006】
[0006] 多くのGPシステムは、検討中の特定の問題を解く上で役立つことが期待されているハンドコーディングされたビルディングブロックを用いてプログラムの初期母集団をシードすることによってこの問題に対処する。例えば、問題が所定の画像内のオブジェクト間の距離を推定することである場合は、三角関数及び一定のπの値を用いて母集団をシードしてもよい。この手法の欠点は、人工知能の生成が目標である際には、この手法が人間の知能に依拠することである。それに加えて、そのような手法は、ヒューマンバイアスをシステムにもたらす機会を与える。
【課題を解決するための手段】
【0007】
概要
[0007] 従って、多種多様な問題を解くために使用することができる汎用演算ビルディングブロックを生成する必要がある。そのような汎用演算ビルディングブロックは、ハンドコーディングされたビルディングブロックの代わりに、遺伝的プログラミングインスタンス(例えば、画像処理アプリケーション)に対するプログラムの初期母集団をシードする際に使用されることになる。そのようなブロックを作成するためのプロセス(コードファーミングと呼ばれる場合がある)は、それ自体がGPのインスタンスである。いくつかの実施形態によれば、GPシステムは、プログラムのその母集団内で汎用ビルディングブロックを生成する。
【0008】
[0008] 添付の特許請求の範囲内のシステム、方法及びデバイスの様々な実装形態は、各々がいくつかの態様を有し、どれ1つとして、本明細書で説明される望ましい属性に対する全責任を負うものではない。添付の特許請求の範囲を制限しない範囲で、いくつかの顕著な特徴が説明されている。この論考を考慮した後、特に、「詳細な説明」というタイトルの項目を読んだ後には、当業者は、容量(又はローディング)、電力及び雑音の制限を考慮しながら、インタフェースリンクにおける性能を向上させるために、様々な実装形態の特徴がどのように使用されるかを理解するであろう。
【0009】
図面の簡単な説明
[0009] 本開示をさらに詳細に理解できるように、様々な実装形態の特徴を参照して、より具体的な説明を得ることができ、そのうちのいくつかは、添付の図面に示されている。しかし、説明は他の効果的な特徴を認めることができるため、添付の図面は、単に、本開示のより適切な特徴を示すものであり、従って、制限するものと見なすべきではない。
【図面の簡単な説明】
【0010】
【
図1】[0010]いくつかの実施形態による、遺伝的プログラミングを使用して、遺伝的プログラミングインスタンスをシードするための汎用ビルディングブロックを作成するためのシステムのブロック図である。
【
図2】[0011]いくつかの実施形態による、遺伝的プログラミングを使用して、遺伝的プログラミングインスタンスをシードするための汎用ビルディングブロックを作成するための方法のフローチャートである。
【発明を実施するための形態】
【0011】
[0012] 慣習によれば、図面に示される様々な特徴は、原寸に比例するとは限らない。それに従って、様々な特徴の寸法は、明確にするために、任意に拡大又は縮小することができる。それに加えて、図面の一部は、所定のシステム、方法又はデバイスのすべての構成要素を描写しているとは限らない。最後に、同様の参照番号は、本明細書及び図全体を通じて、同様の特徴を示すために使用される。
【0012】
詳細な説明
[0013] 本明細書で説明される様々な実装形態は、遺伝的プログラミングを使用して、遺伝的プログラミングインスタンスをシードするための汎用演算ビルディングブロックを作成するためのシステム、方法及び/又はデバイスを含む。
【0013】
[0014] 本明細書では、多くの詳細は、添付の図面に示される実装形態の例の完全な理解を提供するために説明される。しかし、本発明は、多くの特定の詳細がなくても実践することができる。そして、周知の方法、コンポーネント及び回路については、本明細書で説明される実装形態のより適切な態様を不必要に曖昧にすることのないように、網羅的且つ詳細な説明は行われていない。
【0014】
[0015]
図1は、遺伝的プログラミングを使用して汎用演算ビルディングブロックを作成するためのシステム100の図である。ある特定の特徴が示されているが、当業者であれば、本開示から、簡潔にするために及び本明細書で開示される実装形態の例のより適切な態様を曖昧にすることのないように、他の様々な特徴は示されていないことが理解されよう。
【0015】
[0016] GPシステムは、様々な方法で実装することができるが、典型的には、プログラミング言語、親プログラムを子プログラムに組み換えるための遺伝的演算子のセット、解くべきターゲット問題、及び、所定のプログラムがターゲット問題を解く力がどの程度あるかを決定する適応度関数の選択を指定する。典型的には、プログラムの母集団は、ランダムに生成されたコードで初期化され、次いで、適応度の何らかの閾値を超えるプログラムを得るなど、何らかの終了基準が満たされるまで、以下のステップが繰り返される。
1. 適応度関数を適用して、母集団の各プログラムに対するスコアを生成する。
2. ルーレットホイール選択などの確率的方法を使用して、スコアに従ってプログラムを選択する。
3. 選択したプログラムに遺伝的演算子を適用して、新しい母集団を生成する。
【0016】
[0017]
図1に戻ると、サーバ102は、典型的には、1つ又は複数のプロセッサ、メモリ104、電源、入力/出力(I/O)サブシステム、及び、これらのコンポーネントを相互接続するための通信バスを含む。プロセッサは、メモリ104に格納されたモジュール、プログラム及び/又は命令を実行し、それにより、いくつかの実施形態による本明細書で説明される方法を含む処理動作を実行する。いくつかの実施形態では、サーバ102は、視覚表現(例えば、スナップショット又はプログラム)を表示するためのディスプレイも含む。
【0017】
[0018] いくつかの実施形態では、メモリ104は、1つ又は複数のプログラム(例えば、命令セット)及び/又はデータ構造を格納する。いくつかの実装形態では、メモリ104又はメモリ104の非一時的なコンピュータ可読記憶媒体は、以下のプログラム、モジュール及びデータ構造、又は、それらのサブセット若しくはスーパーセットを格納する。
・オペレーティングシステム
・汎用ビルディングブロック生成モジュール120であって、
・いくつかの実施形態による適応度関数122(その例は以下で説明される)
・プログラムの母集団106の世代を進化させるために使用される典型的な演算子(例えば、選択、突然変異、クロスオーバー)を含む遺伝的演算子124(以下で説明される)
・ターゲットデータセット112を生成するターゲットデータセット生成126(以下で説明される)
を含むもの
・データ構造150であって、
・自己完結型プログラム(例えば、選択したプログラミング言語の規則に従うプログラム)であるプログラム又はプログラムフラグメント(例えば、コード断片)を含むプログラムの母集団106
・任意選択により、関数シグネチャ108(以下で説明される)
・以下で説明されるように、遺伝的プログラミングインスタンスをシードするために使用される、汎用ビルディングブロック生成モジュール120の出力であるシードリスト110
・以下で説明されるターゲットデータセット112
を含むもの
【0018】
[0019] 上記で示されるモジュール(例えば、データ構造、及び/又は、命令セットを含むプログラム)は、別個のソフトウェアプログラム、手順又はモジュールとして実装される必要はなく、従って、これらのモジュールの様々なサブセットは、様々な実装形態において、組み合わせることも、別の方法で再構成することもできる。いくつかの実施形態では、メモリ104は、上記で示されるモジュールのサブセットを格納する。
【0019】
[0020] いくつかの実施形態では、データベース130(例えば、ローカルデータベース及び/又はリモートデータベース)は、上記で示される1つ又は複数のモジュール及びモジュールと関連付けられたデータを格納する。その上、メモリ104は、上記では説明されていない追加のモジュールを格納することができる。データベース130は、プログラム106のスナップショット、関数シグネチャ108、シードリスト110及び/又はターゲットデータセット112を格納する。いくつかの実施形態では、メモリ104又はメモリ104の非一時的なコンピュータ可読記憶媒体に格納されたモジュールは、以下で説明される方法のそれぞれの動作を実装するための命令を提供する。いくつかの実施形態では、これらのモジュールのいくつか又はすべては、モジュール機能性の一部又はすべてを組み込む特殊なハードウェア回路で実装されることができる。上記で示される要素のうちの1つ又は複数は、1つ又は複数のプロセッサによって実行することができる。
【0020】
[0021] いくつかの実施形態は、有線及び/又は無線接続を介して、ローカル及び/又はワイドエリア通信ネットワーク(例えば、インターネット)を介して、サーバ102を1つ又は複数のデバイス(クライアントデバイス、データベース130など)に通信可能に結合するI/Oサブシステムを含む。いくつかの実施形態は、通信バスを含み、通信バスは、任意選択により、システムコンポーネント間の通信を相互接続して制御する回路(チップセットと呼ばれる場合がある)を含む。
【0021】
[0022] シードリスト110のプログラム及び/又はデータベース130に格納されたスナップショットは、遺伝的プログラミングインスタンス140をシードする及び/又はテストするために使用される。遺伝的プログラミングインスタンス140の例は、画像処理又は手書き文書の認識(以下で説明される)を含む。いくつかの実施形態では、インスタンス140は、シードリスト110が終了条件を満たすかどうかを判断するために使用される遺伝的プログラミングインスタンスを格納する(その例は以下で説明される)。
【0022】
遺伝的プログラミングを使用して汎用ビルディングブロックを作成するための方法の例
[0023] 方法は、いくつかの実施形態に従って、遺伝的プログラミングを使用して、遺伝的プログラミングインスタンスをシードするための汎用ビルディングブロックを作成する。方法又はプロセス(コードファーミングと呼ばれる場合がある)は、GPのインスタンスである。方法は、ランダムに生成された入力出力対の所定のデータセットと入力出力対ができる限り厳密にマッチするプログラムを生成する。いくつかの実施形態は、プログラムの母集団の新世代の各々を有する新しいターゲットデータセットをランダムに生成する。いくつかの実施形態では、母集団は進化し、可能な様々なソリューションが常に存在する。
【0023】
[0024] このプロセスをうまく実装することができるGPインスタンスの特性に関する許容性は広い。いくつかの実施形態は、(i)プログラミング言語がチューリング完全であること(チューリングマシンが符号化できる関数はいずれも符号化できることを意味する)、(ii)遺伝的演算子が有性組換えの何らかの形式(例えば、クロスオーバー)を実装すること、(iii)弱選択仮定が当てはまること(遺伝子型間の適応度の変動が組換え率と比べて小さいことを意味する)を必要とする。要件(i)は、プロセスによって発見されたビルディングブロックの再利用性を保証する。要件(ii)及び(iii)は、プログラムが汎用ビルディングブロックであることを保証する。
【0024】
[0025] いくつかの実施形態では、プロセスは、プログラムフラグメントである汎用ビルディングブロックを生成する。いくつかの実施形態では、プログラムの母集団内の特定のフラグメントをビルディングブロックとして識別する代わりに、プロセスによって生成されたプログラム全体がビルディングブロックとして使用される。いくつかの実施形態では、正しいビルディングブロックが母集団のどこかに存在する限り、GP力学は、ビルディングブロックを決定又は選択し、組み合わせて、GPインスタンスに対するソリューションに至らせる。
【0025】
[0026] いくつかの実施形態では、汎用ビルディングブロックを用いてGPの新しいインスタンスがシードされるときはいつでも、その初期母集団は、コードファーミングプロセスによって生成されたプログラムから選択される。いくつかの実施形態は、プロセスによって生成されたプログラムの最近の世代からプログラムを選択する。いくつかの実施形態は、プロセスの各世代において最も適合するプログラムを取り入れることによって(より最近の世代が優先される)、プログラムの集合体からビルディングブロックを選択する。いくつかの実施形態は、プロセスの各世代で適応度関数を適用して、最も高い適応度スコアを有するプログラムのコピーを作成する。いくつかの実施形態では、タイブレークが任意に行われる。いくつかの実施形態は、最初は空であるシードリストと呼ばれるプログラムの持続的なリストの最後に、最も適合するプログラムを追加する。いくつかの実施形態では、新しいGPインスタンスがサイズnの初期母集団を必要とする場合は、シードリスト上の最後のnエントリが選択される。いくつかの実施形態では、シードリストは、プロセスのエンドプロダクトである。
【0026】
[0027] いくつかの実施形態は、母集団を初期化するためにリストを使用する前に、重複表現型(すなわち、プログラムによって符号化された関数)を除去するために、シードリストにフィルタを適用する。フィルタリングステップは、母集団のサイズを制限する上で役立つ。いくつかの実施形態は、以下で説明されるように、関数シグネチャを使用して、確率的な意味で重複表現型を検出する技法を使用する。
【0027】
[0028] GPでの周知の問題は、十分に豊富なプログラミング言語(特に、チューリング完全であるもの)でランダムに生成されたプログラムが、常にその入力を無視して一定の出力を生成する関数など、自明な関数を符号化する傾向があることである。これは、GPシステムが決して高い所に到達しないことを意味する。言い換えれば、GPシステムは決して興味深い挙動を生み出さない。その上、自明でない挙動が生み出された場合でさえ、遺伝的演算子によって容易に破壊されるという点で、それは脆弱であり、従って、システムは、高い所にとどまることができない。理論的には、高い所に到達してとどまる確率は、十分に大きな母集団のプログラムを維持することによって上げることができるが、これには、膨大な演算資源が必要とされる。いくつかの実施形態は、高い所にとどめるために、以下で説明される技法のいくつかを使用する。
【0028】
[0029] いくつかの実施形態では、適合度の高い特定の個体又はプログラムには、ある世代から次の世代まで生き残るという追加の保証が与えられる。様々な実施形態では、本明細書で説明されるアイデアは、シードリストを使用して実装することができる。
【0029】
[0030] いくつかの実施形態では、現在の母集団の小さなサブセットには、ある世代から次の世代まで生き残る確率が通常よりも高く与えられる。いくつかの実施形態では、シードリストは、現在の母集団とは別に、新規条件を満たす現在の母集団からプログラムのコピーを追加することによって増大する。
【0030】
[0031] いくつかの実施形態では、シードリストは、独特の方法で親選択プロセスに関与する。従来の遺伝的プログラミングでは、現在の母集団から次の親を選択するために、ルーレットホイールが回転される。いくつかの実施形態によれば、ホイールを回転する前には、表が出る確率が低い(例えば、確率=1/16)偏ったコインが投げられる(例えば、ベルヌーイ分布を作成するため)。コインの表が出た場合は、いくつかの実施形態は、この親選択に対してホイールを回転することはなく、現在の母集団から親を選択することはない。代わりに、いくつかの実施形態は、一様確率分布を使用してシードリストから親を選択する(すなわち、シードリスト上の各プログラムは同じ確率で選択され得る)。他方では、コインの裏が出た場合は、いくつかの実施形態は、通常通りに進め、ホイールを回転し、現在の母集団から親を選択する。いくつかの実施形態では、このプロセス全体は、すべての親選択で繰り返される。
【0031】
[0032] いくつかの実施形態では、シードリストは、プロセス(コードファーミングと呼ばれる場合がある)のエンドプロダクトである。いくつかの実施形態では、GPインスタンスのシードに対して、シードリストに最近追加されたプログラムは、以前に追加されたプログラムより有用なものと見なされる。
【0032】
[0033] いくつかの実施形態では、シードリストは、すべての世代にわたって持続的であり、最初は空である。各世代では、適応度関数が現在の母集団に適用された後、以下の条件を満たす現在の母集団からのすべてのプログラム(個体と呼ばれる場合がある)は、シードリストに追加される。
a. それは、明らかに自明でない個体である(以下で説明されるように)。
b. それが符号化する関数は、シードリストの他の任意のプログラムによって符号化された関数とは区別可能である。これは、システム初期化の間にテスト入力の持続的なリストをランダムに生成し、テスト入力に対する区別可能な出力シーケンスを有する場合且つその場合に限り、候補関数が区別可能なものであると宣言することによって、確率的な意味で効率的に決定される。この出力シーケンスは、関数のシグネチャと呼ばれる場合がある。
【0033】
[0034] いくつかの実施形態では、自明でない関数がとにかくシードリストに追加されるという何らかの保証を提供するため、適応度関数は、自明な関数を符号化するプログラムの明白な事例にフラグを付けるように修正され、そのプログラムには、可能な限り最も低いスコアが割り当てられる。いくつかの実施形態は、プログラムの自動構文解析を使用して、入力が決して読み取られることはないと決定し、それにより、プログラムを一度も走らせることなく、自明なものとしてプログラムにフラグを付けることができる。構文解析は、プログラムに読み取り命令がないかどうか又はそのような命令が明らかに到達不可能かどうかを判断する。明らかに自明なプログラムは、プログラムを走らせようとすると異常終了するプログラムを含む。これは、演算資源(メモリ空間又は総実行時間など)の限度を超えるいかなるプログラムも含む。いくつかの実施形態は、エラーフリープログラムを促進するために、そのようなプログラムに可能な限り低い適応度スコアを割り当てる。
【0034】
[0035] 上記で説明されるように、シードリストのプログラムに与えられる利点は、小さな確率で、次世代の親になる個体の選択が、現世代というよりむしろ、シードリストから行われ、その場合、選択される確率が、そのシードリストのプログラムすべてにおいて等しいことである。
【0035】
進度の測定
[0036] いくつかの実施形態は、プロセスを終了するために、この項目で説明される技法のいくつかを使用して、進度を測定し、十分な進歩が見られるかどうかを判断する。
【0036】
[0037] いくつかの実施形態は、シードリストのサイズを使用する。例えば、シードリストが着実なペースで増大している場合は、着実な進歩が見られることになる。いくつかの実施形態では、少なくとも既定の数のプログラム(例えば、数千のプログラム)がシードリストにある場合は、プロセスは終了する。
【0037】
[0038] いくつかの実施形態では、様々な問題を表すGPインスタンスのテストスイート内の母集団を初期化するため、シードリストのコピーを周期的に(例えば、プロセスの数百回の反復ごとに)使用して、より信頼性が高い(ただし、より資源集約的である)手法が使用される。いくつかの実施形態は、テスト結果が経時的に改善しているかどうかを判断する。テスト結果が許容可能なソリューションを提供する場合は、プロセスは終了する。
【0038】
スナップショット
[0039] いくつかの実施形態は、システムのスナップショットをロード又は保存し、スナップショットは、プロセスを一時停止して後に再開できるようにするために必要なデータから成る。いくつかの実施形態では、スナップショットは、以下の要素のいくつか又はすべてを含む。
・ プログラムの現在の母集団及びそれらの適応度スコア
・ シードリスト及び対応するシグネチャ
・ シグネチャを決定するためのテスト入力のリスト
【0039】
ターゲットデータセット
[0040] いくつかの実施形態では、ターゲットデータセットは、プロセスの新世代の各々でランダムに生成される。いくつかの実施形態では、ターゲットデータセットは、入力出力対から成る。いくつかの実施形態は、様々な因子をトレードオフすることによって、入力出力対のフォーマットを決定し、様々な因子は、(i)様々なコンテキストにおいてエンドプロダクト(例えば、シードリスト)が再利用可能である程度、並びに、(ii)それを生み出すことができる速度及び効率を含む。例えば、エンドプロダクトが広範囲の問題に対して再利用可能である必要がある場合は、入力出力対は、2進数文字列の対であり、そのような文字列はいかなる情報も符号化することができるため、有限であること以外、長さに制限はない。いくつかの実施形態は、確率密度関数を使用し、確率密度関数は、任意の長さの2進数文字列をランダムに生成するための周知の一様密度関数の変形形態である。いくつかの実施形態は、L(x)=2-2l(x)-1によって定義される確率密度関数を使用し、式中、xは、長さl(x)の任意の文字列である。
【0040】
[0041] いくつかの実施形態は、入力出力対を特定の問題領域に適切なフォーマットに限定しながら依然として、入力出力対をランダムに生成する。例えば、いくつかの実施形態は、純粋なガウス雑音を入力として使用し、一様なランダムラベルを出力として使用して、画像分類の問題領域に適切なランダムなデータセットを生成する。
【0041】
領域特有のターゲットデータセット
[0042] この項目は、説明を容易にするため、ターゲットデータセットの領域特有の態様について説明し、続いて、ターゲットデータセットのランダムな態様について説明する。
【0042】
[0043] ターゲットデータセットの領域特有の態様の場合、任意の問題領域において、入力は、実数X=(x1,...,xn)のシーケンスで識別され、対応する出力も同様に、実数Y=(y1,...,ym)のシーケンスで識別されると想定する。例えば、画像分類では、各xiは、ピクセル強度を表し得、nは、入力画像のピクセルの数である。この事例では、mは、画像が有し得る区別可能なラベルの数であり、yjは、入力画像がj番目のラベルを有する確率である。
【0043】
[0044] 次に、ターゲットデータセットのランダム態様を理解するため、問題領域にかかわらず、興味深いであろうすべての入力出力対の莫大なデータセットDを想像する。入力出力対(X,Y)の一様なランダム選択がDから得られると想定する。Xの各xiは、周知の確率分布pi(x)を有し、同様に、Yの各yjは、周知の確率分布pj(y)を有することになる。次いで、この領域に対して入力出力対(Xrand,Yrand)をランダムに生成するため、いくつかの実施形態は、それぞれの確率分布に従って、Xrandの各xi及びYrandの各yjをランダムに生成する。このプロセスをt回繰り返すことにより、いくつかの実施形態は、データセットDrand=((X1,Y1),...,(Xt,Yt))をランダムに生成する。画像分類の場合、例えば、pi(x)は、すべての可能なピクセル強度の範囲にわたるガウス分布であり、pj(y)は、すべての可能な確率の範囲(すなわち、0~1)にわたるガウス分布である。
【0044】
適応度関数
[0045] 適応度関数は、遺伝的プログラミング(GP)の確率的性質を表す。基準が満たされているか否かの代わりに、GPは、プログラムが基準を満たす程度を測定する適応度スコアを各プログラムに割り当てる。これは、場合により、「適応度関数を適用する」と呼ばれる。スコアは、典型的には、実数の範囲内に収まる。高いスコアを有するプログラムほど、低いスコアを有するプログラムよりも、次世代の親として選択される可能性が高くなる。しかし、可能な限り低いスコアを有するプログラムでさえ、親として選択される確率がゼロより大きいため、そのようなプログラムは、廃棄されるかどうかは分からない。
【0045】
[0046] いくつかの実施形態では、適応度関数は、所定のプログラムによって符号化された関数が現在のターゲットデータセットとどの程度マッチするかを測定する。いくつかの実施形態では、適応度関数は、弱選択仮定を満たし、それは、すべての遺伝子型(プログラム)の適応度が互いに近く、すなわち、間隔[1-ε,1+ε]内であることを意味し、従って、遺伝子型gの適応度は、Fg=1+εΔgと記載することができ、式中、εは、選択強度であり、小さいと仮定され、Δg∈[-1,1]は、遺伝子型の差分適応度と呼ばれる。いくつかの実施形態では、これらの要件は、Δgを適切に定義することによって満たされる。例えば、Δg=-1は、gが母集団の他のメンバー(すなわち、プログラム)と比べてターゲットデータセットの最悪のマッチを提供することを意味し、Δg=1は、gが母集団の他のメンバーと比べて最良のマッチを提供することを意味する。言い換えれば、適応度関数は、プログラムがターゲットデータセットとどの程度一致するかを測定するために、-1~1の差分適応度の値を所定のプログラムに割り当て、値が大きいほど、より一致することを示す。
【0046】
[0047] いくつかの実施形態は、マッチと見なされるものに対して緩和された定義を使用する。いくつかの実施形態は、出力間の完全なマッチを要求するというよりむしろ、出力間の相関度を考慮する。いくつかの実施形態は、この戦略を使用して、許容可能なソリューションを見つける機会を増やす。例えば、いくつかの実施形態は、完璧なソリューションへの変換が容易であることを考慮して、ターゲット出力の真逆(ビット単位の意味で)を生成するプログラムを完全なマッチと同じように適合するものと見なす。
【0047】
[0048] ターゲットデータセットが入力出力対D=((X1,Y1),...,(Xt,Yt))のシーケンスであると想定し、所定のプログラムが関数fを符号化すると想定する。Dの各対(X,Y)に対して、Xは、実数X=(x1,...,xn)のシーケンスであり、Yは、実数Y=(y1,...,ym)のシーケンスである。関数fは、Xを入力として受け入れ、シーケンスY’=(y1’,...,ym’)を出力として生成する関数である。いくつかの実施形態は、YとY’との間の一致を測定し、次いで、差分適応度の値dを生成するために、Dのすべての(X,Y)にわたってそのような値を集計する。いくつかの実施形態は、Yの各yjが周知の確率分布pj(y)を有し、従って、各yjは、周知の平均値ujを有するという事実を利用する。yjの可能な値の範囲は、2つのピースに区分されるものとして考えることができ、右側の区分は、平均より大きいすべての値を含み、左側の区分は、平均以下のすべての値を含む。いくつかの実施形態は、値yjとyj’が同じ区分内に位置する場合は、両方の値が「一致する」と定義する。
【0048】
[0049] いくつかの実施形態は、差分適応度dを演算するために以下のアルゴリズムを使用する。
1. 実変数rを0に初期化する。
2. Dの各(X,Y)に対して、以下の動作を行う。
a. 上記で説明されるように、Y’を演算する。
b. 1~mの各位置jに対して、以下の動作を行う。
i. yjがyj’と一致する場合は、rに1を加える。
ii. それ以外の場合は、rから1を減じる。
3. d=absolute_value(r)/(m*t)を演算する。
【0049】
[0050] このアルゴリズムは、0~1のdの値をもたらす。いくつかの実施形態は、F=1+(e*d)として適応度スコアを演算し、式中、eは、選択強度であり、小さな正の定数値であると仮定される。
【0050】
[0051] 言い換えれば、Fが離散型確率変数と見なされる際は、すべての演算可能な関数fに対して、同じ平均及び同じ分散を有するべきである。また、関数fには、その逆関数が存在する場合は、常に、そのような逆関数と同じ適応度スコアが割り当てられるべきであることも必要とされる。
【0051】
確率的選択
[0052] いくつかの実施形態は、確率的選択法(場合により、「ルーレットホイール選択」又は「適応度比例選択」と呼ばれる)を使用する。親の選択は、ルーレットホイールを回転することによって行われ、母集団内の各プログラムには、その適応度スコアに比例するホイール上の空きスペースが割り当てられる。言い換えれば、次世代のすべての親を選択するために十分な回数ホイールを回転させる。このステップは、単に、「選択」と呼ばれる場合が多く、突然変異又はクロスオーバーのような遺伝的演算子の1つと見なされる場合が多い。
【0052】
[0053] いくつかの実施形態は、他の選択方法を使用する(例えば、既製のGPソフトウェアで非常に人気のあるトーナメント選択)。
【0053】
汎用ビルディングブロック
[0054] いくつかの実施形態では、有性組換えの存在下での進化は、母集団内の対立遺伝子(すなわち、プログラムフラグメント)の混合性を最大化する。特定の遺伝子の対立遺伝子の混合性(すなわち、プログラムのフラグメントのローカス)は、適合度の高い個体を形成するために対立遺伝子が他の遺伝子の対立遺伝子と結合する程度である。個々のプログラムの適応度が、母集団の他の個体と比べて、ランダムに生成されたデータセットとどの程度マッチするかに基づく場合は、高い混合性を有する対立遺伝子は、汎用演算ビルディングブロックにまさしく相当する。有性組換えと共に、弱選択が存在する場合は、対立遺伝子の混合性は、すべての世代にわたって累積的に測定される。従って、高い混合性を有する対立遺伝子は、多種多様な問題に対する良いソリューションを提供するプログラムのファミリーに存在するコードフラグメントに相当する。そのような対立遺伝子は、汎用ビルディングブロックである。
【0054】
[0055]
図2は、いくつかの実施形態による、遺伝的プログラミングを使用して、遺伝的プログラミングインスタンスをシードするための汎用ビルディングブロックを作成するための方法のフローチャートである。方法は、いくつかの実施形態に従って、サーバ102などのサーバ(又はサーバのプロセッサ)によって実行される。
図2に示されるフローチャートのステップは、上記で説明される技法を使用する。いくつかの実施形態では、方法は、スタートアップパラメータ(例えば、該当領域に対するパラメータのセット、プログラムの最大サイズ、プロセスの最大反復数など)を読み取ること(202)によって開始される(200)。スタートアップパラメータの例は、いくつかの実施形態に従って、以下の「画像分類用の汎用ビルディングブロックの作成及び使用例」というタイトルの項目で提供される。いくつかの実施形態は、(シードリストを得るため)プロセスの新しいインスタンスを生成するかどうかを判断する(204)。これが新しいインスタンスでない場合は、プロセスは、システムの(上記で説明される)スナップショットをロードする(222)。
【0055】
[0056] いくつかの実施形態は、ランダムに生成されたプログラムで母集団(例えば、プログラムの母集団106)を初期化する(206)(上記で説明される)。また、いくつかの実施形態は、ターゲットデータセットをランダムに生成する(上記で説明される、例えば、ターゲットデータセット生成モジュール126を使用して)。いくつかの実施形態は、母集団のプログラムに適応度関数を適用する(210)(上記で説明される、例えば、適応度関数モジュール(122)を使用して)。いくつかの実施形態は、スナップショットを撮る又は捕捉するかどうかを判断し(212)(上記で説明される)、撮る又は捕捉するように判断された場合は、システムのスナップショットを(例えば、データベース130に)保存(216)又は格納する。いくつかの実施形態は、終了条件が満たされているかどうかを判断する(218)。例えば、スナップショットのシードリストが、シードリストが1つ又は複数の遺伝的プログラミングインスタンスを解くかどうかをテストするために使用される。終了条件が満たされている場合は、方法は、実行を終了する(220)。終了条件が満たされていない場合は、プロセスは、次世代用の母集団を得るために、遺伝的演算子(例えば、選択、突然変異、クロスオーバー)を母集団に適用すること(214)を継続する。プロセス(すなわち、ステップ214、208、210、212、216、218)は、終了条件が満たされるまで繰り返される。
【0056】
[0057] いくつかの実施形態によれば、方法は、汎用演算ビルディングブロックを進化させる。方法は、サーバ(又はコンピュータ)によって実行される。例えば、方法は、サーバ102(又はサーバ102のモジュールのうちの1つ)によって実行される。方法は、関数を符号化するランダムに生成されたプログラムで母集団を初期化する。また、方法は、ランダムに生成されたテスト入力のリストを得ることも含む。方法は、ランダムに生成された2進数文字列の入力出力対を含むターゲットデータセットを生成する。また、方法は、母集団の各プログラムに適応度スコアを割り当てるために適応度関数を適用する。適応度スコアは、プログラムがターゲットデータセットの入力出力対とマッチする能力を少なくとも表す。また、方法は、新規条件を満たす母集団のプログラムのコピーでシードリストを初期化する。新規条件は、ランダムに生成されたテスト入力のリストに対する区別可能な独自の出力をプログラムが生成する能力を表す。シードリストは、遺伝的プログラミングの初期母集団をシードするための汎用プログラムビルディングブロックを含む。また、方法は、シードリストの終了条件が満たされているかどうかを判断することも含む。終了条件は、シードリストの1つ又は複数のプログラムが1つ又は複数の遺伝的プログラミングインスタンスを解く能力を表す。終了条件が満たされていないという決定に従って、方法は、プログラムの現在の子孫集団を得るために、少なくとも1つの遺伝的演算子を母集団に適用する。少なくとも1つの遺伝的演算子は、1つ又は複数の遺伝的プログラミングインスタンスを解くために、プログラムの適応度スコアに基づいて、シードリストを増大するために母集団に適用される演算子を含む。また、方法は、上記終了条件が満たされるまで、(i)ランダムに生成された2進数文字列の入力出力対を含む新しいターゲットデータセットを生成するステップと、(ii)現在の子孫集団の各プログラムに新しい適応度スコアを割り当てるために適応度関数を適用するステップ(新しい適応度スコアは、プログラムが新しいターゲットデータセットの入力出力対とマッチする能力を少なくとも表す)と、(iii)上記新規条件を満たす現在の子孫集団のプログラムのコピーをシードリストに付け加えるステップと、(iv)プログラムの新しい子孫集団を得るために、少なくとも1つの遺伝的演算子を現在の子孫集団に適用し、プログラムの新しい子孫集団を現在の子孫集団として設定するステップとを繰り返すことも含む。
【0057】
[0058] いくつかの実施形態では、方法は、シードリストを使用して、多数の問題を表す遺伝的プログラミングインスタンスのテストスイート内の母集団を初期化することと、テストスイートのテスト結果に基づいて、終了条件が満たされているかどうかを判断することとをさらに含む。
【0058】
[0059] いくつかの実施形態では、方法は、少なくとも1つの遺伝的演算子を現在の子孫集団に適用する際に、ベルヌーイ分布に基づいて、親として、現在の子孫集団のプログラムよりもシードリストのプログラムを選択することをさらに含む。シードリストの各プログラムは、同じ確率で親として選択され得る。
【0059】
[0060] いくつかの実施形態では、プログラムが新規条件を満たすかどうかを判断することは、ランダムに生成されたテスト入力に対するシードリストのプログラムによって符号化された関数によって生成された出力のシーケンスからは区別可能な、ランダムに生成されたテスト入力に対する出力のシーケンスを生成する関数をプログラムが符号化するという決定に基づく。
【0060】
[0061] いくつかの実施形態では、方法は、シードリストの各プログラムに対して、ランダムに生成されたテスト入力に対するプログラムによって符号化された関数によって生成された出力のシーケンスを含む関数シグネチャを決定して格納することと、関数シグネチャを回収することとをさらに含む。そのようないくつかの実施形態では、シードリストのプログラムによって符号化された関数とは区別可能な関数をプログラムが符号化するという決定は、関数シグネチャとは区別可能な、ランダムに生成されたテスト入力に対する出力のシーケンスを生成する関数をプログラムが符号化するという決定にさらに基づく。
【0061】
[0062] いくつかの実施形態では、終了条件は、シードリストのサイズに少なくとも依存する(例えば、何千ものプログラムになれば、方法は停止する)。
【0062】
[0063] いくつかの実施形態では、終了条件は、シードリストが既定の増大率で増大しているかどうかの判断に少なくとも依存する。
【0063】
[0064] いくつかの実施形態では、方法は、適応度関数を適用する際に、タイブレークを任意に行うことをさらに含む。
【0064】
[0065] いくつかの実施形態では、方法は、シードリストを初期化する際及びシードリストに付け加える際に、入力を読み取らない自明な関数を符号化するプログラムをシードリストから廃棄することをさらに含む。
【0065】
[0066] いくつかの実施形態では、方法は、入力を読み取らない自明な関数を符号化するプログラムを識別するために構文解析を実行することをさらに含む。
【0066】
[0067] いくつかの実施形態では、方法は、シードリストを初期化する際及びシードリストに付け加える際に、異常な実行時の挙動(例えば、プログラムを走らせようとすると異常終了するプログラム)を有するか又は異常な資源要件(例えば、メモリ空間又は総実行時間などの演算資源の限度を超えるプログラム)を有する関数を符号化するプログラムをシードリストから廃棄することをさらに含む。
【0067】
[0068] いくつかの実施形態では、方法は、シードリストの既定の数のプログラムを使用して、遺伝的プログラミングの新しいインスタンスに対する初期母集団をシードすることをさらに含む。いくつかの実施形態では、初期母集団をシードする際、シードリストに最近追加されたプログラムは、以前のものより好ましい。
【0068】
[0069] いくつかの実施形態では、少なくとも1つの遺伝的演算子は、選択演算子、突然変異演算子及びクロスオーバー演算子のうちの1つ又は複数である。
【0069】
[0070] いくつかの実施形態では、ランダムに生成された2進数文字列の入力出力対の各入力は、入力確率分布に基づいて生成され、ランダムに生成された2進数文字列の入力出力対の各出力は、出力確率分布に基づいて生成される。いくつかの実施形態では、入力確率分布は、ピクセル強度の範囲にわたるガウス分布であり、出力確率分布は、[0.0,1.0]にわたるガウス分布である。
【0070】
[0071] いくつかの実施形態では、適応度関数は、同じ入力に対するビット単位での反転出力を生成する関数を符号化するプログラムに同じ適応度スコアを割り当てる。言い換えれば、いくつかの実施形態では、ターゲット出力の真逆(ビット単位の意味で)を生成するプログラムは、完全なマッチと同じように適合する。
【0071】
[0072] いくつかの実施形態では、適応度関数は、プログラムの出力とターゲットデータセットとの間のマッチ度を測定するために、-1~1の適応度スコアをプログラムに割り当て、値が大きいほど、マッチ度が高いことを示す。
【0072】
[0073] いくつかの実施形態では、1つ又は複数の遺伝的プログラミングインスタンスは、手書き数字の部分分類(以下で説明される)のための遺伝的プログラミングインスタンスを含み、ランダムに生成された2進数文字列の入力出力対は、MNISTデータベースからの画像に基づいて生成され、方法は、2000回反復した後に方法を終了することをさらに含む。
【0073】
画像分類用の汎用ビルディングブロックの作成及び使用例
[0074] この項目は、いくつかの実施形態による、画像分類用の汎用ビルディングブロックの作成及び使用例について説明する。典型的には、画像は、1つ又は複数のラベルと関連付けられる。例示のため、画像は、2つのラベルのうちの1つのみを有し得ると想定する。画像データは、各ピクセル値がシングルビットとなるように簡略化されている。例えば、各ピクセルは、黒(0)又は白(1)である。さらに、各画像は、正確に28行×28列のピクセルであると想定する。この領域のデータセットは、D=((X1,y1),...,(Xt,yt))の形式を有する。Dの各(X,y)は、入力出力対であり、Xは、入力画像X=(x1,...,xn)を表し、n=28×28=784であり、各xiは、位置iにおけるピクセルの強度を示すシングルビット(0又は1)であり、yは、画像Xと関連付けられたラベルを表すシングルビットである。
【0074】
[0075] 第1の段階では、いくつかの実施形態は、この領域に適切なパラメータを使用して、
図2を参照して上記で説明されるプロセスを通じて、汎用ビルディングブロックを作成する。続いて、第2の段階では、そのようないくつかの実施形態は、第1の段階からのエンドプロダクト(例えば、シードリスト)を使用して、この領域における特定の問題を表すGPの2つのインスタンスのテストスイートの初期母集団をシードする。
【0075】
[0076] この実験においてGPインスタンスに使用されるプログラミング言語は、本明細書の付録で説明されるような、パーセプトロンチューリングマシン(PTM)の言語であると想定する。言語は、チューリング完全であり、ニューロエボリューションの形式を可能にし、これは、各プログラムが人工ニューラルネットワーク(ANN)を生成することを意味する。すべてのGPインスタンスに共通する関連PTM構成パラメータは、以下の通りである。
・ 状態の数は512である。
・ テープの数は2であり、各テープの長さは5ビットであり、画像の行インデックス又は列インデックスを符号化する。テープは両方とも入力インデックステープであり、出力はシングルビットであるため、出力インデックステープはない。
・ すべてのプログラムが4,096個の命令の固定長を有する。
・ プログラムによって生成されるANNに以下の通り資源限度を設ける。
・ ノードの最大数は50,000である。
・ 最大深さは100である。
・ 最大ファンアウトは16である。
【0076】
[0077] 資源限度を超えた場合は、エラーと見なされ、その場合、可能な限り低い適応度スコアがプログラムに割り当てられる。
【0077】
[0078] 以下の遺伝的演算子もまた、この実験において使用されるすべてのGPインスタンスに共通である。
・ 0.5のレートで、遺伝子ごとに動作する一様クロスオーバーを使用する。
・ 0.003のレートで、遺伝子型単位で動作する置換演算子を使用する。すなわち、各子孫に対して、0.003の確率で、その遺伝子がランダムに置換される。
・ 0.001のレートで、遺伝子単位で動作する突然変異演算子を使用する。すなわち、各子孫の各遺伝子に対して、0.001の確率で、対立遺伝子が異なる対立遺伝子に変化する。
【0078】
例示的な段階1:汎用ビルディングブロックの作成
[0079] プロセス用のGPインスタンスは、以下の通り設定される。
・ 母集団サイズは1,024である。
・ ランダム化されたターゲットにおける入力出力対の数に32を使用する。
・ ランダム化されたターゲットにおける入力ピクセル値と出力ラベル値の両方に対して使用する自然確率分布はベルヌーイ分布であり、0と1の値は同じ確率で起こり得る(各々が0.5の確率を有する)。
・ 関数シグネチャの生成に使用されるテスト入力の数に32を使用する。
・ 選択強度に0.5を使用する。
・ 現在の母集団というよりむしろ、シードリストから親を選択する確率に0.0625を使用する。
・ 200,000のシード(つまり、シードリストのプログラム)が見つかったら、プロセスを終了する。
【0079】
[0080] プロセスは反復的であり、いくつかの例では、各世代に対して数百のプログラムを生成する。例えば、プロセスを2,289回(すなわち、2,289世代)反復することにより、200,000のシードが生成される。
【0080】
例示的な段階2:手書き数字の部分分類
[0081] テストスイートに対して、いくつかの実施形態は、手書きの数字を分類する簡略形式の変異形態を解くように設計された2つのGPインスタンスを使用する。簡略化された問題(部分分類と呼ばれる場合がある)は、0~9のすべての数字を認識しようと試みるというよりむしろ、10個の数字のうちの2つのみを認識しようと試みる。GPインスタンスAは、数字0と1の区別を試み、GPインスタンスBは、数字6と7の区別を試みると想定する。
【0081】
[0082] 訓練及びテストデータセットに対して、いくつかの実施形態は、MNISTデータベースのサブセットを使用し、MNISTデータベースは、手書きの数字のスキャン画像と共に、それらの正しい分類を含む。画像は、(例えば、それぞれ60,000と10,000の画像の)訓練データセットとテストデータセットに分割される。画像は、グレースケール表示され、28×28ピクセルのサイズを有する。いくつかの実施形態は、すべての画像を再フォーマットし、その結果、もともとは0~255の範囲である各ピクセル値は、シングルビットに変換され、0は、間隔[0,127]に対応し、1は、[128,255]に対応する。GPインスタンスAは、数字0と1の画像のみを含む訓練及びテストデータセットのサブセットを使用し、GPインスタンスBは、6と7の画像のみを使用する。
【0082】
[0083] GPインスタンスAとBは両方とも、以下の構成特性を有する。
・ いくつかの実施形態では、訓練及びテストデータセットは、各々がサイズt=32のミニバッチにランダムに区分される。すべての世代で、次の訓練ミニバッチDは、輪番で選ばれ、その世代に対する適応度スコアの基礎として使用される。
・ 現在の母集団のプログラムgに適応度スコアFを割り当てるため、いくつかの実施形態は、最初に、差分適応度dを以下の通り演算する。
・ 実変数rを0に初期化する。
・ Dの各(X,y)に対して、以下の動作を行う。
・ 入力画像Xに対してプログラムgを走らせる。
・ gを完了まで走らせ、出力yが生成された場合は、rに1を加える。
・ それ以外の場合は、rから1を減じる。
・ d=r÷tを演算する。
これにより、-1~1の値のdが得られる。適応度スコアはF=1+εdであり、式中、εは、選択強度であり、0.5の定数値を有する。
・ 母集団サイズは256である。
・ 終了条件は以下の通りである。すべての世代で、最大の適応度スコアを有するプログラムg(タイブレークが任意に行われる)は再びスコア付けされるが、毎回、テストデータセットから次のミニバッチを輪番で使用する。gが訓練ミニバッチとテストミニバッチの両方において満点のスコアを取った場合は、プロセスの終了に成功し、gがソリューションとなる。2000世代以内にそのようなソリューションが見つからない場合は、プロセスは失敗に終わる。
【0083】
[0084] それに加えて、各GPインスタンスは、ランダムに(ランダムモードの初期化)その母集団を初期化するか、又は、段階1で生成された最後の256のプログラム(若しくはシード)を使用して(シードモードの初期化)その母集団を初期化するかのオプションを有する。いくつかの実施形態は、各GPインスタンスA及びBを各モードで既定の回数(例えば、10回)走らせる。一実験では、得られた結果は、以下に示される通りである。
・ ランダムモードのGPインスタンスAは、成功1回と失敗9回をもたらした。
・ シードモードのGPインスタンスAは、成功8回と失敗2回をもたらした。
・ ランダムモードのGPインスタンスBは、成功0回と失敗10回をもたらした。
・ シードモードのGPインスタンスBは、成功6回と失敗4回をもたらした。
【0084】
[0085] このように、
図2を参照して上記で説明されるプロセスは、これらのGPインスタンスに対して大幅な性能向上(母集団をシードする従来の方法に勝る)を提供する。
【0085】
数値関係を学習するための応用例
[0086] この項目は、いくつかの実施形態による、数値関係を学習するための汎用ビルディングブロックの作成及び使用例について説明する。問題は、実数の所定のシーケンスが特定の関係のメンバーシップの条件を満たすかどうかを判断することができるコンピュータプログラムを見出すことであると想定する。いくつかの実施形態では、訓練の目的で、関係を満たすシーケンスの例及び関係を満たさないシーケンスの例のデータセットが存在する。この領域のデータセットは、D=((X1,y1),...,(Xt,yt))の形式を有する。Dの各(X,y)は、入力出力対であり、Xは、入力シーケンスX=(x1,...,xn)を表し、nは、関係によって決定される固定された正の整数であり、各xiは、関係によって決定される関連付けられた確率分布pi(x)を有する実数であり、yは、Xが関係を有するか(y=1)又はXが関係を有さないか(y=0)を示すシングルビットである。
【0086】
[0087] 例えば、株の売買人は、そのようなデータセットを開発し得、Xは、会社のバランスシートの情報であり、yは、会社の株を買うべきか売るべきかの表示である。この実験では、説明の目的で、n=3と想定し、さらに、x1、x2、x3の各々に対してガウス分布(平均0及び分散0.5)が使用されると想定する。出力yは、ベルヌーイ分布を有し、0と1の値は同じ確率で起こり得る(各々が0.5の確率を有する)。
【0087】
[0088] いくつかの実施形態では、2つの段階がある。第1の段階では、いくつかの実施形態は、この領域に適切なパラメータを使用して、
図2を参照して上記で説明されるプロセスを通じて、汎用ビルディングブロックを作成する。続いて、第2の段階では、いくつかの実施形態は、段階1からのエンドプロダクト(シードリスト)を使用して、この領域における特定の問題を表すGPの2つのインスタンスのテストスイートの初期母集団をシードする。後に説明されるように、初期母集団をランダムにシードする従来の手法によって得られたものとの結果の比較により、
図2を参照して上記で説明されるプロセスの利益が示される。
【0088】
[0089] この実験においてすべてのGPインスタンスに使用されるプログラミング言語は、その開示の全体が参照により本明細書に組み込まれる、ワールドワイドウェブのhttps://github.com/arturadib/shash-aというアドレスにおいて利用可能な“Slash/A: A programming language and C++ library for (quantitative) linear genetic programming,” 2011において説明される、Artur B. Adibによって開発されたSlash/A言語であると想定する。Slash/A言語は、チューリング完全命令型プログラミング言語であり、すべての入力及び出力は倍精度浮動小数点形式の実数であるため、数値関係の実装に理想的である。以下の例は、2つの入力を読み取り、それらを合計し、出力として結果を返す。
input/ # 入力バッファから次の数を得て、その数をレジスタFに保存する
0/ # レジスタI=0に設定する
save/ # FのコンテンツをデータベクトルD[I]に保存する(すなわち、D[0]:=F)
input/ # 別の入力を得て、Fに保存する
add/ # Iによって指し示される現在のデータをFに追加する(すなわち、F:=F+D[0])
output/. # Fを出力バッファに付け加える
【0089】
[0090] Slash/Aは、C++ライブラリとして実装され、テキスト形式(例えば、上記のテキスト)で与えられたプログラムをバイトコード形式に変換する関数を含み、バイトコードは、符号なし整数のアレイであり、符号なし整数の各々は、言語における独自の命令にマッピングされる。ライブラリに含まれるSlash/Aインタプリタによって使用されるのはバイトコード形式である。いくつかの実施形態は、GPの遺伝子型としてバイトコード形式を使用することによって、遺伝的演算子を実装する。例えば、突然変異演算子は、単に、バイトコードのランダムに選択された符号なし整数を適切な数値範囲(命令セットの命令の数によって決定され、構成可能なものである)の新しくランダムに選ばれた符号なし整数と置き換える。インタプリタは、ゼロ除算などのエラーを黙って無視するか、又は、有効なメモリの範囲外でインデックスを作成するが、そのような事象に関する統計は追跡され、それにより、プログラムが自明であるかどうかを判断するためのカスタム条件を定義することができる。
【0090】
[0091] すべてのGPインスタンスに共通する関連Slash/A構成パラメータは、以下の通りである。
・ 数字定数の数は16である。いくつかの実施形態は、ループ又は高等数学(例えば、三角関数)を含まないデフォルト命令セットのサブセットを使用する。いくつかの実施形態は、以下のC++コードを使用して、命令セットの新しいインスタンスを生成する。
SlashA::InstructionSet*NewInstructionSet(){
SlashA::InstructionSet*iset_ptr = new SlashA::InstructionSet(16);
iset_ptr->insert_DIS_IO(); //入力/出力コマンド
iset_ptr->insert_DIS_memreg(); //メモリ・レジスタコマンド
iset_ptr->insert_DIS_regreg(); //レジスタ・レジスタコマンド
iset_ptr->insert_DIS_basicmath(); //基礎数学(加算、減算、乗算、除算)
iset_ptr->insert_DIS_misc(); //何もしないという命令「nop」
return iset_ptr;
}
・ メモリコマンドに使用されるデータベクトルの長さは10である。
・ プログラムは100個の命令の固定長を有する。
・ プログラムがいかなる出力も生成しないか又はプログラムが出力を生成する前にいかなる入力も読み取らない場合は、プログラムは自明であると見なされ、従って、最も低い適応度スコアが割り当てられる。
【0091】
[0092] 以下の遺伝的演算子もまた、いくつかの実施形態に従って、すべてのGPインスタンスに共通である。
1. 0.5のレートでワンポイントクロスオーバー演算子を使用する。
2. 0.012のレートで、遺伝子型単位で動作する置換演算子を使用する。すなわち、各子孫に対して、0.012の確率で、その遺伝子がランダムに置換される。
3. 0.004のレートで、遺伝子単位で動作する突然変異演算子を使用する。すなわち、各子孫の各遺伝子に対して、0.004の確率で、対立遺伝子が異なる対立遺伝子に変化する。
【0092】
[0093] いくつかの実施形態は、プログラムの出力値rが出力バッファに追加される第1の値であり、後続の値は無視されるという慣例を使用する。いくつかの実施形態は、r>0の場合はb=1に設定し、それ以外の場合はb=0に設定することによって、rをビット値bにマッピングする。
【0093】
例示的な段階1:汎用ビルディングブロックの作成
[0094] プロセス用のGPインスタンスは、以下の通り設定される。
1. 母集団サイズは1,024である。
2. ランダム化されたターゲットDにおける入力出力対の数にt=32を使用する。いくつかの実施形態では、Dのデータ要素は、上記で説明されるように、ガウス及びベルヌーイ分布を使用して生成される。
3. 現在の母集団における自明でないプログラムgに適応度スコアFを割り当てるため、いくつかの実施形態は、最初に、ターゲットデータセットDを考慮して、差分適応度dを以下の通り演算する。
実変数rを0に初期化する。
Dの各(X,y)に対して、以下の動作を行う。
入力Xに対してプログラムgを走らせる。
gが出力yを生成した場合は、rに1を加える。
それ以外の場合は、rから1を減じる。
d=absolute_value(r)/tとする。
これにより、0~1のdの値が得られる。適応度スコアはF=1+εdであり、式中、εは、選択強度であり、0.5の定数値を有する。このように適応度を演算する動機は、それがランダム化されたターゲットシステムの2つの重要な要件を満たすためである。
a. Fが離散型確率変数と見なされる際は、すべての自明でないプログラムに対して、同じ平均及び同じ分散を有するべきである。
b. プログラムによって符号化される関数には、その逆関数が存在する場合は、常に、そのような逆関数と同じ適応度スコアが割り当てられるべきである。この例では、別のプログラムはオリジナルの出力が0である際は常に1を出力することができるため及びその逆も同様であるため、逆関数が存在する。
4. 関数シグネチャの生成に使用されるテスト入力の数に32を使用する。
5. 選択強度に0.5を使用する。
6. 現在の母集団よりむしろ、シードリストから親を選択する確率に0.0625を使用する。
7. 200,000のシードが見つかったら、プロセスを終了する。
【0094】
[0095] プロセスは反復的であり、いくつかの例では、各世代に対して数百のプログラムを生成する。例えば、プロセスを3,498回(すなわち、3,498世代)反復することにより、200,000のシードが生成される。
【0095】
例示的な段階2:数値関係の学習
[0096] テストスイートに対して、いくつかの実施形態は、各々が3つの入力を有する特定の数値関係を学習するように設計された2つのGPインスタンスを使用する。GPインスタンスAの場合、所定の入力シーケンスX=(x1,x2,x3)は、狭義単調増加している(すなわち、条件x1<x2<x3を満たす)場合は、関係を有する。
【0096】
[0097] いくつかの実施形態では、GPインスタンスBは、以下の条件を使用して、Xがx1
2+x2
2>x3
2の関係を有するかどうかを判断する。
【0097】
[0098] いくつかの実施形態は、ガウス及びベルヌーイ分布(上記で説明される)を使用して、ほぼ等しい数の正と負のインスタンスを有する訓練及びテストデータセットをランダムに生成する。具体的には、生成しなければならない各入力出力対(X,y)に対して、いくつかの実施形態は、以下の動作を行う。
・ yを生成する。
・ 関係内のメンバーシップがyと一致するまで、Xを繰り返し生成する。
【0098】
[0099] GPインスタンスAとBは両方とも、以下の構成特性を有する。
・ すべての世代で、いくつかの実施形態は、サイズt=32の新しい訓練データセットDを生成し(上記で説明されるように)、その世代に対する適応度スコアの基礎として新しい訓練データセットを使用する。
・ 現在の母集団の自明でないプログラムgに適応度スコアFを割り当てるため、いくつかの実施形態は、最初に、差分適応度dを以下の通り演算する。
・ 実変数rを0に初期化する。
・ Dの各(X,y)に対して、以下の動作を行う。
・ 入力Xに対してプログラムgを走らせる。
・ gが出力yを生成した場合は、rに1を加える。
・ それ以外の場合は、rから1を減じる。
・ d=r÷tを演算する。
これにより、-1~1の値のdが得られる。適応度スコアはF=1+εdであり、式中、εは、選択強度であり、0.5の定数値を有する。
・ 母集団サイズは256である。
・ 終了条件は以下の通りである。すべての世代で、最大の適応度スコアを有するプログラムg(タイブレークが任意に行われる)は再びスコア付けされるが、今回は、サイズtの新しく生成されたテストデータセットを使用する。gが訓練データセットとテストデータセットの両方において満点のスコアを取った場合は、プロセスの終了に成功し、gがソリューションとなる。2000世代以内にそのようなソリューションが見つからない場合は、プロセスは失敗に終わる。
【0099】
[00100] それに加えて、各GPインスタンスは、ランダムに(ランダムモードの初期化)その母集団を初期化するか、又は、段階1で生成された最後の256のシードを使用して(シードモードの初期化)その母集団を初期化するかのオプションを有する。いくつかの実施形態は、各GPインスタンスA及びBを各モードで既定の回数(例えば、10回)走らせる。一実験では、得られた結果は、以下に示される通りである。
・ ランダムモードのGPインスタンスAは、成功6回と失敗4回をもたらした。
・ シードモードのGPインスタンスAは、成功10回と失敗0回をもたらした。
・ ランダムモードのGPインスタンスBは、成功1回と失敗9回をもたらした。
・ シードモードのGPインスタンスBは、成功6回と失敗4回をもたらした。
【0100】
[00101] このように、
図2を参照して上記で説明されるプロセスは、これらのGPインスタンスに対して大幅な性能向上(母集団をシードする従来の方法に勝る)を提供する。
【0101】
[00102] 本明細書で使用される用語は、特定の実施形態を説明することのみを目的とし、特許請求の範囲を制限することを意図するものではない。実施形態の説明及び添付の特許請求の範囲で使用される場合、「a」、「an」及び「the」という単数形は、文脈で明確に示されない限り、複数形も含むことを意図している。また、「及び/又は」という用語は、本明細書で使用される場合、1つ又は複数のリストされる関連アイテムのありとあらゆる可能な組合せを指す及び包含することも理解されよう。さらに、「含む(「comprises」及び/又は「comprising」)」という用語は、この明細書で使用される際は、述べられる特徴、整数、ステップ、動作、要素及び/又はコンポーネントの存在を指定するが、1つ又は複数の他の特徴、整数、ステップ、動作、要素、コンポーネント及び/又はそれらの群の存在又は追加を除外しないことが理解されよう。
【0102】
[00103] 本明細書で使用される場合、「~する場合」という用語は、文脈に応じて、述べられる先行条件が真である「~する際」、「~され次第」、「~という決定に応答して」、「~という決定に従って」又は「~の検出に応答して」を意味すると解釈することができる。同様に、「(述べられる先行条件が真である)と決定された場合」、「(述べられる先行条件が真である)場合」又は「(述べられる先行条件が真である)際」という記載は、文脈に応じて、述べられる先行条件が真である「~と決定され次第」、「~という決定に応答して」若しくは「~という決定に従って」又は「~が検出され次第」若しくは「~の検出に応答して」を意味すると解釈することができる。
【0103】
[00104] 前述の説明は、説明の目的で、特定の実施形態を参照して説明してきた。しかし、上記の例示的な論考は、網羅的であることも、まさに開示される通りの形態に本発明を限定することも意図するものではない。上記の教示を踏まえて、多くの変更形態及び変形形態が可能である。実施形態は、本発明の原理及びその実用的な応用を最もうまく説明するために選ばれた及び説明されたものであり、それにより、当業者は、企図される特定の用途に適したものとして、様々な変更を加えて、本発明及び様々な実施形態を最もうまく利用することができる。
【0104】
パーセプトロンチューリングマシンによるニューロエボリューション
David Landaeta
Natural Computation LLC
2019年12月2日
要約
パーセプトロンチューリングマシンを紹介し、ニューロエボリューションのシステムの作成にどのように使用できるかを示す。この手法の利点は、より大きなサイズの問題へのソリューションの自動スケーリング、ハンドコーディングされたソリューションを用いて実験する能力及び進化したソリューションを理解するための可能性の向上を含む。ハンドコーディングされたソリューションは、ニューロエボリューションで使用される遺伝子型であるチューリングマシンの低水準言語で実装することができるが、作業し易くするために、Loproと呼ばれる高水準言語を紹介する。
【0105】
1 序論
人工ニューラルネットワーク(ANN)を作成するための現在最も人気のある方法は、ネットワーク構造を作成する人間の知恵と、重み及びバイアスの値を設定するための訓練の間のバックプロパゲーションとに依拠する。この手法は、特定のタスクには有効であるが、生物神経系は、新しいタスクを学習する際には何か非常に異なることを行わなければならないということが定説である。
【0106】
ニューロエボリューション(NE)は、公知の生物学的プロセスとより一貫性があるその代替の(又は補足的な)メカニズムとして提案されてきた。NEは、進化アルゴリズムの何らかの形式を使用して、ネットワーク構造を作成するか、重み及びバイアスの値を設定するか又はその両方を行う。NEの動機は、学習のために生物学的メカニズムをより良く理解しようとする試みを越えており、一続きの相互作用の後にのみANNの適応度が分かるゲームのプレイなど、NEがバックプロパゲーションより適切であると思われるいくつかの機械学習タスクがある[6]。
【0107】
周知の交替性チューリングマシン(ATM)の変異形態であるパーセプトロンチューリングマシン(PTM)を紹介する。表現型がANNである遺伝子型の遺伝子としてPTMプログラムの命令を捉えることによって、NEシステムをどのように作成するかを示す。このNEシステムは、ネットワーク構造と結合重み及びバイアス値の両方を同時に進化させる。Floreano et al. [3]において提供されるNE分類によれば、遺伝子型は、ANNを直接符号化するというよりむしろ、ANNを構築するための仕様を符号化するため、発生的なものである。発生的手法は、少量のコードで大規模なネットワークを潜在的に説明するという利点を有し、データ圧縮に役立つ。
【0108】
2 交替性チューリングマシン
ATMモデルと並列演算の一様回路モデルとの関係を強調するATMの定義から始める[1]。一様回路モデルでは、プログラムにはm、nの数が与えられ、m個の出力及びn個の入力を有するブール回路の記述が生成される。従って、プログラムを走らせることは、回路を作成する構築段階と、回路に入力を供給して出力を生成する実行段階の2段階プロセスである。PTMモデルは、単に、回路を構築するための仕様をANNを構築するための仕様と置き換えるため、このような観点は役立つ。さらに重要なことに、この手法は、回路(又はANN)がより大きな問題サイズにスケールアップするための自動方法を提供する。
【0109】
j個の命令及びk個のテープを有するATM Mはタプルである。
M=(Q,Σ,q0,g,p)
式中
1. Qは、状態の有限集合である。
2. Σは、テープアルファベットである。
3. q0∈Qは、初期状態である。
4. g:Q→{and,or,true,false,read,read-inverted}は、Qの状態を回路のゲートタイプにマッピングする関数である。
5. p:{1,...,j}→IはMのプログラムであり、
I=Q×Σk×Q×Σk×{R,N,L}k
は、Mに対するすべての可能な命令の集合であり、R、N、Lはテープヘッド移動であり、R=右へ移動、N=移動なし、及びL=左へ移動である。
【0110】
Mの構成は、マシンの即時記述に必要なすべての情報、すなわち、現在の状態、k個のテープすべてのコンテンツ及びk個の読み取り/書き込みテープヘッドの位置である。命令p(i)は、1つの時間ステップにおいて構成c
1がどのように(非決定論的に)別の構成c
2に至るかを説明し、それは、
【数1】
によって示される。
【数2】
と想定する。次いで、現在の状態がqであり、a
1,...,a
kの記号がテープ上でスキャンされるときはいつでも、状態q’に変更し、
【数3】
の記号をテープに書き込み、m
1,....,m
kに従ってテープヘッドを移動することができる。
【0111】
g(q)∈{true,false}を有する任意の状態qは、最終状態と見なされ、それは、pの相反する命令にかかわらず、状態qの構成から遷移できないことを意味する。そのような構成を入力構成と呼ぶ。
【0112】
入力をランダムアクセスメモリのビットのアレイとして想像し、各ビットは、直接アドレス指定可能である。Mのテープのいくつかは、入力インデックステープとして指定することができる。そのようなテープがちょうど1つあると想定すると、Mは、入力インデックステープ上に2進法でiを書き込み、次いで、g(q)=readを有する状態qに遷移することによって、位置iにおける入力ビットを読み取る。その時点では、Mは、入力ビットが1である場合は、g(q’)=trueを有する状態q’に自動的に遷移するか、又は、入力ビットが0である場合は、g(q’’)=falseを有する状態q’’に遷移する。このシナリオにおいて、readというゲートタイプをread-invertedに置き換えることにより、Mは、入力ビットを反転したものを読み取り、その結果、Mは、入力ビットが1である場合は、g(q’)=falseを有する状態q’に至るか、又は、入力ビットが0である場合は、g(q’’)=trueを有する状態q’’に至る。これらの自動遷移は、pの関連するいかなる命令もオーバーライドすることに留意されたい。
【0113】
複数の入力インデックステープがある場合、それらは、多次元アレイ内の入力ビットの座標を指定するものとして捉えられるが、それ以外は、入力ビット(又はそれを反転したもの)を読み取るために必要なステップは同じである。
【0114】
指定された入力インデックステープがない場合があり、その場合、入力は、ゼロ次元アレイとして捉えられる。言い換えれば、入力は、シングルビットである。
【0115】
Mのテープのいくつかは、出力インデックステープとして指定することができ、それらは、出力ビットの多次元アレイを生成する効果を生み出すために使用される。座標i1,...,idを有する出力ビットを生成するため、Mは、状態q0を有する初期構成で開始され、i1,...,idの値は、それぞれの出力インデックステープにおいて2進法で書き込まれ、他のすべてのテープは、空のコンテンツを有し、すべてのテープは、それらの最左端の位置を先頭とする。そのような構成を出力構成と呼ぶ。
【0116】
Mは、回路のゲートでMの構成を識別することによって回路を構築するための仕様として捉えられる。ゲートタイプは、構成の現在の状態にgを適用することによって与えられる。任意の2つの構成c
1及びc
2に対して、c
1に対するゲートの入力は、
【数4】
の場合及びその場合に限り、c
2に対するゲートの出力にリンクされる。trueのタイプのゲートは、入力がなく、真の一定の出力値を有する。同様に、falseのタイプのゲートは、入力がなく、偽の一定の出力値を有する。{and,or}のタイプのゲートは、任意の数の入力を有し得(ゼロでさえも)、その場合、ゲートは、そのタイプがfalseであるかのように動作し、それ以外の場合は、ゲートは、そのタイプによって示される論理関数を実行する。
【0117】
構築段階に対するいくつかの実用的な考慮事項に対処する必要がある。第1に、すべてのテープの長さに対して限度を設ける必要がある。そうでなければ、構築は永遠に続く可能性がある。入力及び出力インデックステープに対するこれらの限度により、入力及び出力アレイのサイズが指定され、他のテープにおいては、演算に必要とされることが予期される追加の作業スペースの量が指定される。すべてのテープが同じサイズを有する必要はないが、サイズを固定する必要はある。これは、テープコンテンツを実際に空にすることはできないため、代わりに、デフォルトのテープコンテンツとしてゼロの文字列が使用されることを意味する。演算では、テープの終わりに達したことを知る必要があり、これは、1つのテープ記号をエンドマークとして指定することによって達成される。テープは円形であると見なされ、その結果、エンドマークから右への移動は、自動的に、テープの第1の記号のところにテープヘッドを位置決めするため、エンドマークは1つで十分である。エンドマークから左への移動は、1ステップで最後のテープ記号にアクセスするために認められている。テープヘッドをエンドマークのところに位置決めしたものをデフォルト(最左端の)位置と見なす。エンドマークを非エンドマークに又は非エンドマークをエンドマークに変更することになる、pの命令におけるいかなるテープ記号の上書きも無視される。
【0118】
第2に、回路におけるサイクルの可能性を排除する必要がある。これは、出力構成から入力構成まで、深さ優先順で、回路を構築することによって行われ、それにより、進行するにつれてサイクルを検出することができる。2つのゲート間にリンクを追加することによってサイクルが生まれる場合は、単に、リンクが追加されなくなる。これが、ATMプログラムが命令の順序付けられたリストとして定義された唯一の理由であることに留意されたい。すなわち、サイクルを断つためにどのリンクを排除するかに関する決定は、プログラムの命令の順番に依存し得る。これ以外は、順序付けられていない命令セットは同じように機能する。しかし、以下のPTMモデルにおいて、プログラムの所定の命令の発生数は生成されるANNの重み及びバイアス値に影響を及ぼすため、プログラムが命令の順序付けられたリストであることがさらに一層重要であることが分かるであろう。
【0119】
さらに、回路のゲートの総数、回路の深さ又は回路のファンアウト(任意のゲートの最大入力数である)に対する限度など、任意選択の資源制限を考慮すべきである。資源限度を超えた場合は、非致命的なエラーと見なすか(構築が終了することを意味するが、その時点までに構築された回路は、保持され、実行に使用される)又は致命的と見なす(その場合、例外が発生する)ことができる。
【0120】
3 パーセプトロンチューリングマシン
PTMモデルは、ブール回路を構築するためのその仕様をANNを構築するための仕様に置き換えたATMモデルの変異形態である。これは、直接的な方法で行われる。すなわち、論理ゲートでの構成の識別は、パーセプトロンでの構成の識別になり、以下では、これをノードと呼ぶ。
j個の命令及びk個のテープを有するPTM Mはタプルである。
M=(Q,Σ,q0,q1,p)
式中
1. Qは、状態の有限集合である。
2. Σは、テープアルファベットである。
3. q0∈Qは、出力状態である。
4. q1∈Qは、入力状態である。
5. p:{1,...,j}→IはMのプログラムであり、
I=Q×Σk×Q×Σk×{R,N,L}k×{-1,1}2
は、Mに対するすべての可能な命令の集合である。
【0121】
この定義により、ANNは3つのタイプのノード(出力、入力及び隠し)を区別するだけで十分であるため、ATMモデルの明示的なゲートタイプ指定が撤回される。Mの構成は、状態がq0の場合は出力ノードに相当し、状態がq1の場合は入力ノードに相当し、それ以外の場合は、隠しノードに相当する。状態q0は、ATMの初期状態と同じように動作し、出力インデックステープとの関係が同じである。状態q1は、readのゲートタイプを有するATM状態のように動作し、入力インデックステープとの関係が同じである。
【0122】
命令p(i)は、集合{-1,1}から取られた整数の追加の対(Δw,Δb)を有することを除き、ATM命令と同じように解釈される。Δwは差分重みであり、Δbは命令と関連付けられた差分バイアスであると言える。任意の2つの構成c
1及びc
2に対して、リンク
【数5】
を生成することになるpの任意の命令がある場合は、リンクと関連付けられた実際の重みを見出すために、それらの命令と関連付けられたすべての差分重みの合計が得られる。何らかの構成c’に対する
【数6】
の形式のリンクを生成することになるpの任意の命令のすべての差分バイアス値の合計を得ることにより、構成cに相当するノードと関連付けられたバイアス値が見出され、そのようなc’が存在しない場合は、デフォルトバイアスはゼロである。
【0123】
例として、構成c
1及びc
2のノードから入力を得ながら、構成cのノードがどのようにandゲートのように挙動するかを考えてみる。当然ながら、
【数7】
及び
【数8】
を可能にするpの命令のサブリストp’が存在しなければならず、何らかの構成c’に対する
【数9】
の形式のリンクを可能にするpの他の命令は存在してはならないが、andのような挙動を生み出すため、p’の命令と関連付けられる差分重み及び差分バイアス値を決定する必要がある。以下の標準関数を使用して、パーセプトロンの出力をその入力の点から見て定義すると仮定する。
【数10】
式中、xは、実数値入力のベクトルであり、wは、実数値重みのベクトルであり、bは、実数値バイアスであり、w・xは、ドット積を示す。次いで、andのような挙動を生み出すには、ちょうど4つのp’の命令を有すれば十分であり、そのうちの2つは、
【数11】
を可能にし、残りの2つは、
【数12】
を可能にし、4つのすべての差分重みは1であり、4つのうちのちょうど3つの差分バイアスは-1である。
【0124】
4 遺伝的演算子
PTM Mのプログラムpは、ニューロエボリューションのシステムに対する遺伝子型として使用することができ、pの命令は遺伝子である。pはプログラムと遺伝子型の両方であるため、システムは、進化アルゴリズムの例のみならず、遺伝的プログラミング(GP)のインスタンスでもある。その上、PTMモデルはチューリングマシンモデルを汎化したものであるため、このGPシステムで使用されるプログラミング言語は、明らかにチューリング完全[2]である。
【0125】
しかし、GP遺伝子型に対してPTMモデルではなくATMモデルを使用することの何が問題なのだろうか?この手法の大きな問題は、進化が、ランダムな母集団から始まり、自明なプログラム(その入力を無視し、一定の出力を生成するもの)以外のものに収束することがほぼ不可能になってしまうことである。ATMプログラムが自明でないものであるためには、出力構成に適用される少なくとも1つの命令を有する必要がある。そのような命令は高い適応度のために必要であるため、母集団全体に急速に広がり、それにより、典型的なメンバーは、出力構成に適用されるいくつかの区別可能な命令を有するようになる。従って、出力構成は、典型的には、いくつかの入力を有するゲートに相当する。しかし、出力構成は、andゲート又はorゲートを表さなければならない。出力構成がいくつかの入力を有するandゲートである場合は、常に偽を出力する可能性が極めて高い。同様に、いくつかの入力を有するorゲートは、常に真を出力する可能性が極めて高い。その結果、訓練がどのように実行されるかにかかわらず、母集団が自明なプログラムに収束することはほぼ確実である。
【0126】
対照的に、PTMモデルの出力構成は、パーセプトロンに相当し、母集団がランダムに始まると仮定して、真を出力するのと同じくらい偽を出力する可能性がある。その上、PTMモデルは、遺伝学の下では、ATMモデルよりもはるかにロバストであり、これは、通常の遺伝的演算子が遺伝子型に適用される際、表現型がすっかり様変わりする可能性は低いことを意味する。これは、PTM命令がただ単にネットワークの重み及びバイアスを少しずつ徐々に修正するという事実によるものである。例えば、ATMを使用して1世代でandゲートをorゲートに変更するというよりむしろ、PTMを使用して多くの世代にわたってパーセプトロンをandのような挙動からorのような挙動にスムーズに変更することができる。
【0127】
PTM遺伝子型のこの特性を十分に活用するには、遺伝子型内で遺伝子を並べ替える少なくとも1つの遺伝的演算子を使用する必要がある。例えば、反転演算子[4]であれは、この要件を満たすことになる。クロスオーバー及び細粒突然変異演算子(差分重み又は差分バイアスのような命令の個々の構成要素のみを変更できるもの)と組み合わせると、ノード間のすべての重み及びバイアスのスペースをスムーズに探索する効果が生み出される。
【0128】
5 Lopro:PTMプログラミングの高水準言語
ニューロエボリューションに対してPTMモデルを使用する利点の1つは、それが実際にはGPのインスタンスであることである。これにより、進化した遺伝子型は、単なるブラックボックス以上のものになり、すなわち、それは、人間が読み取れるコンピュータプログラムである。確かに、プログラミング言語は非常に低水準であるが、チューリングマシンをプログラムするための十分に確立された言語に基づくため、専門家は進化したANNがどのように決定を行うかを理解できるようになるという合理的な希望がある。
【0129】
しかし、方向性を変えることもできる。すなわち、これがGPであるという事実は、専門家が問題に対する公知のソリューションを実装するために遺伝子型をハンドコーディングできることを意味する。これには、以下を含めて、複数の利点がある。
1. ニューロエボリューションシステム上のサニティチェックの生成が可能になる。公知のソリューションを有する問題を使用してテストし、その公知のソリューションを用いて遺伝子型の初期母集団をシードすることができる。進化のプロセスによってソリューションが破壊される場合は、システム内のどこかにバグがあることが分かる。
2. 進化がより良いソリューションを生み出す上で有利なスタートを切れることを期待して、ターゲット問題に対する1つ又は複数の公知の部分ソリューションを用いて初期母集団をシードすることができる。
3. ソリューションが何なのか分からない場合でさえ、ターゲット問題に対する進化したソリューションに対する資源要件(状態の数、テープの数など)を推定するためにハンドコーディングされたPTMプログラムでの経験を生かすことができる。
【0130】
チューリングマシンの専門家が理解する必要のない高水準プログラミング言語を作成でき、高水準のコードを低水準のPTMコードに変更するための変換器を実装できるという事実により、これらのタスクは容易になる。我々はまさにそれを行い、それが「論理プログラミング(logic programming)」の頭字語である高水準言語Loproと呼ばれるものである。Loproは、ATM(及びPTM)モデルが一階論理の観点からソリューションを記述する上で非常に優れているという事実を使用する。
【0131】
Loproは、現在、C++11規格に従うC++のクラス、関数及びマクロ定義の集合体として実装されている。Loproは、表記を簡単にするために、演算子オーバーロード及びラムダ式を含む、C++の強力な特徴を活用する。
図1は、真に設定されている入力ビットが存在するかどうかを判断する簡単なプログラムの例を示す。より複雑な例は、
図2によって提供されており、所定の有向グラフの推移閉包を演算するものであり、入力及び出力グラフは、それらの隣接行列によって指定される。
【0132】
Loproの心臓部は、PTM自体を具体化するマシンクラスである。それは、テープ及び状態オブジェクトの入れ物であり、命令でもある。マシンは、定義モードで始まり、その間、テープ、状態及び命令がそれに追加される。様々な「New...」メソッドは、テープ又は状態を追加し、ちょうど今追加されたものを指すために使用されるオブジェクトを返す。そのようなLoproオブジェクトはすべて、オリジナルのマシン及びオブジェクトの一意整数識別子にスマートポインタをラップするため、そのようなオブジェクトの値別のコピーは常に安全且つ効率的である。Buildメソッドは、定義モードを終了し、定義に従ってANNを構築し、マシンを実行モードにするものであり、その間、入力を供給し、構築されたANNから出力を受信することができる。
【0133】
すべてのテープオブジェクトは、不変の「end」特性を有し、それは、マシンのNewTapeメソッドに渡す引数において指定される整数である。これがテープのサイズを制限する方法であるが、テープが保持できるビット数を直接指定するというよりむしろ、終了値は、2進法でテープ上に含まれると予想される符号なし最大整数より1大きい。この理由は、テープには典型的にはアレイインデックスが含まれるため、通常は、対応するアレイのサイズとして終了値を表現するのが最も便利であるためである。従って、NewTapeメソッドは、指定された終了値に基づいてテープが保持できるビット数の適切な限度を演算する。しかし、テープのヘッドオブジェクトを使用してテープ上の任意のビットを上書きすることが認められているため、終了値以上の値をテープに書き込むことができる場合がある(終了値がちょうど2の累乗ではない場合)ことを認識していなければならない。幸いなことに、
図1のExists関数からわかるように、この条件は、検出及び補正が容易である。
【0134】
入力状態は、マシンのNewInputStateメソッドで追加され、入力インデックステープを示す可変長引数リストが取り入れられる。同様に、NewOutputStateメソッドは、出力状態を追加し、出力インデックステープを指定する。他のすべての状態は、NewStateメソッドで追加され、引数は取らない。
【0135】
代入演算子は、命令を作成する便利な方法を提供するために、状態クラスでオーバーロードされる。Loproの命令は、PTM命令の高水準のアナログである。PTM命令のように、Lopro命令は、命令を適用するために満たさなければならないマシン構成の前提条件を有し、命令が適用された際に構成を変更する動作を有する。オーバーロードされた代入演算子を使用することにより、命令は、以下のような一般的な形式を有する。
precondition_expression = action_expression ;
【0136】
図1:入力ビットが設定されているかどうかを判断する
【数13】
【0137】
図2:所定の有向グラフの推移閉包を求める
【数14】
【0138】
前提条件式は、単なる状態オブジェクトであり得、これは、テープコンテンツ又はヘッド位置にかかわらず、マシンがその状態にあるときはいつでも前提条件が満たされていることを意味する。テープコンテンツ又はヘッド位置に制約を追加するため、以下のようにwhen句が使用される(WHENマクロの使用)。
from_state WHEN (conditional_expression) = action_expression;
【0139】
条件式は、テープ及びヘッドオブジェクトの観点からブール式の外観を意図的に有するが、式の実際の結果タイプは、内部条件クラスであり、when句においてのみ使用することができる。
【0140】
テープオブジェクトの不変の「head」特性を使用してアクセスされるヘッドオブジェクトを使用することにより、テープコンテンツ及びヘッド位置に対する低水準のPTM前提条件を正確に再現することができる。演算子は、ビットのアレイのイテレータのように挙動するように、ヘッドクラスでオーバーロードされる。例えば、
*tape_head == 1
という条件式は、
tape_headというヘッドオブジェクトが記号1をスキャンしているときはいつでも満たされる。ヘッドクラスのis_endというアクセサメソッドは、ヘッドが現在エンドマークをスキャンしているかどうかを判断するために使用される。
tape_head.is_end()
【0141】
演算子は、そのようなオブジェクトがブール値のように挙動するように、条件クラスでオーバーロードされている。従って、
*tape_head == 1又はtape_head.is_end()
という条件式は、tape_headというヘッドオブジェクトが記号1又はエンドマークをスキャンしているときはいつでも満たされる。
【0142】
他方では、テープオブジェクトが符号なし整数のように挙動するように、演算子がテープクラスでオーバーロードされているという事実を使用して、高水準の前提条件を作成することができる。例えば、
図1のExists関数では、
test_tape >= test_tape.end()
という条件式が見られ、これは、test_tapeのコンテンツがテープの終了値以上であるときはいつでも満たされる。テープ上の最左端のビット(エンドマークから右にヘッドを移動することによってアクセスされる)がテープコンテンツに相当する符号なし整数の下位ビットであるという慣例が使用される。
【0143】
複数の命令が同じ状態オブジェクトsについて言及する前提条件式を有する場合は、状態sを有する任意の所定の構成cに対して、その前提条件がcによって満たされている最初のそのような命令のみ、その動作がcに適用される。最後のそのような命令は、典型的には、when句を有さず、その結果、キャッチオールとして機能する。明らかに、そのような命令をすべて1つにまとめることは良いアイデアである(単一のif-then-elseステートメントを効果的に作成する)。
【0144】
命令の動作式は、単なる状態オブジェクトであり得、これは、構成は指定された状態に変更されるが、テープコンテンツ又はヘッド位置に変更はないことを意味する。テープコンテンツ又はヘッド位置の変更を指定するため、以下のようにafter句が使用される(AFTERマクロの使用)。
precondition_expression = to_state AFTER { action_statements... };
【0145】
動作ステートメントは、低水準(イテレータとしてヘッドオブジェクトを使用する)であっても、高水準(符号なし整数としてテープオブジェクトを使用する)であっても、それらの2つの何らかの組合せであってもよい。ヘッドオブジェクトのインクリメントは、ヘッドを右に移動する効果を有し、ヘッドオブジェクトのデクリメントは、ヘッドを左に移動する。
【0146】
演算子は、ブール式のように挙動するように、動作式に対してオーバーロードされる。これにより、対応するPTM命令の差分重み及び差分バイアス値を指定するための高水準のメカニズムが得られる。例えば、
from_state = to_state_1 and to_state_2;
というLopro命令は、r
1及びr
2の2つのPTM命令に変換され、
【数15】
及び
【数16】
の形式のネットワークリンクがそれぞれ作成され、その結果、構成c(from_stateという状態の)は、c
1(to_state_1という状態の)及びc
2(to_state_2という状態の)から入力を得ながら、andゲートのように挙動するパーセプトロンに相当する。
【0147】
Lopro命令定義の巧妙性は、Buildメソッドが呼び出されるまで、条件式及び動作ステートメントが実際には実行されないことである。WHEN及びAFTERマクロは、これを可能にする隠しラムダ式(すべての変数を値別に捕捉する)である。これは、表記的には非常に便利であるが、サブ関数内の局所変数としてLoproオブジェクトを使用する上で技術的な問題が提示される。すなわち、関連命令は局所変数の有効期間外に呼び出されることを理由に、適時初期化及びクリーンアップを提供するために、これらのローカルオブジェクトのコンストラクタ及びデストラクタに依拠することはできない。
【0148】
これがスコープクラスの動機である。すべてのマシンオブジェクトは、スコープオブジェクトのスタックを維持し、それは、最初は、メイン関数を表すデフォルトスコープを含んでいる。
lopro: :Scope scope (machine);
のようなサブ関数におけるスコープインスタンス化により、マシンによって維持されるスタックの最上部にスコープがプッシュされ、スコープに対する対応するデストラクタ呼び出しにより、スタックからスコープが取り出される。任意の「New...」メソッドが呼び出されるときはいつでも及びテープの「head」特性へのアクセスが行われるときはいつでも、マシンは、その事象を記録し、それをスタックの最上部のスコープオブジェクトと関連付ける。構築段階の間、マシンは、スコープを変更する動作が行われた際にそれを検出することができ、その場合、影響を受けたLoproオブジェクトに対して適切な初期化又はクリーンアップ動作が自動的に呼び出される。最終結果は、命令を定義する際には常に、以下に依拠できるということである。
1. テープコンテンツは、最初は、出力インデックステープ以外、すべてのビットが0に設定され、出力インデックステープは、出力ビットアレイの適切な座標に初期化される。
2. ヘッドは、最初は、エンドマークをスキャンする。
それに加えて、サブ関数スコープと関連付けられたテープオブジェクトは、可能であればリサイクルされ、それにより、マシンが使用するテープの数が低減する。ANNのノードの最大数はテープの数と共に指数関数的に増加するため、これは重要である。
【0149】
Loproプログラミングには2つの非常に望ましい特性がある。第1の望ましい特性は、変数がテープオブジェクトを表す一階論理のシステム内のpredicateであるかのように状態オブジェクトを扱えるということである。この観点から、Loproプログラムは、単に、入力predicateの点から見て論理的に出力predicateを定義する。
【0150】
図1のExists関数は、一階論理のこのシステムの存在記号を定義することに留意されたい。読者のための練習として、対応する全称記号を定義するための関数を書いてみよう。ヒント:Exists関数の本文の2行を変更し、関数名をAllに変える。本文の1行を変更するだけでよいと思う場合は、もう一度考えてみよう。
【0151】
Loproプログラミングの第2の望ましい特性は、それが自然に効率的な並列演算に役立つということである。その良い例は、
図2に示される推移閉包問題に対するソリューションによって提供される。この例は、推移閉包問題が並列複雑性クラスNC
2にあることを証明しており、並列複雑性クラスNC
2は、サイズn
O(1)及び深さO(log
2n)の一様回路によって解くことができるすべての問題のクラスであり、効率的な並列演算を表す複雑性クラスの保守的な定義として受け入れられている[5]。
【0152】
6 結論
ニューロエボリューションに対してパーセプトロンチューリングマシンを使用することにより、以下の利点が得られる。
1. 進化を通じてネットワーク構造と結合重み及びバイアス値の両方が見出される。
2. 小さな遺伝子型で大規模なネットワークを説明することができる。
3. ソリューションはより大きな問題サイズに自動的にスケールアップされる。
4. 遺伝子型は人間が読み取れるコンピュータプログラムである。
5. 遺伝子型によって使用されるプログラミング言語はチューリング完全である。
6. 遺伝子型はロバストであり、進化によってソリューション空間をスムーズに探索することができる。
7. 低水準コードと高水準コードの両方においてハンドコーディングされたソリューションで実験する能力がある。
【0153】
参考文献
[1] Balcazar JL, Diaz J, Gabarro J. Structural Complexity II, Springer-Verlag, Berlin, 1990.
[2] Banzhaf W, Nordin P, Keller RE, Francone FD. Genetic Programming: An Introduction, Morgan Kaufmann, San Francisco, 1998.
[3] Floreano D, Durr P, and Mattiussi C. Neuroevolution: from architectures to learning. Evolutionary Intelligence, 1(1):4762, 2008.
[4] Goldberg D. Genetic Algorithms in Search, Optimization and Machine Learning, Addison-Wesley, Reading, MA, 1989.
[5] Papadimitriou CH. Computational Complexity, Addison-Wesley, New York, 1994.
[6] Risi S and Togelius J. Neuroevolution in games: State of the art and open challenges. IEEE Transactions on Computational Intelligence and AI in Games, 9(1):2541, 2017.
【国際調査報告】