深層学習 Day 4 - 強化学習、AlphaGo のまとめ

この記事は個人的なお勉強用のメモです。

# 講義

## 強化学習


### 強化学習とは

強化学習の位置づけ
機械学習の一つ

- 教師あり学習
- 教師なし学習
- **強化学習**


データの特徴を見つけるのが、教師（あり｜なし）学習
報酬を最大化する行動を見つけるのが、強化学習

### 強化学習の応用例

マーケティングでの例

|項目|説明|
|---|---|
|環境|会社の販売促進部|
|エージェント|プロフィールと購入履歴に基づいて<br>キャンペーンメールを送る顧客を決めるソフトウェア|
|行動|顧客ごとに、送信、非送信の二つの行動を選択|
|報酬|2種類の報酬<br>負の報酬：キャンペーンのコスト<br>正の報酬：キャンペーンで生み出されると推測される売上|

目的は報酬を最大にすること（コストをなるべく小さくしつつ、売上を最大にする）

### 探索と利用のトレードオフ

最初はランダムでキャンペーンメールを送る。
キャンペーンメール後の反応で売上を大きくする方法がわかってくる。
少しずつより良い行動に変えていく。

探索不足 ⇔ 利用不足 のトレードオフ

探索不足だと、他のもっとベストな行動を見つけられない。
利用不足だと、過去の経験が活かせない。

### 強化学習のイメージ

職場で仕事をするイメージに近い。

- 環境（職場のようなもの）
- エージェント（主人公）

エージェント（主人公）は環境（職場）は行動（仕事）を頑張る。
頑張った結果、環境から報酬（ボーナス）がもらえる。
何をすると報酬が多くなるか、方策（仕事のやり方）を考える。
環境は状態が変わることがある。

強化学習とは、よい報酬が得られるよう、方策を訓練すること。
方策関数と行動価値関数を学習する。

方策関数：$\Pi(s,a)$
行動価値関数：$Q(s,a)$

### 強化学習の差分

強化学習と教師あり、教師なし学習は目標が違う。

|分類|目標|
|---|---|
|教師あり、教師なし学習|データに含まれるパターン（特徴量）を見つける<br>そのデータから予測する|
|強化学習|優れた方策を見つける|


### 強化学習の歴史

以前はコンピュータの性能不足のため、実現できなかった。
強化学習は計算量が多く必要。深層学習より計算量が多い場合も。

Q学習と関数近似法によって強化学習が進んだ。
Q学習では、行動価値関数を使う。
関数近似法は、関数の中を学習させる方法。価値関数や方策関数を関数近似。


### 行動価値関数

2種類の価値関数

- 状態価値関数（状態の価値に注目）
- 行動価値関数（状態と行動を組み合わせた価値に注目）


### 方策関数

ある状態でどのような行動をとるのかの確率を与える関数。

価値関数と密接に関係する。
価値関数が最大になるような行動をとるよう、方策関数はエージェントの行動を決める。

囲碁の例

- どこに碁石を置くか決めるのが方策関数
- やり続けたら最終的に勝てそうか情報提供


### 方策勾配法

方策勾配法の数式

```math
\theta^{(t+1)}=\theta^{(t)}+\epsilon \nabla J(\theta)
```

$\theta$：重みに相当
$\epsilon$：学習率
$\nabla$：微分という意味
$J(\theta)$：誤差関数に相当

**【注意】**
勾配降下法では符号がマイナス（誤差を小さく）だが
方策勾配法では符号がプラス（報酬を大きく）であることに注意。


方策勾配定理の数式

```math
\nabla_{\theta} J(\theta) = E_{\pi_\theta}\Big[ \nabla_\theta \log \pi_\theta (a|s) Q^\pi (s,a) \Big]
```

変形前の式はこちら。

```math
\nabla_{\theta} J(\theta) = \nabla_\theta \sum_{a\in A}\Big[ \pi_\theta (a|s) Q^\pi (s,a) \Big]
```

$A$：取りえるすべての行動
$a$：ある行動

## AlphaGo

- AlphaGo Lee
- AlphaGo Zero

### AlphaGo Lee

#### 方策関数 PolicyNet（どこに打つか）

