Artificial-neural-network-supervised-learning

提供:Dev Guides
移動先:案内検索

教師あり学習

名前が示すように、*教師あり学習*は教師の監督の下で行われます。 この学習プロセスは依存しています。 教師あり学習下でのANNのトレーニング中に、入力ベクトルがネットワークに提示され、出力ベクトルが生成されます。 この出力ベクトルは、目的/ターゲットの出力ベクトルと比較されます。 実際の出力と目的/ターゲットの出力ベクトルに差がある場合、エラー信号が生成されます。 このエラー信号に基づいて、実際の出力が目的の出力と一致するまで重みが調整されます。

パーセプトロン

McCulloch and Pittsモデルを使用してFrank Rosenblattによって開発されたパーセプトロンは、人工ニューラルネットワークの基本的な操作単位です。 教師あり学習ルールを採用し、データを2つのクラスに分類できます。

パーセプトロンの動作特性:調整可能な重みとともに任意の数の入力を持つ単一のニューロンで構成されますが、ニューロンの出力はしきい値に応じて1または0です。 また、重みが常に1であるバイアスで構成されます。 次の図は、パーセプトロンの概略図を示しています。

パーセプトロン

したがって、パーセプトロンには次の3つの基本要素があります-

  • リンク-常に重み1のバイアスを含む重みを保持する接続リンクのセットがあります。
  • Adder -それぞれの重みで乗算された後に入力を追加します。
  • 活性化関数-ニューロンの出力を制限します。 最も基本的なアクティベーション関数は、2つの出力が可能なヘビサイドステップ関数です。 この関数は、入力が正の場合は1を返し、負の入力の場合は0を返します。

トレーニングアルゴリズム

パーセプトロンネットワークは、単一の出力ユニットと複数の出力ユニットに対してトレーニングできます。

単一出力ユニットのトレーニングアルゴリズム

  • ステップ1 *-以下を初期化してトレーニングを開始します-
  • 重さ
  • Bias
  • 学習率$ \ alpha $

簡単に計算して簡単にするには、重みとバイアスを0に設定し、学習率を1に設定する必要があります。

  • ステップ2 *-停止条件が真でない場合、ステップ3-8を続行します。

ステップ3 *-すべてのトレーニングベクトル *x に対してステップ4-6を続行します。

  • ステップ4 *-次のように各入力ユニットをアクティブにします-

x _ \ {i} \:= \:s _ \ {i} \ :( i \:= \:1 \:to \:n)

  • ステップ5 *-次の関係でネット入力を取得します-

y _ \ {in} \:= \:b \:+ \:\ displaystyle \ sum \ limits _ \ {i} ^ n x _ \ {i}。\:w _ \ {i}

ここで、「b」はバイアスで、「n」は入力ニューロンの総数です。

  • ステップ6 *-次のアクティベーション関数を適用して、最終出力を取得します。

$$ f(y _ \ {in})\:= \:\ begin \ {cases} 1&if \:y _ \ {in} \:> \:\ theta \\ 0&if \:-\ theta \: \ leqslant \:y _ \ {in} \:\ leqslant \:\ theta \\-1&if \:y _ \ {in} \:

  • ステップ7 *-次のように重みとバイアスを調整します-

ケース1 *- *y≠t の場合、

w _ \ {i}(new)\:= \:w _ \ {i}(old)\:+ \:\ alpha \:tx _ \ {i}

b(new)\:= \:b(old)\:+ \:\ alpha t

ケース2 *- *y = t の場合、

w _ \ {i}(new)\:= \:w _ \ {i}(old)

b(new)\:= \:b(old)

ここで、 'y' は実際の出力であり、 't' は望ましい/ターゲットの出力です。

  • ステップ8 *-重量に変化がない場合に発生する停止条件をテストします。

複数の出力ユニットのトレーニングアルゴリズム

次の図は、複数の出力クラスのパーセプトロンのアーキテクチャです。

トレーニングアルゴリズム

  • ステップ1 *-以下を初期化してトレーニングを開始します-
  • 重さ
  • Bias
  • 学習率$ \ alpha $

簡単に計算して簡単にするには、重みとバイアスを0に設定し、学習率を1に設定する必要があります。

  • ステップ2 *-停止条件が真でない場合、ステップ3-8を続行します。

ステップ3 *-すべてのトレーニングベクトル *x に対してステップ4-6を続行します。

  • ステップ4 *-次のように各入力ユニットをアクティブにします-

