麻雀AI開発その88・他家から切られる牌分布とニューラルネット
2018-08-14(Tue)
前回の最後に、他家から切られる牌分布の算出法が気に食わない、という話をしました。
それで、ここ何日か、ニューラルネットにできないかと思って、作業をしてました。
とりあえず、いつも通り、入力情報と結果(実際に切られた牌番号)を牌譜解析からcsv化するのはできました。
入力情報として取ってきたのは、
・巡目
・親位置
・(切り者から見た)自分位置
・場風
・ドラ
・自分手牌枚数
・自分見えてる枚数
・(4人について)リーチしているか
・(4人について)副露数
・(4人について)現物筋の状況
・(4人について)晒し牌
かなり多くの情報を取り込むことになりました。
1回の切り順に対して他家3人についてそれぞれ1軒のデータとして取り扱うので、件数もかなり多いです。
最初の100試合で、81783件、最初の1万試合で2.5GBのでかいファイルになりました。
それで、次に、csv化したデータを教師データとして、ニューラルネットを組みました。
入力層がなんやかんやでノード数1394になりました。前の染め手打点の時よりあからさまにノード数が多いです。死んでる重みパラメータ(例えば、「黒5牌が4枚見えてる場合」みたいに観測上あり得ない事象)も割と多いのを間引いたりはしてないですが。
出力層は牌の種類で、37個なのは確定です。
中間層のノード数はできれば多く取りたかったですが、学習時間でも1件あたりのニューラルネットの算出時間的にも苦しくなってきたので、泣く泣く50個に絞りました。
重みパラメータの次元数はおおよそこの3つの掛け算で約2,578,900次元です。
中間層の活性化関数はleaky_Relu、出力層の活性化関数はソフトマックス関数で、損失関数は交差エントロピーというのがいいらしいので、それにします。
それで、学習用プログラムを組んで微分が合ってるかどうかを確認して、
いつもの天鳳タイムの前に動作の早い旧PCで学習をスタートさせました。
天鳳から戻ってきてブログ書いてる途中で100回ミニバッジ×10000回のパラメータ更新が終わってました。およそ3時間。
履歴を見る限り学習が進むにつれて損失関数は減ってはきてるけど、減り方が相当にぶいです。
初期値のランダム重みパラメータ時と比較して、2~3%くらいしか損失関数が減ってないです。
これ、ちゃんとできてるのか…、と相当不安に思ってるのが今現在。
とりあえず今回の重みパラメータは成果として残しておいて、旧PCにはさらに10倍学習を続けてもらうことにして、
新PC側で、csvファイルとの突き合わせで、検証をやってみましょうか。
さて、どうなることやら。
それで、ここ何日か、ニューラルネットにできないかと思って、作業をしてました。
とりあえず、いつも通り、入力情報と結果(実際に切られた牌番号)を牌譜解析からcsv化するのはできました。
入力情報として取ってきたのは、
・巡目
・親位置
・(切り者から見た)自分位置
・場風
・ドラ
・自分手牌枚数
・自分見えてる枚数
・(4人について)リーチしているか
・(4人について)副露数
・(4人について)現物筋の状況
・(4人について)晒し牌
かなり多くの情報を取り込むことになりました。
1回の切り順に対して他家3人についてそれぞれ1軒のデータとして取り扱うので、件数もかなり多いです。
最初の100試合で、81783件、最初の1万試合で2.5GBのでかいファイルになりました。
それで、次に、csv化したデータを教師データとして、ニューラルネットを組みました。
入力層がなんやかんやでノード数1394になりました。前の染め手打点の時よりあからさまにノード数が多いです。死んでる重みパラメータ(例えば、「黒5牌が4枚見えてる場合」みたいに観測上あり得ない事象)も割と多いのを間引いたりはしてないですが。
出力層は牌の種類で、37個なのは確定です。
中間層のノード数はできれば多く取りたかったですが、学習時間でも1件あたりのニューラルネットの算出時間的にも苦しくなってきたので、泣く泣く50個に絞りました。
重みパラメータの次元数はおおよそこの3つの掛け算で約2,578,900次元です。
中間層の活性化関数はleaky_Relu、出力層の活性化関数はソフトマックス関数で、損失関数は交差エントロピーというのがいいらしいので、それにします。
それで、学習用プログラムを組んで微分が合ってるかどうかを確認して、
いつもの天鳳タイムの前に動作の早い旧PCで学習をスタートさせました。
天鳳から戻ってきてブログ書いてる途中で100回ミニバッジ×10000回のパラメータ更新が終わってました。およそ3時間。
履歴を見る限り学習が進むにつれて損失関数は減ってはきてるけど、減り方が相当にぶいです。
初期値のランダム重みパラメータ時と比較して、2~3%くらいしか損失関数が減ってないです。
これ、ちゃんとできてるのか…、と相当不安に思ってるのが今現在。
とりあえず今回の重みパラメータは成果として残しておいて、旧PCにはさらに10倍学習を続けてもらうことにして、
新PC側で、csvファイルとの突き合わせで、検証をやってみましょうか。
さて、どうなることやら。
スポンサーサイト