TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

dlshogi

dlshogiのPyTorch Lightning対応 その5(Warm-upに対応したスケジューラ)

大規模なモデルの学習に効果があるとされる学習率スケジューリングの手法にWarm-upがある。 しかし、Pytorchの標準のスケジューラには、Warm-upに対応したスケジューラが提供されていない。PyTorch Lightning Boltsには、Warm-upに対応したCosineAnnealingLR…

dlshogiモデルの枝刈りを試す

前回、深層強化学習において、モデルの枝刈りによりスケーリングが可能であることを示した論文を紹介した。dlshogiの強化学習でもモデルの枝刈りが効果があるか試したいと考えているが、まずはモデルの枝刈りのみを行って、精度と探索速度にどう影響するかを…

dlshogiのPyTorch Lightning対応 その4(8GPUで学習)

前回、dlshogiをPyTorch Lightningを使用した並列学習に対応させた、8GPUでどれくらい学習が速くなるか試した。 条件 30ブロック384フィルタのモデル 訓練データ: 35,289,182局面 エポック数: 2 バッチサイズ: 4096 オプティマイザ: AdamW 学習率: 1e-4 (1ep…

dlshogiのPyTorch Lightning対応 その3(DDP)

PyTorch Lightningに対応できたので、DistributedDataParallel によるマルチGPU学習を試してみた。前回未対応だった、勾配クリッピングはconfig.yamにgradient_clip_valを記述するだけで対応できた。 また、モデルのエクスポートもon_train_end()で実装した…

dlshogiのPyTorch Lightning対応 その2(EMA)

前回、dlshogiのPyTorch Lightning対応の基本部分を実装した。今回は、EMAを実装する。 EMA EMAは、Exponential Moving Averageの略で、重みの指数移動平均をとり平準化する方法である。dlshogiでは、SWAと呼んでいたが、SWAで使われるスケジューラは使用し…

dlshogiのPyTorch Lightning対応

dlshogiの学習は、PyTorchを使用して、モデルの訓練処理を独自に実装していた。マルチGPUによる分散学習に対応させようと考えているが、独自に実装するより、PyTorch lightningに対応させた方が実装が楽になるため、dlshogiをPyTorch Lightningに対応させた…

dlshogiで量子化認識トレーニングを試す

先日、PyTorchでFXグラフモードで量子化認識トレーニングを試して、精度が大きく落ちることなく、CPUでの推論が速くなることを確認した。そこで、dlshogiのモデルで量子化認識トレーニングを試して、CPUで強くなるかを検証した。 量子化認識トレーニング 先…

RTX4090とA100のNPSの比較

今年の世界コンピュータ将棋選手権で、dlshogiチームはA100x8のサーバを9台使用してMultiPonderによるクラスタ構成を採用していた。 9台使用していても、Ponderにヒットした1台しか実際の指し手には影響せず、多くのケースではMultiPonderなしの通常のPonder…

第33回世界コンピュータ将棋選手権 結果報告

5/3~5/5に開催された第33回世界コンピュータ将棋選手権に参加しました。HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ…

中盤互角局面集

先日、dlshogiと水匠が互角になる探索ノード数を調べたが、初手開始局面からdlshogiはランダムありで測定していた。 初手開始局面からだと、dlshogiは序盤で優勢を築いてそのまま勝つ場合が多いため、中終盤の精度が測定できていない可能性がある。 そこで、…

将棋AI実験ノート:dlshogiと水匠で評価値の割れる局面の精度改善

第3回世界将棋AI電竜戦では、先手の角換わり定跡で、dlshogiが後手番で後手優勢と評価している局面から、定跡を抜けてから反省して負けることがあった。 dlshogiと水匠で評価が分かれる場合、dlshogiが正しくてそのまま勝ち切ることも多いが、特に中盤以降で…

将棋AIの進捗 その60(固定プレイアウトで水匠5と互角になる条件)

dlshogiの棋力測定する際に、dlshogiの過去のバージョンとの対局だとレーティング差が実際よりも大きくなる傾向がある。 そこで、棋力測定では水匠5を加えてリーグ戦で連続対局している。普段の棋力測定では、対局条件をフィッシャールールの持ち時間で対局…

将棋AIの進捗 その59(第3回電竜戦で見つかった課題と対策検討)

第3回電竜戦では、水匠が準備した先手番角換わりの長手数の定跡が、dlshogiの盲点を突いていて定跡を抜けた時点で大差になっていた。具体的には、以下の局面の85手目の8三角打が先手優勢であることをdlshogiが見つけらず、盲点となっていた。 8三角打から…

将棋AIの進捗 その58(訓練の省メモリ化と高速化)

現状のdlshogiのモデルの訓練の実装では、訓練データが多い場合にメモリを大量に消費する課題があった。dlshogiのモデルの訓練は、訓練データをすべてメモリに読み込んで処理を行っている。 そのため、一度に学習できるデータはメモリに読み込める分に制限さ…

第3回世界将棋AI電竜戦 結果報告

週末(12/3,4)に開催された第3回世界将棋AI電竜戦に参加しました。HEROZチームとして、「dlshogi with HEROZ 30b」と「dlshogi with HEROZ 20b」という2つのソフトでエントリしました。 大会の概要 世界将棋AI電竜戦は、コンピュータ将棋開発者の有志により立…

将棋AI実験ノート:30ブロックの学習

dlshogiのモデルサイズは、10ブロック192フィルタから初めて、精度が飽和するたびに、15ブロック224フィルタ、20ブロック256フィルタと段階的に大きくしている。参考: 将棋でディープラーニングする その48(ResNet) - TadaoYamaokaの開発日記 第2回 電竜戦T…

将棋AIの実験ノート:活性化関数をReLUに変更

以前に、活性化関数を変えると同じデータを学習した場合でも、方策の傾向が変わることを実験で確かめた。現状のdlshogiのモデルでは、活性化関数にSwishを使用していたが、最善手を見つけるのに時間のかかると指摘を受けた以下の局面が、活性化関数をReLUに…

dlshogiモデルの20ブロックから15ブロックへの知識蒸留 追試3

前回、知識蒸留を訓練データと教師モデルの損失の加重平均の定数αを0.5として実験を行った。 今回は、加重平均の重みを変えた場合、精度がどうなるか測定を行った。 測定条件 前回同様、20ブロックで生成した9.4千万局面(同一局面を平均化すると7千万局面)を…

dlshogiモデルの20ブロックから15ブロックへの知識蒸留 追試2

前回、知識蒸留を定義通りKLダイバージェンスを計算して実装したが、交差エントロピーを使用しても勾配は変わらないため、交差エントロピーで実装し直した。 交差エントロピーの方がPyTorchで用意されているメソッドが使用でき、実行時間も短くなる。 実装 i…

dlshogiモデルの20ブロックから15ブロックへの知識蒸留 追試

先日実験した20ブロックから15ブロックへの知識蒸留について、どれくらい強くなるか検証した。 検証項目 同一データを使用して学習した、20ブロックと、知識蒸留あり15ブロックのどちらが強いかを確認する。 比較のために、知識蒸留なしで学習した15ブロック…

dlshogiモデルの20ブロックから15ブロックへの知識蒸留

dlshogiでは、10ブロックのモデルから始めて、15ブロック、20ブロックとモデルサイズを大きくしている。 ブロックが大きいほど、精度が高くなっており強さにも反映される。 第32回世界コンピュータ将棋選手権のdlshogiでは20ブロックのモデルを採用している…

世界コンピュータ将棋選手権でのMulti Ponderのヒット率

先日の世界コンピュータ将棋選手権で、dlshogiはMulti Ponderを実装していた。相手番で相手局面を探索するStochastic Ponderという手法と組み合わせることで、追加コストゼロで候補手をN手取得できるため、Multi PonderはMCTSと相性がよいクラスタリング手法…

将棋AIの実験ノート:Fixup Initialization 続き

以前にBatch Normalizationを使用しないFixup Initializationを試したことがある。その際、Leela Chess Zeroでは、Batch Normalizationの統計情報に関連する問題が報告されていることに言及した。 Pawn promotion issues in T40 · Issue #784 · LeelaChessZe…

優勝決定戦について

第32回世界コンピュータ将棋選手権決勝の優勝決定戦について、dlshogi側の評価値は以下のようになっていました。112手目まではほぼ互角と判断していました。 114手目くらいから徐々に先手優勢になって、逆転となった166手目の手前では、評価値-720でした。 …

Unityで将棋アプリの開発 その14(実戦寄せ問題)

作成している将棋アプリに実戦寄せ問題を実装した。アプリを継続利用してもらうには、飽きずに上達につながるコンテンツが必要だと思うので、序盤、中盤、終盤それぞれ棋力を鍛えられる内容を盛り込みたいと思っている。序盤については、定跡の戦型予想と、A…

dlshogiはどれくらい人間の指し手に近いか

コンピュータチェスでは、ディープラーニング系のAIは、従来型に比べて人間の指し手に近いという研究がある。 従来、人間の相手になるように、レーティングを下げるために、探索のノード数や深さを下げるということが行われていた。 しかし、人間にとっては…

将棋AI実験ノート:20ブロックの学習

ResNet15ブロックのモデルで生成した教師データを用いて、20ブロックのモデルを学習し、精度と強さを比較してみた。 モデルサイズ 15ブロックのモデルは、15ブロック224フィルタ 20ブロックのモデルは、20ブロック256フィルタ 1ブロックは畳み込み2層 活性化…

Unityで将棋アプリの開発 その13(棋譜解析)

作成している将棋アプリに、対局後の棋譜解析機能を実装した。 機能内容 対局終了後に表示されるダイアログで、「棋譜解析」ボタンを押すと棋譜を解析して形勢グラフを表示する。 対局中のプレイヤー手番では、プレイヤー側の評価を非同期で行っているので、…

Unityで将棋アプリの開発 その12(詰み探索)

作成している将棋アプリに詰み探索を実装した。 AIのレベルと詰み探索 スマホ向けにMCTSで少ないプレイアウトだと、どうしても詰みの見逃しが多くなる。 練習用の強さだと、長手数の詰み探索はいらないが、一番強いレベルでは詰みを見逃さないようにしたい。…

Unityで将棋アプリの開発 その11(棋力測定)

作成している将棋アプリに棋力測定モードを実装した。 実装内容 先日の調査で、dlshogiの探索で測定した勝率の平均損失とレーティングに相関があることがわかったので、AI相手に対局した棋譜を蓄積して、そこからレーティングを推定する機能を実装した。1棋…