コンピュータプログラミングにおける遺伝子発現プログラミング(GEP)は、コンピュータプログラムやモデルを作成する進化アルゴリズムです。これらのコンピュータプログラムは、生物のようにサイズ、形状、構成を変化させることで学習し適応する複雑なツリー構造を持っています。そして、生物と同様に、GEPのコンピュータプログラムも固定長の単純な線状染色体に符号化されています。したがって、GEPは遺伝子型と表現型のシステムであり、遺伝情報を保持・伝達するための単純なゲノムと、環境を探索し適応するための複雑な表現型という2つの要素から恩恵を受けています。
進化アルゴリズムは、個体の集団を使用し、適応度に応じて個体を選択し、1 つ以上の遺伝演算子を使用して遺伝的変異を導入します。人工計算システムにおけるその使用は 1950 年代に遡り、最適化問題の解決に使用されていました (例: Box 1957 [ 1 ]、Friedman 1959 [ 2 ] )。しかし、進化アルゴリズムが普及したのは、 1965 年に Rechenberg が進化戦略を導入したことによるものです[ 3 ]。進化アルゴリズムに関する優れた概説書としては、Mitchell (1996) の「遺伝的アルゴリズム入門」[ 4 ]があります。
遺伝子発現プログラミング[ 5 ]は進化アルゴリズムのファミリーに属し、遺伝的アルゴリズムや遺伝的プログラミングと密接に関連しています。遺伝的アルゴリズムからは固定長の線形染色体を、遺伝的プログラミングからは様々なサイズと形状の表現力豊かな構文解析木を受け継いでいます。
遺伝子発現プログラミングでは、線状染色体が遺伝子型、構文解析木が表現型として機能し、遺伝子型/表現型システムを構築します。この遺伝子型/表現型システムは多遺伝子性であり、各染色体に複数の構文解析木が符号化されています。つまり、GEPによって作成されるコンピュータプログラムは複数の構文解析木で構成されています。これらの構文解析木は遺伝子発現の結果であるため、GEPでは発現木と呼ばれます。Masood Nekoeiらは、ABC最適化においてこの発現プログラミングスタイルを利用し、他の進化アルゴリズムよりも優れた手法としてABCEPを実施しました。
遺伝子発現プログラミングのゲノムは、同じサイズの1つ以上の遺伝子から構成される、固定長の線形記号文字列または染色体から成ります。これらの遺伝子は、固定長であるにもかかわらず、さまざまなサイズと形状の発現ツリーをコードします。それぞれサイズ9の2つの遺伝子を持つ染色体の例は、次の文字列です(位置0は各遺伝子の開始位置を示します)。
012345678012345678L+a-baccd**cLabacdここで、「L」は自然対数関数を表し、「a」、「b」、「c」、「d」は問題で使用される変数と定数を表します。
上記のように、遺伝子発現プログラミングに関わる遺伝子はすべて同じサイズです。しかし、これらの固定長の文字列は、異なるサイズの遺伝子発現ツリーをコードしています。つまり、コード領域のサイズは遺伝子ごとに異なり、適応と進化が円滑に起こるようになっています。
例えば、数式は次のようになります。
式ツリーとして表現することもできます。
ここで「Q」は平方根関数を表します。
この種の表現ツリーはGEP遺伝子の表現型発現から構成され、遺伝子はこれらの複雑な構造を符号化する線形文字列である。この特定の例では、線形文字列は以下に対応する。
01234567Q*-+abcdこれは、式ツリーを上から下、左から右へと単純に読み取ることです。これらの線形文字列は、k式(カルバ記法に由来)と呼ばれます。
k式から式ツリーへの変換も非常に簡単です。例えば、次のk式の場合:
01234567890Q*b**+baQbaこれは、2つの異なる終端記号(変数「a」と「b」)、2つの異なる引数(「*」と「+」)を持つ関数、および1つの引数(「Q」)を持つ関数で構成されています。その式は次のようになります。
遺伝子発現プログラミングのk式は、発現される遺伝子領域に対応します。つまり、遺伝子の中には発現されない配列が存在する可能性があり、実際、ほとんどの遺伝子においてこれは当てはまります。これらの非コード領域が存在する理由は、末端のバッファを提供することで、GEP遺伝子にコード化されたすべてのk式が常に有効なプログラムまたは発現に対応するようにするためです。
遺伝子発現プログラミングの遺伝子は、ヘッドとテールという2つの異なるドメインで構成されており、それぞれ異なる特性と機能を持っています。ヘッドは主に、目の前の問題を解決するために選択された関数と変数をエンコードするために使用されます。一方、テールは、変数をエンコードするために使用されるだけでなく、基本的にすべてのプログラムがエラーのない状態であることを保証するためのターミナルのリザーバーを提供します。
GEP遺伝子の場合、テールの長さは次の式で与えられます。
ここで、hはヘッドの長さ、n maxは最大アリティです。たとえば、関数セットF = {Q, +, −, ∗ , /}と終端記号セット T = {a, b} を使用して作成された遺伝子の場合、n max = 2 です。また、ヘッドの長さを 15 に選択すると、t = 15 (2–1) + 1 = 16 となり、遺伝子の長さgは 15 + 16 = 31 になります。以下のランダムに生成された文字列は、そのような遺伝子の例です。
0123456789012345678901234567890*b+a-aQab+//+b+babbabbbababbaaaこれは式ツリーをエンコードします。
この場合、遺伝子を構成する31個の要素のうち、8個しか使用されていない。
遺伝子の長さは固定されているものの、それぞれの遺伝子はさまざまなサイズと形状の発現ツリーをコードする可能性を秘めていることは容易に理解できる。最も単純な発現ツリーはノードが1つだけで構成され(遺伝子の最初の要素が終端である場合)、最大の発現ツリーは遺伝子内の要素の数と同じ数のノードで構成される(ヘッド内のすべての要素が最大アリティを持つ関数である場合)。
また、あらゆる種類の遺伝子改変(突然変異、逆位、挿入、組換えなど)を、結果として生じるすべての子孫が正しくエラーのないプログラムをコードすることを保証しながら実施することは、容易なことであることも容易に理解できる。
遺伝子発現プログラミングの染色体は、通常、同じ長さの複数の遺伝子から構成されます。各遺伝子は、サブ発現ツリー(サブET)またはサブプログラムをコードします。そして、これらのサブETは様々な方法で相互作用し、より複雑なプログラムを形成します。図は、3つのサブETから構成されるプログラムの例を示しています。

