祝1億敗!!!

[以前の関連記事] : 祝10万敗
[以前の関連記事] : 祝100万敗!
[以前の関連記事] : 祝1000万敗!!

先ほど20:40頃、COSUMIが1億敗を達成しました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

このことがあったので、この3か月ほどはずっとそわそわが止まりませんでした(笑)。こんな日が本当に来るとは、信じられない思いです。COSUMIに関わってくださった全ての方に、改めて心よりお礼申し上げます。私にとって、とても幸せな16年半でした。

COSUMI開始時からの、1日あたりの負け数の推移です。

赤い三角は左から

  • おまけ扱いだった19路盤を、通常版の囲碁対局ゲームに統合
  • AlphaGo-セドル戦
  • Katagoの使用開始

です。また、突発的に大きく下がっているのは、だいたいサーバが止まった時です。

こうやって見てみると、この約16年4か月の間にCOSUMIに影響を与えた主な外部要因は、AlphaGo-セドル戦とコロナだけだったと言えます。コロナに関しては以前一度このブログでも書きましたが、初めて見た方は少し驚かれるのではないでしょうか? もしかすると日本棋院的にはここがラストチャンスだったのかもしれませんが、あのような状況では動くに動けませんから、その前に勝負はついていたと言った方がいいような気もします。これは以前からの繰り返しになりますが、ここ近年、飽きられたり避けられたりしているのは「囲碁」ではなく「囲碁の人」だと、私は思っています。そう考えないかぎり、COSUMIの1億敗は到底ありえません。こういうことを言うのもなんですが、なんか「囲碁の人」ってちょっとあれな人が多くないですか? どういった構造的な理由があるのかよくわからず、以前からかなり不思議に思っています。

ちなみに、COSUMIの負け数とは、負け数カウンターが表示されている通常版の囲碁対局ゲームでの負けのみをカウントしていて、それ以外のコンテンツでの負けはカウントに入っていませんのでご注意ください(そういう意味では、COSUMIはもっと負けていることになります)。現在カウントしているページは、以下の4つのみです。

https://www.cosumi.net/play.html
https://www.cosumi.net/en/
https://www.cosumi.net/ko/
https://www.cosumi.net/zh/

ここまで、こんな話しておいてなんですが、負け数のカウントがバグってたら怖いですね… まあまず大丈夫なんですが、打っている手の数などから考えて、少し少なすぎるような感覚はあります。

COSUMIでの私の仕事はほぼ全てすでに終わっていますが、以前にもここに書いたとおり、棋譜を日本語で添削する機能を実装することを、最後の最後に予定しています。ずいぶん長い間、手が止まってしまっていたのですが、すでに多くの時間を費やしているので、これだけはなにがなんでも完成させなければ… 後200時間ぐらい要りそうなのですが、なんとか今年中にできないかな? とにかく、あまり質にこだわらず、できるだけ早くリリースするようにと思っていて、そのことの重要性が、私がCOSUMI続けてきた中で一番強く学んだことだといっても、過言ではありません。

1億敗はCOSUMIにおける最後の目標でしたが、それを私が強く望んだことは今まで一度もありません。ただぼんやりと憧れることだけが許されていた数字のように思います。この先に目指すものはもうなにも無く、可能であれば自分の手でサーバの電源を落としたいという、ささやかな願いがあるだけです。今日は私にとって間違いなく人生最良の日ですし、この先、今日より素敵な日が訪れることはないと思いますので(うーん、まあないでしょうね…(泣))、先日、近所の酒屋で買ってきた、ちょっとお高い純米大吟醸を開けました。99,998,000敗あたりで飲みだしたので、もうだいぶ酔ってます…(笑)

[追記 2024/10/8]
約8年半ぶりに戻ってきた先頭の1が嬉しかったので、font-size:250%にしておきました(笑)。

101,000,000敗あたりでまた元に戻しておきます。

ナニゴケをアップデートしました (Ver. 1.12.0)

ナニゴケのNNを新しくしました。

ナニゴケ – コケ植物の種類を判別するWEBアプリ
https://www.nanigoke.net/

今回は、判別可能な種に、「アサイトゴケ」、「エゾミズゼニゴケ」、「オオギボウシゴケモドキ」、「ツチノウエノコゴケ」、「ヤノウエノアカゴケ」が追加されました。41500枚だったTrainのデータ数は、45900枚になっています。そしていつものように、TensorFlow.jsも最新のバージョンにしています。

今回のバージョンはかなり前に学習自体は終わっていたのですが、この不具合でNNのモデルのTensorFlow.js用への変換ができずに、ずっとほったらかしになっていました。手元のWindowsでだめで、AWS EC2のG5gのUbuntu 22.04でもだめで、まあその内直るだろうからと思っていたのですがぜんぜん直らないし、仕方ないので最近になって、さくらのクラウドのUbuntu 22.04に持って行ってようやく変換できました。これ、かなり以前から多くの人が報告しているのに、なんで直らないんですかね? ちょっと不思議です。

それから、これもまたもうかなり以前の話になるのですが、「自然散策が楽しくなる! コケ図鑑」という本を買って眺めていて、その中の今回新しくカテゴリを切ったエゾミズゼニゴケのページを見た瞬間、「あっ、これはたぶんやらかしてる」ってなりました…(泣) ごめんなさい、今までホソバミズゼニゴケとしていたデータの半分以上が、エゾミズゼニゴケで間違いないと思います。少し言い訳させていただくと、最初の最初からずっとおかしいとは思っていて、ナニゴケにホソバミズゼニゴケのカテゴリができるのが遅くなったのも、このあたりがはっきりしなかったからです。エゾミズゼニゴケの線も相当考えましたが、寒冷な地域のみに見られる(まあ平凡社には北海道~九州って書いてあるんですが…)レアな種なのかと思ってて、まあ生育環境の違いかなとしてしまっていました。個人的には、エゾミズゼニゴケはホソバミズゼニゴケより10倍ぐらい馴染みがあって(笑)、ネットに情報が少ないのが、本当に本当に謎です… ちなみに、「自然散策が楽しくなる! コケ図鑑」は古木達郎・木口博史両先生のとても良い図鑑ですので、気になっていた方はぜひ購入を検討してみてください。

六十秒英単語テストでテスト結果が上位何パーセントに位置するのかのデータをアップデートしました(2024年8月)

かなり長い間ほったらかしにしてしまっていたのですが、六十秒英単語テストのVer. 1.1で、テスト結果が上位何パーセントに位置するのかのデータを、久しぶりにアップデートしました。

六十秒英単語テスト
https://www.60byo.net/

使用したデータは2022年1月1日以降のみの約2年半分です。サンプルが多くなって正確で滑らかな、そして最新の数字になりました。上位10%に入るには42問、上位5%には50問、上位1%には59問正解する必要があるのですが、このあたり以前よりも大幅に厳しくなっています。ちなみに最高記録は73問正解で2回、続けて72問が2回、71問が5回、70問が10回なんですが、70問オーバーは頭おかしいって…(笑) オリンピック選手並みの凄さだと思います。

COSUMIのサーバメンテナンスをします(2024年6月28日-)

明日28日23:00頃から、メインサーバの交換を含む大掛かりなCOSUMIのメンテナンスを行う予定にしています。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

できれば29日早朝には終わらせたいと思っていますが、それが無理なようなら一回睡眠をとりますので、終了は大幅に遅くなる可能性があります。

[追記 2024/6/29 4:50]
いろいろあったのですが、とりあえず現時点では一応動いているようです。一回寝ます。

[追記 2024/6/29 5:45]
本当に申し訳ないのですが、やっぱりだめでした。一回寝ますので、今日は長くなると思います。

[追記 2024/6/29 17:15]
先ほど再開しました。ハーゲンダッツ食べながらだいぶ頑張りましたが、ちょっと自信はありません… 大丈夫そうなら素麺食べてもう一回寝ます。

[追記 2024/6/30]
昨日はたくさん寝れました(笑)。今回のメンテナンス内容についても、一応ここに書いておきます。

