TadaoYamaokaの開発日記

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

2022-01-01から1年間の記事一覧

ConvNeXtを試す

ConvNeXtは、ResNetなどの畳み込みニューラルネットワークで構成されるニューラルネットワークで、SwinTransformerなど最先端のVisionTransformer系モデル並みの性能が出せるというモデルである。 モデル構成 残差ブロックの1層目がカーネルサイズ7x7のDepth…

arXivのPDF論文をブラウザ上で翻訳して読む

普段英語のページは、ChromeのGoogle翻訳拡張機能を使って、翻訳して読むことが多い。 英語をそのまま読むのは英語の勉強にもなるのだが、自分の英語力だと辞書引きながらになって読む速度が遅すぎるので、やはりGoogle翻訳が便利である。しかし、Google翻訳…

DCGANを試す

ほぼ個人メモです。今更ながら生成系のモデルをあまりさわっていなかったので、PyTorchのDCGANのTutorialを試してみた。 DCGAN Tutorial — PyTorch Tutorials 1.12.0+cu102 documentationWindowsだとチュートリアルのソースがそのままでは動かないので、WSL…

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

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

Learning to Play Minecraft with Video PreTraining (VPT)を読む

OpenAIが発表したマインクラフトの操作を学習した「Learning to Play Minecraft with Video PreTraining (VPT)」の論文を読んだ際のメモです。 概要 請負業者(フリーランス)に依頼して作成した7000時間分のキーボード・マウス操作のラベル付き動画からIDM(逆…

nnue-pytorchを試す その2

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

nnue-pytorchを試す

Stockfishで実装されたNNUEモデルをPyTorchで学習できるnnue-pytorchが、nodchip氏によって将棋のNNUE向けにポーティングされた。 GitHub - nodchip/nnue-pytorch at shogi.2022-05-23dlshogiの知識蒸留を試していることもあり、dlshogiのモデルを教師として…

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ブロック…

WCSC32版dlshogiが公開しているモデルからどれくらい強くなっているか

第32回世界コンピュータ将棋選手権で優勝したdlshogi with HEROZが、第2回世界将棋AI電竜戦エキシビジョンバージョン(公開しているモデル)からどれくらい強くなっているかちゃんと測定していなかったので、測定した。 測定条件 dlshogiは2スレッド、1GPU(A10…

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

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

dlshogiをVisual Studio 2022+CUDA11.6+cuDNN8.4+TensorRT8.4に移行

Visual Studio 2022が去年の11月にリリースされたが、CUDAが対応するまで移行を控えていた。 1月にCUDA 11.6がリリースされてVisual Studio 2022に対応したが、cuDNNとTensorRTがCUDA11.6に対応したバージョンがリリースされていなかったので、移行できずに…

HRNetによる顔のランドマーク検出

写真からランドマークの座標を検出する方法を調べている。以前に、マンガのキャラクターの顔に対して、畳み込みニューラルネットワークから座標を直接回帰する方法を試したことがあったが、それなりに検出できていた。 DCNNによるマンガキャラクターの顔パー…

世界コンピュータ将棋選手権での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…

cshogiをGitHub ActionsでビルドしてPyPIに公開する

Pythonの将棋ライブラリcshogiをPyPIで公開しているが、PyPIに公開するまでの手順が多いため、GitHub Actionsを使って自動化を行った。 前提 cshogiは、CythonとC++を使用しているため、ビルドが必要になる。 WindowsではVisual Studioが必要になる。 Linux…

gMLPを試す

ほぼ個人メモです。画像認識のモデルで、畳み込みを使わずMLPのみ同等の精度が出せるというMLP Mixerの発展形であるgMLPを試してみた。 gMLP チャネル方向と、空間方向に分けてMLPを適用する構成は、MLP Mixerと同じだが、Spatial Gating Unit (SGU)という仕…

優勝決定戦について

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

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

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

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

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

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

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

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

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

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

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

UnityのLineRendererのアンチエイリアシングを有効にする

LineRendererで斜めの線を引くと、以図のようにジャギーが発生する。 原因がわからずネットの情報をいろいろ試したが解決しなかった。 プロジェクトのアンチエイリアシングの設定 たまたま、新規に作成したシーンでLineRendererで線を引いて、プロジェクトの…

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

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

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

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

dlshogiを使って棋譜から棋力を推定する

たややんさんが実施していた棋譜から棋力を推定する方法をdlshogiを使って検証してみた。棋譜から棋力を推定する手法を検証しており、水匠の評価値をシグモイド関数で疑似的な勝率に変換した上で平均損失を計測する+計測する局面の勝率の閾値を設定するとい…

Unityで将棋アプリの開発 その10(AIの戦型指定)

作成している将棋アプリにAIの戦型指定を実装した。 実装方法 先日実装した定跡の戦型予想を使って、指定した戦型が定跡の候補手に含まれる場合、その手の採用率と戦型の確率に応じて、次の手を選択する。 そうすることで、指定した戦型になるように誘導でき…

Unityで将棋アプリの開発 その9(定跡と戦型予想)

作成している将棋アプリに定跡検索と戦型予想を実装した。定跡ボタン(ノートのアイコン)を押すと、現在の局面の定跡の候補手と、各手を指した後にどの戦型になるかの確率を表示する。候補手は、出現率と勝率も合わせて表示する。 定跡の元データ 定跡の元…