x _ \ {i} \:= \:s _ \ {i} \ :( i \:= \:1 \:to \:n)

  • ステップ5 *-次の関係でネット入力を取得します-

y _ \ {in} \:= \:b \:+ \:\ displaystyle \ sum \ limits _ \ {i} ^ n x _ \ {i} \:w _ \ {ij}

ここで、「b」はバイアスで、「n」は入力ニューロンの総数です。

ステップ6 *-次のアクティベーション関数を適用して、各出力ユニットの最終出力を取得します *j = 1〜m -

$$ f(y _ \ {in})\:= \:\ begin \ {cases} 1&if \:y _ \ {inj} \:> \:\ theta \\ 0&if \:-\ theta \: \ leqslant \:y _ \ {inj} \:\ leqslant \:\ theta \\-1およびif \:y _ \ {inj} \:

ステップ7 *-次のように *x = 1〜n および j = 1〜m の重みとバイアスを調整します-

ケース1 *- y〜j〜≠t〜j〜*の場合、

w _ \ {ij}(new)\:= \:w _ \ {ij}(old)\:+ \:\ alpha \:t _ \ {j} x _ \ {i}

b _ \ {j}(new)\:= \:b _ \ {j}(old)\:+ \:\ alpha t _ \ {j}

ケース2 *- y〜j〜= t〜j〜*の場合、

w _ \ {ij}(new)\:= \:w _ \ {ij}(old)

b _ \ {j}(new)\:= \:b _ \ {j}(old)

ここで、 'y' は実際の出力であり、 't' は望ましい/ターゲットの出力です。

  • ステップ8 *-重量に変化がない場合に発生する停止条件をテストします。

適応線形ニューロン(アダリン)

アダラインは、適応線形ニューロンの略で、単一の線形ユニットを持つネットワークです。 1960年にWidrowとHoffによって開発されました。 アダリンに関するいくつかの重要な点は次のとおりです-

  • 双極活性化機能を使用します。
  • トレーニングにデルタルールを使用して、実際の出力と目的/ターゲット出力の間の平均二乗誤差(MSE)を最小化します。
  • 重みとバイアスは調整可能です。

建築

Adalineの基本構造は、実際の出力が目的の/ターゲットの出力と比較される追加のフィードバックループを持つパーセプトロンに似ています。 トレーニングアルゴリズムに基づいて比較した後、重みとバイアスが更新されます。

アーキテクチャ適応線形

トレーニングアルゴリズム

  • ステップ1 *-以下を初期化してトレーニングを開始します-
  • 重さ
  • Bias
  • 学習率$ \ alpha $

簡単に計算して簡単にするには、重みとバイアスを0に設定し、学習率を1に設定する必要があります。

  • ステップ2 *-停止条件が真でない場合、ステップ3-8を続行します。

ステップ3 *-各バイポーラトレーニングペア *s:t についてステップ4-6を続けます。

  • ステップ4 *-次のように各入力ユニットをアクティブにします-

x _ \ {i} \:= \:s _ \ {i} \ :( i \:= \:1 \:to \:n)

  • ステップ5 *-次の関係でネット入力を取得します-

y _ \ {in} \:= \:b \:+ \:\ displaystyle \ sum \ limits _ \ {i} ^ n x _ \ {i} \:w _ \ {i}

ここで、「b」はバイアスで、「n」は入力ニューロンの総数です。

  • ステップ6 *-最終出力を取得するには、次のアクティベーション関数を適用します-

$$ f(y _ \ {in})\:= \:\ begin \ {cases} 1&if \:y _ \ {in} \:\ geqslant \:0 \\-1&if \:y _ \ {in } \:

  • ステップ7 *-次のように重みとバイアスを調整します-

ケース1 *- *y≠t の場合、

w _ \ {i}(new)\:= \:w _ \ {i}(old)\:+ \:\ alpha(t \:-\:y _ \ {in})x _ \ {i}

b(new)\:= \:b(old)\:+ \:\ alpha(t \:-\:y _ \ {in})

ケース2 *- *y = t の場合、

w _ \ {i}(new)\:= \:w _ \ {i}(old)

b(new)\:= \:b(old)

ここで、 'y' は実際の出力であり、 't' は望ましい/ターゲットの出力です。

