コンピュータ将棋

最終層を8chにしたネットワークの学習

前回に考えたように、時系列モデルに表現を突っ込む際には1次元化して投入したくなる。CチャンネルだとしてC×9×9の要素数になるため、そこまでCを大きくはできない。具体的にはC=8くらいを想定している。 C = 8として学習する際に、方法としては ResNetを通…

常に先手側から盤面を見る場合の精度確認

要約 常に先手側から盤面を見るようにするとややレートは落ちるがある程度やれる。 背景 今のところ、手番ごとに(1)盤面を180度ひっくり返したり、(2)手駒の入力順番を入れ替えたりして、常に手番側から見るように入力特徴量を作成している。こうすることの…

Twohotエンコーディングを試す

要約 Value分布の学習にTwo-hotエンコーディングを試してみたけど特に明確な効果はなかった。 背景 を読んでいたところ、Criticの学習でtwohotエンコーディングをすると書いてあった。 これ自体はこの論文の新規性というわけではないはずで、実際に33から36…

雑記(ViTをSサイズまで学習した・Weight Decay大きくすると最後に効く)

ViTをSサイズまで学習させた SサイズというのはScaling Vision Transformersに従った分類。 将棋だとパッチ分割のサイズは関係ないので要約すると以下のサイズ。 対局結果 手元の2080tiマシンで計測。vs水匠5(4Thread)、1手1秒 モデル NPS Policy損失 Value…

雑記(ViT対局・INT8-FP16調査など)

ViT対局させた 初期局面から100戦しかやってないので参考程度だが、明らかに弱かった。vs水匠5。 Google Compute Engine環境での対局 Intel(R) Xeon(R) CPU @ 2.30GHz 4Thread GPU : T4 time(Miacis) = 1000msec, time(水匠5) = 250msec 結果 モデル Policy…

ResNetとViTの弱点局面比較

前書き ViT(sサイズモデル)の学習が進行中である。予定していた最大学習ステップ数の1/5程度をこなし、やや収束の気配が見えてきたので一度このタイミングでお試し評価を行ってみる。また今回は単に検証損失を全体で計測するだけでなく、個別の局面につい…

雑記(ViT実験など)

ViTについての実験をいくつか。 10ブロック、256chを長期学習 Google Colab Pro+を使って7日かけていつもの10倍、1.6Mステップ回した。 左: Policy損失 右: Value損失 Policy損失はResNet(20ブロック・256ch)より良くなる。Value側がひどい。 速度差もある…

20ブロックでの学習

前回は10ブロック・256chの、今まで基本的に用いてきた大きさのネットワークで軽く学習を回した。 正月休みの時間があったため、今回は大きめのResNetで使用データ数も多くして学習を回した。 前回との学習の差分 項目 前回 今回 備考 ネットワークの大きさ …

ネットワーク構造予備調査

前回の記事の通り、データセットの充実により教師あり学習でも十分な性能を出せるようになった。このため、CNNがスタンダードとなっているネットワーク構造についても再考ができるかもしれない。 巨大データセットを用いて巨大なモデルを学習させるというの…

『強い将棋ソフトの創りかた』データで学習

以下の本を読みました。 強い将棋ソフトの創りかた作者:山岡忠夫,加納邦彦マイナビ出版Amazon コンピュータ将棋でも深層学習+モンテカルロ木探索という構成の強力さが明らかになっている最中だと感じていますが、その最先端へ一気にキャッチアップするための…

合法なラベル数の計算

前回、検証データにおいて1回でも出現する出現するラベル数を記録したところ、1411種類だとわかった。 ネットワークの出力の都合上、2187クラスとしてクラス分類を行っているが、その中には将棋の指し手としてあり得ないものもある。 今の指し手ラベル構築方…

Policy正解ラベルの偏り調査

深層学習系の将棋ソフトでは主にPolicyを教師あり学習などで訓練する。しかし、将棋を普通にプレイしている上で出やすい手と出にくい手があると考えられ、正解ラベルにはクラスごとの偏りが大きくあると思われる。今回はその偏りについて調査した。 ラベルの…

Transformerで将棋の学習

