2022-01-01から1年間の記事一覧

マイロ将棋(27)教師データの改善結果を確認中

苦戦しています。現在も改善後の教師データを作成し続けていて、50万局面分の改善後教師データが溜まりました。これを使って学習をして、強くなったかの確認をしているのですが、結果が芳しくないです。これまで教師データの作成に使っていたマイロ将棋0.1と…

マイロ将棋(26)教師データの改善結果を確認中

改善した教師データが本当に正しく反映されているのか、そして教師データ改善によって本当に棋力が上がるのかを確認しようとしています。改善後の教師データは改善前と比べて少ししか変えていません。改善前はマイロ将棋0.1で40局対局した結果を勝率データと…

マイロ将棋(25)教師データの改善

教師データの改善に取り組んでいます。教師データを用いての学習を繰り返した結果、誤差が縮まることはわかったのですが、あまり強くならないという問題に悩まされてきました。王手されたら負けを回避し、それ以外はでたらめに指すというマイロ将棋1.0との対…

マイロ将棋(24)過学習発生具合の確認

過学習の発生具合確認を続けています。同じデータでの学習量を増やせば、過学習によって誤差が悪化するはずだと思うのですが、なかなかそうはなりません。10万局面分の学習データを一定量学習した後に入れ替えているので、そこで過学習によって悪化した内容…

マイロ将棋(23)過学習発生具合の確認

過学習の発生具合を確認します。前回までの学習率の確認では過学習の影響を抑えるため、教師データ毎の学習量を少なめにしていました。今回は過学習の状況を確認するため、単位教師データあたりの学習量を増やして誤差がどうなるかを確認してみます。学習量…

マイロ将棋(22)学習率と誤差の減り方

前回、学習率による傾向を確認するため、800万局面分まで学習を進めましたが、それでも違いがわからなかったので、1500万局面分まで学習を進めました。ですが結果は前回とあまり変わらず、学習率の違いによる大きな差は確認できませんでした。しいて言えば、…

マイロ将棋(21)学習率と誤差の減り方

前回、学習率の違いについて調べましたが、0.05、0.1、0.15と3種類実行した結果は大きくは変わらない結果でした。結局、学習率は大きめの方がよいのか、小さめの方がよいのかがまだわからないので、もう少し学習を進めています。そのうち差が出てくるだろう…

マイロ将棋(20)学習率と誤差の減り方

以前、過学習について確認しようとしていましたが、その前に学習率について確認します。これまでのところマイロ将棋では、最適化手法としてSGD(確率的勾配降下法)を使用しています。ディープラーニングでは、教師データを元にパラメータの調整を行いますが…

マイロ将棋(19)ゼロからの再出発

突然ですが、マイロが使用していたPCのディスク(SSD)が壊れてしまいました。一部のプログラムやデータは別のディスクに残っているのですが、大部分のプログラム、データは無くなってしまいました。残念ではありますが、これを機に、新たにコンピュータ将棋…

マイロ将棋(18)CNN(持ち駒分離ResNet1)過学習

グラフを見ていて気付いたのですが、どうやら過学習を起こしているようです。以下は前回の結果を一部拡大したグラフです。この学習は10万局面分のデータ毎に行っていて、横軸の数字5、6、7・・・と書かれているところが学習データの切り替えタイミングにな…

マイロ将棋(17)CNN(持ち駒分離ResNet1)

前回の続きです。前回、100万局面分の教師データを使って持ち駒分離と持ち駒分離ResNet1の誤差の減り具合を比較しました。ですが、あまり違いが判らなかったため、もう100万局面分の教師データを使って、合計で200万局面分の教師データで学習を行いました。 …

マイロ将棋(16)CNN(持ち駒分離ResNet1)

持ち駒分離モデルにResNetの層を追加します。これまでの結果でCNNだけでも通常のニューラルネットワークに比べて学習の効果が高まることを確認しました。ですが2015年にMicrosoft Researchにより提案されたResNet(Residual Network、残差ネットワーク)の考…

マイロ将棋(15)教師データの改善 王手局面の除外 全結合

全結合でも王手局面を除外した教師データで学習してみました。 全結合では王手局面を除外した教師データで学習をしても勝率に大きな差は出ませんでした。持ち駒分離の方が王手の効果をより強く学習し、全結合は王手局面の効果をそれほど強くは学習しなかった…

マイロ将棋(14)教師データの改善 王手局面の除外 持ち駒分離

学習を進めていくと無駄な王手が増えてしまうことへの対処として、教師データの改善を考えます。本当はより強いモデルで教師データを作れば自然と解消されると思うのですが、データ作成時間の問題もあり、すぐにはできないので、別のやり方を考えます。現状…

