ブックマーク / tadaoyamaoka.hatenablog.com (141)

  • 大規模言語モデルで将棋AIを作る - TadaoYamaokaの開発日記

    先日、dlshogiをPyTorch Lightningに対応させてマルチGPUで学習できるようにした。 これは、より大規模なモデルで将棋を学習するための布石でもある。 Transformerを使ったLLMで使われている技術将棋に応用することを計画している。 「Deep Learning Shogi」(dlshogi)にちなんで、「Large Language Shogi」(llshogi)として開発していきたい。 ※モデルサイズは昨今のLLM並みに数兆パラメータとかにはできないので、LargeはLLMの技術を使うという意味で。 ベースラインの方針 まずベースラインとして、「Grandmaster-Level Chess Without Search」を参考にして、Transformerによる将棋の方策を実装したい。 トークン 以前に、将棋でTransformerモデル(Multi-He

    大規模言語モデルで将棋AIを作る - TadaoYamaokaの開発日記
    zu2
    zu2 2024/05/08
  • 第34回世界コンピュータ将棋選手権 結果報告 - TadaoYamaokaの開発日記

    5/3~5/5に開催された第34回世界コンピュータ将棋選手権にHEROZチームとして、「dlshogi with HEROZ」というプログラム名で参加しました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。 今回は34回目の開催で、45チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。 大会の結果 決勝リーグでは最終戦で自力で勝てば優勝でしたが千日手になり、トップの「お前、 CSA 会員にならねーか?」(tanuki-チーム)と勝ち点同一でSB差で準優勝という結果になりました。 なお、二次予選は昨年とは異なり苦戦を強いられて、ボーダーラインで辞退があったため繰り上げで決勝に進めました。苦戦した事情は後述します。 今大会の特徴 定跡が出回った 先手勝率が高い角換わりの

    第34回世界コンピュータ将棋選手権 結果報告 - TadaoYamaokaの開発日記
    zu2
    zu2 2024/05/08
  • dlshogiのPyTorch Lightning対応 その5(Warm-upに対応したスケジューラ) - TadaoYamaokaの開発日記

    大規模なモデルの学習に効果があるとされる学習率スケジューリングの手法にWarm-upがある。 しかし、Pytorchの標準のスケジューラには、Warm-upに対応したスケジューラが提供されていない。 PyTorch Lightning Boltsには、Warm-upに対応したCosineAnnealingLRがある。 Linear Warmup Cosine Annealing — Lightning-Bolts 0.7.0 documentation まだレビュー中のステータスで、機能的にもリスタートや減衰には対応していない。 深層学習界隈でよく使われるtimmには、Warm-upの他にリスタート回数や減衰率の調整が可能なCosineAnnealingLR学習率スケジューラがある。 SGDR - Stochastic Gradient Descent with Warm Restarts

    dlshogiのPyTorch Lightning対応 その5(Warm-upに対応したスケジューラ) - TadaoYamaokaの開発日記
    zu2
    zu2 2024/03/16
  • 第4回世界将棋AI電竜戦 結果報告 - TadaoYamaokaの開発日記

    週末の12/2、12/3に開催された第4回世界将棋AI電竜戦に参加しました。 HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 結果 予選を1位で通過し、決勝リーグでは、最終戦で水匠に敗れて、準優勝という結果になりました。 1位、2位は僅差で、3位以下を大きく引き離しています。 予選では、水匠に先手、後手で連勝していましたので、優勝する可能性も十分あったと思います。 予選で用意した定跡の一部を見せたことで決勝で対策されてしまったのは作戦が甘かったかもしれません。 定跡自動生成 今大会では、定跡自動生成にすべての計算リソースを投入しました。 モデルは、第33回世界コンピュータ将棋選手権と同じものを使用しました。 第33回世界コンピュータ将棋選手権の結果報告で書きましたが、角換わり基図からの先手角換わり定跡が将棋AI同士の対局では先手必勝

    第4回世界将棋AI電竜戦 結果報告 - TadaoYamaokaの開発日記
    zu2
    zu2 2023/12/22
  • 第33回世界コンピュータ将棋選手権 結果報告 - TadaoYamaokaの開発日記

    5/3~5/5に開催された第33回世界コンピュータ将棋選手権に参加しました。 HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。 今回は33回目の開催で、46チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。 大会の結果 決勝リーグでは最終戦で上位3チームが1敗で並び優勝を争う展開になりました。 dlshogiは最終戦で勝って、同じく最終戦で勝ったやねうら王とはSBの差で、優勝(二連覇)という結果になりました。 優勝につながったポイント 今大会では、二次予選の結果で、上位ほど強い相手に先手番であたることができるというルールでしたので、二次予選を1位で通過したことが有利に

    第33回世界コンピュータ将棋選手権 結果報告 - TadaoYamaokaの開発日記
    zu2
    zu2 2023/05/06
  • 将棋AI実験ノート:dlshogiと水匠で評価値の割れる局面の精度改善 - TadaoYamaokaの開発日記

    第3回世界将棋AI電竜戦では、先手の角換わり定跡で、dlshogiが後手番で後手優勢と評価している局面から、定跡を抜けてから反省して負けることがあった。 dlshogiと水匠で評価が分かれる場合、dlshogiが正しくてそのまま勝ち切ることも多いが、特に中盤以降で読みが重要な局面で水匠に読み負けることがある。 電竜戦での例 8回戦の水匠とdlshogi with HEROZ 20bの対局では、85手目の先手の8三角をdlshogiは読めていなかった。 電竜戦 - 棋譜中継 この手は、水匠5でも1億ノードくらい読む必要がある。 エクスプロイタの学習 dlshogiの強化学習では、比較的少ない探索(1万ノード)で自己対局しているため、深く読むと評価が変わる手は指されない。 多少のランダムノイズも加えているが、選ばれる確率は低い。 対策として、評価値が低い手でも一定の確率で選ぶようにして棋譜を生

    将棋AI実験ノート:dlshogiと水匠で評価値の割れる局面の精度改善 - TadaoYamaokaの開発日記
    zu2
    zu2 2023/01/04
  • Stable Diffusionを「いらすとや」で追加学習する - TadaoYamaokaの開発日記

    前回、Stable Diffusionをdanbooruデータセットを使用して追加学習することを試した。 今回は、自分でデータセットを作成して追加学習することを試す。 データセットには、画像とキャプションが揃っている必要があり、キャプションがない場合はCLIPで疑似ラベルを生成するなどする必要がある。 今回は、画像に対するキャプションがある「いらすとや」をスクレイピングして、データセットを作成した。 データセット作成 「いらすとや」から全ての画像とキャプションを取得した。 画像に複数バリエーションがある場合は、1つ目の画像のみを使用した。 キャプションは、日語になっているため、Googleスレッドシートで、「=GOOGLETRANSLATE(XX,"ja","en")」を使って英語に変換を行った。 合計で、22891枚の画像とキャプションのセットが用意できた。 画像サイズ変換 画像は、5

    Stable Diffusionを「いらすとや」で追加学習する - TadaoYamaokaの開発日記
    zu2
    zu2 2022/09/18
  • 将棋倶楽部24万局集の統計 - TadaoYamaokaの開発日記

    昨日の記事で書いた通り、「将棋倶楽部24万局集」のデータベースを読めるようになったので、棋譜の統計情報を調べた。 期間 1999年5月から2002年2月のデータが格納されている。 ほとんどは、2001年9月以降のデータである。 count 240000 unique 159 top 2001-12-02 00:00:00 freq 4234 first 1999-05-25 00:00:00 last 2002-02-27 00:00:00 Name: date, dtype: object レーティングの分布 ヒストグラム 全体的に幅広いレーティングのデータが格納されている。 しかし、特定のレーティング帯の数が多くなっているため、無作為に抽出されているわけではなさそうである。 書籍の説明によると「好局24万局を選んで収録した」とあるので、このデータで分析した統計が実際の人間の対局の統計を

    将棋倶楽部24万局集の統計 - TadaoYamaokaの開発日記
    zu2
    zu2 2022/08/31
  • nnue-pytorchを試す その3 - TadaoYamaokaの開発日記

    前回、nnue-pytorchでdlshogiの棋譜を学習して、floodgateの棋譜でテストを行うと、評価損失(val_loss)が上昇する事象が起きることを書いた。 いろいろ条件を変えて実験したところ、最適化をデフォルトのRanderから、Momentum SGDに変更すると評価損失(val_loss)が下がることがわかったため、精度と強さの比較を行った。 Momentum SGD実装 PyTorchのデフォルトのtorch.optim.SGDを使用し、パラメータはdlshogiの学習で使用しているものと同じ値(momentum=0.9、nesterov=True、weight_decay=0.0001)とした。 訓練データ dlshogiの学習で使用したデータをqsearchでフィルタした約32億局面を使用した。 訓練条件 標準NNUE(HalfKP) バッチサイズ:8192(デフ

    nnue-pytorchを試す その3 - TadaoYamaokaの開発日記
    zu2
    zu2 2022/08/31
  • 将棋倶楽部24万局集をCSAに変換 - TadaoYamaokaの開発日記

    以前に棋譜から棋力測定を試した際に、中古で「将棋倶楽部24万局集」を買ったが結局使わずに眠らせていた。 せっかく買ったので棋譜を分析してみようとCDROMを開いたらデータ形式が棋泉というソフトの形式で、一括で処理しようとすると変換が必要であることがわかった。 そこで、後で使いまわせるように、CSAに一括で変換を行った。 以下に、変換方法について示す。 インストーラから棋泉のデータベースを取り出す CDROMにはInstallShieldで作成された棋泉のインストーラが格納されており、棋泉のデータベースが直接ファイルとして取り出せない。 一旦インストールを行えばよいが、インストーラが16bitアプリケーションのためWindows11では実行できない。 そこで、Universal Extractor 2を使って、インストーラからファイルを取り出した。 インストーラからファイルを取り出すと、Gr

    将棋倶楽部24万局集をCSAに変換 - TadaoYamaokaの開発日記
    zu2
    zu2 2022/08/31
  • stable-diffusion-webuiをWSL2で動かす その2 - TadaoYamaokaの開発日記

    昨日導入方法を書いたstable-diffusion-webuiにGFPGANとRealESRGANを導入する。 GFPGANは、顔を改善するモデルで、RealESRGANは解像度2倍にするモデルである。 それぞれ適用した場合の比較画像は、公式のページにサンプルがある。 GitHub - hlky/stable-diffusion-webui: Stable Diffusion web UI ライブラリインストール GFPGANとRealESRGANに必要になるライブラリをインストールする。 バージョン不整合を防ぐために、以前のpipでインストールしたライブラリも再度同時にインストールする。 pip install diffusers transformers scipy ftfy invisible-watermark gradio pynvml omegaconf pytorch_li

    stable-diffusion-webuiをWSL2で動かす その2 - TadaoYamaokaの開発日記
    zu2
    zu2 2022/08/31
  • stable-diffusion-webuiをWSL2で動かす - TadaoYamaokaの開発日記

    この議事の内容は古いです。現在この手順では動きません。 Stable Diffusionが公開されて一週間もたたないうちに便利なUIがいくつもリリースされている。 その中でも、stable-diffusion-webuiが機能が充実している。 GitHub - hlky/stable-diffusion-webui: Stable Diffusion web UI ということで、stable-diffusion-webuiをローカルPCWindows11WSL2上で動かせるようにした。 以下、構築手順を示す。 Conda環境とPyTorchの構築は、前回の記事の内容と同じである。 なお、後々バージョン不整合が起きたため、前回の記事の内容を修正している。 WSL2上にconda環境作成 WSL2のUbuntu 20.04上に環境構築する。 wget https://repo.anacon

    stable-diffusion-webuiをWSL2で動かす - TadaoYamaokaの開発日記
    zu2
    zu2 2022/08/31
  • 優勝決定戦について - TadaoYamaokaの開発日記

    第32回世界コンピュータ将棋選手権決勝の優勝決定戦について、dlshogi側の評価値は以下のようになっていました。 112手目まではほぼ互角と判断していました。 114手目くらいから徐々に先手優勢になって、逆転となった166手目の手前では、評価値-720でした。 逆転となった166手目 166手目△4九角打で、少し評価値が良くなりましたがまだ先手有利の評価値で、▲6三とでほぼ互角の評価になりました。 これはMCTSでは、探索結果の終端ノードの評価値(勝率)を平均化しているため、勝ちの手順を見つけていても、他の手順も調べているとすぐには評価値に反映されないことが関係しています。 ▲6三と以外だったら 166手目のdlshogiの読み筋は▲9七玉となっていましたが、▲9七玉と進んだ局面では、△7五銀が必至になっていましたので勝ちは揺るがなかったようです。 第32回世界コンピュータ将棋選手権の優

    優勝決定戦について - TadaoYamaokaの開発日記
    zu2
    zu2 2022/05/13
  • Unityで将棋アプリの開発 その14(実戦寄せ問題) - TadaoYamaokaの開発日記

    作成している将棋アプリに実戦寄せ問題を実装した。 アプリを継続利用してもらうには、飽きずに上達につながるコンテンツが必要だと思うので、序盤、中盤、終盤それぞれ棋力を鍛えられる内容を盛り込みたいと思っている。 序盤については、定跡の戦型予想と、AIの戦型指定を実装した。 Unity将棋アプリの開発 その9(定跡と戦型予想) - TadaoYamaokaの開発日記 Unity将棋アプリの開発 その10(AIの戦型指定) - TadaoYamaokaの開発日記 中盤については、互角局面集を実装しようと思っている。 今回は、終盤用として、実戦寄せ問題を実装した。 自分は初級者なので、プロの対局などを見ていて、評価値は優勢でもどう寄せれば勝てるか分からなかったりする。 そのため、適度な難易度の問題集で終盤の寄せ方の練習ができるようにしたい。 必至局面の抽出 はじめ、floodgateの棋譜から必

    Unityで将棋アプリの開発 その14(実戦寄せ問題) - TadaoYamaokaの開発日記
    zu2
    zu2 2022/05/06
  • 第32回世界コンピュータ将棋選手権 結果報告 - TadaoYamaokaの開発日記

    5/3~5/5に開催された第32回世界コンピュータ将棋選手権に参加しました。 HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。 今回は32回目の開催で、51チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。 大会の結果 決勝では1回も負けることはなく、優勝という結果になりました。 第32回世界コンピュータ将棋選手権 決勝 ソフトの強さは毎年強くなっており、上位ソフトの強さは拮抗しており決勝に残るだけでも難しい状況でした。 優勝の可能性はあると考えていましたが、決勝に残るチームでの勝率の差は10%程度だと考えていたので、1回勝負では運で決まる要素も大きいと思っていました

    第32回世界コンピュータ将棋選手権 結果報告 - TadaoYamaokaの開発日記
    zu2
    zu2 2022/05/06
    “効果は計測できていませんが、終盤に時間を使えるようになったことで、ディープラーニング系の弱点と言われている終盤で読みが浅くなることによる読み抜けが防げていたと考えています”
  • dlshogiの序盤にランダム性を加える - TadaoYamaokaの開発日記

    dlshogi同士で、平手開始局面から対局すると毎回ほとんど同じ棋譜になる。 以前の調査では、先手勝率が65.7%と偏った結果になった。 また、最新のモデルでは先手で角換わりになるため、角換わりに偏った勝率になる。 そのため、平手開始局面からの計測した勝率はあまり信用できない。 そこで、コンピュータ将棋開発者の間では、互角局面集を使って勝率を測定するということが行われている。 序盤にランダム性を加える 互角局面集を使うと、同一棋譜になるのを回避して、様々な戦型での強さを計測できるというメリットがあるが、25手目から開始するため、24手目までの序盤の強さが見られなくなるというデメリットがある。 そこで、序盤にランダム性を加えて、平手開始局面から対局して勝率が落ちない範囲で、局面をばらけさせることを検討した。 また、自己対局時にも初期局面集を使用しているが、序盤の局面が学習データに含まれなくな

    dlshogiの序盤にランダム性を加える - TadaoYamaokaの開発日記
    zu2
    zu2 2022/04/01
  • dlshogiを使って棋譜から棋力を推定する - TadaoYamaokaの開発日記

    たややんさんが実施していた棋譜から棋力を推定する方法をdlshogiを使って検証してみた。 棋譜から棋力を推定する手法を検証しており、水匠の評価値をシグモイド関数で疑似的な勝率に変換した上で平均損失を計測する+計測する局面の勝率の閾値を設定するという手法で、24レーティングとの高い相関(相関係数-0.9536)を得られるようになりました。(続く) pic.twitter.com/wTu8pH6Ak7— たややん@水匠(将棋AI) (@tayayan_ts) 2021年9月17日 使用する棋譜 将棋倶楽部24の名人戦対局の2452棋譜を使用した。 対局者間のレーティングの分布は以下の通り。 対局者のレーティングのヒストグラムは以下の通り。 dlshogiの設定 棋譜の各局面について、バッチサイズ1で512プレイアウトで探索を行い評価値と最善手を取得する。 勝率の平均損失 まずは、各棋譜ごとに

    dlshogiを使って棋譜から棋力を推定する - TadaoYamaokaの開発日記
    zu2
    zu2 2022/03/17
    「参加時点のレーティング」が正しくないと、参加当初で連勝or連敗するのがオンライン将棋の問題点なんだけど(レーティングのデフレ/インフレにもつながる問題)、これをうまくつかえば解決できたりするのかなあ
  • Windows11+WSL2+Dockerでdlshogiを動かす 続き - TadaoYamaokaの開発日記

    昨日、Windows11でCUDA on WSLを試したが、なぜかWindows上でdlshogiのNPSが低下する問題が発生した。 WindowsのCUDAのバージョンが古かったため、新しいバージョンで試してみた。 CUDAインストール TensorRTの最新版(8.2.0.6)に対応した、CUDAの最新版(11.4)をインストールする。 昨日インストールしたドライバをそのままにして、CUDA 11.4をインストールしようとしたが、インストールでエラーが発生した。 そこで、CUDA on WSLに対応したドライバをアンインストールしてから、インストールしたところ、インストールできた。 ドライバは、CUDA11.4に付属するものをインストールした。 Windows上でのNPS測定 この状態で、dlshogiをCUDA、cuDNN、TensorRTの最新版とリンクするようにしてビルドし、NP

    Windows11+WSL2+Dockerでdlshogiを動かす 続き - TadaoYamaokaの開発日記
    zu2
    zu2 2022/03/10
  • Windows11+WSL2+Dockerでdlshogiを動かす - TadaoYamaokaの開発日記

    学習用のPCWindows11にアップグレードしたので、CUDA on WSLを試してみた。 ドライバインストール CUDA on WSLに対応したドライバをインストールする。 GPU in Windows Subsystem for Linux (WSL) | NVIDIA Developer ※2021/11/1 追記 CUDA 11.4に付属するドライバでも大丈夫だった。 このドライバを使うとWindows上で、以前のCUDA+TensorRTでビルドしたdlshogiのNPS性能が低下した。 WSL2インストール 公式のドキュメントの通り、管理者モードでPowerShellを起動して、 wsl --installでインストールする。 Ubuntuも合わせてインストールされる。 GPUが使用できることを確認 Windows11WSL2をインストールすると、デフォルトでCUDAが使

    Windows11+WSL2+Dockerでdlshogiを動かす - TadaoYamaokaの開発日記
    zu2
    zu2 2022/03/10
  • 英語のDiscordチャンネルを翻訳して読む方法 - TadaoYamaokaの開発日記

    ほぼ個人用メモです。 コンピュータ囲碁やコンピュータチェスの開発者のやり取りは、Discordのチャンネルで行われていて有用な情報が多い。 Computer Go Community Leela Chess Zero 今までWidnowsやスマホのDiscordのアプリで眺めていたが、英語だと読む速度が遅くてつらい。 (最近は英語のサイトはほとんどChromeの翻訳で読んでいるので、ますます英語を読む速度が遅くなっている。) ブラウザ版のDiscordならChromeの翻訳で、訳して読めるのではと思って試してみた。 Discordを翻訳する方法 PCChromeからだと、ブラウザで開くことができる(スマホだとできない)。 ブラウザで見ることはできるのだが、右クリックができないため、Chromeの翻訳機能を呼び出すことができない。 そこで、 Google Chrome™の右クリックを有効に

    英語のDiscordチャンネルを翻訳して読む方法 - TadaoYamaokaの開発日記
    zu2
    zu2 2022/03/09