日記

日記です

0905

競技プログラミング

 今日の一問。Union Findの実装が汚く思えてきたのでそろそろライブラリを作ろうかという気分になってきた。

1年前の日記

 王座戦ですねぇ。羽生さんが突然投了したやつだったはず。昨日もそうだけど、一日制のタイトル戦の方が帰ったときまだ続いていて観れることが多い。王位戦本当に印象薄いんだよな。

 カープ、これは一年前安部が逆転サヨナラホームラン打ったやつだ。今年も下水流の逆転サヨナラホームランとか凄かったけど、強いとこういう異常な勝ち方が出るんですよね。こんなことずっと続くわけがないので、今のうちにたくさん楽しんでおきたい。今日は負けました。そして新井が引退。一つの時代が終わっていくのです。

ダークソウル

 ハベル? を入口付近でちょろちょろしてハメっぽい感じで倒した。飛竜の谷を見つけて、それくらい。ちょっとずつ。

 しかしそろそろ428もSteamに来るんじゃなかったっけ。ダークソウル終わりそうにないなぁ。

コンピュータ将棋

 今日はプログラムには何も触らず合宿での発表資料を作っていた。なんとなくアイデアが浮かんできたけど、サーベイ不足のせいでもろ被りしている先行研究が本当にないのか自信が持てない。僕がパッと思いつくものなんてやられている可能性がめちゃくちゃ大きいはずだよなぁ。

 先輩も教授も、あまり僕のテーマらへんには詳しくないため、僕はものすごく井の中の蛙になっているのではないかという気分に襲われることがある。

その他

 春学期に院の授業を先取りしていた分の成績が出ていた。4科目とって全部最高評価で笑った。可視化とコンピュータビジョンの講義は英語だったのでほとんど聞いてなかった(聞いてもわからない)し、数学系のグラフと離散凸解析の講義は難しすぎてなんもわからなかったんだけどなぁ。まぁ院の講義なんてそんなもんですか。というか院に行ってまで講義受けないといけないのなんなの。

 夜は研究室でピザパーティー。M2の人たちは学年内で仲が良くて結構こういうことが行われるわけだけど、僕は隅っこの方で黙々と食べているだけ。多人数での会話というのがすごく苦手になっている。口を開くタイミングがわからないし、他の人がしゃべってるからその必要もないかなと思ってしまう。割り込んでまで主張したいことなどなし。

 夏休み中はM1の人はほとんど見かけない(一人だけ夜が更けてから時々来る)し、B4も僕以外はあまり……。もしかしたら僕が帰ってからみんな来ているのかもしれないけど。M2の人達はめっちゃ来ていてうるさいくらいいろいろ喋っている。学年の色が出るというものですなぁ。

 しかし僕は居室時間が長いだけで成果出てないし完全に無能なんだよな。こんな日々を続けた先に何があるのか。考えてもあまり愉快な気持ちにはなれない。

 やらないで後悔するよりもやって後悔~みたいなことがよく言われる気もするけど、言葉に関しては圧倒的に「言わなきゃよかった/書かなきゃよかった」と後悔することの方が多いし、実際にそういう損失の方が大きい気がする。本当に、言わなきゃよかったな……。

0904

競技プログラミング

 今日の一問。木DPはよくわからないままになんか解けているという感じ。

将棋

 王座戦がめちゃくちゃ熱かった。どっち応援するか決まらないなと思いながら観始めたんだけど、最終的にはどっちかというと王座の方に肩入れする気持ちが生まれていた気がする。負けてしまったけど観てて面白い対局だった。

コンピュータ将棋

 どうもガウシアンノイズでは上手く行かないのでとりあえずディリクレノイズを実装してみた。分布同士の各要素について内分を取ったものもちゃんと分布になってるのは計算で確認したが、数学的直観が貧弱すぎてこれをパッと把握できない。各要素にガウシアンノイズを入れてまたsoftmaxをかけ直すということをやっていたんだけど、これはそんなに悪いことなんだろうか。

