Skip to content

Commit 76a98d7

Browse files
committed
docs: 📝 Update equations in readme.md
1 parent 075733b commit 76a98d7

File tree

3 files changed

+50
-44
lines changed

3 files changed

+50
-44
lines changed

ProximalPolicyOptimization(PPO)/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ on:与环境交互的这个 agent 就是我们要学习的 agent,off:不
3232

3333
## 在代码中,将会实现 PPO-Clip 算法,这是 OpenAI 提出的
3434

35-
效果很差,因为“偶尔的胜利”不足以使网络的参数完全修正,但是 offpolicy 的 dqn with per 能够多次学习成功的经验,所以对于这个 Pendulum-v1 来说,8 太行
35+
效果很差,因为“偶尔的胜利”不足以使网络的参数完全修正,但是 offpolicy 的 dqn with per 能够多次学习成功的经验,所以对于那个把小车推上坡的那个游戏来说,8 太行
3636

3737
对于月球车来说也是不行的,他会走向local minimum(飞天上不下来)
3838

PythonLearning/TheUseageOfTensorboardX/main.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import torchvision
66
import tensorboardX as tb
77
import torch as t
8-
import os
98

109
# args:logdir(where to store the files)
1110
writer = tb.SummaryWriter("./")

readme.md

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -34,50 +34,57 @@ where the \* mark means the algorithm is important and worth diving into it
3434

3535
1. **代理(agent)在一个环境(environment)中执行动作/行为(action)。环境如何对代理的动作做出响应由一个已知或未知的模型(model)来定义。执行代理可以停留在环境中的某个状态(state) $s\in \mathcal{S}$,可以通过执行某个行为/动作(action) $a\in \mathcal{A}$来从一个状态$s$进入到另一个状态$s'$。代理会到达什么状态由状态转移概率$(P)$决定。代理执行了一个动作之后,环境会给出一定的奖励(reward) $r\in\mathcal{R}$作为反馈。**
3636

37-
2. 几乎所有的强化学习问题可以使用马尔科夫决策过程(MDPs)来描述,MDP 中的所有状态都具有“马尔科夫性”:未来仅仅依赖于当前的状态,并不与历史状态相关,在给定当前状态下,未来与过去条件独立,也就是当前状态包含了决定未来所需的所有信息
37+
2. 几乎所有的强化学习问题可以使用马尔科夫决策过程(MDPs)来描述,MDP 中的所有状态都具有“马尔科夫性”:未来仅仅依赖于当前的状态,并不与历史状态相关,在给定当前状态下,未来与过去条件独立,也就是**当前状态包含了决定未来所需的所有信息**
3838

39-
3. 策略:即智能体 agent 的行为函数 PI,是当前状态到一个动作的映射,它可以是随机性的也可以是确定性的
39+
3. 策略:即智能体 agent 的行为函数 $\pi$,是当前状态到一个动作的映射,它可以是随机性的(random)也可以是确定性的(deterministic)
4040

41-
1. PI(s)=a
42-
2. PI(a|s)=P_pi[A=a|S=s]
41+
1. $\pi(s)=a$
42+
2. $\pi(a \mid s)= \mathbb{P}_{\pi}(A=a \mid S=s)$
4343

44-
4. 价值函数 Q(s,a)价值函数是衡量一个状态或者是一个`(状态,行为)元组`的好坏,它是 U_t 的期望;未来的奖励(称为`回报`)定义为带衰减的后续奖励之和(discounted rewards)
44+
4. 动作-价值函数(Action-value Function) $Q(s,a)$:动作-价值函数是衡量一个状态或者是一个`(状态,行为)元组`的好坏,它是 $U_t$ 的期望:$Q_{\pi}(s_t,a_t) = \mathbb{E}[U_t\vert S_t = s_t, A_t = a_t]$;未来的奖励(称为`回报`)定义为带衰减的后续奖励之和(discounted rewards)
4545

