Articles

ニューラルネットワークにおける XOR 問題

はじめに
これは、人工ニューラルネットワーク (ANN) の実装を探る一連の投稿の最初のものです。 この記事の目的は、この後に続くアルゴリズム実装に進む前に、基本的な概念について直感的に理解してもらうことです。

予備知識は必要ありませんが、簡潔にするために、記事の中ですべての用語を説明しているわけではありません。 その代わり、Wikipedia や他のソースへのハイパーリンクが提供され、追加の読み物が必要になる場合があります。 ANN にはさまざまなアプリケーションがあり、教師あり、教師なし、半教師あり、強化学習に使用することができます。 それは、それらのカテゴリの中で問題固有のアーキテクチャに入る前の話です。 しかし、どこかで始めなければならないので、範囲を狭めるために、簡単な問題への ANN の適用から始めます。

XOr問題
XOr、つまり「exclusive or」問題は、ANN 研究における古典的問題である。 これは、2つの2値入力を与えられたXOr論理ゲートの出力を予測するために、ニューラルネットワークを使用する問題である。 XOr関数は2つの入力が等しくない場合は真値を、等しい場合は偽値を返す必要がある。 6931>

XOr は分類問題で、予想出力が事前に分かっているものである。 したがって、教師あり学習アプローチを使用するのが適切である。

表面上、XOr は非常に単純な問題に見えるが、Minksy と Papert (1969) は、これがパーセプトロンとして知られている 1960 年代のニューラル ネットワーク アーキテクチャにとって大きな問題であったことを示した。 ユニットは他のユニットから入力を受けることができる。 その際、受け取ったすべての値の合計を取り、接続されている他のユニットに信号を送るかどうかを決定する。 これを活性化(activation)という。 活性化関数は、何らかの方法で入力値の和を1か0(または1か0に非常に近い値)にすることで、活性化するかしないかを表現している。 バイアス・ユニットと呼ばれるもうひとつのユニットは、常に活性化し、典型的にはハードコードされた1を、それが接続されているすべてのユニットに送信します。 ここではバイアス・ユニットを破線の円で、その他のユニットを青い円で示している。 XOrに対する2つの2値入力値を表す2つの非バイアス入力ユニットがある。

パーキトロンはフィードフォワードネットワークの一種で、順伝播という出力生成過程が入力層から出力層へ一方的に流れることを意味する。 入力層ではユニット間の接続はない。

順伝播のプロセスを簡単に説明すると、入力値X1、X2にバイアス値1を加え、それぞれの重みW0…W2を掛けて出力ユニットに解析される、というものである。 出力ユニットはそれらの値の合計を取り、活性化関数(通常はHeavsideステップ関数)を使用して、結果の値を0または1に変換し、入力値を0または1に分類します。 データ点を分類グループに分ける線である分類線がどこに引かれるかを決めるのは、重みである。 分類線の片側にあるすべてのデータ点が 0 のクラスに割り当てられた場合、他のすべては 1 に分類される。

このアーキテクチャの限界は、データ点を 1 本の線で分離することしかできないことである。 これは、XOr 入力が線形分離可能でないため、残念なことです。 これは、XOr の入力値をグラフにプロットすると、特によくわかります。 図3に示すように、1と0の予測値を1本の分類線で分離する方法はない。

Multilayer Perceptrons
この問題の解決策は単層アーキテクチャを超えて、隠れ層という外界に直接アクセスできないユニットの層を追加することによって拡張することである。 この種のアーキテクチャは、図 4 に示すように、多層パーセプトロン (MLP) として知られている別のフィード フォワード ネットワークです。

MLP は入力層、隠れ層、出力層に任意の数のユニットを持つことができることは、注目に値します。 また,隠れ層はいくつあってもかまいません。 ここで使用されているアーキテクチャは,特に XOr 問題のために設計されています。

古典的なパーセプトロンと同様に,順伝播は,入力層からの入力値とバイアスユニットにそれぞれの重みが掛けられることで始まりますが,この場合,入力(入力層のバイアスユニットを含む)と隠れユニット(隠れ層のバイアスユニットは除く)のそれぞれの組み合わせに対して重みが存在することになります. 入力層の値とそれぞれの重みの積は、隠れ層の非バイアス・ユニットへの入力として解析される。 各バイアスなし隠れユニットは活性化関数(XOr問題の場合は古典的なシグモイド関数)を呼び出し、入力値の合計を0と1の間の値(通常は0か1のどちらかに非常に近い値)になるようにつぶす。 バイアス・ユニットを含む各隠れ層ユニットの出力は、次にそれぞれの重みを掛け合わされ、出力ユニットに解析される。 出力ユニットはまた、活性化関数 (ここでもシグモイド関数が適切) を通して入力値の合計を解析し、0 と 1 の間にある出力値を返す。 これが予測出力である。

このアーキテクチャは、古典的パーセプトロン ネットワークよりも複雑であるが、非線形分離を実現することができる。 したがって、適切な重み値のセットを使用すると、XOr 入力を正確に分類するために必要な分離を提供することができます。 実際には,MLPネットワークに許容できる重みのセットを手動で見つけようとすると,非常に手間のかかる作業となります. 実際,これはNP-completeである(Blum and Rivest, 1992). しかし,幸いなことに,バックプロパゲーションと呼ばれるプロセスによって,自動的に適切な重みの値を学習することが可能である. これは、Rumelhartら(1985)によってXOr問題でうまく機能することが初めて示された。

バックプロパゲーション・アルゴリズムは、順伝播プロセスによって出力された実際の値を期待値と比較することから始まり、ネットワークを通じて後方に移動し、誤差の大きさを少し減らす方向に重みをそれぞれわずかに調整する。 ネットワークが順伝播を使って可能な入力の期待出力を正確に予測できるようになるまで、順伝播と逆伝播の両方が各入力の組み合わせで数千回再実行される。

xOr 問題では、学習プロセスで使用できるデータ例は 100%である。 したがって、学習されたネットワークの予測は 100% 正確であると期待でき、結果として得られるモデルの偏りや分散などの問題を気にする必要はありません。 問題自体は、XOrの入力が正しい分類カテゴリに線形分離可能ではないという事実とともに、詳細に説明されました。 ネットワークから出力値を生成するために使用される順伝播アルゴリズムと、ネットワークを訓練するために使用される逆伝播アルゴリズムとともに、MLP アーキテクチャを含む非線形ソリューションが高レベルで調査されました。

このシリーズの次の投稿では、ここで説明したMLPアーキテクチャのJava実装を特集します。 3ノードニューラルネットワークの訓練はNP完全である。 ニューラル・ネットワーク, 5(1), 117-127.

.