一番大元の変更は大きく分けると2つあって、一つ目はメインサーバの交換です。さくらの専用サーバからさくらのクラウドになりました。いままで使っていたサーバとは、約8年半の付き合いなんですが、あと数十分でお別れになります。20c40tの化け物で、COSUMIの一番負荷の高い時代を支えてくれました。前のメインサーバの時も同じことを書いていますが、今回解約するサーバは歴史上一番たくさん囲碁の手を生成したコンピュータである可能性が高いと思います。そして、COSUMIがさくらの専用サーバを使わないのはこれが初めてです! 新しくさくらのクラウドを使うことにしたのは、なんかさくらインターネットからクーポンを10万円分もらったからというだけで、あまり良さそうじゃなかったら、またもう一度、別のに変更する予定にしています。

二つ目は、KataGoのNNのモデルを新しい棋力の高いものに変更しました。これに合わせて、私が作ったKataGo用秘伝のたれも、気になっていた部分を大量に修正し大幅に改良しました。

ここからは、ユーザから見える変更点を順に書いていきます。

まず、新しく17路盤の対局ゲームができて、加えて9~15路盤ではレベル9まで、19路盤ではレベル10まで強さを選択できるようになりました。それから、11路盤と13路盤でも置き碁の対局ができるようになり、置き碁の対局はすべて自由置き碁になりました。17路盤の対局ゲームと11路盤・13路盤の置き碁、それから自由置き碁は以前からやりたかったのですが、ネックになっていたのは、自前のオープニングブックを用意するのが大変ってことでした。ところが、このあたりがKataGoと秘伝のたれで今は相当上手くやれるようになったので、今回思い切ってCOSUMIのすべての9路盤以上の対局で、自前のオープニングブックを一切捨てて、その部分に関してもKataGoを使うことにしました。自前のオープニングブックは本当に多くの時間を掛けて作成したものなので、使わなくするのはすごく勇気がいったのですが、まあいいタイミングだと思います。で、その関係で9~19路盤の内、特に小さい碁盤サイズほど大きく、以前と比較して同じレベルでの棋力がほんの少しだけ下がっていると思います。これは強さが変わらないように適当に調整してもよかったのですが、もともと同じレベルで比較すると小さい碁盤サイズの方が大きな碁盤サイズより少し強い傾向があったのを解消するのでいいかと思いました。「特定の碁盤サイズの特定のレベルの棋力」はできるだけ変わらないように気をつけていますが、今回はこれでお願いします。ただ、程度はかなり小さいです。

それから、KataGoのモデルを変更したので棋譜解析機能の性能がぐっと上がりました。さらに、自動で解析を行う条件として「碁盤サイズが15路盤以下、かつ総手数が250手以下」というのがあったのですが、これも無くしました。これでもサーバの負荷は全く問題ないようです。

それから、チャレンジモードでFuegoの使用を止めて、代わりにKataGoを使うようにしました。棋力はできるだけ以前と揃えてあります。Fuegoはもう、コンテンツの性格上あまり気軽にこういう変更ができないこのチャレンジモードでしか使っていなかったのですが、このタイミングで一切の使用をやめました。Fuegoには本当に長い間お世話になりました。開発者の方々には、心よりお礼申し上げます。おそらく、開発者の方々が想像されているよりはるかに多くの手を、Fuegoは人間に対して打っていると思います。また、「開始時30秒・一手打つごとに3秒追加」のフィッシャーだったのが、「開始時20秒・一手打つごとに5秒追加」に変更しました。以前から「少し時間に追われやすいな」と気になっていたのですが、とにかく変更しづらかった… 今回はとても良い機会ですので、いっしょに変更しました。こちらは難易度にそこそこ影響を与えていると思いますが、これ以上の調整は行いません。今後は、これで遊んでください。

現在の仕様は、ほぼほぼCOSUMIの最終形態です。COSUMIがいつか終わる時と大きくは違っていないと思います。

[追記 2024/7/2 6:10]
KataGo周りが少し不安定だったようです。少し修正しました。

[追記 2024/7/3 9:00]
いくつか問題があったみたいで、KataGo周りよりメインサーバの方がだめだめでした。負荷の高い時間帯にKataGoに仕事させようとすると、まともに動いていませんでした。今はもう大丈夫になっていると思います。

[追記 2024/7/4 7:40]
気になっていた問題は、一応すべてなんとかなったようです。ようやく完全な形で再開できた気がしています。

[追記 2024/7/6]
ひとつ書き忘れていたのですが、今回から7路盤スペシャルバージョンでもKataGoを使うことにしました。以前、このブログへのコメントでKataGo Opening Booksというサイトを教えてもらって、そんなのがあるのなら私が7路盤スペシャルバージョンで頑張る意味はもうないので、このブログ記事内には書くのをずっと忘れてしまっていたのですが、7路盤スペシャルバージョンのオープニングブックはもう更新しないつもりでいました。ただ、今回KataGoを使うようになって、そもそも負けることがほぼなくなりましたので、その少ない負けた対局だけは、できるだけ定期的に直していこうかなと思っています。ちなみに、今現在、作り碁になった対局のみでCOSUMIの119勝2敗18引き分けです。

[追記 2024/7/6]
本当にすいません。今回のアップデート時に、7路盤スペシャルバージョンのオープニングブックを誤って古いものにしてしまっていたことに今気づきました… すでに修正済みです。

[追記 2024/7/7 15:00]
今回のアップデートの後、OOM KillerでKataGoが殺されている時が何度かあったようです。これは必ずしもそれがそのままサービスの停止を意味しないのですが、昨日6日16:00ぐらいに一度、数百局ぶちっといってしまいました。本当にすみません。とりあえずの対応は済ませました。約2か月後に、今現在使っているc7g.4xlargeg5g.xlargeを纏めてg5g.4xlargeに置き換える予定にしていて、今はまだC7gのSavings Plansが残っているので、それまではなんとかだましだましこの状態でいきたいです。その時までにG6gが出てくれると一番良いのですが…

[追記 2024/7/8 8:35]
KataGo周りがまだ少しだめだったみたいです。昨日7日18:38ぐらいから、しばらくまともに動いていませんでした。本当にすみません。一番まずい不具合はすでに修正済みですが、複合的な要因でまたなんか起こるかもしれません。実戦でしか分からないことも多くて、なかなか手元で完全なテストができないんですよね…(泣)

[追記 2024/7/15 10:50]
まだ、KataGo周りが少しおかしいようです。はっきりとしたエラーログが残るわけでもなく、負荷が高い時間帯にだめになるけどリソース食いつくしているわけでもなく、理由がいまいちはっきりしなかったのですが、時間を掛けて調べてみて、なんとなくですが問題の切り分けはできてきました。複数の要因が絡んで、かなり運悪く突発的に輻輳するんだと思います。

そこでの対応なのですが、まず5日ほど前から、解析を自動で行う条件の「碁盤サイズが15路盤以下、かつ総手数が250手以下」というのを一回復活させて、負荷を少し下げていたのですが、とりあえずこれで特に問題は起こらない状態になっていました。さらに昨日、KataGo周りのコードを大幅に書き換えたものに差し替えて、これが問題無く動くのを確認した上で、続けて先ほどの解析を自動で行う条件を再度削除し、特にトラブルなく今に至っています。今回かなり大幅にコードを書き換え、無駄のない動きになったので、なんとなくもう問題が起こらないような気がしていますが、これで駄目ならサーバのアップグレードが必要かもしれません。KataGo用サーバのメインメモリが8GBと少ないのがちょっと痛いんですよね。GPUメモリは1GBも使っていないのに16GBもあるのですが… 今回、かなり詳細にログを吐くようにもしておいたので、もしもう一度トラブルが起これば、そこで原因がはっきりするかもしれません。

[追記 2024/7/15 20:05]
やっぱりだめでした… 15:46ぐらいに数百局ぶちっといってます。本当に申し訳ありません。とりあえず「碁盤サイズが15路盤以下、かつ総手数が250手以下」の条件を戻しています。ログ見ても、なにも出てこなくて全く理由がわかりません。自分が書いたコードのせいだと思っていたのですが、違うのでしょうか?

