私たちは、10 個の入力変数に基づいて 7000 個の製品を 7 つのクラスに分類することになっている小さな ANN を作成しています。
これを実行するには、k 分割交差検証を使用する必要がありますが、少し混乱しています。
プレゼンテーションスライドから次の抜粋を紹介します。
検証セットとテストセットとは具体的に何ですか?
私たちが理解していることは、3 つのトレーニング セットを実行し、重みを調整することです (単一エポック)。その後、検証で何をするのでしょうか。私の理解では、テスト セットはネットワークのエラーを取得するために使用されるためです。
次に何が起こるのかも私にはわかりません。クロスオーバーはいつ起こるのでしょうか?
もし無理でなければ、ステップの箇条書きを教えていただけるとありがたいです。
ベストアンサー1
少し混乱しているようですね (私もそうだったのを覚えています) ので、簡単に説明したいと思います。 ;)
ニューラルネットワークのシナリオ例
ニューラル ネットワークを考案するなどのタスクを与えられるときはいつでも、トレーニング目的で使用するサンプル データセットも与えられることがよくあります。ここでは、重みベクトルと指定されたサンプル ベクトルのスカラー積 (·) を計算して出力が算出される単純なニューラル ネットワーク システムをトレーニングしていると仮定しますY = W · X
。Y
ここW
でX
、これを行う単純な方法は、たとえば 1000 サンプルのデータセット全体を使用してニューラル ネットワークをトレーニングすることです。トレーニングが収束し、重みが安定すると仮定すると、ネットワークがトレーニング データを正しく分類すると安全に言えます。しかし、これまでに見たことのないデータが提示された場合、ネットワークに何が起こるでしょうか?明らかに、このようなシステムの目的は、トレーニングに使用されたデータ以外のデータを一般化し、正しく分類できるようにすることです。
過剰適合の説明
しかし、現実世界の状況では、これまで見たことのない/新しいデータは、ニューラルネットワークが、いわゆる本番環境に導入されたときにのみ利用できます。しかし、十分にテストしていないので、おそらく苦労するでしょう。:) 学習システムがトレーニングセットにほぼ完璧に一致するのに、見たことのないデータでは常に失敗する現象は、過剰適合。
3つのセット
ここでアルゴリズムの検証とテストの部分が出てきます。元の1000サンプルのデータセットに戻りましょう。これを3つのセットに分割します。トレーニング、検証そしてテスト( Tr
、Va
およびTe
) -- 慎重に選択された比率を使用します。(80-10-10)% は通常適切な比率です。
Tr = 80%
Va = 10%
Te = 10%
トレーニングと検証
ここで何が起こるかというと、ニューラルネットワークはTr
セットでトレーニングされ、その重みが正しく更新されます。次に、検証セットを使用して、トレーニングから得られた重みを使用してVa
分類エラーを計算します。ここで、は検証セットから取得された期待出力ベクトルであり、は分類から得られた計算された出力です()。エラーがユーザー定義のしきい値よりも高い場合、E = M - Y
M
Y
Y = W * X
トレーニング検証エポック繰り返します。検証セットを使用して計算されたエラーが十分に低いと判断された時点で、このトレーニング フェーズは終了します。
スマートトレーニング
ここでの賢い策略はトレーニングと検証に使用するサンプルをランダムに選択する各エポック反復で合計セットから抽出しますTr + Va
。これにより、ネットワークがトレーニング セットに過剰適合することがなくなります。
テスト
次に、テスト セットをTe
使用してネットワークのパフォーマンスを測定します。このデータは、トレーニングおよび検証フェーズで使用されたことがないため、この目的に最適です。これは、実質的には、ネットワークが実稼働環境に展開されたときに何が起こるかを模倣する、これまで見たことのない小さなデータ セットです。
パフォーマンスは、上で説明したように分類エラーの観点から測定されます。パフォーマンスは、次の観点からも測定できます(または測定すべきかもしれません)。精度と再現性エラーがどこでどのように発生したかを知るためですが、それは別の Q&A のトピックです。
クロス検証
このトレーニング・検証・テストのメカニズムを理解したら、ネットワークをさらに強化して過剰適合を防ぐことができます。K分割交差検証これは、上で説明した巧妙な策略の進化版です。このテクニックには、異なる、重複しない、均等に配分されたTr
、Va
およびTe
セットに対して、K ラウンドのトレーニング、検証、テストを実行する。
が与えられた場合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)
過剰適合が見られる
私は以下の世界的に有名なプロットをウィキペディア検証セットがオーバーフィッティングの防止にどのように役立つかを示します。青で示されるトレーニング エラーは、エポック数が増えるにつれて減少する傾向があります。つまり、ネットワークはトレーニング セットに正確に一致させようとしています。一方、赤で示される検証エラーは、異なる U 字型のプロファイルに従います。曲線の最小値は、トレーニングと検証エラーが最小になるポイントであるため、理想的にはトレーニングを停止する必要があります。
参考文献
詳しい参考資料この素晴らしい本機械学習に関する確かな知識といくつかの頭痛の両方が得られます。価値があるかどうかはあなた次第です。:)