最終プログラムでは、サブETは加算または他の関数によってリンクされる可能性があります。選択できるリンク関数の種類に制限はありません。より複雑なリンク関数の例としては、平均、中央値、中間値を取る、合計を閾値処理して二項分類を行う、シグモイド関数を適用して確率を計算するなどがあります。これらのリンク関数は通常、各問題に対して事前に選択されますが、遺伝子発現プログラミングの細胞システム[ 6 ] [ 7 ]によってエレガントかつ効率的に進化させることもできます。
遺伝子発現プログラミングにおいて、ホメオティック遺伝子は、メインプログラムの異なるサブET(サブET)またはモジュール間の相互作用を制御します。これらの遺伝子の発現は、異なるメインプログラムまたは細胞を生み出します。つまり、各細胞でどの遺伝子が発現するか、そして各細胞のサブETが互いにどのように相互作用するかを決定します。言い換えれば、ホメオティック遺伝子は、どのサブETがどのメインプログラムまたは細胞でどのくらいの頻度で呼び出されるか、そしてそれらが互いにどのような種類の接続を確立するかを決定します。
ホメオティック遺伝子は、通常の遺伝子と全く同じ構造を持ち、同じプロセスで構築されます。これらもヘッドドメインとテールドメインを含みますが、ヘッドには連結機能と、通常の遺伝子を表す特殊な末端(遺伝子末端)が含まれている点が異なります。通常の遺伝子の発現は、通常通り様々なサブETを生み出し、細胞システムではこれらはADF(自動定義機能)と呼ばれます。テールには遺伝子末端、つまりアルゴリズムによってその場で生成される派生機能のみが含まれています。
例えば、図中の染色体は、3つの正常遺伝子と1つのホメオティック遺伝子を持ち、3つの異なる機能を合計4回呼び出し、それらを特定の方法でリンクさせるメインプログラムをコードしている。

この例から明らかなように、セルラーシステムはリンク関数の制約のない進化を可能にするだけでなく、コードの再利用も可能にします。そして、このシステムで再帰を実装することは難しくないはずです。
多細胞システムは、複数のホメオティック遺伝子から構成される。このシステムにおける各ホメオティック遺伝子は、異なる組み合わせのサブ発現ツリー(ADF)を組み立て、複数の細胞または主要プログラムを作り出す。
例えば、図に示されているプログラムは、2つの細胞と3つの正常な遺伝子からなる細胞システムを用いて作成された。