[追記 2024/7/18 0:40]
かなり大変だったのですが、実際のアクセス状況とできるだけ同じ状態をテスト環境で再現して、KataGo周りにあった不具合の箇所が特定できました(自信がないので大きい声では言えないのですが、たぶんこれはKataGoが悪いんじゃないかな?)。どこが悪いのかずっとわからなかったおかげで、コードのあらゆる部分がどんどん綺麗になっていったのはとても良かった(笑)。「碁盤サイズが15路盤以下、かつ総手数が250手以下」の条件も三度、削除しています。約3週間掛かりましたが、ようやく完全復活できたはずです。不安定な状態が長く続いて、本当に申し訳ありませんでした。

[追記 2024/7/21 23:30]
その後、特に何も問題は起きていません。COSUMIに再び平和が訪れました(笑)。KataGoは昨日24時間で、2,862,221手打って、25,542局棋譜解析してくれました。

[追記 2024/7/26]
置き碁の対局のオープニングにおいて、置き石の色を反対に見ている不具合がありました。すでに修正済みです。だれにも指摘されませんでしたし、自分で棋譜を見てても気づきませんでしたが、まあそんなものかな?

[追記 2024/9/8]
c7g.4xlargeg5g.xlargeg5g.4xlargeひとつに纏めました。リソースがかなりぎりぎりなので、しばらくの間、微調整が続きそうですが、どうにもならなかったらメインサーバを少し増強します。COSUMIのサーバがしっかりと2台になるのは本当に久しぶりで、めちゃくちゃうれしいです。後1か月ほどでG5gのSavings Plansが切れるのですが、それまでにG6gだかG7gだかG8gだかわかりませんが、そろそろリリースしてもらえませんかね? 冗談抜きで、もし出してもらえれば、毎日おいしい物がたくさん食べれるのですが…

[追記 2024/9/29]
C8gM8gがリリースされましたが、G6gが出ません…(大泣) かなり悩ましいのですが、後約10日で切れるSavings Plansは、G5g4xlargeのサイズで1年買いますかね? Amazon様、来年の今頃までにはよろしくです(笑)。

[追記 2024/10/10]
G5g4xlargeのサイズで1年買ったのですが、70万超えました…(自分史上、最高額の買い物じゃないかな?) 来年の今頃までは、絶対に値下げしないでもらいたいです(笑)。

COSUMIのKataGo用サーバが止まっていました (2024年4月16日)

またまたで本当に申し訳ないのですが、16日23:20~17日8:15ぐらいの間、COSUMIのKataGo用サーバが止まっていました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

今現在はもうすでに復旧しています。今回も前回同様、KataGoを使用しないサービスには影響ありませんでした。

前回と同じく、lastコマンド叩くと当該の時間帯は二重にシステムが起動していることになっていて、本当によく分かりませんが変なリブートをしているように見えます。こんなのが頻発するとまずいので、適当に対策考えます。

COSUMIのKataGo用サーバが止まっていました (2024年2月16日)

同じような話を繰り返して申し訳ないのですが、16日2:55~14:15ぐらいの間、COSUMIのKataGo用サーバが止まっていました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

今現在はもうすでに復旧しています。今回も前回同様、KataGoを使用しないサービスには影響ありませんでした。

原因は前回とは違って、ログを見てもよくわかりません。EC2のモニタリングの「CPU 使用率」とか、「ネットワーク受信量」とかのグラフが一瞬途切れているのがなんかおかしくて、lastコマンド叩くと、当該の時間帯は二重にシステムが起動していることになっている…(どゆこと?) なんか特殊なリブートしたのかな?

COSUMIのKataGo用サーバが止まっていました

16日1:26~17日2:06ぐらいの間、COSUMIのKataGo用サーバが止まっていました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

今現在はもうすでに復旧しています。気づくのが少し遅くなってごめんなさい。ちなみに、KataGoを使用しないサービスには影響ありませんでした。

ログを見たかぎり、GPUのハードウェアの問題に思えるのですが、AWS EC2の場合、インスタンスを再起動できちんとさようならできているのでしょうか?

COSUMI 15周年

[以前の関連記事] : COSUMI 5周年
[以前の関連記事] : COSUMI 10周年

今日2023年5月26日で、COSUMIは開始から15周年を迎えることになりました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

15年という数字に特別の切りのよさを感じているわけでもないのですが、10周年の時に「最低でもあと5年は続けたいなと思っています」と書いたので、それを今一度ここで更新させてください。今日からまた、最低でもあと5年は続けます。そして、それ以降については時代に決めてもらいたいと思っています。

ここ最近、私がCOSUMIとさよならするタイミングについて、本当によく考えるようになりました。開始当初はこれっぽっちも想像しなかったことなんですが、それは私がぽっくり逝った時になる可能性も高くなってきたように思います(笑)。で、もしそうなると、みなさんに結構な迷惑を掛けることになりそうなので、どうしたものかなとも思ったり… 本当にまだなにも調べていませんけど、ドメインを買ってくれて、その1/30の価格で1年間、最大30年使わせてくれるサービスとかないかな?

直近1年間(2022年5月26日~2023年5月25日)にCOSUMIが打った総手数(COSUMI側だけ。ユーザが打った手数は含まず)は、計2,286,711,427手でした(実際はもうほんの少しだけ多いのですが、正確にはちょっと分からず…)。平均して190,559,286手/月、6,264,963手/日、261,040手/時、4,351手/分、72.5手/秒ぐらいになります。一番最後の秒あたりの手数に10.0(以前から使っているこの数字、これは10.5ぐらいの方がより正確かもですが…)を掛けると、だいたいその時の対局数になりますので、平均725面打ちぐらいですね。もうきちんと調べはしませんが、この15年間での平均は400面打ちとかだと思うので、だとすると延べ対局時間は6000年ぐらいでしょうか? なんだか大ごとになっちゃいましたね(笑)。このまま続けさえすれば、来年中には夢の1億敗も達成できそうです。

COSUMIに関わってくださった全ての方に、改めて心からお礼申し上げます。15年間ずっと、私はとても楽しかったです。

* * * * * * *

以下は、先日少し話題になっていた本因坊戦の縮小のニュースなどに関連して、15年間COSUMIを続けてきた私が、日本の囲碁界(日本国内に話を限定しています。ご注意ください!)について思うことを、少し長くなりますが書いておきたいと思います。このブログに以前書いたこととの重複もかなりありますが、ご了承ください。

「囲碁の人気が無くなってきて…」みたいなことを、囲碁の人たちは本当に頻繁に口にします。では、一体どれぐらい人気が無くなってきているのでしょうか? この話題について考える時、どうしても避けられないのがヒカルの碁の影響ですが、2023年現在は、直接的な影響についてはほぼ無くなったと言っていいと思いますし、漫画の連載開始が1999年らしく、今から25年前の1998年なら全くその影響が無かったわけなので、ここではこの2つの時点での比較をしてみたいと思います。まずはじめに、プロ棋戦の人気について考えます。人気なんていうと不正確な話になりやすいので、ここではそれを、新聞や雑誌で読んだり、テレビやインターネットの動画配信で観たりなど、どのような手段を通じてでもよいので、誰かがプロ棋戦を消費している時間をすべての人で合計したものと定義して、その定義での私の推測は、2023年現在は1998年の1/3ぐらいになっている、というものなんですが、おそらくこれは多くの方が概ね同意してくれるような数字ではと予想します。次に今度は、誰かが囲碁の対局をしている時間をすべての人で合計したものを考えてみたいのですが、これは1998年と2023年現在とではあまり大きく変わらない、というのが私の推測です。そしておそらくですが、多くの方はこれには同意されないでしょう(まあそもそもの話、これが減っていなければ、「囲碁の人気が無くなってきた」とは普通言わないわけで…)。大幅に減っているはずだと考える人が大半なのでは? ですけど試しに、席料の要る碁会所のような集まりでの対局、要らない集まりでの対局、もっと個人的な2人だけでの対局、ネット碁会所での対局、コンピュータとの対局など、全ての囲碁の対局が行われるシーンの数字を、ひとつひとつの積み上げて比較してみてください。ぜひ一度、頭の体操だと思って少し時間を取って本当にやってみて欲しいのですが、「あれっ、意外と減ってないかも」という気がしてきませんか? 実際、上で書いたように、この15年間のCOSUMIだけでも、もともとゼロだったものが平均725面打ち、それを国内に限定して×0.72の平均522面打ちになっているんですよ? この分だけでも、代わりに減った部分を見つけるのは結構大変なことだと思いますが… 以前から、「コンピュータとの対局」量は乱暴に推測された時に、実際よりもかなり小さく見積もられる傾向があると感じていて、おそらくそれは、誰かが行う「人間との対局」は最低1人にそれが観測されるのに対して、「コンピュータとの対局」は全く誰からも観測されないことも多い、という事実に起因していると考えています。COSUMIのことを知っている人に、「直近24時間中、COSUMIで一番たくさんのユーザが打っていた時間帯では、何人の人が対局していたと思う?」と質問すると、多くの方が100人以下と答えるのではないでしょうか? ですが、実際は1200~1500人です(加えて言うと、この5年間ぐらいは、メンテナンスなどでサーバが止まった時とその前後以外、一瞬たりとも100人以下にはなっていないはずです)。そして、10000人以上だと答える人は一人もいないでしょう。

