概要
過学習を防ぐための正則化手法として、ドロップアウト(Dropout)機能を実装する必要があります。ドロップアウトは訓練時にランダムにニューロンを無効化することで、モデルの汎化性能を向上させる重要な手法です。
背景
深層ニューラルネットワークでは過学習が頻繁に発生する問題があります。ドロップアウトは、訓練時に一定の確率でニューロンの出力を0にすることで、ネットワークが特定のニューロンに過度に依存することを防ぎ、より汎用的な特徴表現を学習させることができます。
要件
技術詳細
src/layers.rs に DropoutLayer 構造体を追加
Layer traitの実装
- 訓練モード/推論モードの管理
- ベルヌーイ分布によるマスク生成
- Inverted dropoutパターンの実装(推論時のスケーリング不要)
ドロップアウトアルゴリズム
訓練時
- 各ニューロンに対してベルヌーイ分布(p)からマスクを生成
- マスクが0の場合、そのニューロンの出力を0に設定
- 残りの出力を1/(1-dropout_rate)でスケーリング
推論時
- すべてのニューロンを使用(マスクなし)
- スケーリングも不要(訓練時にスケーリング済み)
設定例
// 50%のドロップアウト率で層を作成
let dropout_layer = DropoutLayer::new(0.5);
// ネットワーク構成例
let network = vec![
Box::new(DenseLayer::new(input_size, 128)),
Box::new(DropoutLayer::new(0.5)),
Box::new(DenseLayer::new(128, 64)),
Box::new(DropoutLayer::new(0.3)),
Box::new(DenseLayer::new(64, output_size)),
];
受け入れ基準
- DropoutLayer が正しく実装されている
- 訓練時と推論時で異なる動作をする
- ドロップアウト率を柔軟に設定できる
- 既存のネットワーク構成に簡単に組み込める
- 適切な数値的スケーリングが行われている
- 過学習抑制効果のテストが追加されている
- ドキュメントと使用例が提供されている
概要
過学習を防ぐための正則化手法として、ドロップアウト(Dropout)機能を実装する必要があります。ドロップアウトは訓練時にランダムにニューロンを無効化することで、モデルの汎化性能を向上させる重要な手法です。
背景
深層ニューラルネットワークでは過学習が頻繁に発生する問題があります。ドロップアウトは、訓練時に一定の確率でニューロンの出力を0にすることで、ネットワークが特定のニューロンに過度に依存することを防ぎ、より汎用的な特徴表現を学習させることができます。
要件
技術詳細
src/layers.rsにDropoutLayer構造体を追加Layertraitの実装ドロップアウトアルゴリズム
訓練時
推論時
設定例
受け入れ基準