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

最終更新日: 2022-11-10
keras_1333454777954319708.svg
keras
#
AHO

ディープラーニングで宝くじ(ロト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を途中ではさむことで、非線形になるので、併用すると、もっと良い性能が出るかもしれない。
今度試す。


author

WEBエンジニアをやっています.
技術スタックとしては,AI/機械学習,モダンWEB開発,電子工作など多岐に渡ります.
このサイトでは、WEBサービスの開発や、プログラミングに関することを書いています.

Learn More

関連記事

thumbnail

あほくさ2

hugoでサイトを作る go知らなくても作れるよ。 ビルド早いよ 数十記事なら、たいして変らないあ. 数千記事書いたら、ありがたみがを感じると思う koi kok ksaka

thumbnail

あほくさ3

aha hugoでサイトを作る go知らなくても作れるよ。aaa ビルド早いよ 数十記事なら、たいして変らない 数千記事書いたら、ありがたみがを感じると思う koi 質問者 k TH TH TD セル内で 改行 宇宙飛行士ちゃん 画像と向きを変えてみる

thumbnail

あほくさ

hugoでサイトを作る go知らなくても作れるよ。 ビルド早いよ 数十記事なら、たいして変らない 数千記事書いたら、ありがたみがを感じると思う optionなし print('ahoxsa') print('oppi') try: print('baka') except: print('failure') optionあり 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 // GetTitleFunc returns a func that can be used to transform a string to // title case. // // The supported styles are // // - "Go" (strings.Title) // - "AP" (see https://www.apstylebook.com/) // - "Chicago" (see https://www.