TadaoYamaokaの開発日記

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

コンピュータ将棋

第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…

dlshogiの学習時の自己対局での先手勝率

少し前にdlshogiの先手勝率について調べた。 今回は、dlshogiの学習時の自己対局での先手勝率について調べた。 開始局面 現在、dlshogiの自己対局は、floodgateの16手目までの出現頻度が99パーセンタイル以上の局面を初期局面集として、そこからさらに16手MC…

互角局面集作成スクリプト

勝率測定などに「たややん互角局面集」を使わせてもらっている。 ただ、抽出条件の「36手目の局面まで、全ての指し手について評価値が±100以内となっている対局のみ」だと、dlshogiの棋譜が除外されてしまう点が気になっていた。 dlshogiは、開始局面で160付…

水匠4とdlshogiのNPSの比較

ディープラーニング系の将棋AIは、従来の将棋AIと比べてNPSが低くても強いという特徴がある。 NPSがどれくらい違うのか質問を受けることがあるので、測定を行った。 NPSのカウント方法の違い やねうら王(元はStockfishのソース)のNPSは、探索中にdo_moveを行…

第2回 電竜戦TSEC 結果報告

7/17~18にかけて実施された第2回 電竜戦TSECにdlshogiというソフトで参加しました。 チームとしてはGCT電竜でも参加しています。 第2回世界将棋AI 電竜戦TSEC -中継サイトファイナルリーグとB級リーグに分かれて実施されて、7/3に行われた予選で上位2チーム…

cshogiにWebアプリを追加

開発しているPythonの高速な将棋ライブラリcshogiに、ブラウザでUSIエンジン同士の対局が行える機能を追加した。 python -m cshogi.web.app --engine1 E:\game\shogi\gikou2_win\gikou.exe --engine2 E:\game\shogi\apery_wcsc28\bin\apery_wcsc28_bmi2.exe …

dlshogiをPyPIに登録

今までdlshogiの学習を行うために、python環境を作成して、boostをインストールして、C++からPythonモジュール(cppshogi)をビルドしてという手順が必要だったが、pipコマンドでインストールできるようにPyPIに登録した。 pip install dlshogiアップデートの…

将棋AIの進捗 その57(SWAの修正)

dlshogiの学習では、SWA(Stochastic Weight Averaging)を導入している。今までは、1世代学習するごとに、平均化した重みを出力して、次の世代ではその重みを使用して学習していた。 しかし、SWAは通常複数エポックに渡って平均化してから、最後に平均化した…

将棋AI実験ノート:自己対局時のノードの再利用

以前に、dlshogiの自己対局でノードの再利用を行うと、テスト損失が上昇する(過学習する)という問題が起きたことを書いた。方策の分布を学習するようにしたため、問題も起きにくくなっている可能性があるので、ノードの再利用(ルートノードはクリア)を行…

将棋AI実験ノート:方策の学習に温度パラメータを導入

以前にdlshogiで方策の分布を学習できるようにしたが、方策の分布を学習したモデルで対局すると、指し手のみを学習したモデルよりも弱くなるという問題が起きている。 温度パラメータの調整である程度強くできたが、指し手のみを学習したモデルには及んでい…

dlshogiの学習部のリファクタリングと各手法の精度比較

世界コンピュータ選手権も終わったので、feature/hcpe3やfeature/hcpe3_averageに分かれていたブランチをmasterに統合して整理した。 リファクタリング 重複局面の平均化や、評価値の補正をオプション(それぞれ--use_averate、--use_evalfix)で有効/無効化で…

将棋AI実験ノート:自己対局の評価値の補正

Discordで、評価値と勝率を変換する際の以下のシグモイド関数の係数aは、dlshogiはelmo_for_learnの自己対局から求めた756.0864962951762という値を使用しているが、floodgateの棋譜などを学習する場合はもっと低い値になるので補正すべきというやり取りがあ…

将棋AIの実験ノート:重複局面の平均を学習

dlshogiの自己対局で生成したデータを学習すると、方策損失がNaNになるというissueをもらった。 自己対局棋譜を用いるとPolicyのlossがNaNになる · Issue #44 · TadaoYamaoka/DeepLearningShogi · GitHub 原因 実際にデータをもらって、調査したところ、強化…

cshogiにリーグ戦モードを追加

プログラムの修正やモデルを学習した後の強さの計測に変更前後の自己対戦のみだと、系統が違うソフトに対して強くなっていないことがあるため、基準となるソフトを加えたリーグ戦で確認を行っている。連続対局には、cshogiを使用して、PGNファイルを出力して…

将棋AIの実験ノート:方策の分布を学習すると探索パラメータの調整が必要になる

以前に方策の分布を学習することで、Actor-Criticで学習するよりも精度が上がることを確かめた。 dlshogiの強化学習でも、方策の分布を学習するように移行した。しかし、テストデータに対する精度は上がるが、実際に対局すると弱くなっているという問題が発…

将棋AIの実験ノート:AVX対応

コンピュータチェスのCeresでは、PUCTによるノード選択の処理をAVXを使って高速化している。 これは、Ceres独自の「parallelized descent algorithm」(並列降下アルゴリズム)と合わせて使用することで、効果を発揮するもののようだ。Ceresで実際にどれくら…

将棋AIの実験ノート:方策の分布を学習 その3

前回の続き。 dlshogiの強化学習で、方策の分布を含む棋譜を生成し、そのデータを用いてモデルの学習を行い、方策の分布の有無による精度の違いを検証した。 棋譜生成 dlshogiの自己対局で、200万局面(29315棋譜)を生成した。 学習条件 Resnet10ブロック、活…

将棋AIの実験ノート:方策の分布を学習 その2

以前に、指し手を学習するより、方策の分布を学習した方が、方策の精度が上がるということを書いた。 しかし、現在、dlshogiの強化学習で生成している教師局面フォーマット(hcpe)では、方策の分布を記録していない。そこで、方策の分布を出力できるように、…