Re Reference AI

技術

ドロップアウトとは

Dropout

学習時にニューロンの一部をランダムに無効化し、過学習を抑制するニューラルネットワークの正則化手法

正則化深層学習

ひとことで言うと

AIの学習中、一部の回路をわざと使えなくすることで、特定の部分に頼りすぎないようにする工夫。

概要

ドロップアウトは、ニューラルネットワークの学習時に、各層のニューロンを一定の確率でランダムに無効化(出力を0に)しながら順伝播・逆伝播する正則化手法。 毎回のミニバッチごとに無効化されるニューロンの組み合わせが変わるため、実質的に多数の異なる部分ネットワークを同時に学習しているのと近い効果が生まれ、特定のニューロンの組み合わせに過度に依存することを防ぐ。 推論時にはすべてのニューロンを使う代わりに、学習時の無効化確率に応じて出力をスケーリングし、学習時と推論時で出力の期待値を揃える。 全結合層を持つモデルで特に効果的とされ、CNNTransformerの一部の層にも適用されるが、Batch NormalizationLayer Normalizationの普及とともに使用箇所は限定的になっている。

背景

大きなニューラルネットワークは表現力が高い一方、訓練データに過学習しやすい。 ドロップアウトは、多数の異なる部分ネットワークをアンサンブル的に学習させる効果を、追加のモデルを用意せず1つのネットワークの学習過程だけで近似的に実現するために考案された。

歴史

2012年: HintonらがDropoutのアイデアを含む論文を発表。 2014年: SrivastavaらがJMLRに詳細な理論と実験を伴う論文「Dropout: A Simple Way to Prevent Neural Networks from Overfitting」を発表し広く普及。

ワークフロー

学習時、各層の出力に対しニューロンごとに独立したベルヌーイ分布からサンプリングし、指定した無効化確率で出力を0にする。 残ったニューロンの出力は無効化されなかった割合の逆数倍にスケーリングする(Inverted Dropout)。 逆伝播も無効化されたニューロンを除いて計算し、推論時はドロップアウトを適用せず全ニューロンをそのまま使う。

コード例

PyTorchでのDropout層

import torch.nn as nn

model = nn.Sequential(
    nn.Linear(512, 256),
    nn.ReLU(),
    nn.Dropout(p=0.5),
    nn.Linear(256, 10),
)

利点

  • 追加のモデルを用意せずに、アンサンブル学習に近い過学習抑制効果を得られる
  • 実装が単純で、既存のネットワーク構造に層を1つ追加するだけで適用できる
  • 特定のニューロンへの依存を減らし、より頑健な特徴表現を学習しやすくなる

欠点

  • ドロップアウト率(無効化する確率)の調整が必要で、大きすぎると学習が不安定になる
  • Batch NormalizationLayer Normalizationと併用すると、うまく機能しないことがある
  • 学習に必要なエポック数が増え、収束までの時間も伸びやすい

比較

  • 過学習ドロップアウトは過学習を抑えるための代表的な正則化手法
  • アンサンブル学習ドロップアウトは1つのネットワーク内で多数の部分ネットワークを学習させる、擬似的なアンサンブル効果を持つ
  • Layer Normalization近年のTransformerモデルではドロップアウトの代わりにLayer Normalizationなどが多用される場合がある

関連用語

過学習ニューラルネットワーク深層学習アンサンブル学習Batch Normalization

よくある質問

推論時にもドロップアウトは適用する?

通常は適用しない。学習時のみランダムにニューロンを無効化し、推論時は全ニューロンを使って安定した出力を得る。

ドロップアウト率はどのくらいに設定する?

全結合層では0.5前後がよく使われる。層の種類やタスクによっては0.1〜0.5程度の範囲で調整されることもある。

参考文献

関連Zenn記事