で、ここから先は、この「対局時間は減っていない」という私の推測を正しいものとして話を続けさせていただきたいのですが、まあ正直、ここまで来ても多くの方はその前提に同意されないでしょうし、その場合は、ここで読むのやめていただいて結構です。まだ先は少し長いので…(笑) これに関しては、誰もきちんとした数字を出しようがないと思うのでどうしようもないですね。

以前から強く感じていたことなのですが、多くの人(これは囲碁をやる人に限らず)が上の「プロ棋戦の観戦」と「自身の対局」の2つ(や他の囲碁の楽しみ方)を、典型的な補完財だと思いこんでるような気がしています。「自身の対局」のために「プロ棋戦の観戦」し、「プロ棋戦の観戦」すると「自身の対局」もやりたくなるでしょと。コーヒーと砂糖の関係ですね。確かにそのような側面があるのはもちろんのことなのですが、それと同時に、この2つにはかなり強い代替財の側面もあると私は思っています。例えばそれは、誰かの囲碁な欲求が片方だけで満たされてしまうことがあるからだったりでもありますが、それ以外にも、仮に両方を望んでもどちらか片方だけしか選択できないということが、実際は結構多いんですよ。多くの場合、それは自由時間の少なさが原因で。以前、このブログで書いたことですが、COSUMIでは平日の12:40あたりで、いつもちょっとした対局数のスパイクが発生します。データが少し古いですし、今はもう少しマイルドなようですが、その時載せた、時間帯別にCOSUMIが打った手数のグラフがこれです。

COSUMIに纏わる数字の話
http://www.perfectsky.net/blog/?p=273

生活リズムなんて本当に人それぞれだし、海外からのアクセスだって無いわけではないのに、これだけはっきりした形が出ていました。さっきカルピスを飲んだ。後で風呂上りにビールを飲むつもり。そんな時に誰もコーヒーと紅茶の両方を飲んだりはしません。お腹たぷたぷになっちゃう(笑)。そんなわけなので、「プロ棋戦の観戦」量と「自身の対局」量の推移に大きな乖離が生まれるのは、なにも不思議なことではないんです。そして、これがまた結構重要なことだと思うのですが、この自由時間の少なさに由来する代替財の側面は、1998年よりも2023年現在の方が強くて、今後も時代が進むにつれてさらに強くなっていくと思います。

最後に、ここまで長々と続けてきたこの話の最終的な結論なんですが、それは「プロ棋戦の人気をどうにかしたいなら、プロ棋戦自体をどうにかするしかない」ということです。いやいやここまで引っ張ってきてそんな当たり前のことをと言われるかもしれませんが、これ同じことを主張される方が本当に少ない。代わりに「囲碁人口をもっと増やさないと」とか、そんなのばっかりじゃないですか。先日の本因坊戦の時も、二日制やめるな、リーグ廃止するなと、棋戦の変更を嫌う声の方がよっぽど多いですからね。まあ、そういうことを言っている人が、必ずしも「プロ棋戦の人気をどうにかしたい」人ではないのかもしれませんが、さすがにもう少しちゃんと現実を見た方が良い。隙間時間に囲碁したい気持ちを、ある意味強く意図せず、しかし結果的にかき集めることになったが、今のCOSUMIです。雨の日にアクセスが大きく増えるのもそういうこと。2023年に必要なのは、10分で消費できるプロ棋戦コンテンツであって、二日制ではありません。

ナニゴケをアップデートしました (Ver. 1.11.1)

ナニゴケのNNを新しくしました。

ナニゴケ – コケ植物の種類を判別するWEBアプリ
https://www.nanigoke.net/

今回は、判別可能な種の追加はありません。37500枚だったTrainのデータ数は、41500枚になっています。TensorFlow.jsのバージョンは、最新の4.3.0がdeprecatedとのことなので、4.2.0を使っています。今回から3.xではなく4.xになりましたが、ここは特に大きな変更ではなさそうです。

学習データ10万枚という目標にたいして、これでようやく四合目です。6年掛かりましたよ… 学習データを1割増やすのが、もうだいぶ大変になってきました(泣)。

最近、重い腰を上げて約10年ぶりにPCを新調したのですが、それに伴い、これからは機械学習をGPUではなくCPUで行うことにしました。学習時間は余分に掛かりますが、もうそれほど頻繁にすることでもないのでいいかなと… こまごまとしたメリットがいくつかあって、いろいろ気が楽になりました。

ナニゴケをアップデートしました (Ver. 1.11.0)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別するWEBアプリ
https://www.nanigoke.net/

今回は、判別可能な種に、「シナチヂレゴケ」、「チヂレゴケ」、「ノミハニワゴケ」、「マユハケゴケ」、「ミカヅキゼニゴケ」が追加されました。36000枚だったTrainのデータ数は、37500枚になっています。また、前回「ナニゴケで判別することができる特定の種」を3%の確率で「このWEBアプリでは未分類の苔」として学習するようにしましたが、これを2%に下げました。3%は少しやりすぎだったような気がします。それから、活性化関数としてSwishを使用していた箇所を全てReLUに戻しました。なんとなく、Swishに替えたぐらいから私のiPhoneで固まることが増えたような気がするのでそうしました。そしていつものように、TensorFlow.jsも最新のバージョンにしています。

ここからは、今回新しくカテゴリを追加した「マユハケゴケ」について少し書いておきます。現時点で、マユハケゴケとラベルを付けた学習データはすべて、私がイクタマユハケゴケ/Campylopus gemmiaprusだと考えるものです。マユハケゴケ/Campylopus fragilisだと考えるものは1枚もありません。ナニゴケは平凡社の図鑑に準拠するとしていますので、それらをおそらく一番近縁だと思われるマユハケゴケとしました。それにしてもなんですね、ネットで調べてみても新種のイクタマユハケゴケの情報は見つからなくもないですが、マユハケゴケはぜんぜんですね。Illustrated Moss Flora of JapanのCampylopus fragilisを見ても葉先に歯があるとされているので、まあなんかそんな感じなのかもしれません。ちなみに、以前このブログでも紹介した「コケの国のふしぎ図鑑」のp.78のシシゴケの写真は、実際はイクタマユハケゴケだそうです。

苔をずっと追いかけていると、どうしても季節の変化に敏感になります。くそ暑い日が続きますが、もうあと2か月もすれば、ついこの前見なくなったなと思ったジョビちゃんが帰って来るかと思うと、時間の経つのが早すぎて…

[追記 2022/10/23]
私の自宅は、毎年ジョウビタキのなわばりの中になるのですが、今年は今日10月23日に帰ってきてくれました。去年は19日、一昨年は20日でしたので、少し遅めのご到着でした。まだ確定ではないのでしょうがたぶん今年も男の子で、これは毎年のことなのですが、オスメスで好みの場所に偏りがあったりするんでしょうかね? 外を散歩している時は女の子にもよく出会うのですが… またしばらくの間、朝5:45(だったっけ?)にミニチュア自転車のブレーキ音に起こされる日々が始まります。

COSUMIでKataGoを使い始めます

