TadaoYamaokaの開発日記

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

コンピュータ将棋

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

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

dlshogiモデルの枝刈りを試す

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

【論文】In deep reinforcement learning, a pruned network is a good networkを読む

DeepMindがarXiv上で発表した、深層強化学習のモデルを段階的な枝刈りすることでモデルサイズのスケーリングが可能になることを示した「In deep reinforcement learning, a pruned network is a good network」を読んだ際のメモ。 概要 深層強化学習はモデル…

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に対応させた…

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

週末の12/2、12/3に開催された第4回世界将棋AI電竜戦に参加しました。HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 結果 予選を1位で通過し、決勝リーグでは、最終戦で水匠に敗れて、準優勝という結果になりました。1…

floodgateで任意のソフト同士で対局する方法

floodgateは、30分置きに自動で対局が始まるコンピュータ将棋の対局サイトだが、任意のタイミングで2つのソフトを対局させることができる。 CSAサーバプロトコル CSAサーバプロトコルでは、%%GAMEでgamenameを指定することで、対局条件が同じソフト同士の対…

水匠の定跡作成プログラム

第3回電竜戦の水匠の定跡作成プログラムと同様のプログラムを作成した。 DeepLearningShogi/make_book_minmax.py at master · TadaoYamaoka/DeepLearningShogi · GitHub 方式 水匠の定跡作成プログラムと同様に、末端局面(一定の対局数以上の局面)の勝率をMi…

中盤互角局面集

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

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

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

floodgateの戦型別先手勝率の変化

先日の第3回世界将棋AI電竜戦では、水匠の先手角換わり定跡の勝率の高さが注目された。 そこで、最近の将棋AI同士の対局で、戦型別の勝率に変化があるか調査した。以下の調査では、戦型の分類にMizarさんが公開されているjsonの定義ファイルを使用している。…

どの駒が評価値に寄与しているかを可視化する

dlshogiのモデルに盤面を入力すると、その盤面の評価値(勝率)を出力できる。 その際、どの駒が評価値に寄与しているか可視化できると、AIがどこに注目しているのかがわかる。 以前に、Attention Branch Networkを使って可視化を試したが、今回は、駒を除くと…

将棋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…

nnue-pytorchを試す その3

前回、nnue-pytorchでdlshogiの棋譜を学習して、floodgateの棋譜でテストを行うと、評価損失(val_loss)が上昇する事象が起きることを書いた。いろいろ条件を変えて実験したところ、最適化をデフォルトのRanderから、Momentum SGDに変更すると評価損失(val_lo…

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

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

nnue-pytorchを試す その2

前回、nnue-pytorchをWindowsとLinuxで動作確認した。今回は、前回説明したqsearchで動く局面を除外した場合としない場合で精度の比較を行った。 qsearch除外の実装 Stockfishのnnue-pytorchの--smart-fen-skippingは、学習の実行時に指し手が駒をとる手と王…

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ブロックのモデルを採用している…

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

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

第2回世界将棋AI 電竜戦 1日目結果報告

本日、第2回世界将棋AI 電竜戦の予選リーグがありました。 予選リーグの結果 全46チーム参加で、上位10チームが明日のA級リーグで総当たりで優勝を争います。 11位~28位はB級リーグ、それ以外はC級リーグになります。私はdlshogiと、チームとしてGCT電竜と…

floodgateの序盤3手の統計

序盤3手の戦型と先手勝率について話題になっているので、floodgateの棋譜から統計を調べてみた。相居飛車の序盤は3手で分岐して、4つの主要な戦型になります。(手順前後はありますが)その上で評価値からmin-maxを取ると赤矢印、つまり相掛かりが最善になる…

将棋AIの実験ノート:活性化関数Mishを試す

以前にdlshogiのモデルで活性化関数をReLUからSwishにした場合の比較を行った。今回は、活性化関数Mishを試した。 Mish Mishは、 で表される活性化関数である。論文によると、6層CNNのCIFAR-10の訓練で、Swishの正解率を上回ると報告されている。 [1908.0868…