🐥

[個人的メモ]機械学習におけるDropoutとは?

に公開

Dropoutとは?

学習時にランダムに一部のノード(ニューロン)を無効化して学習する手法。
過学習(overfitting)を防ぐために使われる。

なぜDropoutするのか?

モデルがトレーニングデータに過剰に適用してしまうと、テストデータで性能が下がる。
Dropoutを使うと、

  1. 特定のノードに依存しすぎないようにできる。
  2. 毎回ランダムなサブネットで学習する形になる。

ため、結果としてより汎化しやすいモデルができる。

実際なにをしているの?

学習中:
ある層の出力 → ランダムに一部を0にする(無効化)

推論時:
無効化はせず、出力をスケーリングして整える

Pytorchでの例

以下のように実装できる。
p=0.5は、50%のノードをランダムに無効かするという意味。

import torch.nn as nn

dropout = nn.Dropout(p=0.5)

注意点

  • Dropoutは model.train()のときだけ有効
  • 推論(model.eval())時は、ノードは無効化されない
  • 最終出力層(出力直前)には通常使わない(予測が不安定になるから)

Discussion