機械学習タスクのためにデータをシャッフルする必要がある理由


30

機械学習タスクでは、データをシャッフルして正規化するのが一般的です。正規化の目的は明確です(同じ範囲の特徴値を持つため)。しかし、多くの苦労の末、データをシャッフルするための価値ある理由は見つかりませんでした。

ここでこの記事を読んで、データをシャッフルする必要がある場合について説明しましたが、データをシャッフルする必要がある理由は明らかではありません。さらに、バッチ勾配降下が必要なAdamやSGDなどのアルゴリズムでよく見かけます(データはミニバッチに分離する必要があり、バッチサイズを指定する必要があります)。この投稿によれば、各エポックのデータをシャッフルして、バッチごとに異なるデータを持つことが重要です。したがって、おそらくデータはシャッフルされ、さらに重要なことに変更されます。

なぜこれを行うのですか?


1
最初のリンクの答えがあなたを助けなかった理由を正確に述べることは役に立つかもしれません。それ以外の場合は、ほとんど改善されずに、既にそこに記載されているコンテンツを繰り返すリスクがあります。
E_net4によると、

私が述べたように、いつ、なぜではないのか知りたいのですが、なぜですか?それは本当にそこで説明されていますか?私はこれに関する論文をまったく見ていません
メディア

1
サンプルの注文の影響の詳細については、カリキュラム学習 [pdf]を参照してください。
エムレ

1
これをCrossValidatedに投稿しましたが、関連があると思います。stats.stackexchange.com/a/311318/89653
ジョシュ

@Emreは実際、この論文はシャッフルに反対です。ありがとう、私はこの種の学習については聞いていませんでした。
メディア

回答:


18

