tensorflowのC++APIで変数を保存する

前回はtensorflowのC++APIを用いて学習をできるようなコードを書いた。 今回は学習した変数をファイルに書き出し及び読み出しできるように変更した。なかなか難しく、まだ理解できていないところが多い。 書き込み Saveのシグネチャは公式ドキュメントの通り…

tensorflowのC++APIで学習をさせる

matrices.io 上の記事を参考にC++で3層ニューラルネットワークの学習を書いた。2変数の2次形式で表される関数を近似するというプログラムになる。 基本的にはコメントの通りだが、Tensorからデータを取り出す、Tensorにデータを入れる部分に関してはよくわか…

評価関数の追加学習2

前回から自己対局による強化学習を行ってます。今回も前回と同じ条件で引き続き学習を継続させてみました。 以下が学習前のパラメータに対する学習後のパラメータの対局結果となります。 モデル 対局数 勝利 引き分け 敗北 勝率 3回アップデート後 1736 828 …

評価関数の追加学習

前回は入玉対策として手動で適当にパラメータを変更しました。今回はそれを基に自己対局からの強化学習を行ってみます。 100局単位で学習を行い、指数移動平均を取った勝率が55%を超えたら強くなったとしてパラメータをアップデートします。 局面の多様性を…

入玉に関する点数付け

kkp_kpptの特徴量に変えてからいくらか改良をして自己対局をさせているところですが、対局内容を見ていると相手玉を上部に逃がしても駒得だけを考慮して優勢と主張するシーンが多くみられました。まだ宣言勝ち機能を導入していないこともあり、また256手を超…

AtCoder Grand Contest 024 参加ログ

結果 A,B,Cの3完で597位。C問題で7WAも出してしまったのが反省点だけど、簡単めとはいえ700点問題を通せたので個人的には悪くない結果だと思った。 パフォーマンスは1621、レートは1598(+3)で、惜しくも青コーダー復帰とはならず。 思考ログ 解法はほぼ公式…

将棋ソフトの自己対局による強化学習

評価関数の特徴量をkkp_kpptに変更し、駒割のみのゼロベクトルから自己対局による強化学習を行っています。学習用局面をsfenなどで出力することなく、ある程度の対局数を貯めてミニバッチとして更新しています。教師探索深さは3であり、ミニバッチサイズは10…

SIMDを用いて評価関数計算を高速化したかった話

コンピュータ将棋において評価関数を計算する際にSIMDによって高速化する手法が知られています。 基本的には野田さんのブログが詳しいので、深く知りたい方はそちらを参照してください。 今僕が開発している将棋ソフトでは手番なしの絶対2駒(kp, pp)のみを評…

DeepLearningによる将棋の学習12~7ブロック化~

前回はResidualBlockを6個に増やしたら性能が上がることを確認しました。 ならばと今回は7個にして実験してみました。結果は次の通りです。 Epoch Total Loss Policy Loss Value Loss Policy Accuracy Value Accuracy 1 3.6059 3.4564 0.5978 0.2957 0.6376 …

DeepLearningによる将棋の学習11~6ブロック化と対局結果~

前回は現状で最も良いと考えられるモデルで学習させてみました。 今回はResidualBlockを一つ増やして6個として実験してみました。 Epoch Total Loss Policy Loss Value Loss Policy Accuracy Value Accuracy 1 3.1680 3.0230 0.5797 0.3130 0.6512 2 2.7987 …

DeepLearningによる将棋の学習10~現状の最高性能~

前回は損失の比を調整することでPolicyの損失曲線とValueの損失曲線がだいたい同じタイミングで底を打つようにできるのではないかということを実験しました。 今回はそれを踏まえて現状での最高性能を出す条件で実験してみました。 ResidualBlock5つ、フィル…

WCSC28・各チームアピール文書一言メモ

elmo 文字化けしていて読めなかった(・ω・) ダウンロードしたら読めた。定跡を「自己対局→勝敗+評価値を利用して評価」によってうまく作るというのは面白そうな考えですね。ライブラリを複数組み合わせいくのはやはり公開されていることの良さを上手く活か…

DeepLearningによる将棋の学習9~損失比の再検討~

前回の実験ではResidualBlockの実装にミスがあったことがわかりました。Valueの出力を3つ目のブロックから取る実験をしてそのままにしていて、前回の実験は無意味でした。 今回はそれを修正して一番基本的な実装に戻し、一番気になるのが損失の比をいじる部…

DeepLearningによる将棋の学習8~元のモデル~

前回はフィルタ数を変更して実験をしてみました。 今回はいろんな実験をしすぎて情報が取っ散らかってきたように思えるのでここらで一度標準的なものを再実験してみることにしました。 ResidualBlock5つ、フィルタ数192、optimizerはSGD、patienceは10、損失…

DeepLearningによる将棋の学習7~フィルタ数の変更~

フィルタ数を256にして実験してみました。 損失の比が1:1の場合 Epoch Total Loss Policy Loss Value Loss Move Accuracy Value Accuracy 1 3.9012 3.3180 0.5833 0.2844 0.6544 2 3.4626 2.8997 0.5630 0.3194 0.6710 3 3.2766 2.7227 0.5539 0.3407 0.6819…

DeepLearningによる将棋の学習6~全結合型NN~

