日記

日記です

0802

コンピュータ将棋

 search_stackを有効利用できていない気がしたので実験してみた。search_stackオフ側から見て

対局数 勝ち 引き分け 負け
1429 726 14 689

 勝率約51.3%。……これは有意なのか? しかし弱くなってはなさそうだ。search_stackは今のところNull Move Pruningのオンオフとkiller_moveにしか使ってないので、これらがあまり意味ないということか? 実装が間違っている気がする。うーんダメ。

 Bonanzaメソッドの部分をクラス化した。個人的に一つしかインスタンスを生成しないものをクラス化する意味があるのか? と疑問に思っていたけど、cppファイルの方にstatic変数をぐちゃぐちゃ置くのが汚く思えたので変えてみた。こっちのほうが見通しが良いように思える。一応static変数は使わなくても静的領域に生成されてしまうため、学習させないときもいくつか変数を無駄にとっていたはず。対してクラスの変数ならインスタンス生成までは作られないはずだから多少メモリの使用量が減るのかな? 別に学習用パラメータをstaticで持ったりはしてないので、本当にint型数個分とかそんなくらいだろうけど。

 パラメータの形式を変えた影響で学習し直さないといけないので、せっかくだから教師あり学習からやっていきますか。

 ハイパーパラメータとかを設定ファイルを外部において読み込む方式にしたら便利なことに気が付いた。気づかない方がバカである。今まで毎回ソースコード内に埋め込んでコンパイルし直したり標準入力から打ち込んだりしていたから……。

競技プログラミング

 今日の一問M_PIを使える方法がわかったの気分的にちょっと良いかも。

1年前の日記

 虚無っぽくなっている。確か去年は8月5日くらいまで課題があったのでまだ少し虚無日が続くんですよね。

その他

 日々疲れている。

 ここ数日ちょっと長めにプログラミングしてたら胸のあたりに痛みが発生してきた。

0801

コンピュータ将棋

 読み込みのミスではなく評価値計算におけるミスだった。具体的には駒割りの方も32で割ってしまっていたため駒割りを全然考えていないからおかしくなっていたのだった。よく考えれば、序盤はまともに指せていたんだから読み込みミスなわけがない。そんなところで根本的に間違っていたらもっとめちゃくちゃになっていたはずだった。

 んー、でもなんか弱い気がする……。なんだろう。探索のせいかな。

 とりあえずニューラルネットの方もちゃんと動くようにした。やっぱりC++が書きやすい。これで本当に強くなるのかなぁという気がするけどとりあえず試してみましょうか。

 最近はプリプロセッサのマクロ定義でいろいろ切り替えられるような書き方を多くしている。コードが見にくくなる気がして嫌なんだけど、まぁこれは仕方がない。

競技プログラミング

 今日はTopCoderの問題を二問解いた。一問目。特になんてことはない虚無。二問目。精神状態が悪化するタイプの虚無。

 TopCoder、問題文を読み込むまでに5分くらいかかるんだけどなにこれ。問題の質は良いのか知らないけど、UIのひどさとかいろいろ含めて全くやる気が出ない。外部からの強制力がなかったら絶対手を付けてないだろうなぁ。なんでこのご時世にJavaアプリ入れるのが普通とかなってんの。僕は絶対入れずに戦うぞ。

 TopCoder、非常にストレス。消耗してしまったのでAtCoderの方はABC102のB問題を解いて今日の分は終わり。AtCoderのシステムが好き。

1年前の日記

 将棋を頑張っている。左美濃急戦はほとんどやらなくなった気がする。そもそも矢倉に遭遇しない指し方をしている期間が長かったのもあるだろうけど。

 棋譜を見るとやっぱり弱いなーという気がする。しかし弱いというのはわかるんだけど替えてどうすれば良かったかというと今もわからない。指しているときに悲しみが生じるだけ。

その他

 「最後の」とつけることで、普段と変わらないものでも何か価値があるように思えてしまうことがあり、そういうのはあまり好きではない。しかし研で先輩方がよく「平成最後の夏」というフレーズを用いており、そこにはどこか素敵な響きがあることも確かだ。

0731

研究

 進捗発表会ではよくわからないことをふにゃふにゃと言って誤魔化した。誤魔化し人間です。