std::vector<double> MCTSearcher::dirichletDistribution(int32_t k, double alpha) {
    static std::random_device seed;
    static std::default_random_engine engine(seed());
    std::gamma_distribution<double> gamma(alpha, 1.0);
    std::vector<double> dirichlet(k);
    double sum = 0.0;
    for (int32_t i = 0; i < k; i++) {
        sum += (dirichlet[i] = gamma(engine));
    }
    for (int32_t i = 0; i < k; i++) {
        dirichlet[i] /= sum;
    }
    return dirichlet;
}

 とりあえずこんな感じ。基本的に山岡さんのブログをパクっただけです。

 PRMLはいったん置いておいて、『ベイズ推論による機械学習入門』の方を読んでみる。ディリクレ分布自体の項目というより、一般的にパラメータに関する事前分布について書いてあるところをしっかり読んだ方が良さそう。パラメータについての分布っていうことで、多少は理解できてきたかもしれない。

 さてパラメータの決定。AlphaZeroの論文には

Dirichlet noise Dir(α) was added to the prior probabilities in the root node; this was scaled in inverse proportion to the approximate number of legal moves in a typical position, to a value of α = {0.3, 0.15, 0.03} for chess, shogi and Go respectively.

 とあるが、このαの値が何を示しているのかがよくわからない。将棋の平均合法手は60とか80とか言われていた気がするけど探しても上手く見つからない。0.15の逆数は6.66とかで、一桁違えば納得感もあったんだけど……。

 Wikipediaを読むと

ディリクレ分布の確率密度関数は、同時に発生することのないK個の事象がそれぞれ\alpha_{i}-1 回発生したときに、各事象の起こる確率がx_{i}である確率を与える

 とあり、-0.85回発生するとしたときのパラメータの分布? 何を言っているのかわからん……。

 しかしノイズのかけかたとかそんな話ではなくもっと根本的なところが間違っている気がするなぁ。

 あとUCBを計算するときのボーナス項の分母も+1では大きすぎなように思えて、+0.000001とかにしないの? とか思ったけど、それだと全幅探索っぽくなってしまってMCTSの良さが失われるのかなぁ。

 学習が進むにつれて1回の学習における勾配が増えているのも気になる。そういうものだったかなぁ。

 なにもわからないし実装も上手くいかなくててつらい思いをする時間が長い。研究ってそういうものって言われればそうなのかもしれないけど。

 再現にすら成功しなくてアイデア試す段階にたどり着かないじゃーん。

1年前の日記

 当たり前だけど1年前はデレステ2周年記念でいろいろやっていて寂寥感がある。

デレステ

 とりあえず親愛度をMaxにして、気分としてはリザルト画面。

ダークソウル

 鐘のガーゴイル月光蝶を倒した。しかしここからいきなり難易度上がった感じがあるな。強盗団もオオカミも見張り塔地下のキャラクターも倒せる気がしない。どこからやっていくのが正解か……。

 どうでもいいけどダークソウルやっているとめちゃくちゃ独り言が出てしまう。いやーなんかもう最近は歩いているときとか研究室ないでも結構出てしまうので気を付けたい。

その他

 Twitter、見たいアカウントをブラウザのブックマークに突っ込んでおくという状態にまで降りてきた。しかしログインしていないとリプライを含む欄は見れないらしくてひどい。

 今日は研究室に誰も来なくて、なんかめちゃくちゃ眠かったしやる気も出なくて早く帰ってゲームしたり将棋観たりプロ野球観たりしていた。そういう日もある。

0903

コンピュータ将棋

 AlphaZeroの論文にはやっぱり自己対局におけるプレイアウト回数は800回って書かれているように見えるんだけど、本当に最初の段階で駒割すら与えていないというはずなのにこれでまともな対局になるんだろうか。千日手ばかりとかになったりしないか?

