機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

iPadのNeural Engineで将棋AI part02 iPadを有線LANに接続

WCSCでは、対局サーバと将棋AIが入ったパソコンの間を有線LAN (Ethernet)で接続する必要があります。iPadを有線LANに接続する手段を検証しました。 ※本記事は将棋AIの話題はなく、WCSC特有の課題への対応手段を説明します。 接続対象の環境 WCSCの有線LAN環…

【単発DeepLearning本】技術書典12 頒布中

技術書典12は2022年1月22日から30日まで開催される技術系同人誌の頒布イベントです。新型コロナウイルスの影響によりオンライン開催ですので、お祭り感のある通販のようなものとお考え下さい。 当サークル「ヤマブキ計算所」は技術書典12に出展します。新刊…

iPadのNeural Engineで将棋AI part01 構想

最近のiPhoneやiPadには、Neural Engineという機械学習専用のコアが搭載されています。 これを使ったら、モバイル端末でどの程度強いディープラーニングベースの将棋AIが作れるのか検証してみたくなりました。 というわけで、まだアイデア段階なのですが連載…

Deep Learning Code Golfやってみた part03 Tensorflowへの移植

前回(PyTorch)で終わりのつもりだったのですがちょっとだけ続編です。 PyTorchと並び著名な深層学習フレームワークとして、Tensorflowがあります。私はPyTorchを使うことがほとんどですが、TensorflowでもDLCGを行うとどんな違いがあるか検証しました。 結…

Deep Learning Code Golfやってみた part02 コード解説

前回の続きです。本稿では、私が実際にDLCGに取り組んで記述したコードと、そこで用いたテクニックを解説します。 ベースライン まずはコードを短くするテクニックを用いる前の、最も基本となるコードを示します。 from torch.nn import * def m(): return S…

Deep Learning Code Golfやってみた part01 イントロダクション

Deep Learning Code Golfとは Deep Learning Code Golfは、私(select766)が作成した言葉で、「深層学習のモデル定義をできるだけ短いソースコードで表現する」というゲームです。 このゲームを考えたきっかけは、深層学習の新しいモデル構造ConvMixerを提案…

ゲーム木探索入門 part05 交互手番MCTSの実装【PokéAI】

前回は原始モンテカルロ法というもっとも単純な探索手法を試しました。原始モンテカルロ法では、ルート局面(行動を決定したい局面)でとれる行動それぞれについて、その行動をとった直後の局面からランダムにゲームを進めた際の勝率を比較して行動を決定し…

ゲーム木探索入門 part04 原始モンテカルロ法【PokéAI】

ゲーム木探索を用いたポケモンバトルAIの最も単純なアルゴリズムとして、原始モンテカルロ法を試します。 前回から長らく期間が空いてしまいましたが、再開していきます。 アルゴリズム ここでは原始モンテカルロ法(pure Monte Carlo search)を試します。 原…

第31回世界コンピュータ将棋選手権の参加記録(ねね将棋)

ねね将棋は2021年5月3日~5日にかけてオンラインで行われた第31回世界コンピュータ将棋選手権(コンピュータ将棋協会主催)に参加しました。 対局に付き合ってくださった方、運営の方、応援してくださった方に感謝申し上げます。 簡単に参加記録を残しておきま…

世界コンピュータ将棋選手権(第31回)のねね将棋の手法リンク

世界コンピュータ将棋選手権に関連してこのサイトへ来られた方のために、今回(第31回=2021年5月)に用いた手法へのリンクを掲載します。 select766.hatenablog.com select766.hatenablog.com select766.hatenablog.com select766.hatenablog.com select766…

汎用行動選択モデルの3vs3対応 part11 行動の強化学習とパーティ生成の交互実行(結果の評価)【PokéAI】

前回、パーティ生成と学習の反復により、各反復で生成されるパーティが定性的に改善されていることを確認しました。 今回は、各反復での学習結果で上位100パーティを抽出し、反復10回分のパーティを混合した1,000パーティでレーティングバトルさせます。反復…

汎用行動選択モデルの3vs3対応 part10 行動の強化学習とパーティ生成の交互実行(学習経過の評価)【PokéAI】

3vs3バトルでの強化学習とパーティ生成の実装が完成したので、1vs1バトルの時と同様、これらを交互に動作させて強いパーティとその適切な運用法を学習します。 実験条件 アルゴリズム自体は1vs1の時と変わりません。 select766.hatenablog.com 反復回数 10 …

汎用行動選択モデルの3vs3対応 part09 Q関数を用いたパーティ生成【PokéAI】

1vs1バトルの時と同様に、強化学習の結果得られる、行動ごとの価値の期待値を表すQ関数を用いて強力なパーティを生成することを試みます。 手法 手法は1vs1バトルの時のものを応用し、3vs3対応のための変更を行います。 select766.hatenablog.com 3vs3対応の…

汎用行動選択モデルの3vs3対応 part08 学習率の調整【PokéAI】

強化学習はアルゴリズムが正しくてもハイパーパラメータ設定により性能が大幅に変わってきます。1vs1バトル環境において、optunaによる調整を行ったところ学習率が最も大きな要素であることがわかりました。 しかしこのパラメータのまま3vs3バトル環境へ適用…

汎用行動選択モデルの3vs3対応 part07 強化学習中の対戦相手【PokéAI】

今回も強化学習の改善を目指します。ポケモンバトルの強化学習の特徴的な要素として、バトル開始時にエージェントに操作すべきパーティが割り当てられるという点があります。バトルごとに異なるパーティが割り当てられ、相手のパーティとの関係性により有利…

汎用行動選択モデルの3vs3対応 part06 学習バトル数と強さ【PokéAI】

