WCSC28終わって

これは「第28回世界コンピュータ将棋選手権」にて、
取り組んだことを「私の視点」から書いた日記的なもの。
(さらに前の開発経緯とかはコチラ)

はじめに


「クジラちゃん2」を応援してくださった方、クラスタに参加してくださった方、ありがとうございました。

「第28回世界コンピュータ将棋選手権」に参加された開発者のみなさま、お疲れ様でした。

優勝された「Hefeweizen」チーム、おめでとうございます。

私が参加させて頂きました「クジラちゃん2」は、残念ながら決勝リーグ6位という結果となりました。

大会前は終わったらいろいろ書こうと思ったのですが、結果が結果なので他の開発者や、これから将棋ソフトを開発されるかもしれない人に向けて少し書こうと思います。

一緒に開発したチームメンバー「k_ohga」氏の感想も合わせて読むと、ちょっと面白いかもしれません。

評価関数


まず私が2月9日にベースとなる評価関数を作ってみました。

手持ちの教師局面「depth6」を70億局面程度と、
実験用に生成していた「depth6」で作った定跡学習の30億。
※もしAWSスポットで作成すれば2万円程度で作成出来るはずです。

実験用30億局面の内訳は
10億・・・木村義雄(十四世名人)
10億・・・大山康晴(十五世名人)
10億・・・升田幸三(称号としての実力制第四代名人)

上記を定跡学習で生成し、シャッフルして学習すると棋風が
中原誠(十六世名人)になりました(なんか歩を突くタイミングとか)

棋力は「やねうら王v4.80+aperypaq」相手に400局で勝率43%程度でした。
とりあえずコレを投げて、私は定跡作成に移行しました。


同時に「k_ohga」氏が評価関数を作成していて、
対局した棋譜を見て私がポロっと一言
「この評価関数、角換わりがすごい強いですね」と言ったことがありました。

すると数日後に、あのときの一言を真面目に拾ってくれていたみたいで、
ピンポイントで駒指定し、それに関わる評価パラメタを移植するプログラムを作成し実験的に評価関数を作成していました。
(↑のコードは間違っているかも?正確には探索部DL先のソースコードを見て下さい)

これがいきなり強くなっていて
「やねうら王v4.80+aperypaq」相手にほぼ互角となっていました。
(正直R4100付近の勝率が7%も上がるって、相当やぞって思いました)

レートが上がった理由を私なりに検証した結果
2月9日に作成したベースとなる評価関数は定跡学習により
1)人間の棋風(個性)がモロに出ていたため、探索部の枝刈りの影響をすさまじく受けていたという点。
2)角換わり局面が現代と大きく異なり、その評価パラメタが不足していた。
※特に角換わり腰掛け銀の「4八金+2九飛」型のようなバランス型評価パラメタ


この成功を持って、「k_ohga」氏がなんか黙々と改良していたようで、
気がついたら3月10日には
「wakame1st」と「aperypaq」に勝ち越すような物が出来ていました。
(ホントに聞いて無いけど、たぶん「k_ohga」氏はここまでするのに、評価検証等でAWS課金を20万円くらいしてると思う)

この評価関数がすっごい面白くて、
居飛車が「wakame1st」と「aperypaq」に勝ち越すのに、
振り飛車やりやがるんですよ!

振り飛車を始めたロジックは「後手の雁木が否定」され
そんな戦法するくらいなら飛車振るワイ!って感じでした。

なので、初手2六歩、3四歩、2五歩、3三角、7六歩、4四歩
と後手が角道を閉じてから雁木を選択せずに、飛車を振るので
1)後手ノーマル四間飛車
2)後手ノーマル三間飛車
3)後手向かい飛車
4)後手藤井システム
を自発的に使い始めました。

なぜか中飛車はしませんでした。(駒組みが金の邪魔になるから?)
あとは後手藤井システムが2ルートに進化していました。

めちゃくちゃ面白くてね、2週間も遊んじゃいましたよ。
(チームメンバーはきっと定跡を作っていると思っているときに。いや、ここは未来の対振り定跡を考えていたんだ)