- CNN
- 入力は 19x19、48 チャンネル
- Convolution + ReLU
- 出力 SoftMax で 19x19 マスの 2次元の着手予想確率

#### 価値関数 ValueNet（そこに打つとどうなるか）

- CNN
- 入力は 19x19、49 チャンネル
- Convolution + ReLU ⇒ 全結合で1次元に変換
- 出力 tanh で勝率を -1～1 で表す

#### 学習のステップ

1. 教師あり学習による RollOutPolicy と PolicyNet の学習
2. 強化学習による PolicyNet の学習
3. 強化学習による ValueNet の学習

最初に教師あり学習を使うのがポイント。

#### RollOutPolicy の教師あり学習

高速に着手確率を出すために使用。
線形の方策関数（NNではない）。

#### PolicyNet の教師あり学習

過去の棋譜データで教師あり学習を実施。

#### モンテカルロ木探索

囲碁ソフトで最も有効とされている探索法。
手を打って、そのあとランダムに打ち、勝率を出力する。
それを複数回繰り返し、勝敗を集計して、着手の優劣を決定する。

その後、優れた手を着手して、モンテカルロ木探索を繰り返すことで
探索木を成長させる。

### AlphaGo Zero

AlphaGo Lee と AlphaGo Zero の違い。

- 強化学習のみ（教師あり学習なし）
- 石の配置のみ（ヒューリスティックな要素を排除）
- PolicyNet と ValueNet を統合
- Residual Net を導入
- モンテカルロ木探索から RollOut シミュレーションを無くした

#### PolicyValueNet

- 入力 19x19、17 チャンネル
- Convolution + Batch Normalize + ReLU
- Residual Network（勾配消失や勾配爆発を防ぐためのショートカットあり）
- 途中で Policy 向けと Value 向けに枝分かれして、2種類の出力

#### Residual Networkの派生形

丸ごと覚えるのは大変なので、特徴のみ記載。

Residual Blockの工夫

- Bottleneck  
1x1 Convolution、次元削減、次元復元の計3層構造
- PreActivation  
Block の並び替え

Network 構造の工夫

- WideResNet  
Convolution の Filter 数が k 倍
- PyramidNet  
各層で Filter 数を増加


# 関連記事

シラバスを見たところ、価値反復法、具体的には DQN が
シラバスの強化学習に含まれているので、DQN についてお勉強。

### DQN

Deep Q-Network
Googleの子会社ディープマインドが開発した人工知能。
深層強化学習アルゴリズムを利用。
一部の電子ゲームにおいて人間以上のスコアを獲得できている。

DQNの特徴は以下の3つ。

- 体験再生（experience replay）
- 目標 Q ネットワークの固定
- 報酬のクリッピング

#### 体験再生（experience replay）

各タイムステップにおけるエージェントの経験をデータ集合に蓄積する。
学習時に、蓄積されたサンプルの中から経験をランダムに取り出し、
損失の計算に用いる。
利点は次の 3 つ。

1. データの効率が良い。  
理由：パラメータの更新時に、**同じ経験を何回も使えるため。**
2. 更新の**分散**を軽減できる。  
理由：系列方向の相関を断ち切れるため。
3. 直前に取得したデータが次の行動の決定に及ぼす影響を軽減できる。  
これにより、パラメータの**振動**やパラメータの発散を避けることができる。  
理由：過去の様々な状態で行動分布が平均化されるため。

####  目標 Q ネットワークの固定

「価値関数が小さく更新されただけでも、選ばれる行動が大きく変わってしまう」問題を解決。
パラメータを固定し、一定周期でこれを更新することで学習を安定させる。

損失関数の数式

```math
L(\theta) = E_{s,a,r,s'～D} \Bigl[ (r + \gamma \max_{a'} Q (s',a';\theta^{-})- Q(s,a;\theta)\Bigr]
```

ポイント
・$\max Q()$ の符号はプラス
・$Q()$ の符号はマイナス
・$\max Q()$ 内の $\theta$ は固定（$\theta^{-}$）
・$Q()$ 内の $\theta$ は可変

#### 報酬のクリッピング

報酬の値を {-1, 0, 1} の 3 値に制限すること。
「報酬のスケールが与えられたタスクによって大きく異なる」という問題を解消。
ゲームごとに学習率を調整する必要がなくなった。