Dirichlet noise Dir(α) was added to the prior probabilities in the root node;

 これがかなり本質的だったりする? ディリクレ分布なんもわからん……。全体的に僕は確率分布に対する知識が甘すぎるんだけど、やりたいことはこっちに近い気がするのでなんとかしなければ。PRMLなのかなぁやっぱり。

 いろいろいじってたらやっぱりノイズの調整が結構重要そうな気がしてきた。適当にガウシアンノイズでやってみたんだけど、ディリクレノイズも実装するべきだなぁ。というかdlshogiの山岡さんが書いているのでそれを真似するだけだけど。山岡さんはなんでもやっている凄い人。

 何一つ本も論文もちゃんと読めたという気がしない。もっと勉強しないといけないけど実装力もないので実装に時間がかかってしまい、終わり。

 MCTSについてのサーベイ論文を何気なくプリントアウトしたら40ページとかあってヒエーってなった。読むのに1か月かかりそう。英語弱者なので。

デレステ

 北条加蓮さんSSR。案の定来ましたね。まぁさすがに予想はできていた。フェスの方で来なかったらまぁね。某仁豆腐氏の絵でもなんか良い位置に置かれてたし。誕生日というのもあるのか。なるほどね。

 しかし無料期間があるので、効率で言ったら最終日に……ということになるんですが、万が一最終日(合宿中!)が忙しくて忘れたりしたら大変だし、すぐ欲しいという気持ちもあるのでさてどうするか。

 どうするか(悩む余地もなくおもむろに天井まで回し始める)。

before

after

 ま~あ本当に天井まで行くとは思ってなかった。やっぱりガシャは悪い文明ですね。過程で来たのは結城晴、南条光、輿水幸子、早坂美玲、棟方愛海、古賀小春(×2)、栗原ネネということで8枚。数としてはそんなに悪くないけど限定なしとは。天井まで回す最中に北条加蓮さん引けるものと思ってて天井分で池袋晶葉さんを引きたいなーとか皮算用してました。

 北条加蓮さん、衣装は前の限定の方が好きだな。恒常も若干そうだけど、明るい服を着ると一気に胡散臭さが増すタイプのビジュアルをしている。というかあれなんですよね、多分胸が大きすぎてバランスが悪く見える。

 特技はどうなんだろう、ライフを上げなきゃいけないの使いにくそう。

 ホーム画面でのセリフがどうしても佐久間まゆを煽っているように聞こえてしまい面白い。適度にいがみ合っていてほしい。

 特訓コミュ。あぁ北条加蓮さん、呪われていて欲しい……。僕の純粋な願いです。メモリアルコミュ5話なんてものもなんかあった。分岐があるのが当たり前になっている。どっちもはしゃいでて面白い。

 しかしTPイベントも終わってしまったし3周目も来たしで、もうあまり楽しみがないな。今までデレステにはスカウトチケット3回分くらいはお金投入して、その分以上にしっかり楽しんだのでまぁ満足です。別に引退するぞ! って決めることはないけど、自然と触ることも少なくなるんじゃないかなぁ。

その他

 祈りを口にしてしまったのでそのうち天罰が下るのだろう。

0902

競技プログラミング

 今日の一問。セグメント木わからん人間です。

 16:30からはバーチャルコンテスト。全部解けたので良し。桁DPもちょっとだけ慣れてきたか。

コンピュータ将棋

 今日はノータッチ。

1年前の日記

 頑張っているようです。

デレステ

 フェス限神谷奈緒良いですね。良いです。

 イベント曲、オタクの歓声が邪魔。

ダークソウル

 毎日ちょっとずつやっている。牛頭のデーモンを倒したのは数日前なんだけど、やっぱりボスを倒すときはちょっと手が震える。手が震えるゲームは良いゲームです。

その他

 今日は上手く寝られなかったのと、強い雨が降っていたのと、宅配物があることを思い出したのと、まぁそんな感じの理由で大学には行かず。二度寝して昼頃起きて今日の一問を解いたらもうバーチャルコンテストの時間でなにもできないという感じ。

 「マストドン AWS」などで調べれば適当なものがたくさん出てくる。手順を丸ごと真似ればなんとかできそうではあるけど、勉強になるかなぁ。

 最近めっきり「人と仲良く」の気持ちが薄れてきてしまった。今は「隠れて生きよ」の気持ちです。何派だったっけ。エピクロス派? まぁ「隠れて生きよ」もむしろ仲間内での助け合いが重要で、本来は「人と仲良く」路線なのかもしれませんが……

 ほとんど交遊もないけど楽しく生きて欲しいなという人はいる。祈りです。