46-
1. $$ G*t = R*{t+1} + \gamma R*{t+2} + \dots = \sum*{k=0}^{\infty} \gamma^k R\_{t+k+1} $$
47-
2. gamma 作为对未来奖励的`惩罚`(`penaty`),因为:
46+
1. $$ U_t = R_{t+1} + \gamma R_{t+2} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} $$
47+
[下面第六节](#1-关键概念-key-concepts)中会详细讲到
48+
49+
2. $\gamma$ 作为对未来奖励的`惩罚`(`penaty`),因为:
4850
1. 未来奖励的不确定性
4951
2. 未来奖励不会直接提供收益
50-
3. 数学上便利,无需在乎太远的奖励,被 gamma 衰减掉了
52+
3. 数学上便利,无需在乎太远的奖励,被 $\gamma$ 衰减掉了
5153
4. 使用衰减系数,无需担心存在无限循环的转移图
52-
3. Q\*(st,at)=max_pi Q_pi(st,at),可以对 at 做评价,这个动作有多好
54+
3. $Q^*(s_t,a_t)=\mathop{\max}_{\pi} Q_{\pi}(s_t,a_t)$,可以对 $a_t$ 做评价,这个动作有多好,求出来了$Q^*$之后,Agent便可以根据这个动作价值函数选取最优的动作
55+
56+
5. 状态-价值函数(State-Value Function)存在两种形式:状态 $s$ 的状态价值——`回报的期望值`;某个(state,action)元组的行为价值函数——`该行为相比于平均状态能够获得多大收益`
5357

54-
5. 价值函数存在两种形式:状态 s 的状态价值——`回报的期望值`;某个(state,action)元组的行为价值函数——`该行为能够获得多大收益`
58+
$V(s)$能够表示当前局势的好坏。而$Q_{\pi}(s,a)$能够衡量Agent在s状态下选取动作a的好坏。
5559

5660
1. 我们可以利用行为的分布以及行为的价值函数来推导`状态价值函数`
57-
$$ V*{\pi}(s) = \sum*{a \in \mathcal{A}} Q\_{\pi}(s, a) \pi(a \vert s) $$
61+
$$ \begin{aligned}V_{\pi}(s) &= \sum_{a \in \mathcal{A}} Q_{\pi}(s, a) \pi(a \vert s) \\&=\mathbb{E}_A[Q_{\pi}(s, A)]
62+
\end{aligned}$$
5863
2. 定义行为价值函数和状态价值函数之间的差称为`优势(advantage)`函数,意味着这个动作比`平均状态`好多少?
59-
$$ A*{\pi}(s, a) = Q*{\pi}(s, a) - V\_{\pi}(s) $$
60-
3. 对$V*{\pi}(S)$求期望,我们可以得到这个 policy PI 的好坏
64+
$$ A_{\pi}(s, a) = Q_{\pi}(s, a) - V_{\pi}(s) $$
65+
3. 对$V_{\pi}(S)$求期望$\mathbb{E}_S[V_{\pi}(S)]$,我们可以得到这个 policy $\pi$ 的好坏
6166

62-
6. 贝斯曼方程与 Return(aka cumulative future reward)
67+
6. 贝斯曼方程与 Return(aka cumulative future reward),**注意Return跟上面的奖励Reward是不一样的。**
6368

6469
1. 贝尔曼方程指的是一系列的等式,它将价值函数分解为直接奖励加上衰减后的未来奖励。(discounted rewards)
65-
2. return(aka cumulative future reward):U_t=(R_t)+(R_t+1)+(R_t+2)+...
66-
3. discounted return (aka cumulative discounted future reward) :U_t=gamma^0*(R_t)+gamma^1*(R_t+1)+gamma^2\*(R_t+2)+...,其中 gamma 是一个超参数。在这里,U_t 也是个位置变量,因为动作还没有发生,我们没有办法获得 t 时候的奖励以及 t 时刻之后的奖励,所以 R 都是随机的,那么我们的 U_t 也是随机的,因为下面的第七点`强化学习的随机性`
70+
2. return(aka cumulative future reward), `Return并不是reward`,它可以这么表示: $U_t={R_t}+R_{t+1}+R_{t+2}+...$
71+
3. discounted return (aka cumulative discounted future reward) : $U_t=\gamma^0 R_t+\gamma^1R_{t+1}+\gamma^2R_{t+2}+...$ ,其中 $\gamma$ 是一个超参数。在这里,$U_t$ 也是个位置变量,因为动作还没有发生,我们没有办法获得 $t$ 时候的奖励以及 $t$ 时刻之后的奖励,所以 $R$ 都是随机的,那么我们的 $U_t$ 也是随机的,因为下面的第七点`强化学习的随机性`,所以我们在这里使用$R$来表示奖励,因为它是随机变量。
72+
4. 根据上面的分析,我们可以得知,$R_i$由$S_i$和$A_i$决定,那么$U_t$由一系列随机变量决定:$A_t,A_{t+1},A_{t+2},\dots \ and \ S_t,S_{t+1},S_{t+2},\dots $
6773

6874
7. 强化学习的随机性
6975

70-
1. `动作具有随机性`Pi(theta只输出各个动作的概率,动作是根据概率随机抽样而选取的
71-
2. `状态转换具有随机性`,并不是说在状态 s_i 的情况下选取动作 a 就一定会转移到一个固定的状态 s_i+1,这个状态也是随机的,他可能是 s1,s2,s3.....中的任意一个
76+
1. `动作具有随机性`$\pi(\theta)$只输出各个动作的概率,动作是根据概率随机抽样而选取的,即$\mathbb{P}[A=a \vert S=s] =\pi(a\vert s)$
77+
2. `状态转换具有随机性`,并不是说在状态 $s_i$ 的情况下选取动作 $a$ 就一定会转移到一个固定的状态 $s_{i+1}$,这个状态也是随机的,他可能是 $s_1,s_2,s_3.....$中的任意一个,即$\mathbb{P}[S^{\prime}=s^{\prime}\vert S=s,A=a]=p(s^{\prime}\vert s,a)$
7278

7379
8. 轨迹 trajectory
7480

75-
我们把一轮游戏从开始到结束的动作、状态、奖励拼起来也就是(s1,a1,r1,s2,a2,r2,s3,a3,r3.....sn,an,rn)这就是个轨迹,称之为 trajectory,后面很多算法要用到轨迹
81+
我们把一轮游戏从开始到结束的动作、状态、奖励拼起来也就是$(s_1,a_1,r_1,s_2,a_2,r_2,s_3,a_3,r_3, \dots, s_n,a_n,r_n)$这就是个轨迹,称之为 `trajectory,轨迹`,后面很多算法要用到`轨迹`
7682

7783
9. AI 如何控制 agent 打游戏?
7884

79-
1. `学习 Q*`(st,at)=max_pi Q_pi(st,at),根据状态 st 选择 at,at 满足条件:at 能够使得 Q\*最大
80-
2. `学习策略 Pi(a|s)`,根据状态 st,根据 Pi(·|st)的概率随机采样
85+
1. `学习 Q*`$(s_t,a_t)=max_\pi Q_{\pi}(s_t,a_t)$,根据状态 $s_t$ 选择 $a_t$,$a_t$ 满足条件:$a_t$ 能够使得 Q\*最大
86+
2. `学习策略 Pi(a|s)`,根据状态 $s_t$,根据 $\pi(·|s_t)$的概率随机采样
87+
3. 第一个就是ValueBased RL,第二种就是PolicyBased RL。
8188

8289
10. 概率论相关的数学知识
8390

@@ -91,26 +98,26 @@ where the \* mark means the algorithm is important and worth diving into it
9198

9299
3. 期望
93100

94-
给定 X 为随机变量,求 f(X)的期望:
101+
给定 X 为随机变量,求 $f(X)$的期望:
95102

96-
- 在离散情况下,就是 p(x)\*f(x)的加和
97-
- 在连续情况下,就是 P(x)\*f(x)的积分
103+
- 在离散情况下,就是 $p(x)f(x)$的加和
104+
- 在连续情况下,就是 $P(x)f(x)$的积分即$\int_x P(x)f(x)$
98105

99106
4. 随机抽样
100107

101-
`获得 X 的观测值 x 的操作叫做随机抽样`
108+
获得 $X$ 的观测值 $x$ 的操作叫做随机抽样
102109

103110
5. 蒙特卡洛 Monte Carlo 抽样的用法
104111

105-
- 计算 π
112+
- 计算 $\pi$
106113

107-
假定(x,y)是在一个边长为 1 的正方形之内随机选一个点,那么这个点符合均匀分布的规律,那么这个点落在正方形内接圆的概率是多少呢?用面积可以算出来是 π/4,那我们抽样 n 个点,应该有 πn/4 个点落在圆里面,如果 n 非常大的话我们发现 m 个点在圆里面,那么 m≈πn/4。
114+
假定$(x,y)$是在一个边长为 $1$ 的正方形之内随机选一个点,那么这个点符合均匀分布的规律,那么这个点落在正方形内接圆的概率是多少呢?用面积可以算出来是 $π/4$,那我们抽样 $n$ 个点,应该有 $πn/4$ 个点落在圆里面,如果 $n$ 非常大的话我们发现 $m$ 个点在圆里面,那么 $m≈πn/4$
108115

109116
`要保证抽样是均匀的`
110117

111118
- Buffon's Needle Problem
112119

113-
投针问题也能够很好地近似估算 π
120+
投针问题也能够很好地近似估算 $\pi$
114121

115122
- 估计阴影部分的面积
116123

@@ -122,11 +129,11 @@ where the \* mark means the algorithm is important and worth diving into it
122129

123130
- **近似期望**
124131

125-
X 是一个 d 维的随机变量,p(x)是概率密度函数,平均分布的概率是 p(x)=1/t for x∈[0,t]
132+
X 是一个 d 维的随机变量,p(x)是概率密度函数,平均分布的概率是 $p(x)=1/t \ for \ x\in[0,t]$
126133

127-
高斯分布/正态分布:p(x)=1/(sigema (2π)^2)\*exp[-(x-mu)^2/2sigema^2]
134+
高斯分布/正态分布:$p(x)=1/(\sigma (2π)^2)\exp[-(x-\mu)^2/2\sigma^2]$
128135

129-
直接求 F(x)关于 P(x)的定积分有时候很难,我们抽按照 p(x)的分布抽 n 个样本,计算 Qn=Σf(xi) /n,即 QnE x~p [f(x)]
136+
直接求 $F(x)$关于 $P(x)$的定积分有时候很难,我们抽按照 $p(x)$的分布抽 $n$ 个样本,计算 $Q_n=\sum \frac {f(x_i)} {n}$,即 $Q_n$$ \mathbb{E}[f(x)]$
130137

131138
---
132139

@@ -148,7 +155,7 @@ where the \* mark means the algorithm is important and worth diving into it
148155
- 计算 L 关于 w 的梯度,根据链式求导法则,我们可以得到 L 关于 w 的梯度=(q-y)\*(Q(w)关于 w 的偏导)
149156
- 进行梯度下降,w_t+1 = w_t - alpha \* 上一步的梯度,其中 alpha 是超参数,是步长。
150157
- 但是在玩游戏的过程中,我们因为某种原因,只玩到一半,得到价值,我们需要 Q(w)估计另外一半的代价,两者相加得到代价 y,这个 y 肯定比 Q(w)估计整个过程要靠谱,因为我们有一半的数值是真的。我们用这个 y 来代替上面的 y,也可以更新参数。
151-
- 由上一步,`我们将Q(w)-y称为TD ERROR`
158+
- 由上一步,`我们将Q(w)-y称为TD ERROR, Temporal Error`
152159
- 我们的优化目标就是让 TD error = 0
153160

154161
## 1. Qlearning - off_policy TD control
@@ -246,9 +253,9 @@ step
246253

247254
- 就目前在网上看到的情况有以下几种 AC 架构
248255

249-
1. 使用 Actor 来学习策略,Critic 学习 V(s),接受状态 s 作为输入
250-
2. 使用 Actor 来学习策略,Critic 学习 Q_pi(a,s),接受状态 s,a 的 concatenation 作为输入
251-
3. 使用 Actor 来学习策略,Critic 学习 Q_pi(a,s),接受状态 s,a 的 concatenation 作为输入,但是 s 是作为特征(features)从 actor 提取出来的,也就是说共享卷积层参数
256+
1. 使用 Actor 来学习策略,Critic 学习 $V(s)$,接受状态 s 作为输入(Policy Based)
257+
2. 使用 Actor 来学习策略,Critic 学习 $Q_{\pi}(a,s)$,接受状态 s,a 的 concatenation 作为输入(Value Based)
258+
3. 使用 Actor 来学习策略,Critic 学习 $Q_{\pi}(a,s)$,接受状态 s,a 的 concatenation 作为输入,但是 s 是作为特征(features)从 actor 提取出来的,也就是说共享前面层的参数
252259

253260
- 训练:
254261

@@ -475,7 +482,7 @@ pipreqs ./ --encoding=utf8
475482
476483
- [马尔科夫决策与平稳分布](https://blog.csdn.net/qq_34652535/article/details/85343518)
477484
478-
- [深度强化学习基础](https://www.youtube.com/watch?v=vmkRMvhCW5c&list=PLvOO0btloRnsiqM72G4Uid0UWljikENlU)
485+
- [深度强化学习基础-王树森](https://www.youtube.com/watch?v=vmkRMvhCW5c&list=PLvOO0btloRnsiqM72G4Uid0UWljikENlU)
479486
480487
- [深入浅出强化学习](https://daiwk.github.io/posts/rl.html)
481488
@@ -489,13 +496,13 @@ pipreqs ./ --encoding=utf8
489496
490497
- [OPENAI spinning up](https://spinningup.qiwihui.com/zh_CN/latest/user/introduction.html)
491498
499+
- [OPENAI GYM](https://github.com/openai/gym)
500+
492501
<br><br><br>
493502
494503
# 7. TODO
495504
496-
2. H-DQN
497-
3. OpenAI spinning up 好好看看
498-
4. 继续学习 D2L 书里面的 MLP
499-
5. 手写优化器
500-
6. 重写 Memory 类,改成统一接口
501-
7. 写几个 abstract 类,统一 Actor 和 Critic 的接口
505+
1. OpenAI spinning up 好好看看
506+
2. 重写 Memory 类,改成统一接口
507+
3. 写几个 abstract 类,统一 Actor 和 Critic 的接口
508+
4. 补充

0 commit comments

Comments
 (0)