日記

日記です

0907

競技プログラミング

 今日の一問。問題を解くのもいいけどアルゴリズムとかデータ構造をちゃんと学んでいった方がいいかもしれない。青に届くくらいの力がついてきた今なら蟻本を読み込んで得られるものも大きいのではないか。

コンピュータ将棋

 うーん、長時間回していると結局千日手が増える現象は結局出てきてしまったし、勾配も大きくなっている。挙動は良くなっている雰囲気があるんだけど、なかなか上手くはいかない。気になる点としては勝率のブレが結構大きい気がする。100局単位ならこんなもんかなぁ。

f:id:tokumini:20180907165258p:plain

 損失はまぁ若干下がっている雰囲気があって、そんなに違和感はない。

f:id:tokumini:20180907165303p:plain

 Eloレーティングの伸びが順調すぎてありえなさそう。52.5%の閾値はちょっと低すぎるとは思う。

f:id:tokumini:20180907165322p:plain

 一番怖いグラフがこれで、実際にパラメータが動いた量の絶対値の最大値を取ったものがこんなものになるのはおかしい気がする。指数的な伸びになりかけてるしよくわからん。

 実際にShogiGUI使って対局回してみたら全く強くなっていなかった。プログラム内の自己対局結果が信用できないという熱い展開。

1年前の日記

 テンプレ貼って修正するのを忘れたままにしている。ひどいですね。

 デレステプロ野球(3連敗!)も今は言及する気が起きないのでパス。

その他

 インターネット、ときどき異様な雰囲気をまとったブログとかが発掘できるので面白い。

 Twitterでフォロイー1000人とかいても把握しきれない気がするんだけど、人々はどうやっているんだろう。把握するとはアカウントが消えたときや、しばらく呟かなかったときに気づけることを指します。

 発表資料を作っていたんだけど、自分の研究の新規性がなんもわからなくなってきた。既存手法AとB(とC)を組み合わせただけじゃんと言われたらそれはそうですね以外に何も言えない……。そしてその組み合わせる手法の元論文についてあまり読み込んでないという。結局性能が出れば多少は正義がある気はするが。

0906

競技プログラミング

 今日の一問。3時間以上かかる地獄問題でした。競技プログラミング、こういうことがあるからつらい……。まぁしかし以前類問にぶち当たったとき後回しにしたから今回大変になったっていう面もあるんですよね。サボった分はどこかでツケが回ってくる。

 他人がインターンとか行っている時間で僕は競技プログラミングばかりやっており、なんというか先鋭化しているのではという感じ。まぁそれは性格的な話だから仕方ないとして、問題はそのわりに競技プログラミングも強くないってことなんですよね。もうちょっとは強くならないと。もうちょっと……。

コンピュータ将棋

 BonanzaMethodは上手くいくんだけどなぁと、ソースコードを眺めていたら学習で評価値を得るときに手番を考慮していなくて常に先手からみた評価値を使っていた。なんで何度も見たはずなのに気が付かなかったんだ……。とりあえず修正して回してみる。千日手が増える現象も勾配が増える現象も見られなくなって、ほのかに強くなっている雰囲気がある。勾配が増える現象があったから学習率を小さく設定していたんだけど、もう少し大きくていいかもしれない。成功してくれていると良いなぁ。

 AlphaZeroとの差分は今のところ

 の3点かな。気合を入れれば全部模倣することはできるはず。後は気合の問題。バッチサイズを大きくするのはメモリ量がちょっと不安だけど……。たしか最新50万局分は持っておくんじゃなかったっけ。読み直そう。

 1層目の活性化関数かける前までの差分計算も書いた。が、むしろ遅くなった。え、まじか。評価するのはリーフノードだけだから途中の計算がむしろ遅くてダメなんだろうか。えー。ショック。しかも差分計算間違っていたことがわかった。ショック。つまりテストすらちゃんと書けていなかったということでさらにショック。ちゃんと差分計算するの結構大変そう。僕に差分計算は無理だ~。

 ところでAlpha(Go)Zero式のMCTS、シミュレーションを省くのって結構大きな改変だと思うんだけど、なんで特に新しい名前を付けなかったんだろう。モンテカルロ要素ないのにモンテカルロ名乗るのは許されなくない?

1年前の日記

 去年から比べると多少は実装力がついて、自分なりの工夫を入れる段階には来ているかなぁという感じ。まぁおそらくこれでKPPTより強くなるってことはないんですが、それはそれ。

 広島東洋カープ、今年は結構苦労している印象があるんだけど、それでも去年のこの時期とほとんどマジック数が変わらないのか。勝つのは大変。

ダークソウル

 とくに進歩なし。病み村を覗いてみたけど落下死しまくる。飛竜でレベリングするのもいまいち効率が悪そう。

その他

 七尾百合子さんに似合うラノベ話、『悪魔のミカタ』が挙げられていましたね。まぁ僕は4,5巻あたりで挫折したままなんですが……。たぶん読めば普通に面白い気はするけどうえお久光の中ではどうなんでしょう。僕は単巻ものの方が好きなのもあって、どうしても短いシリーズの評価を高くしてしまう。『悪魔のミカタ』、ネーミングセンスは好きなんですけどね。

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くらいまでを比べると必要な探索局面数が段違いなんですよね。謎。

  • 置換表

 置換表は難しいよね。

その他

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