web-dev-qa-db-ja.com

ニューラルネットワークのトレーニング、検証、テストセットの違いは何ですか?

このライブラリ を使用して、学習エージェントを実装しています。

トレーニングケースを生成しましたが、検証セットとテストセットが何であるかはわかりません。
先生は言います:

70%が列車の場合、10%がテストの場合、残りの20%が検証の場合です。

編集

トレーニング用のこのコードはありますが、トレーニングをいつstopするのかわかりません。

  def train(self, train, validation, N=0.3, M=0.1):
    # N: learning rate
    # M: momentum factor
    accuracy = list()
    while(True):
        error = 0.0
        for p in train:
            input, target = p
            self.update(input)
            error = error + self.backPropagate(target, N, M)
        print "validation"
        total = 0
        for p in validation:
            input, target = p
            output = self.update(input)
            total += sum([abs(target - output) for target, output in Zip(target, output)]) #calculates sum of absolute diference between target and output

        accuracy.append(total)
        print min(accuracy)
        print sum(accuracy[-5:])/5
        #if i % 100 == 0:
        print 'error %-14f' % error
        if ? < ?:
            break

編集

検証データで0.2の平均誤差を得ることができます。20回のトレーニングを繰り返した後、80%になりますか?

検証データの入力/検証データのサイズを指定すると、平均誤差=検証ターゲットと出力の絶対差の合計。

1
        avg error 0.520395 
        validation
        0.246937882684
2
        avg error 0.272367   
        validation
        0.228832420879
3
        avg error 0.249578    
        validation
        0.216253590304
        ...
22
        avg error 0.227753
        validation
        0.200239244714
23
        avg error 0.227905    
        validation
        0.199875013416
132
Daniel

トレーニングおよび検証セットは、トレーニング中に使用されます。

for each Epoch
    for each training data instance
        propagate error through the network
        adjust the weights
        calculate the accuracy over training data
    for each validation data instance
        calculate the accuracy over the validation data
    if the threshold validation accuracy is met
        exit training
    else
        continue training

トレーニングが終了したら、テストセットに対して実行し、精度が十分であることを確認します。

トレーニングセット:このデータセットは、ニューラルネットワークの重みを調整するために使用されます。

検証セット:このデータセットは、過剰適合を最小限に抑えるために使用されます。このデータセットを使用してネットワークの重みを調整するのではなく、トレーニングデータセットの精度が向上すると、以前にネットワークに表示されていないデータセットの精度が実際に向上することを確認しているだけです。または、少なくともネットワークがトレーニングされていません(つまり、検証データセット)。トレーニングデータセットの精度は向上するが、検証データセットの精度は変わらないか、低下する場合、ニューラルネットワークを過剰に使用しているため、トレーニングを停止する必要があります。

テストセット:このデータセットは、ネットワークの実際の予測能力を確認するために、最終ソリューションをテストするためにのみ使用されます。

252
Kiril

トレーニングセット:学習に使用されるサンプルのセット。つまり、分類器のパラメーター[つまり、重み]に適合します。

検証セット:分類器のパラメータ[つまり、アーキテクチャではなく、重み]を調整するために使用されるサンプルのセット。たとえば、非表示の数を選択するためにニューラルネットワークの単位。

テストセット:完全に指定された分類子のパフォーマンス[一般化]を評価するためにのみ使用される一連の例。

ftp://ftp.sas.com/pub/neural/FAQ1.txt section "人口、サンプル、トレーニングセット、デザインセット、検証は何ですか

エラーサーフェスは、データセットのデータセットごとに異なります(バッチ学習)。したがって、テストセットデータの非常に良いローカルミニマムを見つけた場合、それは非常に良い点ではなく、同じ問題の他のデータセットによって生成された表面の非常に悪い点かもしれません。したがって、トレーニングセットの適切なウェイト構成を見つけるだけでなく、新しいデータ(トレーニングセットにない)を適切なエラーで予測できるようなモデルを計算する必要があります。言い換えれば、ネットワークは、サンプルをgeneralizeできるようにして、データを学習し、単純に記憶またはロードしないトレーニングデータのオーバーフィットによるトレーニングセット。