0901

 マストドン、やるなら自分でインスタンス立てるという感じかな。サーバー借りていろいろいじってみたいという機運が高まっていて、練習としてちょうどいいかもしれない。いや、ちょっと難しすぎるか。ネットワーク系の知識がなさすぎるから何とかしたいというのと、インターネット原体験が個人サイト全盛の頃だというのもあってそれを模倣しに行くみたいな。それでやるのがマストドン? まぁそういうこともあるでしょう。

競技プログラミング

 今日の一問

 もう一方のブログが競技プログラミングで埋め尽くされている。違うんだ……。こういうブログにしたいわけじゃなかったんだ……。しかしもう毎日更新の呪いをかけられているので逃れられない。合宿で途切れる可能性はあるけど。

コンピュータ将棋

 優等局面への繰り返しも千日手判定していて、それで異常に千日手が多かったのかもしれない。しかしまだ上手く学習しない。心が折れかかっていて、ニューラルネットもう触りたくないという気持ちが強くなっている。僕は線形評価関数に帰るぞ!

日記の振り返り

 一年前の0831

 糸谷八段、あれはすごい人だなぁという感じがする。昨日もA級順位戦で稲葉八段に阪田流向飛車で勝っててなんじゃそりゃーって感じです。

 コンピュータ将棋では探索部に悩んでいた感じ。今も悩んでいる。ほんと、なんで上位ソフトがあんなに深く読めるのかさっぱりわからない。探索深さで2倍くらい違うのでどこかに重大な差があると思うんだけど、よくわからないまま。探索じゃなくてオーダリングとかなのかなぁっていうのはそう。

 そして日記やめようとか書いているぞ。

 一年前の0901

 やめてないじゃん。まぁなんか日記じゃなくてコンピュータ将棋に関する疑問点を書いているわけですが。

  • やねうら王も技巧もAperyもsearchのbeta cutが起きたところでHistoryの更新してなくない?

 自己解決しているしなんだこいつ。

  • CounterMoveHistoryの概念がわからない

 今もわかりません。

  • Historyの更新タイミングがわからない

 一回の思考中はHistoryずっと同じの使っているし反復深化もするんだからこれでいいんだよ。

  • qsearchの作り

 ひょっとしてsearch関数にbool型のテンプレート引数渡して、それで部分的にいじることでqsearchも書けるんじゃないのとか思っているけど、上位ソフトのコードを見るとさすがにsearchとqsearchは違いそうなんだよな。

  • 置換表

 排他制御入れないとエラー出るのはNULLポインタを参照していたからで、これは今は直っている。しかしスレッド数を増やしても強くなるわけではない。

  • 探索局面数の深さに対する伸び方

 これはもろに探索効率ということで、やっぱり今でもAperyとかと最初の深さ1~9くらいまでを比べると必要な探索局面数が段違いなんですよね。謎。

  • 置換表

 置換表は難しいよね。

その他

 書き溜めるのは変わらず、夜に推敲をしっかりやろうというところに収まった。

0831