$(t \:-\; y _ \ {in})$は計算されたエラーです。

  • ステップ8 *-停止条件のテスト。これは、重量に変化がない場合、またはトレーニング中に発生した最大重量変化が指定された許容値より小さい場合に発生します。

複数の適応線形ニューロン(マダリン)

Madalineは、Multiple Adaptive Linear Neuronの略で、多数のAdalineを並列に接続したネットワークです。 単一の出力ユニットがあります。 マダリンに関するいくつかの重要な点は次のとおりです-

  • これは、Adalineが入力とMadalineレイヤーの間の隠れたユニットとして機能する多層パーセプトロンのようなものです。
  • Adalineアーキテクチャで見られるように、入力レイヤーとAdalineレイヤー間の重みとバイアスは調整可能です。
  • AdalineおよびMadalineレイヤーの重みとバイアスは1に固定されています。
  • トレーニングはデルタルールの助けを借りて行うことができます。

建築

Madalineのアーキテクチャは、入力層の "n" ニューロン、Adaline層の "m" ニューロン、およびMadaline層の1つのニューロンで構成されます。 Adalineレイヤーは、入力レイヤーと出力レイヤーの間にあるため、隠しレイヤーと見なすことができます。 Madalineレイヤー。

Adaline

トレーニングアルゴリズム

ここまでで、入力とAdalineレイヤー間の重みとバイアスのみが調整され、AdalineとMadalineレイヤー間の重みとバイアスは固定されていることがわかりました。

  • ステップ1 *-以下を初期化してトレーニングを開始します-
  • 重さ
  • Bias
  • 学習率$ \ alpha $

簡単に計算して簡単にするには、重みとバイアスを0に設定し、学習率を1に設定する必要があります。

  • ステップ2 *-停止条件が真でない場合、ステップ3-8を続行します。

ステップ3 *-各バイポーラトレーニングペア *s:t についてステップ4-6を続けます。

  • ステップ4 *-次のように各入力ユニットをアクティブにします-

x _ \ {i} \:= \:s _ \ {i} \ :( i \:= \:1 \:to \:n)

  • ステップ5 *-各隠れ層でネット入力を取得します。 次の関係を持つAdaline層-

Q _ \ {inj} \:= \:b _ \ {j} \:+ \:\ displaystyle \ sum \ limits _ \ {i} ^ n x _ \ {i} \:w _ \ {ij} \:\: \:j \:= \:1 \:to \:m

ここで、「b」はバイアスで、「n」は入力ニューロンの総数です。

  • ステップ6 *-次のアクティベーション関数を適用して、AdalineおよびMadalineレイヤーで最終出力を取得します-

$$ f(x)\:= \:\ begin \ {cases} 1&if \:x \:\ geqslant \:0 \\-1&if \:x \:

非表示(Adaline)ユニットでの出力

Q _ \ {j} \:= \:f(Q _ \ {inj})

ネットワークの最終出力

y \:= \:f(y _ \ {in})

*ie* $ \:\:y _ \ {inj} \:= \:b _ \ {0} \:+ \:\ sum _ \ {j = 1} ^ m \:Q _ \ {j} \:v _ \ { j} $
  • ステップ7 *-エラーを計算し、次のように重みを調整します-

ケース1 *- *y≠t かつ t = 1 の場合、

w _ \ {ij}(new)\:= \:w _ \ {ij}(old)\:+ \:\ alpha(1 \:-\:Q _ \ {inj})x _ \ {i}

b _ \ {j}(new)\:= \:b _ \ {j}(old)\:+ \:\ alpha(1 \:-\:Q _ \ {inj})

この場合、 t = 1 であるため、ネット入力が0に近い* Q〜j〜*で重みが更新されます。

ケース2 *- *y≠t かつ t = -1 の場合、

$$ w _ \ {ik}(new)\:= \:w _ \ {ik}(old)\:+ \:\ alpha(-1 \:-\:Q _ \ {ink})x _ \ {i} $ $

b _ \ {k}(new)\:= \:b _ \ {k}(old)\:+ \:\ alpha(-1 \:-\:Q _ \ {ink})

この場合、 t = -1 であるため、ネット入力が正である* Q〜k〜*で重みが更新されます。

ここで、 'y' は実際の出力であり、 't' は望ましい/ターゲットの出力です。

ケース3 *- *y = t の場合

重みに変化はありません。

  • ステップ8 *-停止条件のテスト。これは、重量に変化がない場合、またはトレーニング中に発生した最大重量変化が指定された許容値より小さい場合に発生します。

