web-dev-qa-db-ja.com

ニューラルネットワークでk分割交差検証を使用する方法

10個の入力変数に基づいて7000個の製品を7つのクラスに分類する小さなANNを作成しています。

これを行うには、k分割交差検証を使用する必要がありますが、混乱が生じます。

プレゼンテーションのスライドからの抜粋を次に示します。

k-fold cross validation diagram

検証とテストセットは正確に何ですか?

私たちが理解しているのは、3つのトレーニングセットを実行し、重みを調整することです(単一エポック)。次に、検証で何をしますか?私が理解しているのは、ネットワークのエラーを取得するためにテストセットが使用されているからです。

次に起こることも私を混乱させます。クロスオーバーはいつ行われますか?

質問しすぎない場合は、ステップの箇条書きリストをいただければ幸いです

29
Ortixx

あなたは少し混乱しているようです(私も覚えています)ので、私はあなたのために物事を単純化します。 ;)

ニューラルネットワークシナリオの例

ニューラルネットワークの考案などのタスクが与えられるたびに、トレーニングの目的で使用するサンプルデータセットもしばしば与えられます。単純なニューラルネットワークシステムY = W · Xをトレーニングしていると仮定します。ここで、Yは、与えられたサンプルベクトルと重みベクトルWのスカラー積(・)の計算から計算された出力です。 X。さて、これを行うための単純な方法は、たとえば、1000サンプルのデータセット全体を使用して、ニューラルネットワークをトレーニングすることです。トレーニングが収束し、体重が安定すると仮定すると、ネットワークがトレーニングデータを正しく分類すると安全に言うことができます。 しかし、以前に見えなかったデータが提示された場合、ネットワークはどうなりますか?明らかに、そのようなシステムの目的は、トレーニングに使用されるデータ以外のデータを一般化し、正しく分類できるようにすることです。

オーバーフィットの説明

ただし、現実のどのような状況でも、以前は見えなかった/新しいデータは、ニューラルネットワークが運用環境に展開されて初めて利用可能になります。しかし、あなたはそれを適切にテストしていないので、おそらく悪い時間を過ごすでしょう。 :)学習システムがそのトレーニングセットにほぼ完全に一致するが、目に見えないデータで常に失敗する現象は、 過剰適合 と呼ばれます。

3つのセット

アルゴリズムの検証とテストの部分について説明します。元の1000サンプルのデータセットに戻りましょう。あなたがすることは、3つのセットに分割することです-trainingvalidationおよびtestingTrVaおよびTe)-慎重に選択した比率を使用します。 (80-10-10)%は通常、適切な割合です。ここで、

  • Tr = 80%
  • Va = 10%
  • Te = 10%

トレーニングと検証

これで、ニューラルネットワークがTrセットでトレーニングされ、その重みが正しく更新されます。次に、検証セットVaを使用して、トレーニングから得られる重みを使用して分類エラーE = M - Yを計算します。ここで、Mは検証セットから取得される予想出力ベクトル、Yは、分類(Y = W * X)の結果として計算された出力です。エラーがユーザー定義のしきい値よりも高い場合、 training-validation Epoch 全体が繰り返されます。このトレーニングフェーズは、検証セットを使用して計算されたエラーが十分に低いと見なされると終了します。

スマートトレーニング

さて、ここでのスマートな策略は、各エポックの繰り返しで合計セットTr + Vaからトレーニングと検証に使用するサンプルをランダムに選択することです。これにより、ネットワークがトレーニングセットに過剰に適合しないことが保証されます。

テスト中

次に、テストセットTeを使用して、ネットワークのパフォーマンスを測定します。このデータは、トレーニングおよび検証段階で使用されたことがないため、この目的に最適です。これは事実上、目に見えないデータの小さなセットであり、ネットワークが実稼働環境に展開された後に何が起こるかを模倣することになっています。

上記で説明したように、パフォーマンスは分類エラーの観点から再び測定されます。また、パフォーマンスは 精度とリコール の観点から測定することもできます(エラーがどこでどのように発生するかを知ることができますが、それは別のQ&Aのトピックです)。

クロスバリデーション

このトレーニング検証テストメカニズムを理解したら、 K-fold cross-validation を実行することで、過剰適合に対するネットワークをさらに強化できます。これは、上で説明したスマートルーゼの進化です。この手法には、トレーニングバリデーションテストのKラウンドを実行し、異なる、重複しない、均等に配分されたTrVa、およびTe sets

k = 10が与えられた場合、Kの各値に対して、データセットをTr+Va = 90%Te = 10%に分割し、アルゴリズムを実行してテストパフォーマンスを記録します。

k = 10
for i in 1:k
     # Select unique training and testing datasets
     KFoldTraining <-- subset(Data)
     KFoldTesting <-- subset(Data)

     # Train and record performance
     KFoldPerformance[i] <-- SmartTrain(KFoldTraining, KFoldTesting)

# Compute overall performance
TotalPerformance <-- ComputePerformance(KFoldPerformance)

オーバーフィット表示

以下の世界的に有名なプロットを wikipedia から取得して、検証セットが過剰適合を防ぐ方法を示しています。青のトレーニングエラーは、エポックの数が増加するにつれて減少する傾向があります。したがって、ネットワークはトレーニングセットと正確に一致しようとしています。一方、赤色の検証エラーは、異なるU字型のプロファイルに従います。曲線の最小値は、トレーニングと検証エラーが最小になるポイントであるため、理想的にはトレーニングを停止する必要がある場合です。

Overfitting reduced by validating neural network

参照資料

より多くの参照については、 この優れた本 は、機械学習といくつかの片頭痛の両方の適切な知識を提供します。価値があるかどうかはあなた次第です。 :)

81
JoErNanO
  1. データを重複しないK個のフォールドに分割します。各折り畳みKにm個のクラスのそれぞれから同数のアイテムを含めます(層別交差検証。クラスAから100アイテム、クラスBから50アイテムがあり、2折り畳み検証を行う場合、各折り畳みにはランダムな50アイテムが含まれます。 Aから、Bから25)。

    1. 1..kのiの場合:

      • 折り目をテスト折り目に指定
      • 残りのk-1折り畳みの1つを検証折り畳みに指定します(これはランダムでもiの関数でもかまいませんが、実際には問題ではありません)
      • 残りのすべてのフォールドをトレーニングフォールドに指定します
      • すべての無料パラメーター(学習率、隠れ層のニューロン数など)のグリッド検索を行い、トレーニングデータでトレーニングし、検証データで損失を計算します。損失を最小限に抑えるパラメータを選択
      • テスト損失を評価するには、分類パラメーターと勝利パラメーターを使用します。結果を蓄積する

これで、すべてのフォールドの集計結果が収集されました。これが最終的なパフォーマンスです。これを実際に適用する場合は、実際には、グリッド検索の最適なパラメーターを使用して、すべてのデータをトレーニングします。

5
Ben Allison