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

iPhone 15 Proの有線LAN接続検証

世界コンピュータ将棋選手権では、対局に使うコンピュータを会場の有線LAN(Ethernet)に接続する必要があります。 普通のパソコンであれば難なくできる作業ですが、スマートフォンを有線LANに接続するのはあまり一般的な作業ではありません。 私が対局に利用…

iPhoneで将棋AI大会に出るときのヒヤリハット(電竜戦)

第4回世界将棋AI電竜戦本戦(2023年12月2日~3日)に将棋AI「ねね将棋」で出場しました。ほとんどの参加者はパソコンかクラウド計算機上で将棋AIを動作させる中、ねね将棋はiPhone上で動作させるというユニークなソフトです。 ソフトの概要や電竜戦参加の記録…

第4回世界将棋AI電竜戦本戦の結果(2023/12/02)

NPO法人AI電竜戦プロジェクト主催 第4回世界将棋AI電竜戦本戦 に将棋AI「ねね将棋」で参加しました。電竜戦は、オンラインのコンピュータ将棋AIの大会です。 将棋AIは通常パソコンやクラウド計算機上で動作させますが、ねね将棋は携帯端末上で動作する点がユ…

【ゲームボーイ強化学習本】技術書典15 頒布中

技術書典15は2023年11月11日から26日まで開催される技術系同人誌の頒布イベントです。当サークルはオンライン頒布(通販)のみです。 当サークル「ヤマブキ計算所」は技術書典15に出展します。新刊「ゲームボーイに強化学習を実装してみた」を頒布します。19…

ゲームボーイ上で強化学習を行う part8

前回、ソフトが完成しました。今回は実機動作確認です。 ゲームボーイ実機で動作させる せっかくゲームボーイソフトを開発したので、エミュレータ上だけでなく実機でも動作させてみたいです。そのためには、パソコンから書き込めるカートリッジが必要です。 …

ゲームボーイ上で強化学習を行う part7

実装 Q学習とアニメーションの共存 Q学習でQテーブルを更新すると同時に、最新のQテーブルに基づいて車が運動するアニメーションを表示する実装を行います。課題は、学習と表示をどのように並行動作させるかです。もっとも単純に学習過程を表示する方法は、…

ゲームボーイ上で強化学習を行う part6

前回、画面表示に必要な機構を準備しました。今回は車のスプライトを動かします。 実装 学習済みQテーブルの実行 スプライトの動きの実装に集中するため、まずはPCで学習したQテーブルを用いて車の運動を計算し、うまく坂を上るアニメーションを実現します。…

ゲームボーイ上で強化学習を行う part5

実装 グラフィックの実装 前回作成したアセットを画面上に表示するための実装は、以下のようにして行えます。 #include <gb/gb.h> #include <gbdk/console.h> #include <gbdk/platform.h> // .cをincludeする。sizeof()を使いたいため。 #include "bg.c" #include "bg_map.c" #include "sprite.c" // VB</gbdk/platform.h></gbdk/console.h></gb/gb.h>…

ゲームボーイ上で強化学習を行う part4

前回、Q学習のアルゴリズムをゲームボーイ向けビルドしました。今回は、学習した車の動きを画面に表示するための実装を進めます。 実装 ゲームボーイのグラフィックシステム ゲームボーイの画面は幅160px、高さ144pxの液晶です。色はモノクロで、白、明るい…

ゲームボーイ上で強化学習を行う part3

前回、浮動小数点数演算を使わないQ学習アルゴリズムを実装しました。次にこれをゲームボーイ用にビルドしていきます。 実装 Q学習をゲームボーイ用にビルド ゲームボーイ用のmain関数は以下のようになります。PC版との違いは、乱数シードの設定関数がinitra…

ゲームボーイ上で強化学習を行う part2

前回の続きです。前回はQ学習をPC上で動作させ、適切なハイパーパラメータを取得しました。 実装 浮動小数点数演算を回避する 先述のプログラムでは浮動小数点数(double型)の演算を用いていましたが、GBDKのCコンパイラではこれをサポートしていません。ゲ…

ゲームボーイ上で強化学習を行う part1

ゲームボーイは1989年に発売された携帯ゲーム機で、現代では非公式ながら個人でもゲームソフトを開発することができます。そこで(!?)、ゲームボーイ上で強化学習を行うソフトを試作しました。 レトロなゲーム機と言えど任意のコードが実行できる計算機で…

iPhone15Proの冷却とNeural Engineの速度について

Neural EngineによるDNNの推論を連続して行った際に、発熱などの影響により時間が経つにつれ処理速度が低下する現象がみられます。将棋AIの大会にiPhone 15 Proで出場することを想定し、iPhone 15 Proで使えるスマートフォン用冷却ファンを購入したので、冷…

iPhone15ProでNeural Engineのベンチマーク(将棋用CNNモデル)

2023年9月22日、iPhone 15 Proが発売されました。新しい計算機を手に入れたらやることと言えばニューラルネットワークのベンチマークですよね。Apple独自開発の機械学習専用チップNeural Engineのベンチマークを行いました。使用した深層学習モデルはdlshogi…

【CodinGameオセロ】DNNの推論器の独自実装

前回、AlphaZero方式でモデルの学習が実現できました。しかしモデルの推論にTensorflowを用いていたため、CodinGameに投稿できるコードになりませんでした。ここからは、C++言語だけでモデルの推論ができるように実装を進めます。 C++言語からDNNモデルを推…

