FC2ブログ

*All archives* |  *Admin*

<<05  2020/06  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  07>>
はじめてのpython&Tensorflowその11・切り番時の他家反応追加
今回の課題は、切り番に対する他家の反応部分をニューラルネットを組むのをしました。

最初はツモ番も切り番への対応も訓練データも別にして、完全に独立したニューラルネットにすればいけるだろうと踏んでましたが、今後強化学習をkeras-rlでするにあたってはmodel.fitさせるのに単一のニューラルネットのほうが都合がよさそうな感じに見受けられました。(この見立てがあってるかどうかは不明。)

なんで、訓練データは両方ごちゃまぜにして、ジェネレータで入力データの整形をするところで、ツモ番か切り番かで場合分けして、参照する重みパラメータを変える感じで作ってみました。パラメータの数が単純計算で2倍くらい増えました。

なんやかんやあって、Tensorboradが壊れて使えない(アクセスが拒否された、とかいう不穏なメッセージが流れた)ので、グラフ図と損失関数正解率グラフは今回はなしで。
入力が125チャンネル(0番~55番までがツモ番に充当、56番~124番を切り番に充当)で、出力値は切られた牌番号(前までと同じ、スルー時と大明槓時は牌番号0とする。)と行動種類番号(通常打牌、リーチ、暗槓or加カン、スルー、ポン、大明槓、下チー、中チー、上チーで0番~8番までを割り当て)の2種類にしました。

実際の手牌との突合せがこんな感じ↓。(自分手牌文字列で「出〇」などと書いてる行は切り番、ない行がツモ番です。)
181104-01.png
実際切られた牌番号と予測牌番号(1位と2位)、実際行動と予測行動1位を見比べて、ぱっと見まずまずの当て具合のように見えなくはない。

ただ、ツモ番と切り番がごちゃまぜになっていてわかりにくいので、なんかいろいろエクセルのcountifとかで分析したのがこちら↓です。
181104-02.png
上のほうが牌番号についての分析です。
ツモ番についてはだいたい前と同じ感じ。
切り番で、実際予測ともに鳴きだった場合(どちらかがスルーだと牌番号0とかになって比較がやりにくいので、除外。)は1位的中が4割弱、2位まででも正解率66%とけっこう数値が落ちます。

下のほうが行動番号に関する分析です。
左が実際の行動、上がニューラルネットで予測した行動、クロスしたマス目がcountifでカウントされた回数です。
対角線上の実際行動と予測行動が合致しているマス目の数字が大きいほどうまく予測できてることになります。

とりあえずツモ番については置いておくとして、切り番(スルー~上チーまで)を見ることにします。
基本的に切り番のデータの多くはスルーに偏っています。
そのためか、ニューラルネットの予測側もスルーに関してはまずまず予測が成功してる感じは見受けられます。
実際行動がスルーだったときに正しくスルーと予測しているデータの割合は97%とだいぶいい感じです。

一方、実際行動が鳴きだった場合については正しく鳴きと予測している割合が2割~6割とあまり芳しくないです。
つまり、鳴きかスルーかが微妙なケースについてはかなりの割合でデータの多くを占めるスルー側に引っ張られてるのかなーという印象です。

損失関数については牌番号も行動番号もクロスエントロピーの単純加算にしてるだけなので、その辺は工夫の余地があるのかもしれないです。
とりあえずは今回の教師ありニューラルネットは強化学習のための踏み台として使いたいだけなので(まぁこれ自体にも価値はあるとは思いますが)、まぁ今のところはてきとうでいいや。必要があれば再学習もすればいいし。

実際行動が鳴きだったケースでフィルターをかけたもの↓。
181104-03.png
こう見ると実際鳴きだったケースをけっこうスルーと答えていて取りこぼしが目立つような気がします。

次の課題はkeras-rlを使った強化学習の練習か、VB.netで作った強化学習に必要な関数のPythonへの移植のどっちかですね。
どちらからやってもいいのですが、まぁ、途中で強化学習むりーってなってとん挫した場合を考えるのがいやなんで、先にkeras-rlの練習からやりましょうか。

とりあえずkeras-rlとgymというのをpipで入れるところまではできました。pipのアップグレードができなくてかなり躓きましたが、pipアンインストール(なんか関連するライブラリも一緒に消滅)からの再インストール→なんかぐちゃぐちゃになっちゃったので、Anaconda自体もアンインストールからの再インストールという荒療治でなんとか解決しました。Tensorboradさんがお亡くなりになったのはこのへんが原因と思われる。

で、keras-rlとかDDPGに関して情報収集をやってる最中です。
独自仕様でgym環境を作るサンプルコードが書いてるページ(ただし、Q学習)と、DDPGのサンプルコードが書いてるページ(ただし、gym環境は既存のもの)を見つけたので、その辺をうまく組み合わせてkeras-rlの練習をやってみようかと思います。
まずは簡単な設定で独自のgym環境作ってDDPGが成功しないことには、麻雀なんていう高尚なゲームはとてもじゃないけど作れませんので。
スポンサーサイト



コメントの投稿

Secret
(非公開コメント受付中)

コメント

プロフィール

nisi5028

Author:nisi5028
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード