TadaoYamaokaの開発日記

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

【読書ノート】SCRUMMASTER THE BOOK 優れたスクラムマスターになるための極意――メタスキル、学習、心理、リーダーシップ

書籍「SCRUMMASTER THE BOOK 優れたスクラムマスターになるための極意――メタスキル、学習、心理、リーダーシップ」を読んだので内容をまとめる。 以下の内容は、ほとんどClaude3 Opusを使用して作成している。 要約 CHAPTER1 スクラムマスターの役割と責務 …

【読書ノート】科学的根拠に基づく最高の勉強法

書籍「科学的根拠に基づく最高の勉強法」を読んだので内容をまとめる。 以下の内容は、ほとんどClaude3 Opusを使用して作成している。 要約 はじめに 本書は、科学的に根拠のある効果の高い勉強法について、心理学や脳科学の研究によって得られた客観的な証…

【読書ノート】Clean Architecture 達人に学ぶソフトウェアの構造と設計

書籍「Clean Architecture 達人に学ぶソフトウェアの構造と設計」を読んだので、内容をまとめた。 以下の内容は、ほとんどClaude3 Opusを使用して作成している。 まえがき・第I部 イントロダクション まえがき ソフトウェアシステムの構造を決定するルールは…

【読書ノート】最適輸送の理論とアルゴリズム

Stable Diffusion 3は、Flow Matchingが使用されており、Flow Matchingは最適輸送とも関連するということなので、積んでおいた「最適輸送の理論とアルゴリズム」を読んだ。数式をほとんど読み飛ばして読んだまとめである。 以下の内容は、ほとんどClaude3 Op…

【読書ノート】エリック・エヴァンスのドメイン駆動設計

最近、ソフトウェア開発を行っているので、ソフトウェア設計に関する勉強をしている。 「エリック・エヴァンスのドメイン駆動設計」を読んだので、内容をまとめた。 以下の内容は、ほとんどClaude3 Opusで書いている。 概要 第1部 ドメインモデルを機能させる…

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

【論文】Bridging the Human–AI Knowledge Gap: Concept Discovery and Transfer in AlphaZeroを読む

DeepMindがarXivで発表した、AlphaZeroからチェスの新しい概念を抽出して人間のパフォーマンス向上に使えるようにする方法について述べた「Bridging the Human-AI Knowledge Gap: Concept Discovery and Transfer in AlphaZero」を読んだ際のメモ。 概要 Alp…

【論文】Grandmaster-Level Chess Without Searchを読む

DeepmindがarXivで発表したチェスで探索なしでグランドマスターレベルに達したTransformerベースモデルに関する論文「Grandmaster-Level Chess Without Search」を読んだ際のメモ。 概要 標準的なTransformerのデコーダを教師あり学習することで探索なしでチ…

PokéLLMonの論文を読む

LLM

LLMを使用してポケモンバトルをプレイするPokéLLMonの論文を読んだ際のメモ。 概要 LLMを使用して、ポケモンバトルをプレイするエージェントを作成する。 現在の状態をテキストとして与え、行動を生成する 以前のターンの結果をテキストとして、コンテキスト…

麻雀AIを深層強化学習で作る その11(学習処理)

前回、自己対局で特徴量を作成する処理を実装した。今回は、自己対局で生成したデータを読み込んで学習する処理を実装した。 データ読み込み 自己対局プログラムでzlibで圧縮したデータをPythonのzlibで解凍し、Numpyのndarrayとして読み込む。 C++の構造体…

将棋AIの棋風学習にLoRAを適用 追試

前回、将棋AIのモデルにLoRAを適用して、人間プレイヤーの傾向を学習できることを確かめた。今回、LoRAが通常の追加学習と比較して効率的か比較してみた。 また、序盤、中盤、終盤で傾向に違いがあるか検証してみた。 追加学習と比較 事前学習済みモデルに人…

将棋AIの棋風学習にLoRAを適用

大規模言語モデルやStable Diffusionなどの拡散モデルのファインチューニングには、LoRAという手法が使われることが多い。 全てのパラメータを微調整するよりも効率的に学習できる。LoRAを将棋AIのモデルに適用して、棋風の学習に使えるか試してみた。 将棋A…

