強化学習に学んだ人生観をiOSアプリに「YorimichiApp」

初めまして、お早うございます。

YorimichiAppをチーム運営する代表Kentです。

Note記事初投稿というわけで、今回は、アプリ誕生秘話を語らせてください。気に入っていただけた方はこちらからDLお願いします。

記事の需要が少しでも増すように、昨今世間を騒がせているAIを絡めて話したいと思います。

イントロダクション

まずは私の自己紹介から。

私は、日本のいわゆる鉄鋼業界の製造メーカーに勤める

IT関連ではないエンジニアです。

業務では、プロセス開発とKAIZENに従事しています。

、、、と言ってもイメージつかないと思います。


鉄は、ネジから橋や建物などの構造部材、車など多くの分野に採用されますが、

一重に鉄といっても細かく種類が違います。

用途に応じた物性を発現させるための”鉄のデザイナー”と

いつもは元気に製造できてる鉄が体調が悪くなった時

問診して、レントゲン撮ったりして病気を推定して

怪しい紫色の薬を処方する”鉄のお医者さん”

をやってると思ってください。


IT関連ではないエンジニアですが、

ITを駆使せずにKAIZENなど気が遠くなります。

というわけでバックグラウンドは違いますが、独学でIT関連は勉強し

業務に活かしてます。


YorimichiAppについて

んで、前段が長くなりましたが、

今回紹介する「YorimichiApp」は完全プライベートで

学生の頃からの友人と運営してます。

彼「Kenmaro」はAI及び秘密計算領域のエンジニアです。

昔から天才です。コーディングなどは彼に頼ってます。

私は、カリスマ担当してます。


プロダクト製作の発端はYahoo!主催のハッカソンです。

その時の様子、及び関連記事はこの辺りから。


コンセプトは、

「最短、最速が最適解か?寄り道こそが人生だっ!」


今日の本題はここです。

タイトルの伏線回収を始めます。

勘の良い人は気づいたかもしれませんが、

マルコフ決定過程のランダム項の役割をこのアプリは担おうとしています。


こういう経験はありませんか?

アイディアが全く思いつかない時に

ポストに入っていた近所の美術館のインビテーションを見て

気晴らしに行くと、アイディアが湧いてきた。

なんて。


俺はそんなクリエイティブな仕事してねぇよと思う方もいると思いますが、

そうな壮大でなくても

やはり自分の中だけで考えると

自分を超えることはなかなか難しいと思います。

思いもよらぬことからの刺激を受け、自分の中に新たな発見がある。

そういうところを私は大事にしています。


強化学習とYorimichiApp

さて、強化学習とは、ググるとたくさん出てくるのでQiita記事を参考を載せておきます。

強化学習は、教師あり学習に似ていますが、(教師による)明確な「答え」は提示されず、「行動の選択肢」と「報酬」を提示します。

ある環境において、「報酬」が最大化となるような「行動の選択」を積み重ねる。これはまさに人生そのものを数学に落とし込んだものだと、初めて学んだ時に感じました。

強化学習は、以下の要素で構成されます。

  • 環境 : エージェントが相互作用してそれから学習する世界。

  • アクション aa : エージェントが環境にどのように応答するか。総ての可能なアクションのセットはアクション空間と呼ばれます。

  • 状態 ss : 環境の現在の特質。環境がなり得る総ての可能な状態のセットは状態空間と呼ばれます。

  • 報酬 (Reward) rr : 報酬は環境からエージェントへのキーとなるフィードバックです。それはエージェントを学習させてその未来のアクションを変更するように駆動させるものです。マルチ時間ステップに渡る報酬の集合は リターン (= Return) と呼ばれます。

  • 最適アクション値関数 (Q∗(s,a)(Q∗(s,a) : 状態 ss から始めて、任意のアクション aa を取り、それから各未来の時間ステップに対してリターンを最大化するアクションを取る場合に、期待されるリターンを与えます。QQ は状態のアクションの「品質 (= quality)」を表すと言われます。私達はこの関数を近似することを試みます。

そして、これを定式化したものが次の式です。

Q-learning

期待値(E[Q(s′,a′)]E[Q(s′,a′)])となっています。試行を繰り返すことでこの期待値は精緻化されていきます。よって、最終的には上記でほぼ等しい(≈≈)となっている式は等式として成立するようになります。なぜなら、等式が成立するということは見込みの値(Q(s,a)Q(s,a))と、実際行動した場合の期待値(R(s,a)+γmaxa′E[Q(s′,a′)]R(s,a)+γmaxa′E[Q(s′,a′)])が等しいということであり、報酬の正確な見込みができているということになるためです。これが学習完了の目安になります。


TD学習 *TD:Temporal Difference

「どの状態で、どう行動したら、どういう報酬が得られるのか」を明らかにしようとしているというのを定式化したものが上記式です。αは学習率を示していて、期待値と見込みの差分(TD:Temporal Difference)を学習していく「TD学習」とも称されますので、このキーワードでググってみてください。

どう行動したらもっとも価値が高くなるか予めわかるなんて人生楽勝じゃん。数学すげぇ!まじかっけぇ!抱かれたい!

上記記事から引用すると

これでQ(s,a)Q(s,a)をどんどん改善していけるようになりました・・・が、そもそもどうやってaを決めるのか、という問題がまだ残っています。端的にはQ(s,a)Q(s,a)が最大のものを選んでいけばいいのですが、これだと「わかっている中での最大」を選び続けることになるため、まだ未知の報酬の高いs′s′にたどり着ける可能性をつぶしてしまうことになります。

https://qiita.com/icoxfog417/items/242439ecd1a477ece312#q-learning

こっちは確実に報酬が得られるけど、未知な選択をするともっと高い報酬が得られるかもしれない。という人生の分岐点でよく遭遇する”ジレンマ”が数学でも問題となってきます。

この問題に対するアプローチはいくつかありますが、基本的な手法としてε-greedy法があります。εの確率で冒険をして、あとはgreedy、つまりわかっている報酬を基に行動を行うという手法です。εは冒険性ということです。

有名な話として、スーパーマリオに強化学習を適用してみたという話があり、最速でクリアするというものを報酬とするのではなく、行ったことがない行動をすると報酬を与えるとする方が高いパフォーマンスを発揮した。という記事です。(見つけれなかったので、見つけたらリンク張っておきます。)

この概念は、まさに我々のアプリと同じコンセプトです。


他にも、Boltzmann分布を使った手法などがあります。興味がわいた方はググってみてください!

まとめ

強化学習から学んだことは

1。最高の報酬を得るためには過去の行動に依存しない

2。行動価値関数にランダム項を載せると報酬が高くなる。


貴方の人生に「ε」はありますか?

今日はこの辺で。

Kent


この記事が気に入ったらサポートをしてみませんか?