前回は損失の配分を調整して学習をさせてみましたが思わしい結果は得られませんでした。しかし、これは指し手予測の精度だけを見た場合の話であり、損失について考えると実は良い結果になっているともいえるかもしれないことに記事を書いてから気づきました…

DeepLearningによる将棋の学習5~損失の配分を変更~

前回はフィルタサイズを変更してもうまくいかないことを確認しました。 個人的にはDeepLearningによる学習でValueの学習がなかなかうまくいかないという点が気になっています。マルチタスク学習をさせているので損失は指し手の一致具合とValueの一致具合の和…

DeepLearningによる将棋の学習4~フィルタサイズの変更2~

前回はフィルタサイズを5にして実験してみました。その結果性能は下がり、学習時間も多くなるということがわかりました。単純に考えれば増やしてもダメだということになるのですが、念のため今回はさらにフィルタサイズを7にして実験を行いました。結果は以…

DeepLearningによる将棋の学習3~フィルタサイズの変更~

前回はブロック数を10、optimizerをAdamにして実験してみましたが良い結果は得られませんでした。 今回はブロック数ではなくフィルタサイズを3→5に変更して学習させてみました。ブロック数は5、optimizerはSGD、patienceは7です。下の表が結果となります。 e…

DeepLearningによる将棋の学習2~Adamによる学習~

前回の続き。 patienceを7にしてAdamでもやってみました。 optimizer = tf.train.AdamOptimizer(learning_rate=0.001) 結果は次の通りです。 epoch Loss Move Accuracy Value Accuracy 1 4.4521 0.2929 0.6807 2 4.1956 0.3232 0.6873 3 4.1133 0.3335 0.689…

DeepLearningによる将棋の学習1

山岡さんの本を参考にtensorflowを用いてDeepLearningを用いた将棋ソフトを作ってみています。 将棋AIで学ぶディープラーニング作者: 山岡忠夫出版社/メーカー: マイナビ出版発売日: 2018/03/14メディア: 単行本(ソフトカバー)この商品を含むブログ (1件) …

AtCoderRegularContest095 参加ログ

結果 C,D,Eの3完で112位。後述するがE問題はほぼ不正のような解き方をしている。高順位となったが実力ではない。 今回の結果によって青コーダーになれてしまったが、今後も精進を重ねていかなければいきたい。 C問題 配列Aを違う配列BにコピーしておいてBを…

将棋ウォーズで二段になったので採用している序盤作戦について書いてみた

ウォーズ二段になりました✌ pic.twitter.com/cHmysbJoUD— sako@海底 (@kaitei_shogi) 2018年2月6日 先日将棋ウォーズで二段になりました。将棋を始めたきっかけは電王戦FINALなので、将棋歴は約3年ということになりますね。ちょうど区切りも良いということで…

デレステ・イベント『Trinity Field』 感想

前置き アイドルマスターシンデレラガールズ・スターライトステージにおいて、イベント『Trinity Field』が開催されている。新曲やそのMVなど語るべきことはたくさんあるが、ここではコミュに焦点を当ててみたいと思う。そこに何が描かれており、そして何が…

AtCoder Beginner Contest 079 参加ログ

結果 0WA、56:02で全完の374位だった。C,D問題でしっかり時間かかってしまうのでまだまだ実力不足だ。 A問題 stringで受けて判定するだけ。まぁしかし2分かかった。 #include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; if (s[1] != s[2]) { c</bits/stdc++.h>…

コンピュータ将棋における勾配降下法の最適化アルゴリズム

自分用メモ 勾配降下法を用いてパラメータを更新していくときに、どういった更新式を使えばいいのか気になってきたのでいくつかのソフトについて調べてみた。 ここではニューラルネットワークは除いて、3駒関係や2駒関係の特徴量を使っているソフトに絞って…

CODE FESTIVAL 2017 予選B 参加ログ

結果 A,B問題2完の741位。うーむC問題が解けないのはちょっと苦しいところか。精進が足りない。レート1535→1516(-19) A問題 後ろから8文字を削除するだけ。 #include <bits/stdc++.h> using namespace std; int main() { string S; cin >> S; cout << S.substr(0, S.size() </bits/stdc++.h>…

CODE FESTIVAL 2017 予選A 参加記

結果 A,B,C問題を解いて3完。C問題でかなり手間取ってしまったのが痛かった。時間があってもD問題を解けたがどうかはわからないが、しっかり考えてみたかった。 一応CODE FESTIVALの方にエントリーはしてみているけど、まぁ無理だわな。 A問題 substrで先頭4…

AtCoder Regular Contest 083 参加記

結果 C問題とD問題の2完。C問題で4WA出しながら45分以上かかって無茶苦茶焦ったけれど、なんとか落ち着きを取り戻してD問題まで通せたのは良かった。 Rating:1521→1535(+14) C問題 最初は貪欲法とかでできるのかといろいろ考えていたけど、場合分けが難しす…

AtCoder Regular Contest 067 反省会

C,D問題を通しての2完で322位でした。 レートは1325から1308へ。完全に停滞している。 すっかり忘れててchokudaiさんのツイートを見てからの参加だったので11分遅れでのスタートでした。 こんてすとはじまってるよ!!!— chokudai(高橋 直大) (@chokudai) 2…