はい、どうも、おはようございます。
最近(といっても、もう数年経つが)、人工知能やディープラーニングが人気ですよね。
僕は最近、機械学習、ディープラーニングに興味を持ったミーハーです。今のとこ。
今日書くのは、僕が機械学習を学ぼうと思った1番始めの頃、どんな感じでやっていくことになるのか、雰囲気だけつかもうと、簡単なプログラミングをやってみて感じたことです。
僕は深層強化学習がやりたかったので、まず、ディープラーニング(深層学習)を使っていないただの強化学習であるQ-learning のプログラムを書こうと思いました。
実装環境
実装環境は、
- Windows マシーン
- プログラミング言語はpython
- CPUのみ
目標
空間に宝と穴を設置して、宝を取ったらポイントゲット、穴に落ちたら減点というゲーム作る事を目標としました。
ちなみに、この時点までpython を使ったことは無かったです。
今まででC言語しか使ったことが無かったですが、まぁpythonは人気なんで調べやすいから大丈夫かなと思って。それに、機械学習と言ったらpython !のイメージが強かったので。
なので、ネットを参考にしながら、Q-learning で、ゲームをクリアするコードを書こうと頑張りました。
とりあえず強化学習をやってみる
pythonの関数がまったく分からなかったので、ネット記事をコピペすることが多かったです。
Q-learning のアルゴリズムはそこまで難しく無かったので、4日目くらいで完成しました。ちゃんと学習もしてくれました。こうして、思っていたよりもはやく、
ディープラーニングを使う方向に移行できました。
深層強化学習
深層強化学習では、
環境は同じですが、ライブラリはChainer (Chainer RL)を使いました。これは、僕が機械学習に興味を持ったきっかけがPNF だったからです。
プログラム内の物理環境は、Gymで作りました。
また、Chainer ならばTensorflowなどと違い、日本発なので、日本語の解説記事が多いのではないかという怠慢な考えのもとで。
その頃、ちょうどChainer RL(深層強化学習に適応したライブラリ)がオープンになったときでした。運が良かったです。
とりあえず、雰囲気を掴むために簡単な実装さえできればいいと思っていたので、わけもわからず、ガンガンとライブラリを使っていきました。
Q-learning ができていたので、実行はすんなりとできました。ただ、学習がうまくいったかは別で、パラメータ調整などはかなり困難を極めましたが、、、(未だに満足のいく学習はしてくれてません)
全部で、1週間~10日間くらいで、一応プログラムは完成しました。
結果
下の図が結果になります。今回は背伸びして3次元空間で行いました。
左の図は、学習後のプレイ動画です。
赤い点がエージェント(プレイヤー)で、座標(1,1,1)からスタートしてます。黄色の〇に入ると得点がもらえ、黒い○に入ると減点されます。赤い点が黒〇を避けて、黄○に向かっていることが分かります。
手前の黄○よりも隅の黄○に行くのは、隅の黄○の方が配点を高くしているためです。

また、右の図から、徐々に学習していることが分かります。
右の図で、学習が進んでも得点に幅があるのは、探索方法と、得点の与え方の問題だと思います。
やってみて思ったこと
簡単なプログラムですが、python 初タッチでここまではやく終わるとは思いませんでした。さすがpython, Chainer ですね。
今回、迷路系のゲームをChainer を使って解きました。
現在ではライブラリ化が進んでおり、誰でも簡単にディープラーニングに触れられるようになっている事を感じました。
現在では、コードをわざわざいじらなくても、もっとマクロ的にディープラーニングが実装できるツールもあるくらいで、
知識がなくとも、「動かす」だけなら、文系だろうと、中学生だろうとできてしまう事を身にしみて感じました。
これは、「ディープラーニングするなら理論から学ばなければ!!」と思いましたね。
だった数日、数週間で大体の人が出来てしまうことに力を入れても仕方がないし、何より理解してパラメータをいじる必要があるので。
この業界の発展スピードは凄まじく、新たなアリゴリズム理論も次々と出てきてます。それに追いつくには、
コンピュータのエージェントを学習させるのではなく、自分自身を学習させるしかないでしょう!!
最近は、コードもまったくいじってないので、また時間があるときに新しいプログラムを書いてみたいです。
コメント