【CodinGameオセロ】棋譜生成と学習のループ

準備が整ったので、AlphaZero方式の強化学習のコアを実装します。 ソースコードはこのバージョンです。 https://github.com/select766/codingame-othello/tree/826d5aa02298d07ca088969bdd8f10c3ca2e8c3f 必要なモジュールは2つです。(1)自己対戦により棋譜…

【CodinGameオセロ】並列対局を想定したMCTSの実装

AlphaZero式の強化学習において、学習データを作成するために必要なMCTSの実装を行います。 現時点のコードのバージョンはこちらです。 https://github.com/select766/codingame-othello/tree/826d5aa02298d07ca088969bdd8f10c3ca2e8c3f AlphaZeroの学習サイ…

第4回電竜戦TSEC指定局面戦の結果(2023/06/30)

NPO法人AI電竜戦プロジェクト主催 第4回電竜戦TSEC指定局面戦 に将棋AI「ねね将棋」で参加しました。この大会の特徴は、通常の初形からの対局開始ではなく、主催者が指定した局面から対局が開始するという点です。コンピュータ将棋ではあまり登場しない相振…

ユウカなりきりLINE Botを作った

技術書典14で発刊された書籍「LINE Botをつくってみよう ~APIを試して学んでしっかりわかる~」をなぞってLINE Botを作りました。ユーザの入力に対してChatGPTを使って応答を生成するのですが、書籍ではユーザの入力をそのままChatGPT (API)に流し込むだけ…

【コンピュータ将棋】賞金をいただきました

2023年5月3日に行われた世界コンピュータ将棋選手権にて、私のソフト「ねね将棋」が賞金を頂きました。 ねね将棋は部門「TMOQ(特大もっきゅ)様 提供 :ノートPC単体やタブレット単体での参加者の中で最上位者(TMOQ(特大もっきゅ)様本人を除く)」に該当し、賞…

第33回世界コンピュータ将棋選手権の結果(2023/05/03)

2023年5月3日~5日にかけて開催された第33回世界コンピュータ将棋選手権に参加ソフト「ねね将棋」で参加しました。 今回のねね将棋はiPad上でNNUE型(計算コストの低い評価関数で大量の局面を読む)とDL型(計算コストの高い評価関数で少量の局面を読む)の…

iPadでやねうら王とふかうら王を同時に動作させる 標準入出力衝突回避編

やねうら王・ふかうら王を1つのプロセスで動作させるための課題として、前回はシンボル名の衝突に対処しました。今回は、標準入出力の衝突に対処します。 以前、やねうら王単独のビルドにおいてC++の標準入出力(cin/cout)をTCPソケットにリダイレクトし、端…

iPadでやねうら王とふかうら王を同時に動作させる シンボル名衝突回避編

以前、iPadでやねうら王やふかうら王を動作させるためのビルド手段を構築しました。今回は、これらを同時に動作させることに挑戦します。やねうら王(NNUE評価関数)は主にCPUを利用し、ふかうら王(DL評価関数)は主にNeural Engineを利用して思考するため、同…

【CodinGameオセロ】DNNの方策だけで打つAIの実装

前回、DNNを教師あり学習しました。今回は学習したモデルをAIの探索に組み込みます。まずは、局面の先読みをせずに方策(policy)の出力をそのまま打つAIを実装します。 今回の時点のコードです(前回記事と同じ) https://github.com/select766/codingame-oth…

【CodinGameオセロ】アルファベータ法による指し手を用いたDNNの教師あり学習

今回から機械学習に入ります。まずは、アルファベータ法で実装したAIを用いて棋譜を生成し、それを用いてDNN (Deep Neural Network)を教師あり学習することを試みます。 ソースコードのバージョンは以下の通りです。 https://github.com/select766/codingame…

【CodinGameオセロ】ソースコードの分割と自動連結

前回までで、評価関数を開発しない範囲でランダムより強いAIを実装してきました。機械学習に入る前に一点だけ改良を加えておきます。それはソースコードの分割です。ソースコードが1000行に達しており、1ファイルに記述し続けるのは見通しが悪い状態になって…

【CodinGameオセロ】ビットボードの実装と合法手生成のテスト

前回、アルファベータ法+石の数による評価によってランダムよりは強いAIを実装しました。ただし、合法手生成速度が遅く、CodinGameの制限時間内では深さ5までしか読めませんでした。アルファベータ法のAIそのものは最終的に使わないため速度はあまり重要で…

【CodinGameオセロ】アルファベータ法による探索

前回は、局面を合法手で1手進めたときに、最も多くの石をひっくりかえせるような手を選ぶというGreedyなAIを実装しました。しかしランダムプレイヤーに対して勝率63%程度となり、あまり強いとは言えません。機械学習を導入したいのですが、最初は強化学習で…

【CodinGameオセロ】GreedyなAIと自己対局

前回は、盤面の情報を格納し、合法手を列挙してくれる盤面クラスを作りました。まずは、機械学習なしに簡単に作れるAIを作っていきます。これを作る理由は、機械学習で作ったAIを評価する際の対戦相手とするためです。機械学習を用いたAIは、学習データを用…

【CodinGameオセロ】環境構築と盤面クラスの実装

これからCodinGameで動くオセロAIを作っていきます。まずは、環境構築と盤面クラスの実装です。盤面クラスは、オセロの盤面をプログラム内で表現し、合法手(その時点で石を打てる場所)を列挙したり、選んだ手で局面を次に進めたりする機能を持つもので、ゲ…