うらおWCSC27のelmoのアピール文書より。雑記elmoの評価関数は1月3日以降全く強くなってないです。(ある程度手応えがあったのでxeon4つ買ってみたのですが、結果に結びつかず)今回はelmoは何故2周目の雑巾を絞れないのかについて簡単に説明する。elmoの学習式についての説明は前回記事をご覧ください。teacher_winrate);まず、右辺の左側の項を「勝敗項」、右側の項を「勝率項」と名付ける。(tanuki-チームではそう呼ばれているらしいので)0.5のところはelmoのソースコード上はLAMBDAという変数名の定数になっている。上式は、「勝敗項」と「勝率項」がLAMBDAで内分されていなくて気持ち悪いのでまず内分する式に変形する。0.33...相当である。このLAMBDAが小さすぎて、勝敗項の寄与が大きすぎるというのが私が最初にこの式を見たときに直感したことであった。0.3〜0.4ぐらいあるのではないかと思う。teacher_winrate)は、浅い探索と深い探索の評価値から推定される勝率の差であるから、ほぼほぼ差はないはずであるから、絶対値の平均で言うと0.1未満であろう。考えると、勝敗項の寄与が大きすぎるのではないかというのが私の最初の印象であった。その予想はおおむね正しかった。この予想が正しかったことを証明していく前に、では何故それでelmo(WCSC27)は強くなったのかという説明をしないといけない。雑巾絞りのときに勝敗を考慮するというelmoの発想自体は正しい。強化学習などではよくある手法なのであえて長々と説明するほどではないだろう。私の予想ではelmo(WCSC27)のLAMBDAの値だと、発散するということであった。先に述べた通り、この予想は実は正しいのだが、ところが、AdaGradだとその発散途上にある評価関数パラメーターのスナップショットを捕捉することが出来る。AdaGradの更新式を再確認しよう。ηg/sqrt(g2)である。elmo(WCSC27)はAperyの学習部をそのまま用いており、アピール文書によると教師局面は50億局面とのことである。batchのサイズは1M(100万)局面である。5000回適用される。sqrt(n)と見積もれる。900を超えると1より小さな変動しかしない。ここ以降、vにはほとんど変化がないと言っても良い。30.0は、やや小さいとも言える。ところが、このetaについて、elmoのソースコードには以下のようなコメントがある。更新用のハイパーパラメータ。大きいと不安定になり、小さいと学習が遅くなる。tkzw:小さめが良い30.0でもまだ大きいとでも言わんばかりである。実は普通の雑巾絞りにおいてはこの項は、30より少しぐらい大きくともあまり問題とはならない。elmoが30.0、もしくはそれより小さくしないといけないのは、elmo式だと値が発散していくので、その発散直前にある、一番強くなった瞬間を捉える必要があったからだ。このことを証明するために、AdaGradのg2を減衰させてながら学習させてみる。g^2こうしておけば、g2は減衰するのでnが大きくなってもvの変化量が0に漸近しない。この状態にして、elmo式で学習させ、10億局面ごとの学習結果を取り出し、元の評価関数と対戦させ勝率を計測する。次に、elmoの学習式(内分型)でLAMBDAを調整しながら、学習させ、勝率がどのように変化するかを雑巾絞りと比較する。8で7.5億局面生成、4周。