🐥
[個人的メモ]機械学習におけるDropoutとは?
Dropoutとは?
学習時にランダムに一部のノード(ニューロン)を無効化して学習する手法。
過学習(overfitting)を防ぐために使われる。
なぜDropoutするのか?
モデルがトレーニングデータに過剰に適用してしまうと、テストデータで性能が下がる。
Dropoutを使うと、
- 特定のノードに依存しすぎないようにできる。
- 毎回ランダムなサブネットで学習する形になる。
ため、結果としてより汎化しやすいモデルができる。
実際なにをしているの?
学習中:
ある層の出力 → ランダムに一部を0にする(無効化)
推論時:
無効化はせず、出力をスケーリングして整える
Pytorchでの例
以下のように実装できる。
p=0.5は、50%のノードをランダムに無効かするという意味。
import torch.nn as nn
dropout = nn.Dropout(p=0.5)
注意点
- Dropoutは model.train()のときだけ有効
- 推論(model.eval())時は、ノードは無効化されない
- 最終出力層(出力直前)には通常使わない(予測が不安定になるから)
Discussion