コンピュータ将棋

 MCTSがなんか変な挙動を示していたけど、駒割の初期化ミスだった。昨日Positionクラスの持つ評価関数パラメータへのshared_ptrを単なる参照に変更したときに、初期化周りをいろいろいじってその結果こういうことが起きたのだった。前はshared_ptrのコピーが結構たくさん発生していた気がして、その分少し良くなったんじゃないかという気はする。理念的にも不必要にポインタを持ちまくるのは好ましくなく、できるだけ参照で済ましておきたいところ。

 千日手判定も32手分くらいまでで打ち切ることにした。初期局面まですべて遡る方法では終盤になると明らかに遅くなる。

 相変わらず千日手は多く、これはどうしようもないことなのかな。ランダム初期化したパラメータではまともな対局にならないが、AlphaZeroとかよくまともに学習できたなぁ。というかどんな感じのソースコードだったんだろう。見てみたい……。

 GitのRevertについて勉強する。コミットをもとに戻すけど削除するわけではなくて、むしろ元に戻したというコミットが追加されるらしい。YU-NOじゃん! いや別にそんな珍しいアイデアだとも思わないけど。

 コミット、時系列に並べられるから最新の方から全部Revertしなきゃいけないのかと思ってしまうけど、各ファイルが編集された一番新しいところだけ考えればいいわけだよな。しかしそれを判別するのってコミットのコメントしか情報がない……? コメントめちゃくちゃ大事そうだなぁ。いつも適当に書いてしまうけど、もうちょっとちゃんと書きましょう。

 ようやくNN版でもRootStrapで学習できたようだ。嬉しい。と思ったら錯覚だったっぽい。悲しい。

 あと数か月あればなんとか研究としても形にはできそうかなぁ。コンピュータ将棋は高速化とか細かい改善が結構本質的だと思っていて、テーマをがっつり掲げなくてはいけない研究とはあまり相性が良くなさそうだなーとは思う。Alpha Goとかが異常すぎなんですよね。NNUEもかなりすごい。ああいうことはそんなポンポン発生しないでしょーという気持ち。気持ちです。

デレステ

 10連1回だけやるかーっていう結果。

 デレステやる気が出てきました(ちょろい)。衣装がかっこよくて好き。暗めなドレスの北条加蓮さんと対応が取れていて面白い。双翼とか並べると愉快な気持ちになる。

 他人を駆り立てる要素が発生してしまいそうなのでSNSにガシャ結果のスクショとかは投稿したくないんですよね。そういう邪悪成分にはできるだけ加担したくない。

 担当申請が来るたび北条加蓮さんに「友達って、大事にしたほうがいいよ」って言われる。なるほどですね。人生の学びがある。

 イベントコミュを見る。なんだこのメンツ。

その他

 状態が「疲労」になっている感じがある。何もできない。

 「~という気持ち」という文章を入力したら自然と「気持ちです」を付け加えてしまう病にかかっている。これはなに?

 何かものを作ったらちゃんと宣伝したほうが幸福度は増えるんじゃないかな。人によるかもしれないけど。

 カープは勝ちました。すごい勝ち方するなぁ。強いんだなぁ。

0830

 結局一日で逐次書き溜め形式に戻ってきた。Twitterで呟くと自然とそのままTL見て時間が飛んでしまうし……。まぁせっかくこんな意味不明な日記やっているんですからね。適当に活用していきましょう。

 マストドンってどれくらいサーバに負荷かかるものなんだろうと思ってちょっと調べてみたらこんな記事が見つかった。

 インフラエンジニアってすごいなぁ。クラウド使ってこんな感じにやるのが現代調なんですか。こういうことまったくわからない。

 本当に興味がアルゴリズム部分に偏っているわりに強くはないのでどうしようもない。AtCoder青じゃ全然足りないよなぁ。うーむ。機械学習系のコンペとかにも出てみるべきなんだろう。

コンピュータ将棋

 千日手判定を厳密化することで自己対局で千日手にあまりならなくなった。千日手は学習データから外すようにしているので、これで10倍くらい差が出るんですね。

 しかしなんか生成局数をn倍したときかかる時間がn倍どころではなく増えている気がする。13.21秒/局はちょっとかかりすぎて、山岡さんのブログ

秒間17.9局面

 に負けていそう。そんなもんかなぁ。プログラマによって生産性にめちゃくちゃ差が出るっていうの悲しい話ですよね。

その他

 研究を何もやっていない。死にそう。

 トゥートを埋め込むとこういう感じになるのか。それはそれとして他人のお気に入り欄見るの好きなのでこれもあまり好みではない要素ですね。全体的にやっぱりマストドンは思想が合わなそう。