コンピュータ将棋

 やはり置換表の件は勘違いだった。ちゃんと置換表をオンにした方が8割勝ってますね。追試して良かった。

 評価関数をKKPT_KPPT型に修正しようとしたが、計算がなにもわからなくなってきた。こうしてみると評価パラメータをstd::array<int16_t, 2>という型で取って演算子オーバーロードしていく方式がめっちゃ賢く思えてくる。

 なんかNoviceとか評価値計算のとき3×2の配列を取ってるっぽいんだけど、これはkkp,kppの先手,kppの後手の3つについてそれぞれ生の値と手番ボーナスの2種類ということだよね? そう信じて実装するぞ。しかしNovice、実装レベルとしては僕に近くてわかりやすいんだけど、マジックナンバーをそのままプログラム中に埋め込んであるのでほげーってなる。

 というわけで全部std::array<int16_t, 2>に直した。バグった。なんで~。評価関数を読み込むだけのことができない無能。

 さっぱりわからん。うーん厳しい。書き方としてはこの方が洗練されているから前のぐちゃぐちゃコードには直したくない……。というか前までもちゃんと読み込めてたかは謎なんだよな。多少は強かったとはいえ。

 差分計算がバグっているのかもしれないけど、読み込んだ直後に見ても2万とか値がついているのはヤバい気がする。

f:id:tokumini:20180731214542p:plain

 2万近くの値が4個ずつっていうのがもろにバグってそうな挙動。助けてー。小さいコードで実験してみればいいじゃん! なんでそういう発想が出てこないかなぁ。まあ明日にでも頑張ろう。

競技プログラミング

 今日の一問。700点問題がスルっと解けてしまうことがあり、AGCという感じがする。

 なんか順位表みたらコンテストの時にA問題で24WAとか出していて面白かった。気になったので解いてみたら普通に難しい。これひょっとするとB問題より難しいのでは。B問題の記事書いたときに一瞬見えた解説が思い出されてしまって10分ちょいで解けたけど、それなかったら結構ハマっていた気がする。いやーAGC……。

1年前の日記

 横歩取り、当時からするとかなり減った印象。後手が避けてるんだっけ。

 学部の勉強もちゃんとこなせていないことがわかる。頭が悪く意欲もない人間って救いようがないですよね。

その他

 どうかあの子を救って。

 と歌うamazarashiが好き。

0730

 研究室着いたら即競技プログラミング今日のはそんなに難しくなかった

 Eigenと戯れる。頭が悪いので3層ニューラルネットワークを書くのにめちゃくちゃ時間がかかった。逆伝播の式とかすっかり忘れているなぁ。しかしやはりこの抽象度が好きだ。これくらいを自分で実装するのが気持ちいい。メモリの割り当てられ方とかをできれば意識しながら書きたい。Eigenのデフォルトは列の順番なんですかね。ちょっと珍しい気がするけど行列計算にはこっちの方が有利か。

 なんだかんだで学部の頃学んだコンピュータサイエンス系の知識は重要だなぁと思うことも多い。ちょっと通信系の講義が多くて辟易としていた面もあるんだけど、

 何をやれば論文になるのかよくわからないな。何もわかりません。

 そういえば置換表の件は結果があまりにも似ているので、単に取違えただけで別に弱くなっていない気がしてきた。また実験しなくちゃな……。

1年前の日記

 長い時間の対局をしたいという話。今なら81道場やれという感じだ。

その他

 プログラミングをやっているとあまり抽象的なことを考える時間がない。

0729

 昼前に研究室へ行ったけど暑くてダメ。

 午後くらいからやる気が出始めてやっと明後日締め切りの課題に手を付け始める。ヤバいヤバい言っているけど、なんだかんだで数時間やれば終わると思っているから直前まで手を付けないんですよね。実際終わりそうな雰囲気は出てきた。本当に数日かけないと終わらない課題だったらもっと早くにやる気が出ている。

 ちょっと目途が立ったところで競技プログラミング。AGCのBをこちゃこちゃ埋めていく。あと1週間くらいで埋め終わるかな。終わったらARCのC埋めに行くわけだけど、これが98問とかあるから3か月以上かかるんですね。まぁICPCアジア予選までに間に合えばいいか。

 その後はEigen触って遊んでた。速度的にはどうなんだろうなぁ。正直Pythonが好きになれないのでEigen使ってC++で書きたい気がする。どうせ大きなネットワークは使わない……かどうかは微妙。バックプロパゲーションとか面倒じゃんという話もあるけどそれはそれ。

1年前の日記

 いやーこの腰掛銀vs棒銀棋譜いいなぁ。自画自賛してしまう。

 競技プログラミングの悩みは尽きないですね。それは今もずっとそう。

その他

 まーじで明後日の進捗発表で言うべきことが何もない。居室時間は長いのに何をやっていたんですか? 今月は競技プログラミングをやっていた時間が長かった気がする。コンピュータ将棋もちょっとやっていたし。

 コンピュータ将棋のソースコード管理をGithubに移行したい。あの緑色の四角形が出るシステムがやっぱり良いんじゃないかと思うわけですよね。くだらないかもしれないけど結局モチベーションってそういうところに依存している面もそこそこあるのではないかという気がする。

 8月は"やっていき"パワーを見せていきたいですね。日記・ブログ・Twitter(2つ)・Githubを全て毎日更新していくとかそういうあれです。あと読書メーターも、とか思ったけど逆に読書メーターを動かせば読書アカウントの方はツイートが生えるわけだからそれは確かにありな話っぽい。

 ブログが競技プログラミングで埋まってくの本当に嫌なので頑張って1日に1.2記事くらい更新していくようにしたい。下書きを見ると没にした記事がたくさん転がっており、いくらかは再利用できたら面白いかなぁとは思いつつ、まぁほぼ役に立たないだろうな。

 研究、よくわからないポエムっぽいことをやりたいのか、理論とかにばっちり張り付いたものがやりたいのか、よくわからない。人工知能という話でぽえぽえ~なことも多分やろうと思えばできるしなんか教授はそういうのの方が好きっぽい雰囲気もあるんだけど、それでいいんだろうか。あまり虚無っぽい研究にはしたくないんだけど、数学的にかっちりした話は僕には無理だなぁとも思う。

 ICML2018の論文一覧見てたら心が折れそうになってきた。