これらの多細胞システムの応用範囲は広く多様であり、多遺伝子システムと同様に、出力が1つの問題と出力が複数ある問題の両方に適用できる。
GEP遺伝子(正常遺伝子とホメオティック遺伝子の両方)のヘッド/テール領域は、すべてのGEPアルゴリズムの基本構成要素です。しかし、遺伝子発現プログラミングでは、ヘッド/テール構造よりも複雑な他の染色体構造も検討されます。基本的に、これらの複雑な構造は、基本的なヘッド/テール領域に加えて1つ以上の追加領域を持つ機能単位または遺伝子で構成されています。これらの追加領域は通常、アルゴリズムが最適な解を見つけるために絶えず微調整するランダムな数値定数をエンコードします。たとえば、これらの数値定数は、関数近似問題における重みまたは係数(下記のGEP-RNCアルゴリズムを参照)、ニューラルネットワークの重みと閾値(下記のGEP-NNアルゴリズムを参照)、決定木の設計に必要な数値定数(下記のGEP-DTアルゴリズムを参照)、多項式誘導に必要な重み、またはパラメータ最適化タスクでパラメータ値を発見するために使用されるランダムな数値定数である可能性があります。
基本的な遺伝子発現アルゴリズムの基本手順を擬似コードで以下に示します。
最初の4つのステップでは、アルゴリズムの反復ループ(ステップ5~10)に必要なすべての要素を準備します。これらの準備ステップの中で最も重要なステップは、関数セットと終端セットの要素を使用してランダムに生成される初期集団の作成です。
すべての進化アルゴリズムと同様に、遺伝子発現プログラミングは個体の集団(この場合はコンピュータプログラム)を扱います。したがって、開始するには何らかの初期集団を作成する必要があります。その後の集団は、選択と遺伝子改変によって、初期集団の子孫となります。
遺伝子発現プログラミングの遺伝子型/表現型システムでは、個体の単純な線状染色体を作成するだけでよく、それらがコードするプログラムの構造的な健全性については心配する必要がない。なぜなら、それらの発現は常に構文的に正しいプログラムをもたらすからである。
適合度関数と選択環境(機械学習では訓練データセットと呼ばれる)は適合度の2つの側面であり、したがって密接に関連している。実際、プログラムの適合度は、その性能を測定するために使用されるコスト関数だけでなく、適合度を評価するために選択された訓練データにも依存する。
選択環境は、適合事例とも呼ばれる訓練記録の集合で構成されます。これらの適合事例は、何らかの問題に関する観測値や測定値の集合であり、訓練データセットと呼ばれるものを構成します。
質の高い学習データは、優れた解を導き出すために不可欠です。適切な学習データセットは、対象となる問題を適切に代表し、かつバランスが取れている必要があります。そうでなければ、アルゴリズムが局所最適解に陥ってしまう可能性があります。また、学習に不必要に大きなデータセットを使用することも避けるべきです。これは処理速度を不必要に低下させる原因となります。目安としては、検証データにおいて十分な汎化性能を発揮できるだけのレコード数を学習データとして選択し、残りのレコードを検証とテストに用いるのが良いでしょう。
大まかに言えば、予測の種類に基づいて、基本的に3つの異なる問題が存在する。
最初のタイプの問題は回帰と呼ばれ、2番目は分類として知られており、ロジスティック回帰は「はい」または「いいえ」といった明確な分類に加えて、各結果に確率も付随する特殊なケースです。そして最後のものはブール代数と論理合成に関連しています。
回帰分析では、応答変数または従属変数は数値(通常は連続値)であるため、回帰モデルの出力も連続値となります。したがって、モデルの出力を訓練データの応答変数の値と比較することで、進化するモデルの適合性を評価するのは非常に簡単です。
モデルの性能を評価するための基本的な適合度関数はいくつかあり、最も一般的なものは、モデルの出力と実際の値との間の誤差または残差に基づいています。このような関数には、平均二乗誤差、二乗平均平方根誤差、平均絶対誤差、相対二乗誤差、相対二乗誤差、相対絶対誤差などがあります。
これらの標準的な尺度はすべて、解空間に細かい粒度または滑らかさをもたらすため、ほとんどのアプリケーションで非常にうまく機能します。しかし、予測が特定の区間内(たとえば、実際の値の 10% 未満)にあるかどうかを判断するなど、より粗い進化が必要となる問題もあります。ただし、ヒット数(つまり、選択した区間内の予測)を数えることだけに関心がある場合でも、各プログラムがスコアしたヒット数だけに基づいてモデル集団を進化させるのは、適応度ランドスケープの粒度が粗いため、通常はあまり効率的ではありません。したがって、解決策として通常は、これらの粗い尺度と、上記に挙げた標準誤差尺度などの何らかの滑らかな関数を組み合わせることになります。
相関係数と決定係数(R二乗)に基づく適合度関数も非常に滑らかです。回帰問題においては、これらの関数は他の指標と組み合わせることで最も効果を発揮します。なぜなら、これらの関数は単独では相関関係のみを測定し、モデル出力の値の範囲を考慮しない傾向があるからです。したがって、目標値の範囲を近似する関数と組み合わせることで、予測値と実際値の間に良好な相関関係と適合性を持つモデルを見つけるための非常に効率的な適合度関数となります。
分類およびロジスティック回帰の適合度関数の設計では、分類モデルの3つの異なる特性を利用します。最も明白なのは、ヒット数を数えることです。つまり、レコードが正しく分類された場合、ヒットとしてカウントされます。この適合度関数は非常に単純で、単純な問題にはうまく機能しますが、より複雑な問題や極端に不均衡なデータセットでは、結果が悪くなります。
ヒット数に基づく適合度関数を改善する一つの方法は、正解と不正解の概念を拡張することです。二値分類タスクでは、正解は00または11となります。「00」は、陰性ケース(「0」で表される)が正しく分類されたことを意味し、「11」は、陽性ケース(「1」で表される)が正しく分類されたことを意味します。「00」の分類は真陰性(TN)、「11」は真陽性(TP)と呼ばれます。
誤分類には2種類あり、それぞれ01と10で表されます。実際の値が0でモデルが1と予測した場合を偽陽性(FP)、ターゲットが1でモデルが0と予測した場合を偽陰性(FN)と呼びます。TP、TN、FP、FNのカウントは通常、混同行列と呼ばれる表に記録されます。
TP、TN、FP、FNをカウントし、これら4種類の分類にそれぞれ異なる重みを割り当てることで、より滑らかで効率的な適合度関数を作成することが可能です。混同行列に基づく一般的な適合度関数には、感度/特異度、再現率/適合率、F値、ジャッカード類似度、マシューズ相関係数、および4種類の分類に割り当てられたコストとゲインを組み合わせたコスト/ゲイン行列などがあります。
混同行列に基づくこれらの関数は非常に高度で、ほとんどの問題を効率的に解決するのに十分です。しかし、分類モデルには、解空間をより効率的に探索し、より優れた分類器を発見する上で重要な、もう一つの側面があります。この新しい側面とは、モデル自体の構造を探索することであり、これには定義域と値域だけでなく、モデル出力の分布や分類器のマージンも含まれます。
分類モデルのこの別の側面を探求し、モデルに関する情報を混同行列と組み合わせることで、解空間をスムーズに探索できる非常に高度な適合度関数を設計することが可能になります。たとえば、混同行列に基づく何らかの指標と、生のモデル出力と実際の値の間で評価された平均二乗誤差を組み合わせることができます。あるいは、 F値と、生のモデル出力とターゲットに対して評価されたR二乗値を組み合わせたり、コスト/ゲイン行列と相関係数を組み合わせたりすることもできます。モデルの粒度を探求するより高度な適合度関数には、ROC曲線下面積やランク尺度などがあります。
また、分類モデルのこの新しい次元に関連して、モデル出力に確率を割り当てるという考え方があり、これはロジスティック回帰で行われていることです。そして、これらの確率を使用して、確率と実際の値との間の平均二乗誤差(またはその他の同様の尺度)を評価し、これを混同行列と組み合わせることで、ロジスティック回帰のための非常に効率的な適合度関数を作成することもできます。確率に基づく適合度関数の一般的な例としては、最尤推定とヒンジ損失があります。
論理学には、(上記で分類やロジスティック回帰について定義したような)探索すべきモデル構造は存在しません。論理関数の定義域と値域は、0と1、または偽と真のみで構成されます。したがって、ブール代数で使用できる適合度関数は、上記のセクションで説明したように、ヒット数または混同行列に基づくものに限られます。
ルーレット選択は、進化計算において最もよく用いられる選択手法の一つと言えるでしょう。この手法では、各プログラムの適応度を、その適応度に比例したルーレット盤の特定の部分にマッピングします。そして、集団内のプログラム数と同じ回数だけルーレットを回すことで、集団のサイズを一定に保ちます。つまり、ルーレット選択では、適応度と運の両方に基づいてプログラムが選択されるため、最良の特性が失われる場合もあります。しかし、ルーレット選択と各世代の最良のプログラムのクローン作成を組み合わせることで、少なくとも最良の特性が失われないことが保証されます。この世代の最良のプログラムをクローン作成する手法は、単純エリート主義として知られており、ほとんどの確率的選択手法で用いられています。
プログラムの複製には、まずゲノムの選択、次にその複製という過程が含まれる。ゲノム改変は複製に必須ではないが、ゲノム改変がなければ適応や進化は起こらない。
選択演算子は、複製演算子がコピーするプログラムを選択します。選択方式によっては、1つのプログラムが生成するコピーの数が異なり、複数回コピーされるプログラムもあれば、1回だけコピーされるプログラム、あるいは全くコピーされないプログラムもあります。また、通常、選択は世代間で個体群サイズが一定に保たれるように設定されます。
自然界におけるゲノムの複製は非常に複雑であり、科学者たちがDNA二重らせん構造を発見し、その複製メカニズムを提唱するまでには長い年月を要した。しかし、人工的な進化システムにおいては、文字列の複製は極めて容易であり、ゲノム内のすべての情報を世代から世代へと伝えるには、文字列をコピーする指示を与えるだけで済む。
選択されたプログラムの複製は、あらゆる人工進化システムの基本的な要素ですが、進化が起こるためには、通常のコピー命令のような精度ではなく、むしろいくつかのエラーを意図的に加える必要があります。実際、遺伝的多様性は、突然変異、組換え、転座、反転など、多くの遺伝的演算子によって生み出されます。
遺伝子発現プログラミングにおいて、突然変異は最も重要な遺伝的演算子である。[ 8 ]これは、ある要素を別の要素に置き換えることによってゲノムを変化させる。時間の経過とともに多くの小さな変化が蓄積されると、大きな多様性が生まれる可能性がある。
遺伝子発現プログラミングでは、突然変異は完全に制約されない。つまり、各遺伝子ドメインにおいて、任意のドメインシンボルを別のシンボルに置き換えることができる。例えば、遺伝子のヘッド部分では、任意の関数を、引数の数に関係なく、終端記号または別の関数に置き換えることができる。また、終端記号を、関数または別の終端記号に置き換えることもできる。
組換えは通常、2つの親染色体から異なる部分を組み合わせて2つの新しい染色体を作り出す過程です。そして、親染色体が整列しており、交換される断片が相同(つまり、染色体上の同じ位置を占める)である限り、組換えによって作られた新しい染色体は常に構文的に正しいプログラムを符号化します。
様々な種類の交叉は、関与する親の数を変更する(2つだけを選ぶ理由はない)、分割点の数を変更する、あるいは断片を交換する方法(例えば、ランダムに交換するか、何らかの規則的な方法で交換するか)を変更するなどして、容易に実現できる。例えば、遺伝子組換えは組換えの特殊なケースであり、相同遺伝子(染色体上の同じ位置を占める遺伝子)を交換するか、染色体上の任意の位置からランダムに選択された遺伝子を交換することによって行うことができる。
転座とは、染色体のどこかに挿入配列を導入するプロセスである。遺伝子発現プログラミングにおいては、挿入配列は染色体のどこにでも出現する可能性があるが、遺伝子のヘッド部分にのみ挿入される。この方法により、テール部分からの挿入配列であっても、エラーのないプログラムが生成されることが保証される。
転移が正しく機能するためには、染色体の長さと遺伝子構造を維持する必要があります。そのため、遺伝子発現プログラミングにおいて、転移は2つの異なる方法で実装できます。1つ目は、挿入部位でシフトを起こし、続いてヘッドの末端で欠失を起こす方法です。2つ目は、標的部位の局所配列を上書きする方法で、実装が容易です。どちらの方法も、染色体間、染色体内、あるいは単一の遺伝子内でも動作するように実装できます。
反転は興味深い演算子であり、特に組み合わせ最適化に強力である。[ 9 ]これは染色体内の小さなシーケンスを反転させることから成る。
遺伝子発現プログラミングでは、あらゆる遺伝子領域に容易に実装でき、いずれの場合も生成される子孫は常に構文的に正しい。任意の遺伝子領域について、その領域内で配列(少なくとも2つの要素から領域自体と同じ大きさまで)がランダムに選択され、反転される。
他にも様々な遺伝子演算子が存在し、遺伝子発現プログラミングにおいては、多様な遺伝子や遺伝子ドメインを用いることで、その可能性は無限に広がります。例えば、一点組換え、二点組換え、遺伝子組換え、均一組換え、遺伝子転座、根転座、ドメイン特異的変異、ドメイン特異的反転、ドメイン特異的転座などの遺伝子演算子は、容易に実装でき、広く利用されています。
数値定数は数学モデルや統計モデルの不可欠な要素であるため、進化アルゴリズムによって設計されたモデルにそれらを組み込むことが重要である。
遺伝子発現プログラミングは、ランダム数値定数(RNC)を扱うための追加の遺伝子ドメイン(Dc)を用いることで、この問題を非常に巧みに解決します。このドメインをRNC用の特別な終端プレースホルダーと組み合わせることで、表現力豊かなシステムを構築できます。
構造的には、Dc はテールの後に続き、テールのサイズtと同じ長さを持ち、RNC を表すために使用される記号で構成されています。
例えば、以下に、ヘッドサイズが7の遺伝子1つだけからなる単純な染色体を示します(Dcは位置15~22にまたがっています)。
01234567890123456789012+?*+?**aaa??aaa68083295ここで、末尾の「?」はRNCのプレースホルダーを表します。この種の染色体は上記のとおりに表現され、次のようになります。
次に、 式ツリー内の「?」を左から右、上から下の順に、Dc内の記号(簡略化のため数字で表される)に置き換えて、次の式を得る。
これらの記号に対応する値は配列に格納されます。(簡略化のため、数字で表される数値は配列内の順序を示します。)例えば、次の10個の要素からなるRNC配列の場合:
上記の式ツリーは次のようになります。
ランダムな数値定数を扱うためのこの洗練された構造は、GEPニューラルネットワークやGEP決定木など、さまざまなGEPシステムの中核を成しています。
基本的な遺伝子発現アルゴリズムと同様に、GEP-RNCアルゴリズムも多遺伝子性であり、その染色体は、通常どおり、1つの遺伝子を順番に発現させ、同じ種類の連結プロセスによってそれらをすべて連結することによって解読されます。
GEP-RNCシステムで使用される遺伝演算子は、基本GEPアルゴリズムの遺伝演算子(上記参照)の拡張であり、これらはすべて新しい染色体で容易に実装できます。一方、GEP-RNCアルゴリズムでは、突然変異、反転、転座、および組換えの基本演算子も使用されます。さらに、突然変異、反転、転座などのDc固有の特別な演算子も、個々のプログラム間でのRNCのより効率的な循環を支援するために使用されます。加えて、RNCセットに永続的な変異を導入できる特別な突然変異演算子もあります。RNCの初期セットは実行の開始時にランダムに作成されます。つまり、初期集団の各遺伝子について、特定の範囲から選択された指定された数の数値定数がランダムに生成されます。その後、遺伝演算子によってそれらの循環と突然変異が可能になります。
人工ニューラルネットワーク(ANNまたはNN)は、多数の単純な接続されたユニット(ニューロン)から構成される計算装置です。ユニット間の接続は通常、実数値の重みによって重み付けされます。これらの重みはニューラルネットワークにおける学習の主要な手段であり、通常は学習アルゴリズムを用いて調整されます。
ニューラルネットワークは、構造的に入力ユニット、隠れユニット、出力ユニットという3種類のユニットで構成されています。活性化パターンは入力ユニットに提示され、そこから1つ以上の隠れユニット層を経て出力ユニットへと順方向に伝播します。あるユニットから別のユニットへ入力される活性化は、伝播経路上のリンクの重みによって乗算されます。入力されたすべての活性化は合計され、入力結果がユニットの閾値を超えた場合にのみ、そのユニットは活性化されます。
要約すると、ニューラルネットワークの基本構成要素は、ユニット、ユニット間の接続、重み、および閾値です。したがって、人工ニューラルネットワークを完全にシミュレートするには、これらの構成要素を何らかの方法で線形染色体に符号化し、意味のある方法で表現できるようにする必要があります。
GEPニューラルネットワーク(GEP-NNまたはGEPネット)では、ネットワークアーキテクチャはヘッド/テールドメインの通常の構造でエンコードされます。[ 10 ]ヘッドには、隠れユニットと出力ユニットを活性化する特別な機能/ニューロン(GEPの文脈では、これらすべてのユニットは機能ユニットと呼ばれる方が適切です)と、入力ユニットを表すターミナルが含まれます。テールには、通常どおり、ターミナル/入力ユニットのみが含まれます。
頭部と尾部に加えて、これらのニューラルネットワーク遺伝子には、ニューラルネットワークの重みと閾値を符号化するための2つの追加ドメイン、DwとDtが含まれています。構造的には、Dwは尾部の後に続き、その長さdwは頭部のサイズhと最大アリティnmaxに依存し、次の式で評価されます。
DtはDwの後に続き、長さはdtでtに等しい。どちらのドメインも、ニューラルネットワークの重みと閾値を表す記号で構成されている。
各NN遺伝子について、重みと閾値は各実行の開始時に作成されますが、それらの循環と適応は、突然変異、転座、逆位、および組換えといった通常の遺伝的演算子によって保証されます。さらに、重みと閾値のセットにおける遺伝的変異の継続的な流れを可能にするために、特別な演算子も使用されます。
例えば、以下に2つの入力ユニット(i 1とi 2)、2つの隠れユニット(h 1とh 2)、および1つの出力ユニット(o 1)を持つニューラルネットワークを示します。合計6つの接続があり、それぞれに対応する重みは数字1~6で表されます(簡略化のため、閾値はすべて1に設定されており、省略されています)。
この表現は標準的なニューラルネットワーク表現ですが、ニューラルネットワークはツリー構造でも表現でき、この場合、それは以下に対応します。
ここで、「a」と「b」は2つの入力i1とi2を表し、 「D」は接続数が2の関数を表します。この関数は、すべての重み付き引数を加算し、この活性化を閾値処理して、転送される出力を決定します。この出力(この単純なケースでは0または1)は、各ユニットの閾値に依存します。つまり、入力される活性化の合計が閾値以上であれば出力は1になり、そうでなければ0になります。
上記のNNツリーは、以下のように線形化できます。
0123456789012DDDabab654321ここで、7~12番目の位置(Dw)の構造は重みを符号化している。各重みの値は配列に格納され、式に必要なときに取得される。
より具体的な例として、排他的論理和問題に対するニューラルネットワーク遺伝子を以下に示します。ヘッドサイズは3、Dwサイズは6です。
0123456789012DDDabab393257その表現によって、以下のニューラルネットワークが構築される。
つまり、重みのセットは次のようになります。
それは以下を示します。
これは排他的論理和関数に対する完璧な解決策です。
GEP-netsアルゴリズムは、バイナリ入力とバイナリ出力を持つ単純なブール関数に加えて、あらゆる種類の関数やニューロン(線形ニューロン、tanhニューロン、atanニューロン、ロジスティックニューロン、リミットニューロン、放射基底ニューロン、三角基底ニューロン、あらゆる種類のステップニューロンなど)を扱うことができます。また、GEP-netsアルゴリズムはこれらのニューロンをすべて一緒に使用し、目の前の問題を解決するためにどのニューロンが最適かを進化に任せることができる点も興味深いところです。そのため、GEP-netsはブール問題だけでなく、ロジスティック回帰、分類、回帰にも使用できます。いずれの場合も、GEP-netsは多遺伝子システムだけでなく、単細胞および多細胞の両方を含む細胞システムにも実装できます。さらに、多項分類問題も、多遺伝子システムと多細胞システムの両方でGEP-netsによって一度に処理できます。
決定木(DT)は、一連の質問と回答をノードと有向エッジを用いてマッピングする分類モデルです。
決定木には、ルートノード、内部ノード、葉ノード(または終端ノード)の3種類のノードがあります。ルートノードとすべての内部ノードは、データセット内のさまざまな属性または変数に対するテスト条件を表します。葉ノードは、ツリー内のすべての異なるパスのクラスラベルを指定します。
ほとんどの決定木誘導アルゴリズムは、ルートノードの属性を選択し、その後、ツリー内のすべてのノードについて同様の情報に基づいた決定を行うという手順を踏む。
決定木は遺伝子発現プログラミングによっても作成できます[ 11 ]。その利点は、木の成長に関するすべての決定が、人間の介入なしにアルゴリズム自体によって行われることです。
決定木アルゴリズムには基本的に2種類あります。1つは名義属性のみを持つ決定木を生成するアルゴリズム、もう1つは数値属性と名義属性の両方を持つ決定木を生成するアルゴリズムです。この決定木生成の側面は遺伝子発現プログラミングにも当てはまり、遺伝子発現プログラミング(GEP)においても決定木生成のためのアルゴリズムが2種類あります。1つは名義属性のみを扱う進化型決定木(EDT)アルゴリズム、もう1つは名義属性と数値属性の両方を扱うEDT-RNC(ランダムな数値定数を持つEDT)アルゴリズムです。
遺伝子発現プログラミングによって生成される決定木では、属性は基本的な遺伝子発現アルゴリズムにおける関数ノードとして機能し、クラスラベルは終端記号として機能します。つまり、属性ノードには、その成長、ひいては木全体の成長を決定する特定のアリティ(枝数)が関連付けられています。クラスラベルは終端記号のように機能するため、kクラス分類タスクでは、 k個の異なるクラスを表すk個の終端記号を持つ終端記号セットが使用されます。
線形ゲノムに決定木をエンコードするためのルールは、数式をエンコードするために使用されるルールと非常によく似ています(上記参照)。したがって、決定木誘導の場合、遺伝子にもヘッドとテールがあり、ヘッドには属性と終端記号が含まれ、テールには終端記号のみが含まれます。これにより、GEPによって設計されたすべての決定木が常に有効なプログラムであることが保証されます。さらに、テールのサイズtは、ヘッドのサイズhと、より多くの分岐を持つ属性の分岐数n maxによって決定され、次の式で評価されます。
例えば、屋外で遊ぶかどうかを決定するために、以下の意思決定ツリーを考えてみましょう。
線形符号化すると次のようになります。
01234567HOWbaabaここで、「H」は湿度を表す属性、「O」は天気を表す属性、「W」は風の強い天気を表し、「a」と「b」はそれぞれ「はい」と「いいえ」というクラスラベルを表します。ノードを接続するエッジはデータのプロパティであり、各属性のブランチの種類と数を指定するため、エンコードする必要はありません。
遺伝子発現プログラミングによる決定木誘導のプロセスは、通常どおり、ランダムに生成された染色体の初期集団から始まります。次に、染色体は決定木として表現され、トレーニングデータセットに対してその適合度が評価されます。適合度に応じて、変更を加えて複製する染色体が選択されます。遺伝的演算子は、例えば突然変異、逆位、転座、組換えなど、従来の単一遺伝子システムで使用されるものとまったく同じです。
名義属性と数値属性の両方を持つ決定木も、上記のランダムな数値定数を扱うためのフレームワークを用いた遺伝子発現プログラミングによって容易に生成できます。染色体アーキテクチャには、ランダムな数値定数をエンコードするための追加ドメインが含まれており、これは各分岐ノードでデータを分割するための閾値として使用されます。例えば、ヘッドサイズが5の以下の遺伝子(Dcは位置16から開始)の場合:
012345678901234567890WOTHabababbbabba46336以下の決定木をエンコードします。
このシステムでは、ヘッド内のすべてのノードは、そのタイプ(数値属性、名義属性、または終端)に関係なく、ランダムな数値定数に関連付けられています。上記の例では、簡略化のために、このランダムな数値定数は0~9の数字で表されます。これらのランダムな数値定数はDcドメインにエンコードされ、その表現は非常に単純なスキームに従います。上から下、左から右の順に、Dcの要素が決定木の要素に1つずつ割り当てられます。したがって、次のRNCの配列の場合:
上記の決定木の結果は以下のとおりです。
これは、従来型の決定木としてより分かりやすく表現することもできます。
GEPは、他の遺伝的プログラミング技術に比べて大きな進歩ではないと批判されてきた。多くの実験で、既存の方法よりも優れたパフォーマンスを発揮しなかった。[ 12 ]