強化学習についてPREP形式でまとめてみました。

前書き

最近、対戦パズルゲームのCPU*1の作り方を悩んでいまして、今の職場の機械学習のエンジニアさんにそのことを相談してみました。

Cacaponは機械学習に興味はあるのですが、最初の一歩をどうすればいいのかなぁと悩んでで進んでなかった感じでもあったので。

そんな状態で相談してみたところ、「それならこの本読むといいよ」ということでこちらの本をお薦めされました。

お薦めした人曰く「訳がちょっと難あるけど、とっかかりならこれがいい」とのこと。

実際に冒頭を読んだ限りだと、自分の実現したいことはできそうな感じを持ったので、そのまま読み続けることにしました。


まだ読破はしていないのですが、ここまでで理解できたことをPREP法でまとめることにしました。

よかったら読んでみてくださいね。

PREP法とは?

そもそも、PREP法ってなんぞやというところから説明します。

PREP法は - Point(結論) - Reason(裏づけになる理由・根拠) - Example(具体例) - Point(結論)

と言った感じで、4つの要素でまとめるアウトプット方法

理解の仕方に悩んでいたところ、こちらの記事を読んでなるほど〜と思い、真似している最中です。

studyhacker.net

PREP法をPREP法でアウトプットしてみるとこんな感じでしょうか?

Point

PREP法はPoint(結論) ,Reason(理由・根拠) ,Example(具体例) ,Point(結論)の頭文字をとった、アウトプット方法の一つ。

P ,R ,E ,Pの順に説明していくのが特徴で、Cacapon自身はインプットした知識の理解を深めるのに適していると考えている。

Reason

なぜインプットした知識の理解を深めるのに適していると考えているかいうと、次の3点が効果があるのではと考えているからである。

  1. 必然的に誰かに説明する形になり、フワッとした理解の部分を否応無しに文書化する必要があるから
  2. 結論を冒頭と結末に述べることで、脳が記憶する方法の一つである、繰り返しが行われているから
  3. 具体例を挙げることにより、すでに理解しているものと紐づける状態になり、より理解が深まると考えているから

Example

この文章自体がPREP法で作られているのでこれ自身が例のようなものであると考えている。

この後に他の知識もPREPでまとめるのでそちらを参考いただきたい。

Point

PREP法はPoint(結論) ,Reason(理由・根拠) ,Example(具体例) ,Point(結論)の頭文字をとった、アウトプット方法の一つであり、

Cacapon自身はインプットした知識の理解を深めるのに適していると考えている。

強化学習とは?

ここからはPREP法でまとめてみますね。

Point

強化学習とは機械学習の一つの手法で、いわゆる体験ベースで学んでいく学習方法に数学のアプローチを取り入れたやり方です。

Reason

強化学習の特徴は教師や参考例は要らず、自分の行動・環境への影響・環境からのフィードバックを通じて学習を進められる点です。

Example

学習という点ではマクロな視点だと、まだ覚えていない道を地図を見ずに覚える、幼児が自転車に乗れるように練習するなどが強化学習の例になります。

パズルゲームでどこにブロックを置くと良いか・悪いかを学んでいくのもマクロな視点になるかと思います。

ミクロな視点の例だと、扇風機のモーターの回転数を、外部の温度によって増減させるなどが強化学習の例となりますでしょうか。

この辺りをどうやって数学のアプローチを取り入れるのかはまだ理解していません。

Point

強化学習は教師や参考例が要らない、自分と環境とのやり取りで学んでいく機械学習の方法の一つです。

なぜ強化学習は対戦パズルゲームのCPUに向いていると判断したのか?

Point

Cacaponは対戦パズルゲームのCPUを作るのに強化学習が向いていると考えています。

Reason

理由は二つあります。

一つは例が最適解か分からないためです。

もう一つは、Cacapon自身がテトリスを上手くなった経緯が誰に教わるでもなく、体験によるものだったためです。

Example

第一の理由の例としては、対戦テトリスの話をしましょう。

私は1カ所だけ空けて、4つ消し連続で狙うスタイルなのですが、他の人だとT-SPINを狙う人*2、LEN*3を狙う人など色々な方がいます。

はたまたテンプレートなどと言って強力な攻撃が狙える組み合わせを組んで高打点を狙う人もいます。

こんな感じで人によって様々なため、正解がありません。やるとしたらそれぞれのスタイルで教師をつける形になるのでしょうか…?

また、他の例になりますが、オリジナルのゲームを作るとなった場合、 似た挙動をするパズルゲームはあるにしても例や攻略法ができるまでに時間がかかってしまいます。

創始者がある程度攻略法はあるかもしれませんが、それが適切かどうかもわかりませんので例ありの機械学習でCPUを作るのは向いていないと判断しました。


第二の理由の例としては、こちらはCacapon自身の体験談となります。

Cacaponは以前テトリスに非常にハマってた時期がありました。ガラケーテトリスBlack 、テトリスDSあたりが発売されていた時期ですね。

最初は慣れておらず凸凹だったり、穴だらけだったのですが、やっていくうちに次第に平らに整えるようになりました。

そして、徐々にL字入れたら列が埋まるな、S字入れると塞がるななど、ブロックを置くと有利・不利になるというのを誰にも教わらずに体験のみで理解していった経験があります。

強化学習はこのような流れを機械、ここでいうならCPUにやらせて覚えてもらうようなやり方と私は理解したので、

このやり方ならCPU自身がCPUなりに良い遊び方を学習するんじゃないかと考えています。

終わりに

うーん、作ってみたけど、ブログとしてはちょっと見にくいなぁという印象が…

あとは、もうちょっと理解が必要かなという部分も書いてみて感じました。

これがわかっただけでも儲け物かなと思うので、次回はもう少しマシにまとめてみようと思います。

それではまた!

*1:コンピュータの対戦プレイヤーのこと。COMとかNPCのが一般的かもしれませんが、どうも昔からCPUって言っちゃうんですよね。

*2:T字ブロックを回転させた後にブロックを消すやり方。2列消しで4つ消しと同等の打点になるので低い高さで高威力を出せるメリットがありますが、瞬時に落とせないのでちょっとタイムロスがある印象です。

*3:列を連続で消すやり方。途切れると0からやり直し。1,2,3くらいは大したことがないのですが、どんどんLENが増えると1列消しただけで5段分ダメージとかとんでもない高威力になるのが特徴です。その代わり組むのに時間がかかるので攻撃し始めは遅いです。