前回の記事でも少し書きましたが、COSUMIでKataGoを使ってみようと思います。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

とりあえず19路盤の互先の対局でレベル8まで作ってみました。こちらがテストページ。今までの(と置き碁)はレベル1相当です。19路盤の互先以外は今までのと違いはありません。

https://www.cosumi.net/play-test20220703.html (正式にリリースしたので削除しました)

問題なく動くようであれば、正式にリリースします。重大な問題が発生したら、永久的に止める可能性も今はまだありますが、たぶん大丈夫かな? ぜひ一度遊んでみてください。注意点として、上のテストページからリプレイに行ってその後盤面クリックしても、元のテストページには戻りませんので、そこはご注意ください。また、予告なく削除されたりなんなりもします。

今回の19路盤のレベル設定は、レベルがひとつ違うもの同士での自己対戦の勝率が80%になるように調整しています。このあたりの話を書きだすとかなり長くなるので詳細は省きますが、おそらくですが、レベルのひとつ違いの差が9路盤などと比較して大きく感じられるのではと予想しています。でももう、この「自己対戦の勝率が80%」で今後もいきます。それなりにしっかりとした考えあってのことなので、変更することはまずありません。それにしても、この強さの設定はいつもながら本当に難しいですね… あちらを立てるとこちらが立たずで、どうにも収拾がつきません。今しばらくは微調整が続くと思います。あと、その方が打っていて楽しいのではと思うので、「どのように強さを変えているのか」もあえて今回はここに書かないでいようと思います。と言っても、もちろん特別なことは何もしていません。

今後の予定もここに書いておきます。まず、今回のテストが問題ないようであれば、19路盤よりも小さな15路盤、13路盤、11路盤、9路盤でも同じくレベル8ぐらいまでできるようにしたいと思います。それから、これも前回の記事に少し書きましたが、8路盤までの棋譜を日本語で添削するNNを今作っているので、それも使えるようにしたいと思います。で、それができたら、今ある9路盤までの悪手指摘の機能は、少なくとも日本語ページでは完全に削除するつもりです。その代りに、サーバ代との兼ね合いになりますが、9路盤以上ではKataGoに添削してもらえるかもしれません。ちなみに、この2つの添削機能は、COSUMIで打たれた棋譜に限らないようにするつもりです。以上の内、どれから実装するかは、現時点では未定です。これが全部できたら、私の中でCOSUMIはおしまい…

[追記 2022/7/9]
13路盤以下は、今でもそれなりに強いレベルで対局できるので、あまり急ぐ必要もないのですが、15路盤に関しては19路盤と同じ状況なので、最初のリリース時に、19路盤だけでなく15路盤でもレベル選択できるようにしたいと思います。現在、大急ぎで準備していますが、19路盤も今一度設定を詰め直したいので、正式なリリースまで早くても後2週間は掛かりそうです。

[追記 2022/7/21]
テストページで15路盤の互先でもレベル選択できるようにしました。15路盤は、「レベルがひとつ違うもの同士での自己対戦の勝率が78%」でいきます。19路盤も全て調整し直して、こちらはレベル9もいけそうですが、もういいですよね? 大きな問題が無ければ、このテストページの内容で3日後ぐらいに正式にリリースします。

レベル調整の作業は、どうしても待ち時間が大きくなるのですが、ここ最近はそれに合わせた生活リズムになっていましたし、時間が経ってしまうと勘所が頭から抜けてしまうので、次の作業としては、引き続き9路盤、11路盤、13路盤もレベル8ぐらいまでにしてしまおうと思います。そしてその次に、今ある悪手指摘の機能を、19路盤まですべて対応させる形でKataGoに置き換えたいと思います。ここまでいろいろやってきた感じでは、KataGoはかなり安定してますね。たまによく分からないおかしなことが起こっても、よくよく調べると、私かGNU Goが悪いことがほとんどでした。そして、やはりとても軽いです! なのでこれもできると思います。そして一番最後に、8路盤以下はそれを私の作った日本語で添削する機能に置き換えて、それで完成かなというのが今の予定です。あと書き忘れていたのですが、置き碁に関してはレベル選択も含め今後も一切変更加える予定はありません。

テストページで打ってくれる人が現時点までほとんどいませんでしたので、とりあえず今からCOSUMIで宣伝してきます。

[追記 2022/7/24]
正式にリリースしました。今回は、かなり大がかりなアップデートですし、エラーが出ない不具合が発生する可能性も高いので、まだかなり心配なんですが、とりあえず今のところは大丈夫でしょうか? ちなみに今現時点で、正式リリース後、19路盤レベル8の作り碁になった対局は、COSUMIの807勝13敗です。ユーザが投了しているケースも相当多いと思われます。

KataGo用の本番サーバは、当初、メインメモリが16GBのg5g.2xlargeで考えていたのですが、ちょっとお値段が気になってしまい、8GBのxlargeにしてしまいました。裏で何か作業する時に気をつかわされるのがいやですが、足りてるといえば足りてますので、何かあったらまたその時考えます。と思っていたら、CPUもボトルネックになりかねないことにちょうど今、気がついて、少し驚きました。でも、まあ大丈夫なはず。KataGo動かすというのに、メインメモリやCPUの心配ばかりして、GPUは安心っていうのもすごい話です…

で、g5gということでCPUがARMなんですが、ネットで調べてもKataGoを動かしている話はほとんど出てきませんが、特に何も問題なく使えています。Ubuntu 22.04nvidia driver 515CUDA 11.7KataGo 1.11.0という最新(?)の組み合わせで、NVIDIAやKataGoのドキュメントどおりの手順でいけます。書かれていないことでやったのは、KataGoをビルドする時に、cmakeに-DCMAKE_CUDA_COMPILER=/usr/local/cuda-11.7/bin/nvccとオプションを付けたことぐらい。引っ掛かりポイントは特にありませんでした。そして、それでとても安定しています。他のクラウドサービスのことは、私はぜんぜん詳しくありませんが、g5g.xlargeはオレゴンで0.42USD/時間とお安いので、同じようなことをするのには、まあ良いのではないでしょうか? 今回いろいろ作業していて強く思ったのは、KataGoの動作環境はできるだけ多くの人で共有したほうがいいってことですね。日本棋院とかそういうことやらないんですかね? てかやってるのかな?

[追記 2022/7/26]
現時点で、正式リリース後、19路盤レベル8の作り碁になった対局はCOSUMIの3191勝39敗、レベル7は165勝6敗、レベル6は169勝6敗。今後、ガチな方々が遊んでくれるようになったとしても、強さはもう十分ですね。

KataGo用のサーバを追加した代わりに1台サーバを止めたのですが、結果、KataGo用のサーバ以外のリソースがぎりぎりになってしまいました。事前にユーザの行動が正確に読めなかったので仕方ない部分もあるのですが、正直、全く問題ないだろうと予測していました。AWSのSavings Plansの関係もあり、向こう1か月はこのままの構成で行かせていただきたいのですが、ちょっと無理かもしれません…

[追記 2022/7/28]
どこまでいっても正確な言葉の定義や数字を示しようがないのですが、いろいろ調べてみた感じ、19路盤レベル8でユーザが投了している対局は、作り碁になった対局の7倍ほどあるとみてよさそうです。この数字は、私の予想よりもかなり大きいのですが、投了するようなユーザは、投了で対局を早く終わらせる分、1人あたりの対局数が多いのかもしれません。加えて、これは最初から分かっていたことですが、ユーザが勝った対局も、結構な割合でユーザが人間ではなくコンピュータです(今回はあるのかどうか調べていませんが、COSUMI vs COSUMIとかやる人は昔からちょくちょくいます。ちなみに、私もテスト中に何回もやりました。AutoGo便利!)。となると、人間ユーザの勝率はもう0.1%ぐらいしかないことに… 確かに、レベル8はそれなりに強いのでしょう。しかし、それ以上に思うのは、COSUMIには本当に強い人は全然いないんだなあということです。もともとCOSUMIが弱かったのだから、当然でしかたのないことではあるのですが、これからはそういった方々にも価値を提供できるようになりたいですね。ぜひ一度、名のある方にレベル8をバサバサと叩き切ってもらいたいところです。

