ディープニューラルネットワークでのバギングとドロップアウト


17

バギングは、単一の予測子としてアンサンブルとして機能する複数の予測子の生成です。ドロップアウトは、考えられるすべてのサブネットワークを平均化するためにニューラルネットワークに教える手法です。最も重要なKaggleのコンペティションを見ると、この2つの技術は非常に頻繁に使用されているようです。実際の実装以外に理論的な違いは見られません。実際のアプリケーションで両方を使用する理由を誰が説明できますか?そして、両方を使用するとパフォーマンスが向上するのはなぜですか?

回答:


21

バギングとドロップアウトはまったく同じことを達成しませんが、どちらもモデル平均化のタイプです。

バギングは、トレーニングデータのサブセットでモデルをトレーニングするデータセット全体にわたる操作です。したがって、特定のモデルには一部のトレーニング例が示されていません。

対照的に、ドロップアウトは、各トレーニング例内の機能に適用されます。結果は、指数関数的に多くのネットワークをトレーニングし(重みを共有して)、出力を等しく重み付けするのと機能的に同等であることは事実です。ただし、ドロップアウトは機能スペースで機能するため、完全な例ではなく、特定の機能がネットワークで使用できなくなります。各ニューロンは1つの入力に完全に依存することはできないため、これらのネットワークの表現はより分散される傾向があり、ネットワークが過剰適合する可能性は低くなります。


素敵な説明のために+1。Pythonの実装が行われているリンクを知っていますか?ブログやGithubがありますか?
Dawny33

ここにはまともなものがあります:deeplearning.net/tutorial/lenet.htmlですが、私はこのスタイルを好んでいます: neuronetworksanddeeplearning.com/chap6.html。実装と素晴らしいデモのために、私はkeras(かなり簡単にpipインストールできます)keras.io
jamesmf

2

Max Out Networksの 2種類のネットの比較を見つけました。

ドロップアウトトレーニングは、多くの異なるモデルがデータの異なるサブセットでトレーニングされるバギング(Breiman、1994)に似ています。ドロップアウトトレーニングは、各モデルが1ステップのみでトレーニングされ、すべてのモデルがパラメーターを共有するという点で、バギングとは異なります。このトレーニング手順(ドロップアウト)が単一のモデルではなくアンサンブルをトレーニングしているように動作するには、各更新に大きな効果がなければなりません。

それが役に立つことを願っています。


0

ドロップアウトは、トレーニング後に隠された層のニューロンの一部を除外することで、大規模なニューラルネットワークでの過剰適合を避けるために使用される正則化手法です(そのため、除外されたニューロンの名前はドロップアウト)。基本的に、ネットワークがトレーニング中に実際に何かを学習した場合、ニューロンの一部をドロップアウトしても、予測の精度に悪影響はありません。

バギングは効果的な正則化手法でもあり、トレーニングデータからの分散を減らし、初期/大規模なトレーニングデータセットのデータの異なるサブセットでトレーニングされたモデルの複数のコピーを使用してモデルの精度を向上させるために使用されます。

この質問をご覧ください

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