KBSIs' Blog

Technical memo, play diary

AIで宝くじを当てる!(今すぐ試せるソースコード付き!!)

宝くじのロト6をディープラーニングによって当てる!!

IDICHI

ディープラーニングで宝くじ(ロト6)

ロト6は1~43の番号を6個選ぶ、くじのことである。

AIに入力するデータは、以前のあたり番号を入力にして、教師データを今回のあたり番号にした。
data(t-1) ← 前回のあたり番号
data(t) ← 今回のあたり番号
普通、43個のデータ×6=258次元のベクトルとして、onehot ベクトルにする。
しかし、何を思ったのか、1~43を6ビットで表し、6*6=36次元のベクトルで入力した。

やる前の考察

宝くじはランダムである。よって、前回の番号に今回の番号は依存しないはずだ。
もしAIで当てることができたなら、完全に数理モデル(写像と非線形変換)によって、生成(関数近似可能)であるということだから、
それはそれで問題だ。

早速Googleの無料サーバで動かそう!

最近のGoogleは太っ腹だ。なぜなら、ディープラーニングなどの機械学習用のサーバを無料で提供しているから。
これはGoogleアカウントを持っていれば、誰でも使用可能だ。(ただし、いくつか制約はある)
“Googleサーバ(colabratory)”
“ソースコード”
さあ、ダウンロードして試そう!

これで億万長者だ!!

自分が試した結論。

やっぱり無理。(当然)
自分が試した範囲だと、52%しか正解しなかった。
また、2進数で試しているので、実質の正解率はもっと低いと思われる。例えば(001)と(101)では1と5を示しているが、これも各bitで正解率を計っているので、10進数に直すと、正解率はもっと低いと思われる。

今後の改良

現在、AIに入力しているデータはこれまでのあたり番号の確率や時系列を無視している。つまり、
t1->t2->t3というようなデータ構造にはなっていないということと、各番号の確率を入力していない。
したがって、現在のモデルをLSTMなどの時系列ニューラルネットワークにかえ、
確率を入力するようにしてみたい。

今回学んだこと

基本的なことだけど、損失関数を変えるだけで、結果が100倍違う。(今回はcategorical cross entropyをつかった(ちなみにentropyって、情報理論や物理の熱力学で出るよ、簡単に説明すると、情報量や乱雑さを表す)) onehotベクトルにはこれが鉄板。
あと、活性化関数reluは0以上では線形変換なので、tanh(理系の1年以上なら大体知ってると思うけど、初見は名前だけで威圧感ある)をはさむことで、結果が数パーセント変わった。普通に紙に書き起こしたら分かると思うけど、 層を深くしても、線形変換では意味がない。定数倍になるだけだから。
だから、普通、活性化関数には非線形関数を使うんだけど、CNNではreluのほうが、微分したら勾配が1(0以上)なので、勾配消失が起きにくいから、 こっちが使われる。
ただ、tanhを途中ではさむことで、非線形になるので、併用すると、もっと良い性能が出るかもしれない。
今度試す。

Recent posts

See more

Categories

About

大学3年生 伊地知 翔也 詳細はlearn moreから