後、対局リプレイページにSGFをクリップボードにコピーするボタン用意しておきましたので、便利にお使いください。

[追記 2022/8/27]
9路盤、11路盤、13路盤でもレベル8まで強さを選択できるようにしました。ただ、本当に申し訳ないのですが、いろいろな事情があり、強さの最終的な微調整は、15路盤と19路盤の時とは違って、ユーザとの対局結果を確認しながらでやらせていただきます。ものすごく雑なことをしますが、総合的にそれが一番良さそうに思いました。今一番心配しているのは9路盤ですね。約1日分のデータから判断する限り何とかなってそうでもありますが、レベル8はかなりぎりぎりのようです。できれば残したいのですが…

それから、すべてのレベル、すべての碁盤サイズで、サーバの負荷が高い時に対局が開始できなくなるのを止めました。「9路盤のレベル6とレベル4はできるけどレベル5はできない」みたいなのは、ユーザも混乱するばかりですし、私も気持ち悪いのでそういうことにしました。サーバの負荷を見積もるにあたっていろいろ考慮しなければいけないことがあるのですが、これも約1日分のデータを見る限り、現在のサーバ構成で酷い状態になることは無さそうです。もし危なそうだったら、もうお金で解決してしまう予定です。

次は、KataGoに棋譜を分析させる機能を実装していきたいと思います。

[追記 2022/8/30]
9路盤レベル6~8をレベル0.2相当分ぐらい、11路盤レベル5~8をレベル0.3相当分ぐらい、13路盤レベル5~8をレベル0.4相当分ぐらい、弱くしました。一回これで様子を見てみます。

[追記 2022/9/14]
棋力を調整するために、ここ最近さまざまなデータを調べていたのですが、なんだかちょっと問題が多すぎますね… 詳しくはもうここに書きませんが、棋力を調整すると言ったって、「棋力」という言葉を気持ちよく定義しようがなく、どうにもやりようがありません。これは以前このブログでも書いたことがあるかもしれませんが、私は「COSUMIでは、新しいものを追加するのは自由にしていいけれど、すでにあるものはできるかぎり変更してはいけない」とかなり強く考えています。というのは、長い期間の中で、ユーザがCOSUMIを自身の棋力向上のベンチマークにしていることがとても多いからです。そういう考えがあったので、実際もう何年も、着手の変わる変更は基本的に行ってませんでしたし、また、そういった期間が長くなればなるほど、またさらになにか変更することが憚られるようになっていきました。今回、KataGoを使い始めていろいろ作業している時も、9~13路盤のレベル2以上も全部これに差し替えられたらなと何度も何度も思いましたが(ぱっと思いつくだけでもメリットは腐るほどあります)、それだけは絶対だめだと思い、真剣に検討することは一度も無かったんです。が、ここにきて、それがもうちょっと避けられない気がしてきました。

今回の話に関係する私がCOSUMIで実現したいことを、重要性の高い順に書き出していくとこんな感じです。

  • 以前からあった9路盤のレベル1~レベル5、11路盤レベル1~レベル4、13路盤レベル1~レベル4、15路盤レベル1、19路盤レベル1の棋力を変えたくない
  • 棋力は同じでも、できるだけきれいな手を打たせたい
  • 同じ碁盤サイズの中で、レベルひとつ違いがすべて同じぐらいの棋力の違いに感じられるようにしたい
  • すべての碁盤サイズで、数字の同じレベルが同じぐらいの棋力に感じられるようにしたい
  • 以前からあった9路盤のレベル1~レベル5、11路盤レベル1~レベル4、13路盤レベル1~レベル4、15路盤レベル1、19路盤レベル1の棋風を変えたくない
  • できるだけ説明が容易な基準で、それぞれのレベルの棋力を決定したい
  • サーバの負荷を下げたい

いろいろ考慮した結果、これらをできるだけバランスよく実現するために、次のような変更を行うことにしました。

  • 9路盤レベル2~レベル5、11路盤レベル2~レベル4、13路盤レベル2~レベル4を、それより上のレベルと同じようにKataGoベースに変更する
  • それぞれの碁盤サイズのレベル2以上は自己対戦で同じ勝率になるように調整する
  • レベル1とレベル2の間はまた別の勝率になるように調整する

ここまではもう決定事項です。自己対戦での勝率はもう少し微調整が必要だと思いますが、とりあえず、レベル2以上は9路盤で66%、11路盤で70%、13路盤で73%、15路盤で75%、19路盤で77%、レベル1とレベル2の間は、9路盤で71%、11路盤で75%、13路盤で78%、15路盤で80%、19路盤で82%で調整することにして、すでに変更しました。

変更前との比較を簡単に書いておきます。まず、すべての碁盤サイズでレベル1は何も変わっていません。9路盤レベル2~レベル5、11路盤レベル2~レベル4、13路盤レベル2~レベル4は、棋風が激変していると思います。棋力の方はあまり変わってないはずですが、ここをもう一度チェックする必要があります。9路盤レベル6~レベル8は、下の方は少し強くなり、上の方はあまり変わらず、11路盤レベル5~レベル8は、下の方は少し強くなり、上の方は少し弱く、13路盤レベル5~レベル8は、下の方はあまり変わらず、上の方は少し弱くといった感じ。15路盤と19路盤のレベル2~レベル8は、下の方はあまり変わりませんが、上に行くにつれ弱くなっていってレベル8は変更前のレベル7.2ぐらいです(そういうわけなのでレベル9以上も考えたほうが良いのですが、それはまた今度)。

今回の変更は新規のユーザにとっては間違いなく良い変更ですが、以前からのユーザにとって良いか悪いかは場合によるとしか言えないですね。それでも、もし今後長い期間遊んでもらえるのならば、やはり最終的には良い変更になる可能性が高いとも思います。結局のところ、これはCOSUMIをいつまで続けるのかが大きく関係していて、長く続けたいのであれば必要なアップデートに違いないのですが、私自身COSUMIを長く続けられるイメージがなかなか持てないんですよね… だから、こんなに躊躇してしまうのだと思います。

買ったばかりのc7gのSavings Plans、48万円ぐらいしたのですが、少し腐ったっぽい…(泣) なかなか上手くはいきませんね。なにか使い道はないかな?

[追記 2022/10/1]
5路盤~9路盤(レベル0)のみにあった悪手指摘の機能を廃止し、代わりに19路盤までに対応した新しい棋譜解析の機能をKataGoを利用して作ってみました。以前の悪手指摘機能とは比較にならないくらい精度が上がっていますし、結果的に悪手の指摘がたくさんできるようになっています。そして、悪手が無い時もその局面の良い手を表示するようにもしました。あと、目数による形勢の推移のグラフも用意しました。

今回の棋譜解析機能と以前の悪手指摘機能とのひとつ大きな違いとしては、悪手を指摘するタイミングが1手分早くなっていることがあります。COSUMIは基本的にまず「対局」があって、その後、その対局の手をどうこう言うってところから、一般的なその手の囲碁ソフトの「この局面ではここに打つのが良い/悪い」ではなく、「ひとつ前の局面でここに打ったのが良い/悪い」という1手後のタイミングで指摘が行われていました。理屈としては特におかしなことではなかったように思いますし、私自身、それを見づらいと思ったことは正直今までぜんぜん無かったのですが、今回、表示する情報量が増えたからでしょうか、盤面見ていると不思議な感じに頭がバグって、表示されていることの意味がどうにもこうにも取れなくなってしまったので、一般的なタイミングである1手前に早めました。ただ、そうなると今度は「良い手悪い手は分かったけど、実際に打った手はなんだっけ」ってどうしてもなりますので、次に打たれた石を半透明で表示するようにしています。乱暴な言い方をすると、0.2手分ぐらい今度は遅らせたイメージですね。このあたり、さんざんいろいろ試したのですが、まあこれで良いのではと今は考えています。

それから、ユーザの手番だけではなくCOSUMIの手番も解析しているのも大きな違いのひとつです。今までは、1手とばしで片側だけを見ていましたが、今回、形勢のグラフにも必要なこともあって黒白両側見るようになったので、COSUMIの手番でも良い手悪い手表示するようにしました。ユーザ側だけに表示を限定したいという要望は必ずあると思いますが、特別なUIを用意したくはありませんので、申し訳ありませんがこのまま使ってください。

