Main Content

ニューラル ネットワークの最適な学習のためのデータの分割

このトピックでは、典型的な多層ネットワークのワークフローの一部について説明します。詳細とその他のステップについては、浅層の多層ニューラル ネットワークと逆伝播学習を参照してください。

多層ネットワークに学習させる場合、一般的な手法として最初にデータを 3 つのサブセットに分割します。1 つ目のサブセットは学習セットです。これは勾配の計算と、ネットワークの重みとバイアスの更新に使用されます。2 つ目のサブセットは検証セットです。検証セットの誤差は学習プロセスの間、監視されます。検証誤差は通常、学習セットの誤差と同様に、学習の初期段階に減少します。ただし、ネットワークがデータに過適合し始めると、検証セットの誤差は一般に増加し始めます。ネットワークの重みとバイアスは、検証セットの誤差が最小のときに保存されます。この手法については、浅層ニューラル ネットワークの汎化の改善と過適合の回避で詳しく説明します。

テスト セットの誤差は学習中は使用されませんが、さまざまなモデルの比較に使用されます。学習プロセス中にテスト セットの誤差をプロットするのも有益です。テスト セットの誤差が検証セットの誤差と比べて有意に異なる反復回数で最小値に到達する場合、データ セットの分割が不適切である可能性を示しています。

データを学習セット、検証セット、およびテスト セットに分割するために 4 つの関数が用意されています。dividerand (既定)、divideblockdivideint、および divideind です。データの分割は通常、ネットワークの学習時に自動的に実行されます。

関数

アルゴリズム

dividerand

データをランダムに分割 (既定)

divideblock

データを連続するブロックに分割

divideint

インターリーブ方式による選択を使用してデータを分割

divideind

インデックスでデータを分割

ネットワークの分割関数は、次のプロパティを使用してアクセスまたは変更できます。

net.divideFcn

各分割関数には、動作をカスタマイズするパラメーターがあります。これらの値は、次のネットワーク プロパティに保存され、変更できます。

net.divideParam

分割関数は、ネットワークの学習時に常に自動的にアクセスされ、データを学習、検証、テストの各サブセットに分割するために使用されます。net.divideFcn'dividerand' (既定) に設定されている場合、データは分割パラメーター net.divideParam.trainRationet.divideParam.valRatio、および net.divideParam.testRatio を使用して、3 つのサブセットにランダムに分割されます。学習セットに入るデータの割合は、trainRatio/(trainRatio+valRatio+testRatio) となり、他の 2 つのセットの割合も同様の式となります。学習、テスト、および検証の既定の割合は、それぞれ 0.7、0.15、および 0.15 です。

net.divideFcn'divideblock' に設定されている場合、データは元のデータセットの 3 つの連続するブロックを使用して 3 つのサブセットに分割されます (学習に 1 つ目のブロック、検証に 2 つ目のブロック、テストに 3 つ目のブロックを使用します)。各サブセットに入る元のデータの割合は、dividerand に使用されるものと同じ 3 つの分割パラメーターによって決まります。

net.divideFcn'divideint' に設定されている場合、データはトランプを扱う場合と同じようにインターリーブ方式で分割されます。これは、3 つのサブセットに異なる割合のデータが入るように行われます。各サブセットに入る元のデータの割合は、dividerand に使用されるものと同じ 3 つの分割パラメーターによって決まります。

net.divideFcn'divideind' に設定されている場合、データはインデックスで分割されます。3 つのサブセットのインデックスは、分割パラメーター net.divideParam.trainIndnet.divideParam.valInd、および net.divideParam.testInd で定義されます。これらのインデックスの既定の割り当ては null 配列です。そのため、このオプションを使用する場合はインデックスを設定しなければなりません。