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


155

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

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

70%はトレーニングケース、10%はテストケース、残りの20%は検証ケースです。

編集する

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

  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

1
「... 80%にすべきか?」いいえ、平均誤差と正解率は2つの異なるものです。ターゲット値が5.0で、ニューロンが4.8(つまり、0.2のエラー)を返したとします。データによっては、0.2のエラーが許容される場合があるため、エラーが十分に小さい場合は、そのインスタンスが正しく指定されていると考えることができます。したがって、10個のターゲットがあり、そのうちの7個の分類エラーが許容範囲内である場合、データの70%を正しく分類したことになります。
Kiril

教師が必要とする終了基準は何ですか?
Kiril

回答:


292

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

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

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

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

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

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


そのパイソン:XIちょうど..停止基準を取得。..値が収束..しかし、常にいくつかのflutuationとカント
ダニエル・

@ダニエル、トレーニングの精度が変動したり、検証の精度が変動したりしますか?検証の精度が変動する可能性がありますが、トレーニングの精度が変動する可能性は低くなります。"input、target = p"と言ったとき、両方をpに設定しているということですか?
Kiril

私はpythonがあまり得意ではないので、コードは少しわかりにくいようです...一般的に、検証の精度が特定のしきい値(70%や90%など)に達したときにトレーニングを停止します。あなたのデータの。
Kiril

5
検証セットは、トレーニングのプロセスで使用されます。テストセットではありません。テストセットでは、1)トレーニングセットが十分であったかどうかを確認したり、2)検証セットが過剰適合を防止したかどうかを確認したりできます。トレーニングの過程でテストセットを使用する場合、それは単なる別の検証セットであり、新しいデータがネットワークに供給されたときに何が起こるかを示しません。
アントン・アンドレーエフ

2
@AntonAndreevわかりません。あなたの答えによると、ももニューラルネットワークの重みの調整には使用されていvalidation setませんtest set。なぜあなたは、同じデータセットを使用して、重みを訓練するために使用されていないことができないvalidation settest set?それらを別々に保つことによって何が得られますか?
ギリ

77

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

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

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

ftp://ftp.sas.com/pub/neural/FAQ1.txtセクションから「人口、サンプル、トレーニングセット、デザインセット、検証とは

エラーサーフェスは、データセットの異なるデータセットによって異なります(バッチ学習)。したがって、テストセットデータに対して非常に優れた極小値を見つけた場合、それはあまり良い点ではなく、同じ問題の他のデータセットによって生成された表面の非常に悪い点である可能性があります。したがって、トレーニングセットの適切な重み構成を見つけるだけでなく、新しいデータ(トレーニングセットにない)を適切なエラーで予測できるようなモデルを計算する必要があります。つまり、ネットワークは例を一般化して、データを学習し、トレーニングデータをオーバーフィットしてトレーニングセットを単に記憶またはロードしないようにする必要があります。

検証データセットは、学習したい機能のデータセットであり、ネットワークのトレーニングに直接使用していません。トレーニングデータセットと呼ぶ一連のデータを使用してネットワークをトレーニングしています。勾配ベースのアルゴリズムを使用してネットワークをトレーニングしている場合、ある時点でのエラーサーフェスと勾配は完全にトレーニングデータセットに依存するため、トレーニングデータセットを直接使用して重みを調整します。ネットワークに適合しすぎないようにするには、検証データセットをネットワークに入力し、エラーが一定の範囲内にあるかどうかを確認する必要があります。検証セットはネットワークの重みを直接調整するために使用していないため、検証とテストセットの良好なエラーは、ネットワークがトレーニングセットの例を適切に予測していることを示しています。

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

編集:

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


11
私はこのような無意味なコメントを投稿するつもりはないことを知っていますが、この回答に感謝します:)
Llamageddon

6

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


1
Andrew Ngのクラスも受講しています。検証セットはトレーニングの一部である必要があります。ハイパーパラメータをオンにするためにのみ使用してください。
ジャックペン

4

検証セットを作成して

  • トレーニング中にモデルがどれだけ一般化するかを測定する
  • モデルのトレーニングを停止するタイミングを教えてください。検証の損失が減少しなくなったとき(特に検証の損失が増加し始め、トレーニング損失がまだ減少しているとき)

検証セットが使用された理由

検証セットが使用された理由


2

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

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

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

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

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

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


0

トレーニングデータセット:モデルの近似に使用されるデータのサンプル。

検証データセット:モデルハイパーパラメーターを調整するときに、トレーニングデータセットにモデルフィットの公平な評価を提供するために使用されるデータのサンプル。検証データセットのスキルがモデル構成に組み込まれるにつれて、評価はよりバイアスされます。

テストデータセット:トレーニングデータセットに適合する最終モデルの公平な評価を提供するために使用されるデータのサンプル。


-15

簡単に言うと、トレーニングセット、テストセット、検証セットを定義します

トレーニングセット:最近傍を見つけるために使用されます。検証セット:トレーニングセットに適用される異なるkを見つけるためのものです。テストセット:将来の最大の精度と目に見えないデータを見つけるために使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.