強化学習のQ関数について調べてみた

ソフトバンクワールド2024で孫さんが強化学習のQ関数について話されていて、改めて調べてみた内容を記載します。

---

### 1. 強化学習の基本概念を理解する

強化学習（Reinforcement Learning, RL）は、エージェントが環境と相互作用し、報酬を最大化するために行動を学習する手法です。主な構成要素は以下の通りです。

- エージェント
- 環境
- 状態（State）
- 行動（Action）
- 報酬（Reward）

### 2. Q関数の定義を把握する

Q関数は「状態-行動価値関数（Action-Value Function）」とも呼ばれ、特定の状態においてある行動を取ったときに得られる期待報酬の総和を表します。数式で表すと次のようになります：
$Q(s, a) = \mathbb{E}[R_t \mid s = s_t, a = a_t]$
ここで、$Q(s, a)$ は状態$s$で行動$a$を取るときの期待報酬、$\mathbb{E}$は期待値、$R_t$は時間$t$に得られる報酬です。

### 3. ベルマン方程式を理解する

Q関数はベルマン方程式に基づいて更新されます。ベルマン方程式は次のように表されます：
$Q(s, a) = r + \gamma \max_{a'}Q(s', a')$
ここで、$r$は現在の報酬、$\gamma$は将来の報酬を割引するための割引率、$s'$は次の状態、$\max_{a'}$は次の状態での最大のQ値を選択することを意味します。

### 4. Q学習アルゴリズムを学ぶ

Q学習は強化学習の一種で、Q関数を更新するための具体的なアルゴリズムです。アルゴリズムの基本的なステップは次の通りです：

1. 初期化：すべての状態-行動ペアのQ値を初期化する（通常は0）。
2. 環境の初期状態を観測する。
3. エージェントが行動を選択して実行する（倫理的に行動するまたは探索する）。
4. 行動の結果として報酬を受け取り、新しい状態を観測する。
5. Q関数を更新する：
$Q(s, a) \leftarrow Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right]$
ここで、$\alpha$は学習率、$r$は得られた報酬、$s'$は新しい状態、$a'$は次の行動です。
6. 新しい状態を現在の状態として更新し、ステップ3～5を繰り返す。

### 5. Q関数の学習ステップの繰り返しを理解する

Q学習では、エージェントが繰り返し環境と相互作用し、Q関数の値を更新していきます。この更新プロセスを繰り返すことで、最終的にはエージェントが最適なポリシー（行動戦略）を学習します。

### 6. Q関数の使用例を確認する

例えば、迷路問題（Maze Problem）を考えます。エージェントが迷路内でゴールを目指して移動する場合、各状態（位置）で取るべき行動（移動方向）を学習するためにQ関数が利用されます。エージェントは試行錯誤を通して最短経路を見つけることを目指します。

### 7. Q関数の直感的な理解を深める

Q関数は、「この状態でこの行動を取るとどれくらい良い結果が得られますか？」という問いに対する答えです。そのため、Q関数の値が高い行動は良い結果をもたらす可能性が高く、逆に低い値の行動はあまり良くない結果であることを示します。

### 8. 実際の例題でQ関数を計算する

簡単な4×4のグリッドワールドを考え、エージェントがスタート地点からゴール地点（報酬が与えられる場所）まで移動する問題を設定します。各状態-行動ペアのQ値を次のように初期化します：
すべてのグリッドセル（状態）で、各方向（行動）に対するQ値を0に初期化します。その後、エージェントが各行動を試み、Q値を更新していきます。

### 9. 表としてQ値を整理する

初期状態のQテーブルは次のようになります（すべての値が0）：

```markdown
\\begin{array}{cccc}
(0,0) & (0,1) & (0,2) & (0,3) \\\\
(1,0) & (1,1) & (1,2) & (1,3) \\\\
(2,0) & (2,1) & (2,2) & (2,3) \\\\
(3,0) & (3,1) & (3,2) & (3,3) \\\\
\\end{array}

```

各セル内には、上、右、下、左の各方向へのQ値が含まれています。

### 10. 行動を選択し、Q値を更新する

エージェントが状態(0,0)において「右」に移動し、次の状態(0,1)で報酬0を受け取ったとします。この場合、Q値は次のように更新されます：
$Q((0,0), \text{右}) \leftarrow Q((0,0), \text{右}) + \alpha \left[ 0 + \gamma \max_{a'} Q((0,1), a') - Q((0,0), \text{右}) \right]$

### 11. 更新されたQ値を確認する

仮に学習率 $\alpha = 0.1$、割引率 $\gamma = 0.9$ とし、現在の更新式により適用すると、上記の式から $Q((0, 0), \text{右})$ の値が更新されます。 初回の更新では、次のQ値が未知のため、初期値0に基づき更新が行われます。

### 12. エージェントの次の行動を選択する

エージェントは次に新しい状態(0,1)で新しい行動を選択します。このプロセスを繰り返すことで、新たなQ値が継続的に更新され、最適戦略が学習されます。

### 13. エクスプロイトとエクスプロアのバランスを学ぶ

エージェントは学習する過程で、既知の情報に基づいて行動を取る（エクスプロイト）と、新しい情報を取得するために試行錯誤する（エクスプロア）をバランスよく行う必要があります。これは、ε-グリーディ法（ε-greedy）などの戦略により実現されます。

### Q関数のまとめ

Q関数は強化学習において重要な役割を果たし、特定の状態で特定の行動を取ったときに得られる期待報酬を表します。Q学習アルゴリズムでは、Q関数の値を更新しながら最適な行動戦略を学習します。この過程を通じて、エージェントは環境と相互作用し、最適な行動を選択することが学べます。

最後に、これまでのまとめをフロー形式で整理します。

```mermaid
graph TD;
  A[強化学習の基本概念] --> B[Q関数の定義];
  B --> C[ベルマン方程式];
  C --> D[Q学習アルゴリズム];
  D --> E[Q関数の学習ステップ];
  E --> F[Q関数の使用例];
  F --> G[Q関数の直感的理解];
  G --> H[実際の例題で計算];
  H --> I[表としてQ値を整理];
  I --> J[行動を選択し更新];
  J --> K[更新されたQ値の確認];
  K --> L[次の行動を選択];
  L --> M[エクスプロイトとエクスプロアのバランス];
  M --> N[Q関数のまとめ]

```

ちなみに、Q関数の「Q」は、Qualityの頭文字を取ったものだそうです。具体的には「状態-行動ペアの価値」を表しており、特定の状態において特定の行動を取った際に得られる期待報酬の総和（すなわち、その行動の質や価値）を意味しているとのことでした！