それで「こいつ振り飛車しますね~」とか言ったんですけど、
またもや「k_ohga」氏がそのときの一言を真面目に拾ってくれていたみたいで、
depth10の振り飛車教師局面を30億局面程度生成し学習してました。
※もしAWSスポットで作成すれば10万円程度
(だ・・・だいじょうぶか?お財布的にって思ってました)


そして最後に、大会2週間前くらいで突然「k_ohga」氏が
「もう一回学習する!」と言い出して。

※私は知らなかったんですが、クラスタのテスト対局中に
4コア「aperypaq」相手に1700スレッドとかで負けたりしてて、
テスト参加のクライアント接続者から「弱い」「弱い」と言われたことで火が付いたとかなんとか。

私は内心(えっ?えっ?急にどうしちゃったの?)とか思ってたんですが、
「えびふらい」氏が「実際どのくらい強いんですか?」とか、さらに火に油を注ぐマネをっ!
(おぃいい。「k_ohga」氏がどれだけ苦労したと思ってるんだよぉお。AWS使ってスゲー数を評価対局してたじゃねぇかよぉお。)

そんなこんなで「depth8で教師局面100億作る!」とかの状況になりました。
※もしAWSスポットで作成+学習+評価すれば10万円程度

いやしかしね、すでに「wakame1st」と「aperypaq」を超えてるんですよ。
十分最善は尽くしてるじゃないですか。
それに大会まであと2週間くらいですよ。
Aperyのアピール文書とかにも、あれだけ強いApery-sdt5から、
「depth10で教師局面100億程度」追加学習したけどあんま変わらなかったって言ってんじゃん。
そんな中「depth8で教師局面100億局面」追加学習して強くなる確率って何%?
99%無理じゃね?
しかもお金だってかかるし、失敗したらすっげー雰囲気悪くなるだろうなーとか思いましたよ。

でもチームメンバーが全力出すって言ってるんだから、こっちも本気出すよ。
ってことで急遽「大会用定跡から学習用定跡を作成」
「この設定で教師局面を作って下さい」
「この設定で学習してみて下さい」
ってめちゃくちゃ口だけ出しましたよ。(いや学習はチョットやったよ)

結果は成功!
いや~。変な所で山場を迎えたよね。ほんと。

そんなこんなで出来上がったのが
 ▶大会で使用した評価関数(qzilla9) です。
※この評価関数が出来るまでに「k_ohga」氏のポケットマネーが50万円くらい飛んでいるんですよ。大会の結果悔しかったなー。「k_ohga」氏は何かで報われてほしい。

探索部


こちらは「k_ohga」氏がほぼ一人でやってくれたので、本人の記事を見て下さいとしか。

「やねうら王開発者」が大会前にStockfish9を取り入れてさらに改良した
v4.81→v4.82との対局結果等も掲載しています。

▶大会で使用した探索部です。
※この探索部にたどり着くまでに大会時最新だった「やねうら王v4.82」と
同様のStockfish9の取り込みはだいぶ前に、評価、改良、試行錯誤を繰り返した結果がコレです。
探索部はライセンス:GPL-3.0(やねうら王v4.80を改変)
改変ソースコードはこちら
当然AWSでやった分「k_ohga」氏のポケットマネーが数十万円飛んでいると思います。

定跡部


これにつては私がいつも通り作成させて頂きました。
今回はゼロから作り直したので、たったの7MBしかありません。
「相掛かり」と「角換わり」しか入れてませんでした。

大会時、特に印象に残った対局は別ページに書きたいと思います。

クラスタ部


一般ユーザーが参加する「スレーブ部」は上記の「探索部」になります。

「スレーブ」が読んだ指し手を管理するサーバー側の「マスター部」は、
「えびふらい」氏がメインに「k_ohga」氏と改良しました。

私は個人的に気になった部分を指摘していただけになります。

開発者の「えびふらい」氏がソース公開していないので、あまり多くは書けませんが、
以下私が気になって指摘した部分。