マイロ将棋(13)CNN(持ち駒分離) 対 マイロ将棋1.0

全結合とCNN(持ち駒分離)モデルとマイロ将棋1.0を対局させ、強さを比較しました。全結合よりは少し上回っていますが、マイロ将棋1.0に対してはまだまだです。 CNN(持ち駒分離) 対 マイロ将棋1.0 対局の様子を眺めていると、持ち駒分離モデルが無駄に王手…

マイロ将棋(12)CNN(持ち駒分離) 対 マイロ将棋0.1

全結合とCNN(持ち駒分離)モデルをマイロ将棋0.1と対局させて強さを比較しました。全結合でもマイロ将棋0.1には圧勝していましたが、CNN(持ち駒分離)モデルではさらに勝率が高くなり、マイロ将棋0.1にほとんど勝っています。ただ惜しくも全勝には至らず、…

マイロ将棋(11)CNN(持ち駒分離)の学習結果

CNN(持ち駒分離)の学習結果として、誤差がどのくらい縮まるのかを見ます。100万局面単位で処理すると時間が掛かりすぎるので、ここからしばらくは10万局面単位で100万局面(学習回数1000回)程度までの結果を確認します。全結合のモデルでは1000回学習した…

マイロ将棋(10)CNN(持ち駒分離)

CNN(コンボリューショナルニューラルネットワーク、畳み込みニューラルネットワーク)を用いたモデルで学習をします。CNNは特に画像認識の分野で力を発揮し、近年のディープラーニングのブームを作るきっかけになったものと言ってもいいと思います。アルフ…

マイロ将棋(9)マイロ将棋1.0

マイロ将棋0.1は弱すぎるので、指標となる思考ルーチンをもう一つ用意します。マイロ将棋1.0です。駒の動かし方はマイロ将棋0.1と同じく、取れる駒があれば取る、それ以外はランダムです。それに加えて、自分の王を取られる手を選択しないというルールを取り…

マイロ将棋(8)全結合 対 マイロ将棋0.1

学習回数1000回に達した時点のモデルを用いてマイロ将棋0.1と対局し、強さを比較しました。300手指した時点で決着が着かない場合は再戦するという方法で計測しているので引き分けはカウントしません。結果は、1000局対局してマイロ将棋0.1が108勝、全結合の…

マイロ将棋(7)全結合の学習結果

全結合のモデルでも駒の種類毎に入力情報が分かれるので、自分の駒が多ければ有利、相手の駒が多ければ不利ということは学習できるはずです。以下グラフは教師データを使って、全結合のモデルで学習を行った結果です。少しずつですが、学習回数が増える毎に…

マイロ将棋(6)全結合

作成した教師データを元に学習します。まずはディープラーニングの基本ともいえるニューロンを全結合したモデルを使います。マイロ将棋で使っている教師データは盤面の情報を2296個のデータで持っています。将棋の駒の種類は歩、香、桂、銀、金、角、飛車、…

マイロ将棋(5)検証データ

機械学習では教師データを元に学習を行いますが、正しく学習できているのかとか、どのくらい学習が進んでいるのかを確認するために検証データというものを使います。教師データと同じようなデータを別に用意し、このデータは学習には使いません。そしてある…

マイロ将棋(4)学習のさせ方

マイロ将棋での教師データは、盤面(と持ち駒)の情報とその局面の勝率です。この教師データを使って、ニューラルネットワークのモデルを学習させ、様々な局面の勝率を予測できるようにします。 ディープラーニングの学習を行う部分は、ありがたいことに自分…

マイロ将棋(3)マイロ将棋0.1

学習用の勝率データを作成するために、簡易的な思考ルーチンで指す将棋プログラムを使っています。この思考ルーチンでは、取れる駒があれば取る、無ければ指せる手の中からランダムで手を選択します。自分の手番で相手の王を取れる時は必ず王を取りその手番…

マイロ将棋(2)コンピュータ将棋の作成方針

ディープラーニングでできること自体はとてもシンプルです。大まかには、分類問題と回帰問題の学習に分かれます。分類問題は手書き文字認識のような入力された情報がどのパターンに分類されるものかを当てる問題、回帰問題は住宅物件の価格予測のような、結…

マイロ将棋(1)はじめに

こんばんは!マイロです。 3年前から将棋のプログラムを作り始めました。我が家では、マイロ将棋と呼んでいます。Pythonを使って作っています。マイロ将棋を作ろうとしたきっかけは、ディープラーニングを用いたソフトの出現です。2016年にディープマインド…

初めまして!マイロです!

初めましてマイロです。ブログの練習も兼ねて、主に将棋のプログラムなどのプログラミングの記事を書きます。よろしくお願いします!