検証データセットは、学習する機能のデータセットであり、ネットワークのトレーニングに直接使用するものではありません。トレーニングデータセットと呼ばれるデータセットを使用してネットワークをトレーニングしています。勾配ベースのアルゴリズムを使用してネットワークをトレーニングしている場合、エラーサーフェスとある時点での勾配はトレーニングデータセットに完全に依存するため、トレーニングデータセットは重みの調整に直接使用されます。ネットワークを過剰に適合させないようにするには、検証データセットをネットワークに入力し、エラーがある範囲内にあるかどうかを確認する必要があります。検証セットはネットワークの重みを調整するために直接使用されていないため、検証およびテストセットの良いエラーは、ネットワークが列車セットの例に対して適切に予測することを示し、新しい場合にもうまく機能することが期待されます例は、トレーニングプロセスで使用されなかったネットワークに提示されます。

早期停止は、トレーニングを停止する方法です。さまざまなバリエーションがあります。主な概要は、トレインと検証セットの両方のエラーが監視され、各反復(バックプロップと兄弟)でトレインエラーが減少し、最初に検証エラーが減少することです。検証エラーが発生し始めると、トレーニングは停止します。この時点での重みの構成は、トレーニングデータをよく予測するモデルと、ネットワークからは見えないデータを示します。ただし、検証データは実際にはが重量構成に間接的に影響し、重量構成を選択するためです。これがテストセットの出番です。このデータセットは、トレーニングプロセスでは使用されません。検証セットに基づいてモデルが選択されると、テストセットデータがネットワークモデルに適用され、このセットのエラーが検出されます。このエラーは、同じ問題のまったく新しいデータから予想されるエラーの代表です。

編集:

また、検証セットに十分なデータがない場合は、 crossvalidation を使用してパラメーターを調整し、テストエラーを推定できます。

69
phoxis

交差検証セットは、モデルの選択に使用されます。たとえば、特定のパラメーターセットに対して誤差が最小の多項式モデルを選択します。次に、テストセットを使用して、選択したモデルの一般化エラーを報告します。ここから: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

6
user2410953

トレーニングセットでモデルをトレーニングし、テストセットでそのパフォーマンスを測定するとします。まだ改善の余地があると思い、ハイパーパラメーターを調整してみてください(モデルがニューラルネットワークの場合、ハイパーパラメーターはレイヤーまたはレイヤー内のノードの数です)。これで、パフォーマンスがわずかに向上します。ただし、モデルが別のデータ(テストおよびトレーニングセットではない)にさらされている場合、同じレベルの精度が得られない場合があります。これは、テストセットの精度を高めるためにハイパーパラメーターを微調整する際にバイアスを導入したためです。基本的に、特定のトレーニングセットに最適なモデルを生成するために、モデルとハイパーパラメーターを調整しました。

一般的な解決策は、トレーニングセットをさらに分割して検証セットを作成することです。今、あなたは持っています

  • トレーニングセット
  • テストセット
  • 検証セット

前と同じように進めますが、今回は検証セットを使用してパフォーマンスをテストし、ハイパーパラメーターを調整します。具体的には、削減されたトレーニングセット(つまり、完全なトレーニングセットから検証セットを差し引いたもの)でさまざまなハイパーパラメーターを使用して複数のモデルをトレーニングし、検証セットで最高のパフォーマンスを発揮するモデルを選択します。

検証セットで最高のパフォーマンスモデルを選択したら、完全なトレーニングセット(検証セットを含む)で最高のモデルをトレーニングすると、最終モデルが得られます。

最後に、テストセットでこの最終モデルを評価して、一般化誤差の推定値を取得します。

1
Aditya