「強化学習」をゼロから【機械学習】

# 強化学習って何だろう
ここまでで、機械学習について、その概要やデータセットそして教師あり学習、教師なし学習についてまとめてきました。今回は機械学習について、ほかの学習方法との違いに触れながら、まとめていきたいと思います。
機械学習についての概要はこちらでまとめています。これを読んで概要をつかんだ後にこの記事を読むとより理解が深まると思います。

https://qiita.com/y-okada1412/items/5d38d65d9163f78b999a


教師あり学習についてはこちら！

https://qiita.com/y-okada1412/items/9104025abd0426d8754a

教師なし学習についてはこちら！

https://qiita.com/y-okada1412/items/e2d66f2c8135c509311d

## この記事のポジション
教師あり学習、強化学習、ディープラーニングなど機械学習の特徴により様々な学習方法があります。
これまで、教師あり学習や教師なし学習についてまとめてきました。学習方法がそれぞれ異なるため、それぞれの特徴についてまとめています。
この記事では、強化学習を深堀し、目的、手法、評価方法などについて触れていきます。

1.[強化学習の理解](#強化学習の理解)
2.[目的とメリットデメリット](#目的とメリットデメリット)
3.[学習方法](#学習方法)
4.[評価方法](#評価方法)
5.[活用例](#活用例)

## 強化学習の理解
強化学習とは、「結果に対して報酬を与え、その報酬が最大になるように学習する」方法です。つまりは、機械が試行錯誤を繰り返し、より適切な制御方法を学習します。
教師あり学習などのほかの学習方法と異なる点は、学習してから使用するのではなく、学習しながら、つまり成長しながら動きます。
例えば、ヒト型のロボットを歩かせたいというときに、まったく歩けない状態から、手をどのように動かすか、関節をどのように回転させるかということを何万回と試し、徐々に姿勢を保つことができるようになり、歩けるようになります。
強化学習ははじめは、将棋などのゲームに使用され、たくさんの対戦を重ねるうちに強くなっていきました。

## 目的とメリットデメリット
データセットを使用しないため、事前にデータが用意できないときや、行動の正解値がわからないとき、そして最終的な目的（正解）は判別することができるときに使用されます。

#### メリット
* 未知の環境に適応できる
    * 試行錯誤によって自分でデータを集めていくため、未知環境を用意すれば、正解データがなくても学習します。
* 複雑なタスクに使用できる
    * 先でも述べた通りセンサーを搭載した、ロボットの制御などの複雑な、制御を目的としたタスクに対応できます。
* 人との協働ができる
    * 今までロボットは決められた動作しかできなかったため、人の立ち入りが禁止されていることが多かったです。しかし、強化学習で動作を学習したロボットは人の動きを検知し、状況に応じた行動が可能です。



#### デメリット
* 時間がかかる
    * 事前にデータを用意せず、たくさんの試行を繰り返すため、学習に時間がかかります。
* 理解できない結果が出る場合がある
    * 学習するための行動などはモデルに依存し、人間には理解ができない行動をとることがあります。そのような際にどこまで人間が、手を加えるかが課題になります。

## 学習方法
ここでは、強化学習に使用される、学習方法を紹介します。
深堀すると、専門的になりすぎるので、簡単な概要を説明していこうと思います。
* Q学習

* モンテカルロ法
* 動的計画法（DP法）
* 時間差分学習法（TD法）

## 評価方法
強化学習の評価方法はいくつかあります。ここではその評価方法のイメージがつくように簡単に紹介したいと思います。
強化学習は、報酬という値を最大化させるという目的をもって学習するため、その値を可視化し、評価していきます。その中で、着目すべき点を主にここでは紹介します。

* 累積報酬
    * これまでに述べてきたように、強化学習は報酬の値が、最大になるように学習していきます。この報酬の値の合計を計算し、その値を比較することで、その手法の性能を評価することができます。

* 学習曲線
    * 時間経過に伴う性能の指標です。時間経過とともに、報酬の値が増加しているかを確認し、その増加率などを確認することで、モデルの性能を評価することができます。
* 収束性
    * 収束性とは無駄がどれだけ少ないか、つまり、目的の挙動に至る速度を示します。
    * もちろん早く目的の挙動に至るほうが良いですが、早すぎる場合、最善ではない答えに至ってしまうことがあります。
* 安定性
    * 正しい学習は性能が大きく上下することはなく、時間とともに徐々に向上することが多いです。
    * 性能が急激に上がったり下がったりした場合は、適切な学習を行うことができていないことを示す可能性があります。
* 一般化能力
    * 未知の状況に適応できるかどうかを示します。新しい環境や未知の状況に、どれだけ適応することができるかということが大事になります。

## 活用例
強化学習が具体的に何に使用されているのかということをここでは紹介したいと思います。これまで、教師あり学習や教師なし学習などにも触れてきました。活用例のイメージを持つことでより、それぞれの機械学習についてのイメージがつきやすいと思います。

* 自動運転
    * 自動運転では、刻一刻と変化する状況への対応が不可欠です。走行ルートの自己学習や、道路状況などの環境の変化への対応には、強化学習が使用されています。もちろん一般人が利用中に学習を行うことはありません。しかし、私たちが利用中に遭遇した道の状況のデータを収集して、シミュレーション環境で行うことでより精度が高まります。安心してほしいのは一般に無断でこの情報が取得されることはありません。
* ロボティクス
    * ロボットの操作制御も、強化学習が生きる分野です。お掃除ロボットを、イメージするとわかりやすいと思います。センサーから得た障害物の情報を学習し、その中で最適な経路を模索するのがお掃除ロボットです。強化学習が既に日常に溶け込んでいることがわかると思います。
* ゲーム
    * ゲームというとイメージがつきにくいかもしれませんが、有名なものにAlphaGpというものがあります。これは、深層強化学習（深層学習については次の記事で！）で実現された、将棋で機械が世界トップ棋士に勝った初めての例です。
* ECサイトのマーケティング最適化
    * 近年よく目にするようになった、自分の興味のある製品やサービスの広告が表示されるようになったり、よく購入する商品がページの上の方に表示されたり、欲しい商品のクーポンが届くなど、それぞれの趣味嗜好や現在の購買傾向に適した、プロモーションを行うことができるようになります。今までの全体に同じプロモーションを行うより効率的です。
    * 強化学習を利用することで、多角的な視点から顧客の購買衝動を促進することができます。 
## さいごに
この記事までで、機械学習の３つの学習方法についてまとめてきました。それぞれに得意な分野があり、使用する目的に合った最適な方法を知るためには、機械学習について詳しくならなければなりません。これから、さらに日常的に機械学習は使用されていくと思います。どのような技術が使用されているのか知っていくことで、より自分に合ったものを選んでいくことができると思います。
次は、これまで紹介した３つの学習方法それぞれで使用される、深層学習（ディープラーニング）についてまとめていきたいと思います。


ReceiptRollerでは電子レシートをはじめとし、様々なソリューションを提供していきます。
今回の機械学習のほかに、OCRについての記事も投稿していますので読んでみてください。

https://qiita.com/y-okada1412/items/4a4a78ffc4cd6a0d7485

レシートOCRは、LINEからどなたでも無料でご利用いただけますので、ぜひ試してください！

https://receiptroller.com/ja


また、OCRのデモ体験がこちらのページからできます！

https://ocr.receiptroller.com/read-receipt

#### 参考

https://jp.mathworks.com/discovery/reinforcement-learning.html#:~:text=%E5%BC%B7%E5%8C%96%E5%AD%A6%E7%BF%92%20(Reinforcement%20Learning)%20%E3%81%A8,%E8%A1%8C%E3%81%86%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

https://aismiley.co.jp/ai_news/reinforcement-learning-mechanism-and-examples/

https://crystal-method.com/topics/reinforcement-learning/

https://www.cyberagent.co.jp/way/list/detail/id=27420