バックプロパゲーションニューラルネットワーク

Back Propagation Neural(BPN)は、入力層、少なくとも1つの隠れ層、および出力層で構成される多層ニューラルネットワークです。 名前が示すように、このネットワークでは逆伝播が行われます。 ターゲット出力と実際の出力を比較することにより、出力層で計算されたエラーは、入力層に向かって伝播されます。

建築

図に示すように、BPNのアーキテクチャには、重みを持つ相互接続された3つの層があります。 隠れ層と出力層にもバイアスがあり、その重みは常に1です。 図から明らかなように、BPNの動作は2つのフェーズに分かれています。 1つのフェーズは入力レイヤーから出力レイヤーに信号を送信し、もう1つのフェーズは出力レイヤーから入力レイヤーにエラーを逆伝播します。

Back Propogation

トレーニングアルゴリズム

トレーニングのために、BPNはバイナリシグモイド活性化関数を使用します。 BPNのトレーニングには、次の3つのフェーズがあります。

  • *フェーズ1 *-フィードフォワードフェーズ
  • *フェーズ2 *-エラーの逆伝播
  • *フェーズ3 *-重みの更新

これらすべてのステップは、アルゴリズムで次のように結論付けられます。

  • ステップ1 *-以下を初期化してトレーニングを開始します-
  • 重さ
  • 学習率$ \ alpha $

簡単に計算して簡単にするために、いくつかの小さなランダムな値を取ります。

  • ステップ2 *-停止条件が真でない場合、ステップ3-11を続行します。
  • ステップ3 *-すべてのトレーニングペアについてステップ4-10を続行します。

フェーズ1

ステップ4 *-各入力ユニットは入力信号 x〜i〜を受信し、すべての *i = 1〜n の隠しユニットに送信します。

  • ステップ5 *-次の関係を使用して、隠れユニットでのネット入力を計算します-

Q _ \ {inj} \:= \:b _ \ {0j} \:+ \:\ sum _ \ {i = 1} ^ n x _ \ {i} v _ \ {ij} \:\:\:\: j \:= \:1 \:to \:p

ここで、* b〜0j〜は隠れユニットのバイアス、 v〜ij〜は入力レイヤーの *i ユニットから来る隠れレイヤーの j ユニットの重みです。

次のアクティベーション関数を適用して、ネット出力を計算します

Q _ \ {j} \:= \:f(Q _ \ {inj})

隠れ層ユニットのこれらの出力信号を出力層ユニットに送信します。

  • ステップ6 *-次の関係を使用して、出力層ユニットでのネット入力を計算します-

y _ \ {ink} \:= \:b _ \ {0k} \:+ \:\ sum _ \ {j = 1} ^ p \:Q _ \ {j} \:w _ \ {jk} \:\: k \:= \:1 \:to \:m

ここで、* b〜0k〜は出力ユニットのバイアスであり、 w〜jk〜は、隠れ層の *j ユニットから来る出力層の k ユニットの重みです。

次のアクティベーション関数を適用して、ネット出力を計算します

y _ \ {k} \:= \:f(y _ \ {ink})

フェーズ2

  • ステップ7 *-各出力ユニットで受信したターゲットパターンに対応して、次のようにエラー修正項を計算します-

\ delta _ \ {k} \:= \ :( t _ \ {k} \:-\:y _ \ {k})f ^ \ {'}(y _ \ {ink})

これに基づいて、次のように重みとバイアスを更新します-

\ Delta v _ \ {jk} \:= \:\ alpha \ delta _ \ {k} \:Q _ \ {ij}

\ Delta b _ \ {0k} \:= \:\ alpha \ delta _ \ {k}

次に、$ \ delta _ \ {k} $を隠しレイヤーに送り返します。

  • ステップ8 *-各非表示ユニットは、出力ユニットからのデルタ入力の合計になります。

\ delta _ \ {inj} \:= \:\ displaystyle \ sum \ limits _ \ {k = 1} ^ m \ delta _ \ {k} \:w _ \ {jk}

エラー項は次のように計算することができます-

\ delta _ \ {j} \:= \:\ delta _ \ {inj} f ^ \ {'}(Q _ \ {inj})

これに基づいて、次のように重みとバイアスを更新します-

\ Delta w _ \ {ij} \:= \:\ alpha \ delta _ \ {j} x _ \ {i}

\ Delta b _ \ {0j} \:= \:\ alpha \ delta _ \ {j}

フェーズ3

ステップ9 *-各出力単位 *(y〜k〜k = 1〜m) は、次のように重みとバイアスを更新します-

v _ \ {jk}(新規)\:= \:v _ \ {jk}(old)\:+ \:\ Delta v _ \ {jk}

b _ \ {0k}(新規)\:= \:b _ \ {0k}(old)\:+ \:\ Delta b _ \ {0k}

ステップ10 *-各出力ユニット *(z〜j〜j = 1 to p) は、次のように重みとバイアスを更新します-

w _ \ {ij}(new)\:= \:w _ \ {ij}(old)\:+ \:\ Delta w _ \ {ij}

b _ \ {0j}(新規)\:= \:b _ \ {0j}(old)\:+ \:\ Delta b _ \ {0j}

  • ステップ11 *-停止条件を確認します。停止条件は、エポック数に達しているか、ターゲット出力が実際の出力と一致する可能性があります。

一般化されたデルタ学習ルール

デルタルールは、出力レイヤーに対してのみ機能します。 一方、 back-propagation ルールとも呼ばれる一般化されたデルタルールは、非表示レイヤーの目的の値を作成する方法です。

数学的定式化

アクティベーション関数$ y _ \ {k} \:= \:f(y _ \ {ink})$の場合、非表示層と出力層のネット入力の導出は次のようになります。

y _ \ {ink} \:= \:\ displaystyle \ sum \ limits_i \:z _ \ {i} w _ \ {jk}

そして、$ \:\:y _ \ {inj} \:= \:\ sum_i x _ \ {i} v _ \ {ij} $

今最小化する必要があるエラーは

$$ E \:= \:\ frac \ {1} \ {2} \ displaystyle \ sum \ limits _ \ {k} \:[t _ \ {k} \:-\:y _ \ {k}] ^ 2 $ $

チェーンルールを使用することにより、

\ frac \ {\ partial E} \ {\ partial w _ \ {jk}} \:= \:\ frac \ {\ partial} \ {\ partial w _ \ {jk}}(\ frac \ {1} \ {2} \ displaystyle \ sum \ limits _ \ {k} \:[t _ \ {k} \:-\:y _ \ {k}] ^ 2)

= \:\ frac \ {\ partial} \ {\ partial w _ \ {jk}} \ lgroup \ frac \ {1} \ {2} [t _ \ {k} \:-\:t(y _ \ {インク})] ^ 2 \ rgroup

= \:-[t _ \ {k} \:-\:y _ \ {k}] \ frac \ {\ partial} \ {\ partial w _ \ {jk}} f(y _ \ {ink})

= \:-[t _ \ {k} \:-\:y _ \ {k}] f(y _ \ {ink})\ frac \ {\ partial} \ {\ partial w _ \ {jk}}(y_ \ {ink})

= \:-[t _ \ {k} \:-\:y _ \ {k}] f ^ \ {'}(y _ \ {ink})z _ \ {j}

$ \ delta _ \ {k} \:= \:-[t _ \ {k} \:-\:y _ \ {k}] f ^ \ {'}(y _ \ {ink})$

隠しユニット* z〜j〜*への接続の重みは、次のように指定できます-

\ frac \ {\ partial E} \ {\ partial v _ \ {ij}} \:= \:-\ displaystyle \ sum \ limits _ \ {k} \ delta _ \ {k} \ frac \ {\ partial} \ {\ partial v _ \ {ij}} \ :( y _ \ {ink})

$ y _ \ {ink} $の値を入れると、次のようになります

\ delta _ \ {j} \:= \:-\ displaystyle \ sum \ limits _ \ {k} \ delta _ \ {k} w _ \ {jk} f ^ \ {'}(z _ \ {inj})

重みの更新は次のように行うことができます-

出力ユニットの場合-

\ Delta w _ \ {jk} \:= \:-\ alpha \ frac \ {\ partial E} \ {\ partial w _ \ {jk}}

= \:\ alpha \:\ delta _ \ {k} \:z _ \ {j}

隠されたユニットのために-

\ Delta v _ \ {ij} \:= \:-\ alpha \ frac \ {\ partial E} \ {\ partial v _ \ {ij}}

= \:\ alpha \:\ delta _ \ {j} \:x _ \ {i}