TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

リバーシ(オセロ)で深層強化学習 その4(並列実行)

前回、DQNでリバーシ(オセロ)の強化学習を試して、ランダムより強くなることを確認した。 しかし、シングルステッドでシングルゲームを繰り返しているため1万イテレーションの実行に約14時間かかった。方策勾配法のアルゴリズムであるA2Cでは、環境を並列実…

リバーシ(オセロ)で深層強化学習 その3(DQN)

前回、DQNのネットワークを教師ありでQ学習で学習した。 今回は、DQNを強化学習で学習する。実装するアルゴリズムは、Nature に掲載された論文「Human-level control through deep reinforcement learning」に基づく。 DeepMindによる公式の実装は、TensorFl…

MuZeroの論文を読む その5(AlphaZeroとの比較)

付録A AlphaZeroとの比較 MuZeroは、AlphaGo Zero*1やAlphaZero*2よりも一般的な設定向けに設計されている。 AlphaZeroのプランニング AlphaGo ZeroとAlphaZeroでは、プランニングプロセスは2つの別個のコンポーネントを使用する。 シミュレーターは、ゲーム…

リバーシ(オセロ)で深層強化学習 その2(教師ありQ学習)

前回、オセロの棋譜の終端の報酬を使用して(TD(1))、教師ありで学習することでランダムより強くなることを確認した。今回は、教師ありでQ学習を試す。 Q学習 Q学習の学習則は以下の式で表される。 は、遷移に対応する即時報酬で、リバーシ(オセロ)の場合、終…

MuZeroの論文を読む その4(結論)

本文の残り、結論の部分です。 結論 人工知能のブレークスルーの多くは、高パフォーマンスプランニングまたはモデルフリー強化学習方法に基づいている。 この論文では、両方のアプローチの利点を組み合わせた方法を紹介した。 私たちのアルゴリズムMuZeroは…

AlphaStarの論文を読む その13(分析、AlphaStarの一般性)

分析 エージェントセット 検証エージェント:メインエージェントのみを使用し、エクスプロイターを使用せずに訓練された17の戦略セットに対するリーグの堅牢性を検証し、zを手で精選された興味深い戦略セット(例:キャノンラッシュや初期飛行ユニット)に修…

MuZeroの論文を読む その3

結果 MuZeroアルゴリズムを、挑戦的なプランニング問題のベンチマークとしての古典的なボードゲーム囲碁、チェス、将棋、および視覚的に複雑なRLドメインのベンチマークとしてAtari Learning Environmentの57のゲームすべてに適用した。 測定条件 それぞれの…

リバーシ(オセロ)で深層強化学習

先日作成した高速なリバーシライブラリを使って、深層強化学習のアルゴリズムをいろいろ試してみたいと思っている。 DQNの実装 将棋でDQNによる強化学習を試したときはまったく学習しなかったので、まずは教師ありでDQNのネットワークが学習できるか試すこと…

AlphaStarの論文を読む その12(評価)

