Skip to content

Implement Dropout layer for regularization #33

@nktr-cp

Description

@nktr-cp

概要

過学習を防ぐための正則化手法として、ドロップアウト(Dropout)機能を実装する必要があります。ドロップアウトは訓練時にランダムにニューロンを無効化することで、モデルの汎化性能を向上させる重要な手法です。

背景

深層ニューラルネットワークでは過学習が頻繁に発生する問題があります。ドロップアウトは、訓練時に一定の確率でニューロンの出力を0にすることで、ネットワークが特定のニューロンに過度に依存することを防ぎ、より汎用的な特徴表現を学習させることができます。

要件

  • Dropout層の実装
    • 訓練時と推論時の異なる動作モード
    • 設定可能なドロップアウト率(0.0〜1.0)
    • 適切なスケーリング処理
  • 既存の層システムとの統合
  • 各隠れ層に対するドロップアウトの適用
  • 出力層へのドロップアウト適用オプション
  • ランダムシード設定による再現可能性

技術詳細

  • src/layers.rsDropoutLayer 構造体を追加
  • Layer traitの実装
  • 訓練モード/推論モードの管理
  • ベルヌーイ分布によるマスク生成
  • Inverted dropoutパターンの実装(推論時のスケーリング不要)

ドロップアウトアルゴリズム

訓練時

  1. 各ニューロンに対してベルヌーイ分布(p)からマスクを生成
  2. マスクが0の場合、そのニューロンの出力を0に設定
  3. 残りの出力を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 が正しく実装されている
  • 訓練時と推論時で異なる動作をする
  • ドロップアウト率を柔軟に設定できる
  • 既存のネットワーク構成に簡単に組み込める
  • 適切な数値的スケーリングが行われている
  • 過学習抑制効果のテストが追加されている
  • ドキュメントと使用例が提供されている

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions