2017-09-21(Thu)
前回の続きです。
副露者の捨て牌と鳴き方(とその他の情報)から染め手に向かう確率を求める評価関数を作ろうとしています。
この1週間くらいやる気が出なくて全然進んでなかったのから、今日は反転攻勢か、かなり作業が進みました。
まずは実際の鳳凰卓牌譜から学習の元データをcsvファイルでこんな感じに排出して、

それで、ニューラルネットの重みパラメータを遺伝アルゴリズムで算出するプログラムまで書けました。
出力値(予測染め手率)は0~1の間の数値にしたいので、ニューラルネットの出力値(実数値)をロジスティック変換して0~1の数値にします。
目的関数は、学習データの実際に染め手に向かったか(csvファイルの一番右の列)からニューラルネット+ロジスティック変換の予測染め手率を引いたものの2乗和です。だいたい回帰分析の最小2乗法と同じ考え方です。
それで、とりあえず最初の100試合分だけ遺伝アルゴリズム(1世代につきパラメータ群が50個、100世代まで計算)にかけてみました。
(およそ10分待つ…。)
出てきたテキストファイルは145KB。エクセルに貼り付けてみると1行×8101列。
エクセルで列番号KYPとかまでずらーっと数値が並んでいます。でかい…。列番号3桁とかそうそう見ないですね。
ニューラルネットの入力層のノード数が79個、中間層のノード数を100個にしたので、
79×100とその他定数項などプラスαで8000超まで次元の数が急増しました。
ニューラルネットで次元数8000もあるパラメータの微分とかはわけわかんないので、微分情報がいらない遺伝アルゴリズムの使い勝手の良さが光ります。
中間層が入るニューラルネットなので、出てきた重みパラメータの値を見てもさっぱりわからないです。
実際にAIに載せて検証するまでうまく予測できてるかわからないブラックボックス状態です。
100試合、100世代で約10分かかったので、1万試合まで増やせば1000分で16時間くらいか。
目的関数の減少の仕方から見て、できれば200世代くらいはやっておきたいのでさらに倍で32時間。
明後日の昼くらいまでは結果が出るまで待ちの時間になりそうな感じです。
まぁ、それくらいなら待てますね。
この後プログラムを起動させましょう。
副露者の捨て牌と鳴き方(とその他の情報)から染め手に向かう確率を求める評価関数を作ろうとしています。
この1週間くらいやる気が出なくて全然進んでなかったのから、今日は反転攻勢か、かなり作業が進みました。
まずは実際の鳳凰卓牌譜から学習の元データをcsvファイルでこんな感じに排出して、

それで、ニューラルネットの重みパラメータを遺伝アルゴリズムで算出するプログラムまで書けました。
出力値(予測染め手率)は0~1の間の数値にしたいので、ニューラルネットの出力値(実数値)をロジスティック変換して0~1の数値にします。
目的関数は、学習データの実際に染め手に向かったか(csvファイルの一番右の列)からニューラルネット+ロジスティック変換の予測染め手率を引いたものの2乗和です。だいたい回帰分析の最小2乗法と同じ考え方です。
それで、とりあえず最初の100試合分だけ遺伝アルゴリズム(1世代につきパラメータ群が50個、100世代まで計算)にかけてみました。
(およそ10分待つ…。)
出てきたテキストファイルは145KB。エクセルに貼り付けてみると1行×8101列。
エクセルで列番号KYPとかまでずらーっと数値が並んでいます。でかい…。列番号3桁とかそうそう見ないですね。
ニューラルネットの入力層のノード数が79個、中間層のノード数を100個にしたので、
79×100とその他定数項などプラスαで8000超まで次元の数が急増しました。
ニューラルネットで次元数8000もあるパラメータの微分とかはわけわかんないので、微分情報がいらない遺伝アルゴリズムの使い勝手の良さが光ります。
中間層が入るニューラルネットなので、出てきた重みパラメータの値を見てもさっぱりわからないです。
実際にAIに載せて検証するまでうまく予測できてるかわからないブラックボックス状態です。
100試合、100世代で約10分かかったので、1万試合まで増やせば1000分で16時間くらいか。
目的関数の減少の仕方から見て、できれば200世代くらいはやっておきたいのでさらに倍で32時間。
明後日の昼くらいまでは結果が出るまで待ちの時間になりそうな感じです。
まぁ、それくらいなら待てますね。
この後プログラムを起動させましょう。
スポンサーサイト