TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】ラージカーネルの効果

dlshogiは昨年はほぼ定跡の自動生成しか行っておらず、モデルの改善は後回しにしていた。
定跡の自動生成については、手法がほぼ確立できたので、最近はモデルの改善を行っている。

学習データの質と量を増やして、モデルサイズを大きくすれば強くなっていくという考えで、モデル構造についてはこれまであまり注力していなかった。
しかし、直近の大会でRyfamateがモデル構造の工夫で強くすることに成功しており、モデル構造の工夫も重要と認識を改めた。

Ryfamateの方法

Ryfamateが採用しているモデル構造の工夫は、WCSC33のアピール文書によると、
1. 3x3カーネルの代わりに、9x1と1x9のカーネルサイズの畳み込みを組み合わせる
2. 畳み込みのブロックの代わりに、セルフアテンション(Transformer)層を使う
の2点である。

前者については、Xで詳細が公開されている。

ラージカーネル

コンピュータビジョンの領域では、ViTやSwinTransformerといったTransformerを用いたモデルが従来の畳み込みニューラルネットワーク(CNN)の性能を凌駕するようになっている。
Transformer系のモデルはサイズをスケールしやすいという特徴がある。

一方、CNN系モデルでも、Transformer系モデルで採用された手法を用いることで同等以上の性能が出せることが報告されている。
[2201.03545] A ConvNet for the 2020s

調査で明らかになったのは、Transformerモデルで重要なのは、離れたトークン(画素)間の関連の情報を捉えることができることで、それはCNNでカーネルサイズを大きくすることでも同じ効果が得られるということだ。

CNNには、ローカル(部分的)な特徴を効果的に捉えやすいという帰納バイアスがあり、グローバル(全体)の特徴を捉えるには複数の層を積み重ねる必要がある。
大きなカーネルサイズは、より効率的にグローバルの情報を次の層に伝えることができる。

以前から大きなカーネルサイズが効果的であることは知られていたが、CNNで大きなカーネルサイズが使用されてこなかった理由は、GPU3x3カーネルサイズに最適化されているというパフォーマンス面が理由である。

ConvNextでは逆ボトルネック構造によりチャンネル数を減らして計算量を下げる工夫や、InceptionNeXtではチャンネルを分割して3x3、1x11、11x1のカーネルサイズを並列に計算して計算量を減らす工夫をしている。

Ryfamateで採用している上記1.の手法は、InceptionNeXtと同等の効果を狙ったものと言える。

将棋AIにおけるラージカーネルの効果

将棋AIにおいてラージカーネルがどれくらい効果があるかを実験して確かめる。

3x3カーネルのローカルな特徴を捉えやすいというバイアスも活かして、ResNetのブロックの一部にラージカーネルを導入する。
事前の実験により、入力層に近すぎる位置ではラージカーネルの効果が薄いことがわかったので、4ブロック目以降で一定間隔でラージカーネルのブロックに置き換える。

実験条件
  • 訓練データ約3.9億局面
  • バッチサイズ4096
  • Momentum SGD
  • 学習率0.04からエポックごとに半減
  • 8エポック

2017年~2018年6月のfloodgateのR3500以上の棋譜からサンプリングした856,923局面を評価データとした。

モデル構造

ResNet 20ブロック、256フィルタを基本モデルとして、以下のパターンで比較した。
1. 5ブロック間隔で、ブロックの最初の畳み込みを7x7カーネル
2. 5ブロック間隔で、ブロックの最初の畳み込みを7x7カーネル(depth wise)
3. 5ブロック間隔で、ブロックの最初の畳み込みを5x5カーネル
4. 5ブロック間隔で、Ryfamateと同様の9x1と1x9カーネルを並列にしたブロック
5. 4ブロック間隔で、Ryfamateと同様の9x1と1x9カーネルを並列にしたブロック

結果

条件 方策損失 価値損失 方策正解率 価値正解率
ResNet 1.4413 0.4682 0.5224 0.7580
条件1 1.4314 0.4654 0.5254 0.7603
条件2 1.4433 0.4677 0.5217 0.7582
条件3 1.4344 0.4652 0.5243 0.7605
条件4 1.4329 0.4656 0.5241 0.7598
条件5 1.4334 0.4652 0.5246 0.7601

条件1の7x7カーネルが、方策の精度が最も高く、価値の精度も高いという結果になった。
次に、条件4と5の、Ryfamateと同様の9x1と1x9カーネルを並列にしたブロックの精度が良かった。
条件4と5は大きな違いはなかった。

条件2のdepth wiseの畳み込みは通常のResNetよりも精度が悪くなった。

大きいカーネルの効果が確認できる結果となった。

訓練時間

1エポック当たりの平均訓練時間は、以下の通り。

条件 訓練時間
条件1 8:55:58
条件2 10:40:23
条件3 10:53:31
条件4 9:19:22
条件5 9:02:23
条件6 9:02:29

条件1と2のカーネルサイズ7x7を使用したモデルは、通常のResNetと比較して、訓練時間が約1.2倍になっている。
条件4と5の、Ryfamateと同様の9x1と1x9カーネルを並列にしたブロックは、訓練時間は1%くらいしか変わっていない。

カーネルサイズ7x7は精度が高くなるものの計算量が増えるのと比べて、Ryfamateと同様の9x1と1x9カーネルを並列にしたブロックは、精度と計算量のバランスが取れている。

まとめ

将棋AIにおけるラージカーネルの効果を測定した。
結果、大きなカーネルサイズを使用することで精度が上がることが確認できた。
ただし、大きなカーネルサイズは計算量が増えるため、カーネルを縦と横に分割して並列で計算することで、精度と訓練時間のバランスを取ることができる。

将棋において、角や桂馬の斜めの動きは、縦と横に分割すると捉えにくくなるため、計算量を犠牲にして1層だけ7x7や5x5にするといった構成も検討の余地がある。
また今回は、5ブロックまたは4ブロック間隔でラージカーネルに置き換えたが、入力層側のブロックのみにするなどの条件でも比較してみたい。