🤖

強化学習に関するメモ

2024/09/21に公開

強化学習に関するメモ

強化学習?というやつがよくわからなかったので、勉強したことと思ったことのメモ

学習の種類について

強化学習の前に学習について調べると

  • 教師あり学習
  • 教師なし学習
  • 強化学習

の 3 つに分類されるみたいです。

個人的には、教師あり学習?教師なし?教師がなければ学習できるわけないでしょ?
っと思っていましたが、これはどうやら「学習」という意味合いが自分が思っているものと違っており、この場合の学習というのは

モデルがデータ構造を理解すること

というニュアンスらしいです。GPT に詰問してみると以下の回答が得られました

教師あり学習
定義: 正解ラベルが与えられたデータを使用して、モデルがそのデータのパターンを学び、未知のデータに対して予測や分類を行うこと。
目的: モデルは、与えられたラベルに基づいてデータの構造を理解し、将来的に新しいデータに対する正しい予測を行う能力を身につけます。
教師なし学習
定義: 正解ラベルがないデータを使用して、モデルがデータの構造やパターンを理解すること。
目的: モデルは、与えられたデータから自己組織化やクラスタリングなどを通じて、データの特徴や関係性を見つけ出し、新たな洞察を得る能力を身につけます。
まとめ
教師あり学習は、ラベルがあることで明示的に指導された「学習」であり、未知のデータに対する予測精度を高めることが目的です。
教師なし学習は、ラベルなしでデータのパターンを探る「学習」であり、データの本質や構造を理解することが目的です。

分類タスクをやる時は、何も考えずに教師あり学習かと思っていただが、ラベリングが厳しい場合の初手は教師なし学習を検討する必要はあったかもしれないと反省しました。

これは脱線でしたね。

強化学習ってなに?

強化学習のイメージは

  • エージェント(AI)が、Q 値という HP 的な値を持っている
  • 1 ターン(1 タイムスタンプ)に一回行動できる
  • その行動は、Q 値が最大化するように行動する
  • 行動をしたら、環境(世界)から報酬を受け取る
  • 新しい Q 値は、報酬を元に決定される
  • 以上を繰り返すことにより、ある状況に応じて適切な行動を取ることができるようなエージェントが完成する

というのが大まかな流れです。

数式の理解

この流れを理解すると以下の数式が読めるようになるかと思います

Q 値の更新式

Q(s, a) = Q(s, a) + \alpha \left( r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right)
  • Q(s, a)は状態sでの行動aの Q 値
  • \alphaは学習率
  • rは報酬
  • \gammaは割引率
  • s'は次の状態
  • a'は次の状態での可能な行動

なんとなく日本語で書くと

新しいQ値 = 過去のQ値 + 学習率(報酬 + 次の行動での最大のQを選ぶ行動 - 過去のQ値)

超雑にいうと、Q 値は報酬で増減するということみたいですね。また損失に関しては、

TD 損失の数式

L = \frac{1}{2} \left( r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right)^2

この TD 損失 ( L ) は、実際の報酬と次の状態の最大 Q 値を基にした目標 Q 値と現在の Q 値の差を二乗したものです。

であり、こちらも超雑にいうと、報酬によって損失が計算されるみたいですね。

つまり

  • 強化学習というのは、Q 値という HP 的なものがあって、それを最大化するように動く
  • その Q 値は環境からもえらえる報酬によって増減する
  • 毎ターン、現在おかれた状況に応じて、エージェント(AI)は手札(行動するパターン)から Q 値を最大化する行動をとる
  • ただ場合によっては、負の報酬を受け取るケースもある
  • そうするうちに、状況に応じで適切な行動がとれるようになってくる

という感じですかね。

じゃあ全部強化学習でいいじゃん

一応、理論上は、強化学習に落とし込むことが可能であるが、それが合理的ではないパターンの方が多い。
強化学習のめんどくさい点としては

  • 環境の設定をしなければならない
    • 環境はこんな感じで、ある行動したら、こうなって的な感じで、世界そのものを設計する必要がある
  • 訓練の難易度が高い
    • 設定した世界に対して、こうした場合は報酬はこうみたいに報酬を定義する必要がある
    • 訓練設計自体も難しい

らへんが挙げられるので、教師あり学習で済むのであれば、教師あり学習を採用する方が合理的な判断かと思われる。

サンプルコード

簡単な 2 次元 Map のゴールまで辿り着くような強化学習のコードのサンプルを GPT に提案してもらった。
一応上記の数式に則って書いているので、GPT と一緒なら読めると思います。

https://colab.research.google.com/drive/1ANf1yTZh9d57bXhdugLMMidLAlhPypgz?usp=sharing

所管

強化学習に関しては、環境が定義しやすく状態が管理しやすい課題に対して向いているのかと思った。例えば、囲碁将棋といったボードゲームなどが挙げられる。データセットを作るのは難しいが、即座にフィードバックが得られるジャンルだと、強化学習は選択の余地にはいるかな?
まぁ一般的な業務単位の仕事に関しては、普通に教師あり学習で十分?

GitHubで編集を提案

Discussion