評価 AlphaStar Battle.netの評価 AlphaStarエージェントは、StarCraft IIバランスパッチ4.9.3で、MMRレーティングに基づくBlizzardのオンラインマッチメイキングシステムBattle.netで人間に対して評価された。 AlphaStar Finalは、グランドマスターレベル(…

AlphaStarの論文を読む その11(インフラ)

インフラ リーグを訓練するために、多数のStarCraft II対戦を並行して実行し、それらのゲームのデータに基づいてエージェントのパラメータを更新する。 これを管理するために、さまざまなタイプの分散ワーカーで非常にスケーラブルな訓練セットアップを開発…

AlphaStarの論文を読む その10(リーグ構成)

リーグ構成(Populating the League) 訓練中、新しいプレイヤーを作成するためにスナップショットが作成されたときの訓練対象の対戦相手の分布と、教師ありパラメーターにリセットされる確率のみが異なる3つのエージェントタイプを使用した。 メインエージェ…

AlphaStarの論文を読む その9(マルチエージェント学習)

マルチエージェント学習 リーグトレーニングはマルチエージェント強化学習アルゴリズムであり、セルフプレイトレーニング中によく発生するサイクルに対処し、多様な戦略を統合するために設計されている。 訓練中に、エージェント(RLアルゴリズムによって訓…

MuZeroの論文を読む その2

続きです。 MuZeroアルゴリズム MuZeroアルゴリズムについて詳しく説明する。 予測は、各タイムステップtで、ステップのそれぞれについて、過去の観測および将来の行動を条件とするパラメーターを使用したモデルによって行われる。 モデルは、3つの将来の量…

AlphaStarの論文を読む その8(教師あり学習、強化学習)

今回はMethodsの教師あり学習と強化学習についてです。 教師あり学習 各エージェントは、人間の行動を模倣するために、リプレイから教師付き学習を通じて最初に訓練される。 教師あり学習は、エージェントの初期化と多様な探索の維持の両方に使用される。 こ…

MuZeroの論文を読む

MuZeroの論文を読んでいきます。 基本的にだらだら訳していくだけです。 途中で感想を書いていきます。 概要 プランニング能力を備えたエージェントを構築することは、人工知能の追求における主な課題の1つである。 ツリーベースのプランニング方法は、完全…

AlphaStarの論文を読む その7(アーキテクチャその3)

アーキテクチャ詳細の続きです。 ベースラインと損失に関する部分です。 勝敗ベースライン(Winloss Baseline) 入力:prev_state, scalar_features, opponent_observations, cumulative_score, action_type, lstm_output 出力: winloss_baseline : 「action_…

AlphaStarの論文を読む その6(アーキテクチャその2)

アーキテクチャ詳細の続きです。 コア(Core) 入力:prev_state, embedded_entity, embedded_spatial, embedded_scalar 出力: next_state : 次のステップのLSTM状態 lstm_output : LSTMの出力 コアは、「embedded_entity」、「embedded_spatial」、および「e…

高速なPythonのリバーシ(オセロ)ライブラリ

将棋で強化学習のアルゴリズムをいろいろ試そうとしたが、DQNが全く学習しないので、もう少し簡単なゲームを先に試そうと思う。 ということで、リバーシ(オセロ)で試すことにした。Pythonで使えるリバーシのライブラリがないか探したが良さそうなのが見つか…

AlphaStarの論文を読む その5(アーキテクチャ)

しばらく空きましたが、続きです。 アーキテクチャは長いので途中までです。 アーキテクチャ AlphaStarの方策は関数で、以前のすべての観測とアクションおよび𝑧(戦略統計を表す)を現在のステップの行動の確率分布にマッピングする 拡張データ表1 | エージ…

AlphaStarの論文を読む その4

続きです。前回までで論文の本文を紹介しました。 今回からMethodsを読んでいきます。本文と内容の重複もあります。 ほぼだらだらと訳しただけです。 ゲームとインターフェイス ゲーム環境 StarCraftは、SF世界で行われるリアルタイム戦略ゲーム 1998年にBli…

AlphaStarの論文を読む その3

続きです。本文の残りの部分です。 実験による評価 対戦条件 公式オンラインマッチメイキングシステムBattle.netの制限なし条件で評価した 3つのメインエージェントTerran、Protoss、Zergを評価 各エージェントは、訓練中に3つの異なるスナップショットで評…

AlphaStarの論文を読む その2

昨日の続きです。 人間のデータの重要性 StarCraftの主な課題の1つは、新しい戦略を発見すること 一度、地上ユニットの局所戦略を学んだ後、航空ユニットを単純に使用するとパフォーマンスが低下する 航空ユニットがその局所戦略を効果的に利用する、数千ス…

AlphaStarの論文を読む

Natureで発表されたAlphaStarの論文を読んでいきます。 無料で読めるPDFは、DeepMindのブログからダウンロードできます。PythonとTensorFlowによる疑似コードも公開されており、Supplementary Dataからダウンロードできます。Methodも含めると結構なボリュー…

cshogiをOpenAI Gymインターフェースに対応させてみた

強化学習の勉強をしていてアルゴリズムを実装して試してみたいが、CartPoleとか学習させても面白くないのでせっかくなので将棋で試せるようにしてみたくなった。ということで、cshogiをOpenAI Gymインターフェースに対応させてみた。 Gymインターフェース 公…

cshogiのバグ修正とdlshogi-zeroの更新

cshogiにいくつかバグがあったので修正した。 move16がデグレード やねうら王の教師局面に対応した際に、move16がデグレードしていた。 単純な編集ミスだったので修正した。 千日手が判定できないバグ board.is_draw()は、引数に遡る手数を受け取るが、デフ…

エントロピー正則化項の微分

以前に方策が決定論的にならないようにするために、損失にエントロピー正則化項を加えることを書いたが、誤差逆伝播する際の微分の式が誤っていたので訂正する。 方策がソフトマックス関数の場合のエントロピーの微分 エントロピーは以下の式で与えられる。 …

matplotlibでグラフをインタラクティブに変更して見やすくする

matplotlibで複数系列の時系列グラフなどを表示した場合、グラフの線が太く重なっている箇所の詳細が把握しにくい。 特にJupyter Notebookでブラウザで表示している場合は、コードで見栄えを調整する必要がある。Jupyter QtConsoleで、「%matplotlib qt」とI…

将棋AIの実験ノート:chain ruleで方策を定義する(続き)

(前回の続き)chain ruleで方策を定義したモデルと、現在のdlshogiの指し手を表現したモデルで、同じ局面を学習させて精度を比較した。elmoで生成した、1000万局面を訓練に、100万局面をテストに使用した。 chain rule 現在のdlshogiの指し手表現 test accu…

将棋AIの実験ノート:chain ruleで方策を定義する

現在dlshogiでは、方策ネットワークの出力は、移動先座標と移動方向(8方向+桂馬2方向+駒打ち7方向)の組み合わせで表現している。 これには、移動元を座標で表すと、分類するクラス数が多くなり精度に悪影響があるため、移動方向として表現することでクラ…

dlshogiのLinuxでのビルド/自己対局の実行方法

dlshogiのビルドや自己対局の実行方法について今まで文章化していなかったので、解説用のJupyter Notebookを作成した。 Google Colabで実行できる。colab.research.google.com dlshogiは学習に初期局面集や評価局面集を使っていたり、メモリを大量に消費する…