深層学習を用いた麻雀の打牌予測モデル。CoAtNet、ResNet、Vision Transformerなど複数のアーキテクチャをサポート。
mahjong_discard_model_v2/
├── models.py # モデルアーキテクチャ定義
├── dataset.py # データセット処理
├── utils.py # トレーニング・評価ユーティリティ
├── train.py # メイントレーニングスクリプト
├── evaluate_model.py # モデル評価スクリプト
├── single_player.py # 一人麻雀シミュレーション(AIプレイ観察)
├── mahjong_ai_features.py # 特徴量エンコーダ
├── mahjong_ai_coatnet_v2.py # 旧トレーニングスクリプト(リファクタリング済み)
├── sequential_models/ # 🆕 シーケンスモデル(一局の流れを学習)
│ ├── sequence_models.py # LSTM/Transformerモデル
│ ├── sequence_dataset.py # シーケンスデータセット
│ ├── sequence_train.py # シーケンスモデル用トレーニング
│ └── README.md # 詳細ドキュメント
├── advanced_training/ # 🧪 大規模モデル + 複数ZIP対応の実験用ワークスペース
│ ├── train_large.py # マルチZIP対応の大型モデル学習CLI
│ ├── large_models.py # パラメータ数を増やしたCNN/Transformer/CoAtNet
│ └── multizip_dataset.py # 複数ZIPの統合データセット
└── README.md # このファイル
-
CoAtNet (デフォルト)
- 畳み込みとTransformerを組み合わせたハイブリッドモデル
- 局所的特徴と大域的依存関係の両方を効果的に学習
-
ResNet
- 残差接続を用いた深層畳み込みネットワーク
- 安定した学習と高速な推論
-
Vision Transformer (ViT)
- 純粋なTransformerベースのモデル
- パッチベースの処理で大域的な関係性を捉える
-
LSTM Sequential Model
- LSTMを用いた時系列モデル
- 一局を通じての打牌シーケンスを学習
- 過去のターンの文脈を保持
-
Transformer Sequential Model
- Transformer Decoderを用いた自己回帰モデル
- Self-Attentionで全ステップ間の関係を学習
- 長い依存関係を効果的に捉える
- ✅ 学習率スケジューリング: Cosine Annealing、ReduceLROnPlateauをサポート
- ✅ 早期停止: 過学習を防ぐための早期停止機能
- ✅ モデルチェックポイント: 最良モデルの自動保存
- ✅ 勾配クリッピング: 学習の安定性向上
- ✅ Dropout: 過学習防止のための正則化
- ✅ コマンドライン引数: 柔軟な設定変更
- ✅ エラーハンドリング: 堅牢なエラー処理
- ✅ 一人麻雀シミュレーション: AIの打牌判断をリアルタイムで観察
- ✅ 🆕 シーケンスモデル: 一局の流れを学習するLSTM/Transformerモデル
python train.py --data data2023.zip --max-files 2000 --epochs 10python train.py --model resnet --data data2023.zip --epochs 15 --lr 2e-4python train.py --model vit --data data2023.zip --epochs 20 --dropout 0.2python train.py \
--model coatnet \
--data data2023.zip \
--max-files 5000 \
--epochs 30 \
--batch-size 128 \
--lr 1e-4 \
--weight-decay 1e-2 \
--dropout 0.1 \
--optimizer adamw \
--scheduler cosine \
--max-grad-norm 1.0 \
--early-stopping 5 \
--save-best \
--output best_model.pthpython advanced_training/train_large.py \
--data data2023.zip data2022.zip \
--model coatnet_large \
--epochs 15 \
--save-bestpython evaluate_model.py --model-path discard_model_coatnet.pth --data data2022.zippython evaluate_model.py \
--model-path discard_model_coatnet.pth \
--model-type coatnet \
--data data2022.zip \
--show-demo \
--num-demo-samples 10一人麻雀モードでは、AIが実際にツモって打牌を選択する様子を観察できます。
python single_player.py --model-path discard_model_coatnet.pthpython single_player.py --model-path discard_model_coatnet.pth --interactivepython single_player.py \
--model-path discard_model_coatnet.pth \
--games 5 \
--turns 18 \
--seed 42--model-path: 学習済みモデルファイルパス--model-type: モデルアーキテクチャ(coatnet,resnet,vit)--turns: 最大ターン数(デフォルト: 18)--games: シミュレートするゲーム数(デフォルト: 1)--seed: 乱数シード(再現性のため)--compact: Unicode麻雀牌絵文字を使用--interactive: インタラクティブモード(Enterキーで次のターンへ)--quiet: サマリーのみ表示
python mahjong_ai_coatnet_v2.py一局の流れを学習するシーケンスモデルを使用する場合:
cd sequential_models
python sequence_train.py --model lstm --data ../data2023.zip --epochs 20cd sequential_models
python sequence_train.py --model transformer --data ../data2023.zip --epochs 30詳細は sequential_models/README.md を参照してください。
--data: トレーニングデータのZIPファイルパス--max-files: 読み込む最大ファイル数--train-ratio: トレーニングデータの割合(デフォルト: 0.9)
--model: モデルアーキテクチャ(coatnet,resnet,vit)--dropout: ドロップアウト率(デフォルト: 0.1)
--epochs: エポック数--batch-size: バッチサイズ--lr: 学習率--weight-decay: 重み減衰--optimizer: オプティマイザ(adam,adamw,sgd)--scheduler: 学習率スケジューラ(cosine,plateau,none)--max-grad-norm: 勾配クリッピングの閾値
--early-stopping: 早期停止のpatience(0で無効)
--num-workers: データローディングワーカー数--device: 使用デバイス(auto,cuda,cpu)--seed: 乱数シード--output: 出力モデルパス--save-best: 最良モデルのみ保存
-
モジュール化
- モデル定義を
models.pyに分離 - データセット処理を
dataset.pyに分離 - ユーティリティを
utils.pyに分離
- モデル定義を
-
コードの重複排除
evaluate_model.pyとmahjong_ai_coatnet_v2.py間のモデル定義の重複を解消- 共通ロジックを関数として抽出
-
エラーハンドリング
- データ読み込み時の例外処理を改善
- ファイルが見つからない場合の適切なエラーメッセージ
-
設定の柔軟性
- ハードコードされた値をコマンドライン引数化
- 設定可能なハイパーパラメータの追加
-
ドキュメント
- 各モジュール、クラス、関数にdocstringを追加
- README作成
-
学習率スケジューリング
- Cosine Annealingスケジューラ
- ReduceLROnPlateauスケジューラ
-
正則化技術
- Dropoutのサポート
- 勾配クリッピング
-
トレーニング効率
- 早期停止機能
- モデルチェックポイント
-
新しいアーキテクチャ
- ResNetモデルの追加
- Vision Transformerモデルの追加
- Stage 1-2: MBConv(Mobile Inverted Bottleneck Convolution)
- Stage 3: Transformer blocks
- 特徴: 畳み込みの局所的特徴抽出とTransformerの大域的依存関係学習を融合
- 4つのレイヤー: 各レイヤーに複数の残差ブロック
- 特徴: スキップ接続により勾配消失問題を解決
- パッチ埋め込み: 入力をパッチに分割
- Transformerエンコーダ: 自己注意機構による特徴抽出
- 特徴: 純粋な注意機構ベースのアーキテクチャ
トレーニングと評価では以下の指標を使用:
- 損失(Loss): CrossEntropyLoss
- Top-1精度: モデルの第1予測が正解である割合
- Top-3精度: モデルの上位3予測に正解が含まれる割合
- Top-5精度: モデルの上位5予測に正解が含まれる割合
-
データ拡張
- ランダムな盤面回転
- ノイズ付加
-
アンサンブル学習
- 複数モデルの予測を組み合わせ
-
より高度な特徴量
- 待ち牌の情報
- シャンテン数
- 期待値計算
-
転移学習
- 事前学習済みモデルの活用
-
ハイパーパラメータチューニング
- グリッドサーチやBayesian最適化
このプロジェクトのライセンスについては、リポジトリのオーナーにお問い合わせください。
バグ報告や機能リクエストは、GitHubのIssuesでお願いします。