3

バックプロパゲーションを使用してトレーニングするフィードフォワード ニューラル ネットワークを実装しています。各テストケースが学習した後にエラー率を出力すると、いくつかのエポックの後、特定のテストケースを非常によく学習し始めますが、他のテストケースは非常に悪く学習し始めます。つまり、特定のテスト ケースではエラーが非常に低く、他のテスト ケースではエラーが非常に高くなります。

基本的に、いくつかのエポックの後、平均二乗誤差が次のパターンに停滞していることに気付きます (各行は、単一のテストケースの後の MSE を表します)。

0.6666666657496451
0.6666666657514261
1.5039854423139616E-10
1.4871467103001578E-10
1.5192940136144856E-10
1.4951558809679557E-10
0.6666521719715195
1.514803547256445E-10
1.5231135866323182E-10
0.6666666657507451
1.539071732985272E-10

これが起こっている理由は考えられますか?

最初は、エラー率が高いこれらのケースは異常値である可能性があると考えていましたが、パターンが示すように、それらのケースは多すぎます。学習者が極小値に達したばかりで、そこから抜け出すには勢いが必要なのでしょうか?

4

2 に答える 2

4

私の答えは、分類器のトレーニングにおける「不均一な」進行に対する可能な解決策に向けられています。あなたがその行動を見ている「なぜ」については、延期します。特に、トレーニング中に観察したアーティファクトに原因を帰することには消極的です。つまり、それはデータですか? それともMLPの実装ですか?それとも、私が選択した調整可能な構成ですか? 事実は、この観察を引き起こしたのは分類子とデータとの相互作用であり、いずれかの固有の機能ではありません。

分類器が特定の入力ベクトルを非常によく、また非常に迅速に学習することは珍しくありませ。他の入力ベクトルで繰り返し失敗 (および改善に失敗) します。

分類子のトレーニングを正常に完了するには、Boostingが質問で説明されている問題に対する教科書的な回答です。

ただし、先に進む前に、構成/セットアップの小さな間違いが、観察された動作の原因となる可能性もあります.

特に、設定で次の項目を確認してください。

  • 入力ベクトルは適切にコーディングされていますか? たとえば、範囲が [-1, 1] になるようにしますか?

  • 応答変数を正しくコーディングしましたか (つまり、1-of-C コーディング)?

  • 妥当な初期学習率とモメンタム項を選択しましたか? また、学習率の値を初期学習率の両側に調整してトレーニングを試みましたか? t

いずれにせよ、これらの構成とセットアップの問題が問題ないと仮定すると、Boosting (厳密には、複数の分類器を組み合わせる手法) に関する実装の詳細は次のようになります。

いくつかのエポックの後、結果を調べます(これまで行ってきたように)。*分類子が学習に失敗したデータ ベクトルには、エラー*r (1 より大きい数値) を増やすための重み係数が割り当てられます。同様に、分類器が適切に学習したデータ ベクトルにも重み係数が割り当てられますが、ここでは値が 1 未満であるため、トレーニング エラーの重要性が軽減されます。

たとえば、最初のエポック (トレーニング データ セットを構成するすべてのデータ ベクトルの反復) の最後で、合計エラーが 100 であるとします。つまり、二乗誤差 (観測値 - 予測値) は、トレーニング セット内のすべてのデータ ベクトルで合計されます。

これらは、質問にリストされているものの中から 2 つの MSE 値です

0.667        # poorly learned input vector => assign error multiplier > 1 
1.5e-10      # well-learned input vector => assign error multiplier < 1  

ブースティングでは、これら 2 つの誤差測定値に対応する入力ベクトルを見つけて、それぞれに誤差の重みを関連付けます。この重みは、最初のケースでは 1 より大きく、2 番目のケースでは 1 より小さくなります。それぞれ 1.3 と .7 の誤差の重みを割り当てたとします。さらに、次のエポックの後、これら 2 つの入力ベクトルの最初の学習に関して分類器が改善されていないとします。つまり、最後のエポックと同じ予測値を返します。ただし、この反復/エポックの場合、その入力ベクトルからの総エラーへの寄与は 0.67 ではなく、1.3 x 0.67、つまり約 1 です。.87。

この増加誤差がトレーニングの進行に与える影響は何ですか?

エラーが大きいほど勾配が急になるため、次の反復では、重み行列を構成する適切な重みに対する調整が大きくなります。つまり、この特定の入力ベクトルに焦点を当てたより迅速なトレーニングになります。

これらのデータ ベクトルのそれぞれに、1.0 の暗黙的な誤差の重みがあると想像されるかもしれません。ブースティングは、(分類器が学習できないベクトルの) エラーの重みを増やし、よく学習したベクトルの重みを減らすだけです。

今説明したのはAdaBoostと呼ばれる特定の実装で、おそらく最もよく知られている Boosting の実装です。言語固有の実装のガイダンスとコードについては、boosting.com] 1 (真剣に) をご覧ください。ただし、このサイトはもう維持されていないので、私が信頼して強くお勧めできる優れたリソースをいくつか紹介します。1 つ目は、注釈付きの参考文献 (サイトで議論されている論文へのリンクを含む) の形式の学術サイトです。このサイトにリストされている最初の論文 (pdf へのリンク付き)、機械学習へのブースティング アプローチ: 概要は、優れた概要であり、この一連の手法の実用的な知識を習得するための効率的な情報源です。

videolectures.netには、Boosting と AdaBoost に関する優れたビデオ チュートリアルもあります。

于 2012-03-21T04:35:14.877 に答える
0

神経回路網が単純すぎて、データを正しく分類できない可能性はありますか? ニューロンや層が少なすぎる場合、ネットワークが分類を学習する重み構成がない可能性があります。

于 2012-03-21T10:24:58.817 に答える