# YutaroOgawa-Deep-Reinforcement-Learning-Book
**Repository Path**: guodingming/yutaro-ogawa-deep-reinforcement-learning-book
## Basic Information
- **Project Name**: YutaroOgawa-Deep-Reinforcement-Learning-Book
- **Description**: 《边做边学深度强化学习:PyTorch程序设计实践》
作者:[日] 小川雄太郎
ISBN:9787111650140
- **Primary Language**: Python
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2023-02-04
- **Last Updated**: 2023-02-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
>边做边学深度强化学习:PyTorch程序设计实践
作者:[日] 小川雄太郎
ISBN:9787111650140
作者的GitHub:https://github.com/YutaroOgawa/Deep-Reinforcement-Learning-Book.git
## 前两章介绍
第一章主要内容是强化学习概述:
+ 机器学习的分类(监督学习、非监督学习、`强化学习`)
+ 强化学习、深度强化学习的历史
+ 深度强化学习的一些应用实例
第二章主要使用走迷宫任务介绍一些基本的强化学习方法。
### 2.2.1 对应原书第 2.2~2.4 部分内容
+ 详细介绍了迷宫任务,状态、动作、策略等
+ 随机生成策略求解迷宫路径并可视化路径
+ 使用 `softmax` 函数演示了`策略梯度法`求得策略并可视化路径
+ `softmax` 函数如下:
$$
P(\theta_i) = \frac{exp(\beta\theta_i)}{\sum_{j=1}^{N_a}exp(\beta\theta_j)}
$$
+ `策略梯度法所`用更新公式如下:
$$
new~\theta_{s_i,a_j} = old~\theta_{s_i,a_j} + \eta\cdot\Delta\theta_{s,a_j}
$$
$$
\Delta\theta_{s,a_j}=\{N(s_i,a_j)-P(s_i,a_j)N(s_i,a)\}/T
$$
### 2.5 对应第 2.5 部分内容
+ 用 $\epsilon$-贪婪法实现了一种 Sarsa 算法
+ Sarsa 算法是一种`价值迭代算法`
+ 介绍了`贝尔曼方程`如下:
$$
Q(s_t,a_t) = R_{t+1}+\gamma Q(S_{t+1},a_{t+1})
$$
+ Sarsa 算法更新公式如下:
$$
Q(s_t,a_t) = Q(s_t,a_t)+\eta*TD \\
TD = R_{t+1}+\gamma Q(s_{t+1},a_{t+1})-Q(s_t,a_t)
$$
### 2.6 对应第 2.6 部分内容
+ 使用 Q学习法(Qlearning),与 Sarsa 不同
+ Qlearning 更新公式对比如下:
$$
\text{QLearning: } Q(s_t,a_t)=Q(s_t,a_t) + \eta * (R_{t+1}+\gamma \max_a Q(s_{t+1},a) - Q(s_t,a_t)) \\
\text{Sara: } Q(s_t,a_t)=Q(s_t,a_t) + \eta * (R_{t+1}+\gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t))
$$
+ Sarsa 更新时需要求取下一步动作 $a_{t+1}$,这样的特征称为 `策略依赖型(ON)`特征
+ QLearning 使用在状态 $s_{t+1}$ 下动作的最大价值进行更新,`策略关闭型(OFF)`
## 第三章
主要使用复杂一些的倒立摆任务
详细内容见笔记
书中使用的一些包版本较低:gym==0.9.7,pyglet==1.2.4
经测试(2020年8月24日),最新版gym==0.17.2,以及较高版本pyglet==1.5.0可用。
原书中可视化的代码已做修改。
## 第四章
简要介绍了使用 `PyTorch` 实现深度学习
1. 简述了神经网络和深度学习的历史
2. 深度学习的计算方法
3. 使用 `PyTorch` 实现 `MNIST` 手写数字分类任务
书中为了完整展示深度学习的过程,使用了 `scikit-learn`,但库版本较低
```python
# 使用了新版本,所以
from sklearn.datasets import fetch_mldata
# 改为了
from sklearn.datasets import fetch_openml
```
实际上,该部分展示的是监督学习。
## 第五章
介绍 DQN,Q学习与深度学习的结合,使用深度学习的神经网络替代 Q 表格(本章是 2013 版的 DQN)
## 第六章
深度强化学习的改进版
+ 6.1 介绍了深度强化学习算法的发展
+ 6.2 介绍了DDQN
+ 2015 Nature 版 DQN 采用了`目标 Q 网络` 以训练 `主 Q 网络`:
$$
Q_m(s_t, a_t)=Q_m(s_t,a_t) + \eta*(R_{t+1}+\gamma\max_a{Q_t(s_{t+1}, a)}-Q_m(s_t,a_t))
$$
+ DDQN 中使用:
$$
a_m = \arg \max_a Q_m(s_{t+1},a) \\
Q_m(s_t, a_t)=Q_m(s_t,a_t) + \eta*(R_{t+1}+\gamma Q_t(s_{t+1}, a_m)-Q_m(s_t,a_t))
$$