最後にもうひとつ違いを挙げると、以前の悪手指摘機能は対局リプレイページに飛ぶだけで利用できましたが、サーバリソースが無駄に使われても困るので、今回からは基本的にワンクリック必要にしています。ただし、今現在はまだそうはなっていないのですが、8路盤以下に関しては自動で有効になるようにしようと思っています。というのは、8路盤以下は今までも自動だったからいうことがまずひとつと、あと、今私が作っている8路盤までの棋譜を日本語で添削するNNは、クライアントサイドで動かす予定で、だとしたら必ず自動で有効になるようにしますので、その時ともつながりがいいかなと思うからです。それから、サーバ負荷がまだちょっと正確には読めないので、現在は初手から最大100手までしか解析しませんが、これはおそらく300手までいけると思います。現在、データを取っているところなので、しばらくお待ちください。最終的には、サーバ負荷に応じて、多少の制限はするかもしれません。

それから、これも忘れずに書いておきたいのですが、今回の棋譜解析機能は、COSUMIで打たれた棋譜に限らず使えます。これとかこれとかから、適当にご利用ください。

対局も棋譜解析も、大量のパラメータを手で調整しなければいけませんので、しばらくは微調整が続きますが、KataGoを利用したもろもろの実装は、一応これにてひとまずおしまいです。この死ぬほど強くて、死ぬほど速くて、死ぬほど便利で、死ぬほど安定した神プロダクトを作ってくれたlightvectorぱいせんとゆかいな仲間たちに、心から感謝申し上げます。GNU Goをブラウザで動かしたいと思って始め、Fuegoで大きくなったCOSUMIですが、KataGoですべての夢が叶いました。今現在、KataGoは1日あたり約270万手打ってくれています。

[追記 2022/10/3]
8路盤以下でかつ総手数が100手以下の対局は、棋譜解析機能が自動で有効になるようにしました。また、解析するのが初手から最大100手までだったのを、最大200手に伸ばしました。これでもまだ余裕があるようなら、できるだけ早い段階で300手にします。今の感じだと、たぶん全く問題ないでしょう。それにしても、これだけの処理がg5g.xlargeで足りてしまうのは本当にやばいですね。ついCOSUMIを始めた頃のことと比べてしまうのですが、ハードもソフトも本当に性能向上したんですねえ… 今、囲碁を始めようとしている人が、ちょっと羨ましかったりしてしまいます。

[追記 2022/10/6]
初手から最大300手まで解析するように変更しました。

[追記 2023/2/4]
まだリソースにぜんぜん余裕があったので、15路盤以下でかつ総手数が250手以下の対局まで、棋譜解析機能が自動で有効になるようにしました。また、初手から最大500手まで解析するようにもしました。

それから、今現在使用している「レベル2以上は9路盤で66%、11路盤で70%、13路盤で73%、15路盤で75%、19路盤で77%、レベル1とレベル2の間は、9路盤で71%、11路盤で75%、13路盤で78%、15路盤で80%、19路盤で82%」という自己対戦での勝率は、もうこの数字で固定することにします。いろいろ考えたのですが、まあいいかげんなのではと思います。少し調べてみたところ、KataGoの新しいb18c384nbt-uecっていうモデルはかなり良さそうなので、もうしばらく時間をおいて少し様子を見たうえで、その新しいモデルの使用とこまごまとした修正を入れたものを、COSUMIの最後のバージョンとしたいと思います。そして、その時に19路盤はレベル9も追加すると思います。

去年の春ごろは「もうすぐできるかな?」なんて思っていた日本語で添削する機能は、ちょっと手が止まってしまいました… でも、これもできるだけ早く一回形にしたいと思います。

COSUMIで多数の小さな改良を行いました(2022年4月)

COSUMIで以前から気になっていた部分を、まとめて大量に追加・修正行いました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

全て些細なことばかりで大した話は特にないのですが、一応その中で主だったのをここに書いておきます。

まず、対局リプレイページに、そのページのURLが入っている二次元コードを表示するようにしました。何かの時に使えると思います。それと、スライダーを動かしたりして進めたその局面を初期表示とするURLに変更するボタンも用意しました。先ほどの二次元コードやツイートボタンもこの新しいURLでのものになりますので、これも便利な時があると思います。

次に、ただの碁盤で、一番最後の局面で右矢印を連打してもらうと対局リプレイページに行けるようにしました。これ、以前できないかと聞かれたことがあって、その時にどういう仕様で作ればいいかなと考えている内に、もう作った気になっていました…(笑) 本当にすいません。馬鹿みたいにシンプルな作りですが、そこはご容赦ください

それから、オンライン棋譜ビューアのSGFのパーサを改良しました。もうあまりエラーを出さないと思います。

最後に、white shade囲碁ベンチマークのTensorFlow.jsのバージョンを、最新のに上げさせてもらいました。囲碁ベンチマークのベンチマーク結果については、当然、以前のバージョンとは比較不可ですので、こちらもVer. 3.0という新しいバージョンということにしておきました。

話は変わりますが、AWS EC2のC7gインスタンスはまだ使えないんでしょうか? Savings Plansがひとつ切れたので、どうすればいいのか迷ってます。

[追記 2022/6/5]
COSUMIのこれからの予定を、少しだけここに書いておきます。

C7gインスタンスがようやく来たので、ちょうどいい機会だと思い、これからのサーバ構成をどうしようかといろいろ調べていて気が付いたのですが、KataGoってめちゃくちゃ軽いんですね! b20c256playout 1CUDAmatchモードで、g5g.xlarge500~600手/秒g5.xlargeでは1300~1400手/秒出ることに気づいて本当にびっくりしました(さすがに桁を間違えてるだろと、何回も計算をし直してしまいました(笑))。一応補足しておくと、matchモードとかanalysisモードとかでは、複数の局面をまとめてNNに放り込んで高速化するという、とても素敵な実装になっている(これは前から知っていました。しかし凄い!)のが大きいのですが、今まで自分は一体何を勘違いしていたのか、もうよく分からなくなるぐらい思っていたより速いです。COSUMIはg5.xlargeの1.5倍以上のお金を掛けて120手/秒ぐらいなので、もはやKataGoの方が全然安いですね。

先月でCOSUMIは開始してから14年が経ちました。さすがに折り返し地点はすでに通り過ぎてしまっていると思っています。そして、何か新しいものを実装するのも、もう今が最後のチャンスだなという気持ちでもいます。以前からCOSUMI最後の仕事としてKataGoは出来れば使いたいと思っていましたが、直近は、やっぱり少し無理かなと感じてて半ば諦めモードでいたので、それをやらないのならその代わりにと、今ある悪手指摘の機能を置き換える、棋譜添削を日本語で行うNNを、ここ2か月間ほどずっと作っていました。これについてはほぼ見通しが立ったので、残りの作業は必ず最後まで進めますが、上に書いたようにKataGoがこんなに軽いのであれば使わない手はないので、そちらも少し頑張ってみます。安定して動きさえすれば、19路盤でlevel 10とかも余裕でしょう(それができたらなんかすごいですよね。COSUMIじゃないみたい!(笑))。とりあえず今は、analysisモードのレスポンスで、rootInfovisitsが1の時、moveInfosが空になってしまうのが理由が分からずストップしてます… これなんでなんだろう?

ちなみにC7gは、私がいつも使っているGNU Goを同時に100個走らせるベンチでC6gより26%ほど速く、料金は7%ほど高いって感じでした。

[追記 2022/6/9]
なんかいろいろ勘違いしていたのですが、moveInfosが空になってしまうのはそれでいいんですね。なんとか動きそうですが、いつものことながら棋力の調整が死ぬほど難しい…

ナニゴケをアップデートしました (Ver. 1.10.0)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別するWEBアプリ
https://www.nanigoke.net/

今回は、判別可能な種に、「キンシゴケ」、「ススキゴケ」、「ヒメタチゴケ」、「ヒメハイゴケ」、「ミヤマハイゴケ」が追加されました。32000枚だったTrainのデータ数は、36000枚になっています。TensorFlow.jsも最新のバージョンにしておきました。