モデルの強化学習におけるバトル数は、1vs1の時のパラメータを引き継いで10万に設定していました。3vs3ではそもそもバトル1回あたりのターン数が違うこと、学習すべき行動がより複雑であることから、この値が適切なのかどうか検証しました。 バトル数を10万…

汎用行動選択モデルの3vs3対応 part05 補助報酬の調整【PokéAI】

前回エージェントの強化学習に対して、バトル途中でのHPの増減などに応じた補助報酬を導入し、定量的には強さが向上することを確認しました。 今回は、補助報酬の大きさなどを調整してさらに強くできないか実験します。あらかじめ結果を述べると、前回のパラ…

汎用行動選択モデルの3vs3対応 part04 補助報酬【PokéAI】

前回バトルログを可視化してわかったのは、学習したエージェントの行動でタイプ相性などがある程度考慮されているものの、まだまだ改善の余地が大きいということでした。 この記事から、強化学習手法の改善を試みていきます。 今回は、初代ルールの3vs3のと…

DNNの方策に従来型エンジンのbestmoveをブレンドする コードの動かし方【コンピュータ将棋】

今回の研究用に開発したコードの動かし方と、改良のアイデアを掲載します。私が所持していない、より強力なハードウェアで検証・強化したいという方がもしいらっしゃれば参考にしてください。 記事一覧 DNNの方策に従来型エンジンのbestmoveをブレンドする【…

DNNの方策に従来型エンジンのbestmoveをブレンドする 実装編 part03(終)【コンピュータ将棋】

前回、dlshogiの方策関数にelmoの読み筋をブレンドする実験の結果を示しました。dlshogi同士でこの改造の有無を比較すると改造したほうが強くなるのですが、対戦相手としてelmo単体(dlshogiから呼び出すのではなく、elmoを普通に対局エンジンとして使用する…

汎用行動選択モデルの3vs3対応 part03 バトルログ可視化ツールの作成【PokéAI】

従来、AIによるバトル中の行動を定性的に確認するには、シミュレータの出力する機械向けのログを目視で必死に解読していました。例えば1ターンの進行を表すログはこんな感じです。 | |split|p2 |switch|p2a: Azumarill|Azumarill, L50, M|206/206 |switch|p2…

DNNの方策に従来型エンジンのbestmoveをブレンドする 実装編 part02【コンピュータ将棋】

前回、dlshogiのDNN評価と同時にelmoを呼び出し、bestmoveを取得して利用する最低限の実装をしました。その結果、無改造のdlshogiだと2500nps程度出るところ1900nps程度まで下がるという結果でした。今回はこのnps低下の原因究明と改善を行い、無改造のdlsho…

DNNの方策に従来型エンジンのbestmoveをブレンドする 実装編 part01【コンピュータ将棋】

ブレンドのアイデアを実際の対局エンジンに実装して評価を進めていきます。 dlshogiを改造して実装することにしました。昨日時点の最新版dlshogi cc722f5b2362b0364af063f008a5d922aa8c266eから分岐したこちらのブランチに実装していきます。 GitHub - selec…

DNNの読み抜け例を観察する【コンピュータ将棋】

前回、DNNの方策に従来型エンジンのbestmoveをブレンドすれば読み抜けが減らせるのではないかというアイデアを示しました。 select766.hatenablog.com このアイデアが成立する条件として、DNNで1局面を評価するのと同程度の時間従来型エンジンに手を読ませた…

DNNの方策に従来型エンジンのbestmoveをブレンドする【コンピュータ将棋】

第31回世界コンピュータ将棋選手権の参加申込が始まり、私も久々にコンピュータ将棋の研究を再開しました。 評価関数としてDNNを使い、MCTSで探索を行う将棋AIの弱点として、読みぬけの問題があります。ここで読みぬけとは、DNNが出力した方策で、ほぼ確率0…

汎用行動選択モデルの3vs3対応 part02 単純な学習【PokéAI】

前回提案した、3vs3対応の特徴量を用いて行動選択の強化学習を行っていきます。 パーティ 実験に用いる、3体からなるパーティはランダムに1000個生成しました。各ポケモンの種族・覚える技については過去記事に準拠しています。持ち物なしです。 select766.h…

汎用行動選択モデルの3vs3対応 part01 入出力の拡張【PokéAI】

前回まで、汎用行動選択モデルは1vs1バトルの環境で学習をしていました。今回から3vs3バトルに拡張していきます。 select766.hatenablog.com 9月から着手していたのですが、2020年12月時点では、動作しなくはないが定性的にいまひとつの結果という状況です。…

【ポケモンバトルAI本】技術書典10/エアコミケ2 頒布予定【第3巻無料/物理本あり】

技術書典10は2020年12月26日から2021年1月6日まで開催される技術系同人誌の頒布イベントです。新型コロナウイルスの影響によりオンライン開催ですので、お祭り感のある通販のようなものとお考え下さい。 同時に、エアコミケ2にも出展します。こちらはWebカタ…

ゲーム木探索入門 part03 実験用パーティの選定【PokéAI】

前回に続き、ゲーム木探索の下準備をします。 従来行っていたような、ランダムに生成したパーティ1000個を戦わせるような実験が計算コスト上できない見通しです。ランダムなパーティ同士の対戦だと、ポケモンや技自体の強さが大きく離れている場合が多く、パ…

ゲーム木探索入門 part02 シミュレータのパフォーマンス測定【PokéAI】

今回は、ゲーム木探索の下準備をします。実務上の泥臭い話で、AI的な話は出てこないので適当に読み飛ばしてください。 現在ゲーム木探索のもっとも単純な手法として、原始モンテカルロ法(次回以降に説明)の実装を進めています。処理が非常に重いため実験コ…