0728

 雨がひどくなりそうなので今日は引きこもっていた。

 課題が真剣にヤバい気がする。あと二日とかしかないのにノータッチだぞ。そしてさっきサイトを覗いたら論文にアクセスできなくて、あれ、詰みでは。最悪単位落としても良いという甘えがあり、最悪。

 SoundHoundコンテストに出た。虚無な記事

1年前の日記

 精神が死んでいる様子が伝わってくる。どうでもいいことを考えている余裕もないのだろう。今も死んでます。

漫画

その他

 環境であるところの自分の趣味趣向は所与のものであり、これはどうしようもない。だからこの環境の中で報酬を最大化しなければならないわけだが、僕はどうもその最適化アルゴリズムがバグっているんじゃないかという気がする。報酬を、幸福度を、最大化することができていない。

 予定がない休日はそれが顕著になる。信じていない自由意志が、しかし現実的には発揮されてしかるべきシーンなのだ。それがこうなるんだから。

 まぁ別に、最適化部分に自由意志があるとも思っちゃいないよ。僕らの最適化アルゴリズムはバグっちゃいないし、だから環境がもともとこうなんだよ。

0727

 まずはコンピュータ将棋についてお気持ち記事を書く。ひどいコードを晒すことに対する抵抗がない。

 置換表の件はさすがにおかしいと思ってWCSC28版でも試してみたところ、そっちではちゃんと置換表オンにした方が強くなっていた。つまりここ3か月わちゃわちゃ探索いじってたせいでなんかやってしまったんだなぁ。置換表部分にはあんまり触ってないつもりだったんだけど。

 やっぱり設計が悪いからそういうことになってしまうのかな。プログラムの設計とかを学んでみたい気がするんだけど、適当にオブジェクト指向とかの本を読むのでいいんだろうか。

// 入力特徴量をアフィン変換した結果を保持するクラス
// 最終的な出力である評価値も一緒に持たせておく
struct alignas(32) Accumulator {
    std::int16_t accumulation[2][kRefreshTriggers.size()][kTransformedFeatureDimensions];
    Value score = VALUE_ZERO;
    bool computed_accumulation = false;
    bool computed_score = false;
};

 たとえばこういうクラスがどの程度利便性に寄与しているのかとか、あるいはそもそもnamespaceのEval::NNUEがどうのとか、そういうところを上手く学べたらいいなぁ。

 ライブラリ触ってないと全然コンピュータ将棋の最先端にさっぱりついていけてない感じがある。研究で多少コンピュータ将棋やるならやっぱり最新のライブラリ使っていた方がいいんだろうか、という気持ちがちょっとある。低レベルでのちょっとした改善とか意味がない気がするものなぁ。

 その後は競技プログラミング。全然わからんかった。

 集中力が全然出ない。課題があと一つ残っているのと、進捗発表のスライドを作らなくてはならない。後者はまぁ良いとして、前者のやる気が出なさすぎる。うーん……。

 やる気が出ないのは何をやればいいのかがわからないからだという面も強くて、それは結局講義をあまり聞いていなくて学んだことがなにもないからなんですよね。この手法を実装してみようとか、あのトピックについてもっと調べてみようとか、そういったことがない。

 結局やる気が出なくてNNUEをボーっと読んで過ごし、早めに帰った。みゅーん。

1年前の日記

 「懐かしいWeb小説」に心当たりがいくつかあるのでもう少し具体的に書いてくれないとわからないぞ。

 3年生の成績結構ヤバかったようなそうでもなかったような。

 日記書き始めたのは3年の前期にあった情報工学実験の科目が終わってからなので記録残ってないんですが、あの時期も結構精神やられていた気がする。隔週でレポートがあると精神が死ぬ。

 月別アーカイブのところで見れる記事数、2017(173)、2018(207)って結構強い圧がありますね。

その他

 Twitter中毒者なのでスマートフォンTwitterアプリを入れ直した瞬間それしか見なくなってしまった。すぐ消した。

 講義がないならノートパソコンを持っていく必要がなさそう。学習回し始めたときちょっと困るかな?