1)サーバー側で指定する指し手がおかしい
 WCSCのクジラチームアピール文書にも書いていますが、まずクジラクラスタの仕組み的に、ある時間で読んだ指し手を最善手から並べ替えて、良さそうな手ほどたくさんのPCで読みなさいとサーバーが指示を出し、スレーブが読んでサーバーにまた返してと、何度も通信でやり取りしつつ深く読んで行きます。
 この時間があまりに短いので、もっと長くしてはどうか?と提案しました。
 しかしながら大会持ち時間が10分+1手10秒加算といったルールから、256手で割ると平均1手14秒程度となります。
 これらの問題から、この時間を長くすると、やり取りする回数が減るので深く読めなくなります。
 結果、変更しませんでした。
 ※個人的にはそんな浅い探索で読んだ疑問手ばかり深く読ませて、本当に最善手にたどり着くのかなぁ?とは思いました。

2)multiPV=3にしてみたらどう?
 とにかくクジラクラスタはアフターファイヤーを噴きながら爆走していく様なクラスタエンジンなので、ノード数的にこっちのほうが良いと思いました。
 しかしサーバー間の読み筋の指示部分は、開発者の「えびふらい」氏がアピール文書に明示的な工夫として書いている核の部分であり、返事から強いこだわりを感じたのでそれ以上は言いませんでした。


ただし、こういった問題以前に、クラスタテストに参加頂いた方は知っていると思いますが、
4月末になってもまともに動いていませんでした。
個人的にはほんとに大会で動くのかなぁ?って思っていました。

とりあえずなんとか動いた状態が大会時で、改良とか実質不可能に近かったです。

クラスタテストにも「k_ohga」氏がたくさんAWSからつないでくれたり、
チーム内だけのクラスタテストにも「k_ohga」氏がたくさんAWSを動かしてくれました。
大会時もAWSを何百スレッドとつないでくれていたので、
おそらく「クジラちゃん2」の開発で大会含めて100万円くらいは行ってるんじゃないかなぁ。
(怖くて聞いていない)

大会時


大会時、特に印象に残った対局は別ページに書きたいと思います。

最後に


「クラスタ」ちゃんと動いてほしかったね。

先手番が千日手で指し手が染まるってのはあきらかに不具合。

例えば、後手番であれば先手がちょっと有利な評価値で、
最初からほんのちょっとマイナス評価値の中、
千日手の「評価値0」付近が最善手と示すのはありえるかなと思うんです。
でも、基本プラス評価の先手番が千日手で指し手が染まるってのはおかしい。

それってつまり、
自分が常に悪い局面で「千日手が最善」と判断してるってこと。
自分が悪い局面しか読めてないってこと。


自分が良いと思える局面を読まずに勝てるわけない。
これだと相手があきらかなミスをして、
こちらの評価値が良い単純局面にならない限り勝てない。



とにかく「クラスタ部」は大会直前に動いてくれたわけですが、
いまだにまともに動かなくて原因究明している4月半ばにおいても、
クラスタテスト参加者(リスナー)からの
メモリをバカ食いするのでどうにかしてほしいっていう要望を聞いて、
余計なタスクを増やしていたりと迷走していました。
(まともに動かすほうが先で、そんなことやってる場合じゃ無い)

とにかく「えびふらい」氏は、クジラちゃんのニコニコリスナーの意見を無視出来ず、
行き当たりばったりな対応が結構ありました。
※ただし、これについて私は批判する気持ちはまったくありません
だってそうでしょう。
クジラちゃんのコミュニティーは「えびふらい」氏が何年もかけて築いてきた物であり、
たった3日で行われる大会限りで終わるものでは無いからです。

クジラちゃんのニコニコリスナーを含めて「クジラちゃん2」なのです。

もちろん悔しい気持ちもあります。

そんな中でも全力で楽しませて頂きました。

「クジラちゃん2」を応援してくださった方、クラスタに参加してくださった方、
ありがとうございました。

この記事へのコメント

スポンサーリンク