今回は、それ以外にもいくつかの大きな変更を行いましたので、以下だらだらと書いていきます。

その1。今までは、全面1回、辺の長さ90%で中央1回、辺の長さ80%で一番左上、右上、左下、右下の4回の計6回のpredictの出力を平均して、それをユーザに見せていました。それを今回は、全面を何もしない、左右フリップ、90度回転、270度回転の4回、辺の長さ75%で一番左上、右上、左下、右下の4回、辺の長さ50%で一番左上、右上、左下、右下の4回の計12回としました。また、今までは出力を平均するときに、predictに使用した範囲の「面積(辺の長さ^2)の比」で加重平均していたのですが、これを「辺の長さ^1.5の比」で加重平均するようにしました。狭い範囲でpredictした結果を、今までよりは重視するということです。さらにここまでのことに関連して、predictの回数が増えて重くなったことを緩和するために、NNへの入力の解像度を268×268から236×236へと少し落としました。細部を見ないと判別するのが困難な蘚苔類で、入力の解像度を大きく下げるのは、基本的に私はとても危ないと思っているのですが、今回は、辺の長さ50%というかなり狭い範囲でのpredictを追加しましたので、実質的には今までと同じか、もしくは少ししっかりと細部を見るようになっていると思います。細かい話ですが、今回のこういった変更が可能なように、学習データを作る部分(もう一番分かりやすいところでは、写真の撮り方)でもいろいろ対応をしています。

その2。NNの入力直後の畳み込みを何回か重ねてからAverage Poolingで1/2にダウンサイズしていた箇所に並行して、先にAverage Poolingで1/2にダウンサイズしてから畳み込みを何回か重ねるパスも用意して、後ろで合流させるようにしました。高周波成分を少しとばしてから見てみることも必要かということで、ほんのりOctConv風味、1×1のConv/3×3のConv/2×2のSENet/1×1のSENetの一番真ん中を補完するイメージでもあります。上にも少し書きましたが、蘚苔類の画像分類はもうこれ以上は無いのではと思えるぐらいに、「テクスチャだけ見とけばいいんだよ」なタスクだと私は感じていますが、それはロスなどの数字を改善することだけを目的とした場合に顕著なだけで、実際にユーザが使ってくれる時のことを考えると話はそこまで単純ではありません。ナニゴケみたいなサービスは、「正解したら100点、不正解なら0点」ってことはなく、判別を間違えた時も、その後、ユーザが図鑑を見たりとか他の人に聞いたりとかアクションがあって、そのアクションに良い影響のあるアウトプットをしないといけないと思います。ところが、ナニゴケの間違え方を見ていると、「本当に本当にテクスチャだけしか見てないのね…」って言いたくなるようなことが多くて、これは一般的な人間の感覚とはかなり異なるので、ユーザからナニゴケが間違った理由を推測しづらい。そして、結果的にそれは使いにくいってことになると思います。と言った考えがあるので、数字が悪くならない限り使いたいと思っていたネットワークの構成の変更だったのですが、パラメータが増えたからかなんなのか、数字も少し良くなりましたので迷わず採用しました。また、これに関連して、Data Augmentationで少しぼかしを掛けるようにしました。これはもっと早くやっとけば良かった… なぜだか少し重すぎるような気がしていたのですが、当然ながら別にいうほどではなかったです。

その3。NNの学習時に、今現在119ある「ナニゴケで判別することができる特定の種」を、3%の確率で「このWEBアプリでは未分類の苔」として学習することにしました。ユーザが実際にナニゴケを使ってくれた時に、かなりの確率でそれはナニゴケでは判別できない種であることがあるはずなのですが、今までのNNでは、なかなか「このWEBアプリでは未分類の苔」とは答えてくれなかったので、こういう対応になりました。今までもこの問題はかなり気にしていて、もっと小手先の対策をいくつかしていたのですが、それぞれ、改善する程度が小さすぎる、もしくは別の弊害があるなどと思ったので、もう少し真面目にと(「真面目に」って言って嘘を教えるのですが…(笑))、こういう対策になりました。自分自身でも実際にナニゴケを使ってみて、今後はまた、3%という数字を変更していく可能性があります。

その4。学習時の最適化方法として、SGDなSAM(Sharpness-Aware Minimization)を使用しました。そして、劇的に数字が良くなりました(スゴイ!)。ここ最近は、手元のデータに対するロスがもうそれほど大きくはなかったので、あんまり真剣にこの辺りを探ったりはしていなかったのですが、こいつは大きかった… 今後、ナニゴケを続ける中で、学習方法に関するこれ以上おいしい知見が降ってくることはもう無いでしょう。これにて終了って感じです。ASAM(Adaptive Sharpness-Aware Minimization)も試してみましたが、SAMをはっきり超えるハイパーパラメータが見つかりませんでした。でも、もういいです(笑)。

同じようなことを繰り返し繰り返し書くことがこのブログでは本当に多いのですが、学習データを充実させる以外にできることは、もう本当にほとんど無くなったような気がします。仕方ありませんので、バカは無駄に頭を使わずに、二本付いている足で外を歩いてきたいと思います。

COSUMIが非常に重くなっていたのでサーバを再起動しました

昨日7日14:45ぐらいからでしょうか、COSUMIが非常に重くなっていたので、先ほどの8:45ぐらいにサーバを一度再起動しました。

囲碁ブラウザゲーム COSUMI
https://www.cosumi.net/

とりあえず、今現在は特に問題ないようですが、しばらくの間、不安定な状態が続く可能性があります。原因は現時点ではよくわかっていません。

サーバ再起動した時に、数百局の対局がぶちっといってしまったと思います。どうかお許しください。

[追記 2022/1/8 10:25]
たぶん分かりました。ハードウェアの障害だと思います。今後、どこかのタイミングで比較的長い期間サービスが停止する可能性があります。先ほどの再起動で改善したようにも見えるのですが、おそらく根本的な解決にはなっていません。うう、めんどくさい…(泣)

[追記 2022/1/8 18:10]
メモリ周りのハードの問題で間違いなさそうです。明日9日の早朝にストレージ以外すべて交換してもらえることになりました。メンテの時はいつもそうですし、確定的なことはとても言えませんので、向こうに予告等を載せておいたりはしませんが、一応、4:00ぐらいに新規の対局開始を止めて、5:00ぐらいにサーバを完全に止めて、7:00までにできれば復帰させる予定だと、ここに書いておきます。

[追記 2022/1/9 6:45]
交換作業が終わりました。今のところ、特に問題ないようです。それではベッドに戻ります。オヤスミナサイ…

ナニゴケをアップデートしました (Ver. 1.9.0)

ナニゴケのNNを新しくしました。

ナニゴケ – 苔の種類を判別するWEBアプリ
https://www.nanigoke.net/

今回は、判別可能な種に、「オオカサゴケ」、「オオサナダゴケモドキ」、「カラヤスデゴケ」が追加されました。29200枚だったTrainのデータ数は、32000枚になっています。ネットワークの構造は特に大きな変更はありません。その他についても学習データの作り方を微調整した程度です。例によってTensorFlow.jsは最新のバージョンにしておきました。

ナニゴケを始めた時に最終的な目標は、「判別できる種の数200・Trainに使用したデータ100,000枚」と書きました。この目標設定はなかなか適切だったのではと思っているのですが、それからするとデータ数的に今回のアップデートで三合目を超えたことになります。ここまでナニゴケのためにもろもろトータルで3000時間(!)ぐらい費やしたんじゃないかと思うのですが、ここから7000時間も掛かるとは思いませんので、1日2時間ペースでやれば10年以内には終わるかな…(泣)

来年は、苔を探しに日本全国いろいろなところに行く予定にしています。お金も少し掛かってしまいますが、どうせいつか行くならできるだけ早く行ってしまった方がいい。ナニゴケをリリースしてからだけでも、もう2年半も経ったのですが、未だにスタートラインにつけていないような奇妙な感覚がなぜだかずっと無くならず、せめてそれだけは自分の中から早く消してしまいたいなあと思っています。