LLMを活用した深層学習モデルの改善

前回の記事で、LLMを使用して数学的発見を行うFunSearchの論文を紹介した。FunSearchは、LLMを使用してプログラムの変更を行い、進化的アルゴリズムでスコアの高いプログラムを選別することで、最適な解を出力するプログラムを生成する。この仕組みは、深層…

Mathematical discoveries from program search with large language modelsを読む

DeepMindがNatureで発表した「Mathematical discoveries from program search with large language models」を読んだ際のメモです。 概要 大規模言語モデルを使用して数学的発見を行うFunSearchを提案 解を生成するプログラムを生成する LLMを使用してプログ…

麻雀AIを深層強化学習で作る その10(自己対局で特徴量記録)

電竜戦があったりで先月は麻雀AIの開発に手を付けられれず、前回から1か月近く空いてしまったが、麻雀AIの開発を再開したい。 自己対局で特徴量記録 前回、自己対局で牌譜を生成するところまで実装した。 自己対局で生成した牌譜を元に、Learnerで特徴量を生…

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

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

麻雀AIを深層強化学習で作る その9(自己対局)

前回は、牌譜の記録/再生処理を実装した。 今回は、自己対局で牌譜を生成する処理を実装する。 処理方式 強化学習のアルゴリズムにPPOを使用予定で、PPOはオンポリシーのアルゴリズムのため、 現在のモデルで牌譜生成 現在のモデルで生成した牌譜でモデルを…

麻雀AIを深層強化学習で作る その8(牌譜の記録/再生)

強化学習実装の準備として、牌譜の記録/再生を実装した。PPOでは、エピソードの終端の報酬を、GAEで各ステップの状態に割り当てるため、エピソードの各ステップの状態を再生できるように記録しておく必要がある。 また、ランダムな初期局面からの対局を再生…

麻雀AIを深層強化学習で作る その7(初期局面からランダムプレイ)

前回作成した初期局面生成処理で生成した初期局面から、ランダムにプレイしても和了できるか確認を行った。深層強化学習ではモデルが初期値の状態ではランダムに近いため、ランダムでもある程度和了できると学習の効率的に学習できる。 初期局面からランダム…

麻雀AIを深層強化学習で作る その6(初期局面生成)

以前に考察した通り、強化学習でゼロから麻雀AIを学習する場合、偶然和了した際の報酬のみで役を学習するのは困難と考える。 そこで、ランダムに選択した役のN向聴の状態からゲームを開始して、補助タスクとして和了した役も学習させることにする。今回は、N…

麻雀AIを深層強化学習で作る その5(役の手牌をランダム生成)

N向聴の初期局面を生成するための準備として、特定の役で和了した手牌をランダムに生成する機能をcmajiangに実装した。 二盃口の手牌を生成する例 random_erbeikou() 和了の手牌を生成する処理 役ごとの制約を満たしながら、刻子もしくは順子をランダムに選…

麻雀AIを深層強化学習で作る その4(特徴量作成とモデル実装)

前回までは麻雀AIの作成方針を書いたが、今回から実装に着手する。 まずは、特徴量作成とモデル実装を行った。 特徴量作成 以前に検討した通り、入力特徴量は複数チャンネルの9×4の画像で構成する。特徴量作成をPythonで実装すると遅いため、C++で実装してpy…

麻雀用語の各国語対応表

作成している麻雀ライブラリで、クラス名、メソッド名、変数名などに中国語のピンインを使用しているため、訳語を調べる必要があるため、自分のために参考資料を整理しておく。 中国語 参考にしている電脳麻将のソースで使われている中国語一覧 電脳麻将のプ…

麻雀AIを深層強化学習で作る その3(初期局面と補助タスク)

麻雀の役は14枚の牌を組み合わせて作る必要があるため、初期値のモデルからはじめて偶然役ができる確率は極めて低い。 人間が麻雀を覚える際もまずは役の形を覚えて、それを目指して手牌をそろえていく。 知識ゼロから偶然和了した場合の報酬のみで役を覚え…