最近Transformer(ViT)モデルで教師あり学習をやっていたところ、損失値についてはCNNと近い程度の低さが出せるようになってきたので記事としてまとめておく。 (※ 教師あり学習での損失値を比較しているだけなので、CNNより強いという主張をしているわけでは…

重み共有40ブロックモデルの学習

ここのところeasy-to-hard論文の再現に執着している。 重み共有をしたResNetで、「学習時のループ回数よりも検証時のループ回数を大きくしたときに、学習データにはないような難しい問題に対する正答率が上がる」ということを主張している論文である。重み共…

教師あり学習 + 強化学習

要約 教師あり学習(300万ステップ)の後に強化学習(10万ステップ)を行うことでR+50.5、さらにもう一度強化学習(10万ステップ)を行うことでR+61.9。floodgateでレート3800ほどになった。 学習の全体 ランダムパラメータから始めて、以下の3つをこの順に行った…

ランダムパラメータからの強化学習

TensorRTなどの高速化も導入したので、ランダムパラメータからの強化学習をやり直した。 実験設定 いつも通り、細かい差異はあれど基本的にはAlphaZeroと同様の設定。 使用パソコン CPU:Intel Core i9-9900K @ 3.6GHz(8core 16thread) メモリ:32GB GPU:RTX 2…

Post Training Quantization(PTQ)の導入

要約 PTQ(要するにINT8演算)の導入でR+30程度 実装 ニューラルネットワークは基本的に浮動小数点演算(FP32)を用いている。今までは半精度浮動小数点演算(FP16)により高速化を行っていたが、Post Training Quantization(PTQ)という、FP32の範囲を絞ってINT8の…

dlshogi(GCT)との比較〜その2〜

要約 現状のMiacisとdlshogi(GCT:電竜戦ver)とのレート差約300の内訳は 評価関数の差で約200 探索速度の差で約100 と予想。 損失計測 前回とほぼ同様の設定で、floodgateの2015年の棋譜だけでなく2016年から2020年までの棋譜それぞれについて損失を計測した…

TensorRTの導入

要約 TensorRT(TRTorch)を導入したことでNPS約1.3倍、R+70ほど。 実装等 前回、同じデータについてMiacisとdlshogiの評価関数を比較した結果、そこまで精度に差がないのではないかという結果が得られた。この結果が正しいとすると、棋力の差は探索速度や効率…

dlshogi(GCT)との損失比較

同じデータに対して評価関数の性能比較を行った。 使用データはfloodgate2015年の棋譜(リンク内のwdoor2015.7z) であり、以下の条件でフィルターをかける。 手数が60手以上 対局両者のレートの大きい方が3000以上 終了状態が%TORYO, %SENNICHITE, %KACHIの…

Sharpness-Aware Minimizationの検証

Sharpness-Aware Minimizationという手法が提案されています。 詳しい人が説明してくれています(僕もこれで知りました)。 上記事の パラメータ周辺での最大の損失を求めて、それが下がる方向でパラメータを更新する というのが基本的なコンセプトでしょう…

256chでの教師あり学習

普段使っているネットワークがそこまで大きくはないのでもっと大きいネットワークを試したいと思って実験したが、ブログを見るとほとんど同じような実験を以前にもしていた。自分で書いた記事を自分で忘れている。 上の記事と同様に、普段128chである残差ブ…

教師あり学習をした後の強化学習

カテゴリカルモデルで教師あり学習をすると勝ち負け引分に相当する値の領域にしか教師信号が発生しないため分布が有効活用できない問題がある。 先の実験はCategoricalモデルでやったものなんですが、CategoricalモデルのValueを最終的な勝敗から教師あり学…

AobaZeroの棋譜を用いた教師あり学習 192ch

今回は普段128chである残差ブロック中のCNNを192chに増やして学習を行った。 学習結果 左:Policy損失 右:Value損失 どちらも学習損失では192chの方がやや良いのだが、検証損失ではそこまで差が出ていない。 学習時間はやや長くなり45時間、約二日であった。 …

Miacisを用いた教師あり学習の実行手順

AobaZeroの棋譜を用いて学習し、floodgateの棋譜を用いて検証する場合を説明します。 前提 Ubuntu 18.04でのみ検証ができています。おそらくUbuntu 16.04や20.04でも大丈夫だとは思いますが、未検証です。Windowsでも最近のWSL2やDocker for Windowsでできる…

AobaZeroの棋譜を用いた教師あり学習

前回、AobaZeroの棋譜を取得できるようになった。floodgateの棋譜についてもダウンロードスクリプトを整備し、実験手順を再現しやすいように仕組みをやや変えたので教師あり学習をやり直すことにした。 棋譜について floodgateの棋譜(いつも通りの設定) 20…

AobaZeroの棋譜をコマンドラインからダウンロードする

ありがたいことにAobaZeroの学習データはGoogleドライブで公開されている。 Dockerコンテナ内などコマンドラインしか使えない環境でもダウンロードできるようにシェルスクリプトを作成した。 最終的なシェルスクリプト これと同階層にAobaZero_kifuID.csvを…

128チャンネルで1ヶ月学習(2回目)

5月の世界コンピュータ将棋オンライン大会が終わってから、実験サイクルを早めるため学習は64チャンネルのネットワークで行っていた。しかしlibtorch1.5.0版に対応した影響で後方互換性がなくなり、すぐ動かせる強いパラメータが手元ないと細かい動作の検証…

学習スレッドのスリープ時間と学習速度の関係

現状では少ない計算資源の下でできるだけAlphaZeroの設定に近づけるために、学習スレッドは1ステップごとに定数時間のスリープ時間を入れて、学習量に対して生成量が十分になるように調整している。スリープ時間をどの程度にすれば良いのかを決めるため、今…

教師あり学習での実験いろいろ

要約 cosine annealing : 学習率一定よりは良さそうだが、適切なタイミングで1/10する場合よりも良いかというと微妙そう。しかし適切なタイミングを調べるのも大変なので、その手間を省くという意味では有用か dropout : Value損失は改善するがPolicy損失は…