基づいて、我々はデータサイエンスに掲載の質問がCrossValidatedに掲載の質問の重複しているとき、何をすべき?、CrossValidated(https://stats.stackexchange.com/a/311318/89653)で尋ねられた同じ質問に対する回答を再投稿しています

注:この回答全体を通して、トレーニング損失の最小化を参照し、検証損失などの停止基準については説明しません。停止基準の選択は、以下で説明するプロセス/概念に影響しません。

ニューラルネットワークをトレーニングするプロセスは、損失関数の最小値を見つけることです。ここで、はニューロン間の重みの行列(または複数の行列)を表し、はトレーニングデータセットを表します。に添字を使用して、が固定されている間、最小化が重みに対してのみ発生することを示します(つまり、が最小になるようなを探してい)。WXX WW XX(W)WXXWWX

ここで、要素がある(つまり、ネットワークに重みがある)とと、は次元空間の表面になります。視覚的なアナログを与えるために、ニューロンの重みが2つしかないことを想像してください()。その後簡単な幾何学的な解釈を持っている:それは、3次元空間内の面です。これは、任意の重み行列について、損失関数を評価でき、その値が表面の標高になるという事実から生じます。W P P + 1 、P = 2 W XPWPP+1P=2WX

しかし、非凸面の問題があります。私が説明した表面には多数の局所的な最小値があるため、勾配降下アルゴリズムはそれらの最小値で「スタック」しやすくなりますが、より深い/より低い/より良いソリューションが近くにあります。これは、与えられたに対して表面が固定されているため、がすべてのトレーニングの繰り返しにわたって変化しない場合に発生する可能性があります。さまざまな最小値を含むすべての機能は静的です。XXX

これに対する解決策は、シャッフルと組み合わせたミニバッチトレーニングです。特定の反復中に行をシャッフルし、それらのサブセットのみでトレーニングすることにより、が反復ごとに変化し、実際には、トレーニングの反復とエポックのシーケンス全体で2つの反復がまったく同じ実行されない可能性が非常に高い。効果は、ソルバーがローカルミニマムから簡単に「バウンス」できることです。ソルバーが、ミニバッチをトレーニングして、反復で極小値に留まっていると想像してください。この極小対応重みの特定の値で評価。と呼びますX I X 、I X IW IX I + 1 ℒのXのI + 1W IX IW IX I + 1X I X W WXXiXiXi(Wi)。次の反復では、を使用しているため、損失曲面の形状が実際に変化します。つまり、はとは非常に異なる値をますそして、それが極小値に対応していない可能性は大いにあります!勾配の更新を計算して、トレーニングを続けることができます。明確にするために:の形状は、一般にとはます。ここで、トレーニングセット評価された損失関数を参照していることに注意してください。すべての可能な値にわたって定義された完全な表面Xi+1Xi+1(Wi)Xi(Wi)Xi+1XiXW、特定の値に対するその損失(単なるスカラー)の評価ではなく。シャッフルせずにミニバッチを使用すると、損失サーフェスのある程度の「多様化」が依然として存在することに注意してください。ただし、ソルバから見える有限の(そして比較的少ない)固有のエラーサーフェスがあります(具体的には、各エポック中に、同じ正確な一連のミニバッチ-したがって損失サーフェス-W

私が意図的に避けたものの1つは、ミニバッチサイズについての議論でした。これについては100万の意見があり、実用上の重要な意味があります(より大きなバッチでより大きな並列化を実現できます)。ただし、次のことは言及する価値があると思います。ため各列の値を計算することによって評価される重み行列の所与のセットについて(すなわち、可換演算子平均および加算または服用)の列の配置、影響を及ぼさないフル使用時バッチ勾配降下(つまり、各バッチが完全なであり、反復とエポックが同じ場合)。 X W X XXWX X


+1。この回答は、より多くの賛成票を持つ他の回答よりも技術的に説明されています。
Gokul NC

29

データのシャッフルは、分散を減らし、モデルが一般的であり、オーバーフィットが少ないことを確認する目的に役立ちます。

データをシャッフルする明らかなケースは、データがクラス/ターゲットでソートされている場合です。ここで、シャッフルして、トレーニング/テスト/検証セットがデータの全体的な分布を表していることを確認してください。

バッチ勾配降下では、同じロジックが適用されます。バッチ勾配降下の背後にある考え方は、単一のバッチで勾配を計算することにより、通常、「真の」勾配のかなり良い推定値を得るということです。そうすれば、毎回データセット全体で「真の」勾配を計算する必要がなくなるため、計算時間を節約できます。

データセット全体を代表しないバッチを常に作成するリスクがあるため、各エポック後にデータをシャッフルしたいので、勾配の推定値はオフになります。各エポック後にデータをシャッフルすることにより、あまりにも多くの不良バッチで「スタック」することがなくなります。

通常の確率的勾配降下では、各バッチのサイズが1である場合、学習を全般的に維持するために、各エポックの後にデータをシャッフルする必要があります。実際、データポイント16の後にデータポイント17が常に使用される場合、データポイント16がモデル上で行っている更新があれば、その独自の勾配がバイアスされます。データをシャッフルすることにより、各データポイントがモデルの「独立した」変更を作成し、それらの前の同じポイントに偏らないようにします。


1
説明したように、データをシャッフルして、トレーニング/テストセットが代表的なものになるようにします。回帰では、シャッフルを使用します。これは、たとえば小さな値のみでトレーニングしていないことを確認するためです。シャッフルはほとんどの場合、予防策であり、最悪の場合、それは有用ではありませんが、それを行っても何も失われません。確率的勾配降下部分では、データを
供給する

2
シャッフルは分散を減少させ、バイアスを増加させる可能性が高いと思います(つまり、データをオーバーフィットする傾向が減少します)。エポックと反復が同じになるように、フルバッチの勾配降下を行っていたと想像してください。次に、ソルバーが見つけようとしているグローバルな最小値(必ずしもそれを見つけることができるわけではありません)があります。MSE損失を使用している場合、毎回このソリューションに到達できれば、バイアスを最小限に抑えます。しかし、このグローバルな最小値は異なるトレーニングセットの異なる場所で見つかる可能性が高いため、このソリューションは高い分散を持つ傾向があります。
ジョシュ

2
シャッフルすることにより、トレーニングセット全体のグローバルミニマムにあるソリューションに収束する可能性は低くなりますが(バイアスが高くなります)、より一般化されたソリューション(分散が低くなります)を見つける可能性が高くなります。
ジョシュ

7

データが指定された順序でソートされているとします。たとえば、クラスに基づいてソートされたデータセット。したがって、この主題を考慮せずにトレーニング、検証、およびテスト用のデータを選択すると、異なるタスクの各クラスを選択し、プロセスに失敗します。

したがって、この種の問題を防ぐための簡単な解決策は、データをシャッフルして、さまざまなトレーニング、検証、およびテストデータのセットを取得することです。

ミニバッチについては、この投稿への回答があなたの質問の解決策になります。


1
@Media提供されたリンクで最も関連する回答は、「ミニバッチをシャッフルすると勾配がより可変になり、良い方向にヒットする可能性が高まるため収束に役立ちます」
-OmG

実際、私はこれをSGDの論文で見ましたが、論文の著者がシャッフルではなく収束の理由であると主張しました。リンクを見ましたが、少し疑っています。より明確にするために、このすばらしい論文をご覧ください。著者はそこにその点について言及しているが、あなたが見るように、シャッフルの正確な理由はない
メディア

1

シャッフルする必要があるのはミニバッチ/ SGDのみであり、バッチ勾配降下は必要ありません。

データをシャッフルしない場合、データを並べ替えることができます。または、同様のデータポイントが隣り合って配置されるため、収束が遅くなります。

  • 同様のサンプルは同様のサーフェスを生成します(1つのサンプルの損失関数に対して1つのサーフェス)->勾配は同様の方向を指しますが、この方向は最小を指すことはめったにありません->勾配を最小から非常に遠ざけます
  • 「最適な方向」:最小値を直接指すすべてのサーフェスのすべての勾配の平均(バッチ勾配降下)
  • 「ミニバッチ方向」:さまざまな方向の平均が最小値に近づきますが、それらのいずれも最小値を指しません
  • 「1サンプルの方向」:ミニバッチと比較して、最小値までより遠くを指す

ここで線形回帰のL-2損失関数のプロットを描きましy=2x


1

XWX

@Joshの答えを補完するものとして、同じ理由で、バッチ処理の前にシャッフルを行う必要があることを付け加えます。それ以外の場合、同じ有限数の表面が得られます。


ありがとう、私たちのコミュニティへようこそ。
メディア

1

モデルの精度を最大限に高めるには、トレーニングデータにあらゆる種類のデータを含めることを常にお勧めします。

トレーニングデータのシャッフルは、この目標を達成するのに役立ちます。


1

特定の反復中に行をシャッフルし、それらのサブセットのみでトレーニングすることにより、𝑋反復ごとに変化し、実際には、トレーニング反復とエポックのシーケンス全体で2回の反復がまったく同じperformedで実行されない可能性があります

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