From 3887cc5c4b3c55dc71747b678a681ced37c88912 Mon Sep 17 00:00:00 2001 From: David Young <46375780+yyysjz1997@users.noreply.github.com> Date: Fri, 11 Sep 2020 10:11:10 +0800 Subject: [PATCH] Add files via upload --- questions.md | 515 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 515 insertions(+) create mode 100644 questions.md diff --git a/questions.md b/questions.md new file mode 100644 index 0000000..6906d5a --- /dev/null +++ b/questions.md @@ -0,0 +1,515 @@ +## Chapter1 强化学习概述 + +#### 1 关键词 + +- **强化学习(Reinforcement Learning)**:Agent可以在与复杂且不确定的Environment进行交互时,尝试使所获得的Reward最大化的计算算法。 +- **Action**: Environment接收到的Agent当前状态的输出。 +- **State**:Agent从Environment中获取到的状态。 +- **Reward**:Agent从Environment中获取的反馈信号,这个信号指定了Agent 在某一步采取了某个策略是否得到奖励。 +- **Exploration**:在当前的情况下,继续尝试新的Action,其有可能会使你得到更高的这个奖励,也有可能使你一无所有。 +- **Exploitation**:在当前的情况下,继续尝试已知可以获得最大Reward的过程,那你就重复执行这个 Action 就可以了。 +- **深度强化学习(Deep Reinforcement Learning)**:不需要手工设计特征,仅需要输入State让系统直接输出Action的一个end-to-end training的强化学习方法。通常使用神经网络来拟合 value function 或 policy network。 +- **Full observability、fully observed和partially observed**:当 Agent 的状态跟Environment的状态等价的时候,我们就说现在Environment是full observability(全部可观测),当 Agent 能够观察到Environment的所有状态时,我们称这个环境是fully observed(完全可观测)。一般我们的Agent不能观察到Environment的所有状态时,我们称这个环境是partially observed(部分可观测)。 +- **POMDP(Partially Observable Markov Decision Processes)**:部分可观测马尔可夫决策过程,即马尔可夫决策过程的泛化。POMDP 依然具有马尔可夫性质,但是假设智能体无法感知环境的状态 $s$,只能知道部分观测值 $o$。 +- **Action space(discrete action spaces and continuous action spaces)**:在给定的Environment中,有效动作的集合经常被称为动作空间(Action space),Agent 的动作数量是有限的动作空间为离散动作空间(discrete action spaces),反之,称为连续动作空间(continuous action spaces)。 +- **policy-based(基于策略的)**:智能体会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励。 +- **valued-based(基于价值的)**:智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。 +- **model-based(有模型结构)**:Agent通过学习状态的转移来采取措施。 +- **model-free(无模型结构)**:Agent没有去直接估计状态的转移,也没有得到Environment的具体转移变量。它通过学习 value function 和 policy function 进行决策。 + +#### 2 思考题 + +- 强化学习的基本结构是什么? + + 答:本质上是Agent和Environment间的交互。具体地,当Agent在Environment中得到当前时刻的State,Agent会基于此状态输出一个Action。然后这个Action会加入到Environment中去并输出下一个State和当前的这个Action得到的Reward。Agent 在Environment里面存在的目的就是为了极大它的期望积累的Reward。 + +- 强化学习相对于监督学习为什么训练会更加困难?(强化学习的特征) + + 答: + + 1. 强化学习处理的多是序列数据,其很难像监督学习的样本一样满足**IID(独立同分布)**条件。 + + 2. 强化学习有奖励的延迟(Delay Reward),即在Agent的action作用在Environment中时,Environment对于Agent的State的**奖励的延迟**(Delayed Reward),使得反馈不及时。 + 3. 相比于监督学习有正确的label,可以通过其修正自己的预测,强化学习相当于一个“试错”的过程,其完全根据Environment的“**反馈**”更新对自己最有利的Action。 + +- 强化学习的基本特征有哪些? + + 答: + + 1. 有**trial-and-error exploration**的过程,即需要通过探索Environment来获取对这个Environment的理解。 + + 2. 强化学习的Agent 会从Environment里面获得**延迟**的Reward。 + 3. 强化学习的训练过程中**时间**非常重要,因为数据都是有时间关联的,而不是像监督学习一样是IID分布的。 + 4. 强化学习中Agent的Action会**影响**它随后得到的**反馈**。 + +- 近几年强化学习发展迅速的原因? + + 答: + + 1. **算力(GPU、TPU)的提升**,我们可以更快地做更多的 trial-and-error 的尝试来使得 Agent 在Environment里面获得很多信息,取得很大的Reward。 + + 2. 我们有了深度强化学习这样一个端到端的训练方法,可以把特征提取和价值估计或者决策一起优化,这样就可以得到一个更强的决策网络。 + +- 状态和观测有什么关系? + + 答:状态(state)是对世界的**完整描述**,不会隐藏世界的信息。观测(observation)是对状态的**部分描述**,可能会遗漏一些信息。在深度强化学习中,我们几乎总是用一个实值向量、矩阵或者更高阶的张量来表示状态和观测。 + +- 对于一个强化学习 Agent,它由什么组成? + + 答: + + 1. **策略函数(policy function)**,Agent 会用这个函数来选取它下一步的动作,包括**随机性策略(stochastic policy)**和**确定性策略(deterministic policy)**。 + + 2. **价值函数(value function)**,我们用价值函数来对当前状态进行估价,它就是说你进入现在这个状态,到底可以对你后面的收益带来多大的影响。当这个价值函数大的时候,说明你进入这个状态越有利。 + + 3. **模型(model)**,其表示了 Agent 对这个Environment的状态进行的理解,它决定了这个系统是如何进行的。 + +- 根据强化学习 Agent 的不同,我们可以将其分为哪几类? + + 答: + + 1. **基于价值函数的 Agent**。 显式学习的就是价值函数,隐式地学习了它的策略。因为这个策略是从我们学到的价值函数里面推算出来的。 + 2. **基于策略的 Agent**。它直接去学习 policy,就是说你直接给它一个 state,它就会输出这个动作的概率。然后在这个 policy-based agent 里面并没有去学习它的价值函数。 + 3. 然后另外还有一种 Agent 是把这两者结合。把 value-based 和 policy-based 结合起来就有了 **Actor-Critic agent**。这一类 Agent 就把它的策略函数和价值函数都学习了,然后通过两者的交互得到一个最佳的行为。 + +- 基于策略迭代和基于价值迭代的强化学习方法有什么区别? + + 答:基于策略迭代的强化学习方法,智能体会制定一套动作策略(确定在给定状态下需要采取何种动作),并根据这个策略进行操作。强化学习算法直接对策略进行优化,使制定的策略能够获得最大的奖励;基于价值迭代的强化学习方法,智能体不需要制定显式的策略,它维护一个价值表格或价值函数,并通过这个价值表格或价值函数来选取价值最大的动作。基于价值迭代的方法只能应用在不连续的、离散的环境下(如围棋或某些游戏领域),对于行为集合规模庞大、动作连续的场景(如机器人控制领域),其很难学习到较好的结果(此时基于策略迭代的方法能够根据设定的策略来选择连续的动作);基于价值迭代的强化学习算法有 Q-learning、 Sarsa 等,而基于策略迭代的强化学习算法有策略梯度算法等。此外, Actor-Critic 算法同时使用策略和价值评估来做出决策,其中,智能体会根据策略做出动作,而价值函数会对做出的动作给出价值,这样可以在原有的策略梯度算法的基础上加速学习过程,取得更好的效果。 + +- 有模型(model-based)学习和免模型(model-free)学习有什么区别? + + 答:针对是否需要对真实环境建模,强化学习可以分为有模型学习和免模型学习。有模型学习是指根据环境中的经验,构建一个虚拟世界,同时在真实环境和虚拟世界中学习;免模型学习是指不对环境进行建模,直接与真实环境进行交互来学习到最优策略。总的来说,有模型学习相比于免模型学习仅仅多出一个步骤,即对真实环境进行建模。免模型学习通常属于数据驱动型方法,需要大量的采样来估计状态、动作及奖励函数,从而优化动作策略。免模型学习的泛化性要优于有模型学习,原因是有模型学习算需要对真实环境进行建模,并且虚拟世界与真实环境之间可能还有差异,这限制了有模型学习算法的泛化性。 + +- 强化学习的通俗理解 + + 答:environment 跟 reward function 不是我们可以控制的,environment 跟 reward function 是在开始学习之前,就已经事先给定的。我们唯一能做的事情是调整 actor 里面的 policy,使得 actor 可以得到最大的 reward。Actor 里面会有一个 policy, 这个policy 决定了actor 的行为。Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。 + +## Chapter2 马尔可夫决策过程(MDP) + +#### 1 关键词 + +- **马尔可夫性质(Markov Property)**:如果某一个过程未来的转移跟过去是独立的,即只取决于现在,那么其满足马尔可夫性质。换句话说,一个状态的下一个状态只取决于它当前状态,而跟它当前状态之前的状态都没有关系。 +- **马尔可夫链(Markov Chain)**:概率论和数理统计中具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)。 +- **状态转移矩阵(State Transition Matrix)**:状态转移矩阵类似于一个 conditional probability,当我们知道当前我们在 $s_t$ 这个状态过后,到达下面所有状态的一个概念,它每一行其实描述了是从一个节点到达所有其它节点的概率。 +- **马尔可夫奖励过程(Markov Reward Process, MRP)**:即马尔可夫链再加上了一个奖励函数。在 MRP之中,转移矩阵跟它的这个状态都是跟马尔可夫链一样的,多了一个奖励函数(reward function)。奖励函数是一个期望,它说当你到达某一个状态的时候,可以获得多大的奖励。 +- **horizon:** 定义了同一个 episode 或者是整个一个轨迹的长度,它是由有限个步数决定的。 +- **return:** 把奖励进行折扣(discounted),然后获得的对应的收益。 +- **Bellman Equation(贝尔曼等式):** 定义了当前状态与未来状态的迭代关系,表示当前状态的值函数可以通过下个状态的值函数来计算。Bellman Equation 因其提出者、动态规划创始人 Richard Bellman 而得名 ,同时也被叫作“动态规划方程”。$V(s)=R(S)+ \gamma \sum_{s' \in S}P(s'|s)V(s')$ ,特别地,矩阵形式:$V=R+\gamma PV$。 +- **Monte Carlo Algorithm(蒙特卡罗方法):** 可用来计算价值函数的值。通俗的讲,我们当得到一个MRP过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 Discounted 的奖励 $g$ 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。 +- **Iterative Algorithm(动态规划方法):** 可用来计算价值函数的值。通过一直迭代对应的Bellman Equation,最后使其收敛。当这个最后更新的状态跟你上一个状态变化并不大的时候,这个更新就可以停止。 +- **Q函数 (action-value function):**其定义的是某一个状态某一个行为,对应的它有可能得到的 return 的一个期望( over policy function)。 +- **MDP中的prediction(即policy evaluation问题):**给定一个 MDP 以及一个 policy $\pi$ ,去计算它的 value function,即每个状态它的价值函数是多少。其可以通过动态规划方法(Iterative Algorithm)解决。 +- **MDP中的control问题:** 寻找一个最佳的一个策略,它的 input 就是MDP,输出是通过去寻找它的最佳策略,然后同时输出它的最佳价值函数(optimal value function)以及它的这个最佳策略(optimal policy)。其可以通过动态规划方法(Iterative Algorithm)解决。 +- **最佳价值函数(Optimal Value Function):**我们去搜索一种 policy $\pi$ ,然后我们会得到每个状态它的状态值最大的一个情况,$v^*$ 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy)。optimal policy 使得每个状态,它的状态函数都取得最大值。所以当我们说某一个 MDP 的环境被解了过后,就是说我们可以得到一个 optimal value function,然后我们就说它被解了。 + +#### 2 思考题 + +- 为什么在马尔可夫奖励过程(MRP)中需要有**discounted factor**? + + 答: + + 1. 首先,是有些马尔可夫过程是**带环**的,它并没有终结,然后我们想**避免这个无穷的奖励**; + 2. 另外,我们是想把这个**不确定性**也表示出来,希望**尽可能快**地得到奖励,而不是在未来某一个点得到奖励; + 3. 其次,如果这个奖励是它是有实际价值的了,我们可能是更希望立刻就得到奖励,而不是我们后面再得到奖励。 + 4. 在人的行为里面来说的话,其实也是大家也是想得到立刻奖励; + 5. 还有在有些时候,这个系数也可以把它设为 0。比如说,当我们设为 0 过后,然后我们就只关注了它当前的奖励。我们也可以把它设为 1,设为 1 的话就是对未来并没有折扣,未来获得的奖励跟我们当前获得的奖励是一样的。 + + 所以,这个系数其实是应该可以作为强化学习 agent 的一个 hyper parameter 来进行调整,然后就会得到不同行为的 agent。 + +- 为什么矩阵形式的Bellman Equation的解析解比较难解? + + 答:通过矩阵求逆的过程,就可以把这个 V 的这个价值的解析解直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 $O(N^3)$。所以就当我们状态非常多的时候,比如说从我们现在十个状态到一千个状态,到一百万个状态。那么当我们有一百万个状态的时候,这个转移矩阵就会是个一百万乘以一百万的一个矩阵。这样一个大矩阵的话求逆是非常困难的,所以这种通过解析解去解,只能对于很小量的MRP。 + +- 计算贝尔曼等式(Bellman Equation)的常见方法以及区别? + + 答: + + 1. **Monte Carlo Algorithm(蒙特卡罗方法):** 可用来计算价值函数的值。通俗的讲,我们当得到一个MRP过后,我们可以从某一个状态开始,然后让它让把这个小船放进去,让它随波逐流,这样就会产生一个轨迹。产生了一个轨迹过后,就会得到一个奖励,那么就直接把它的 Discounted 的奖励 $g$ 直接算出来。算出来过后就可以把它积累起来,当积累到一定的轨迹数量过后,然后直接除以这个轨迹,然后就会得到它的这个价值。 + 2. **Iterative Algorithm(动态规划方法):** 可用来计算价值函数的值。通过一直迭代对应的Bellman Equation,最后使其收敛。当这个最后更新的状态跟你上一个状态变化并不大的时候,这个更新就可以停止。 + 3. **以上两者的结合方法:**另外我们也可以通过 Temporal-Difference Learning 的那个办法。这个 `Temporal-Difference Learning` 叫 `TD Leanring`,就是动态规划和蒙特卡罗的一个结合。 + +- 马尔可夫奖励过程(MRP)与马尔可夫决策过程 (MDP)的区别? + + 答:相对于 MRP,马尔可夫决策过程(Markov Decision Process)多了一个 decision,其它的定义跟 MRP 都是类似的。这里我们多了一个决策,多了一个 action ,那么这个状态转移也多了一个 condition,就是采取某一种行为,然后你未来的状态会不同。它不仅是依赖于你当前的状态,也依赖于在当前状态你这个 agent 它采取的这个行为会决定它未来的这个状态走向。对于这个价值函数,它也是多了一个条件,多了一个你当前的这个行为,就是说你当前的状态以及你采取的行为会决定你在当前可能得到的奖励多少。 + + 另外,两者之间是由转换关系的。具体来说,已知一个 MDP 以及一个 policy $\pi$ 的时候,我们可以把 MDP 转换成MRP。在 MDP 里面,转移函数 $P(s'|s,a)$ 是基于它当前状态以及它当前的 action,因为我们现在已知它 policy function,就是说在每一个状态,我们知道它可能采取的行为的概率,那么就可以直接把这个 action 进行加和,那我们就可以得到对于 MRP 的一个转移,这里就没有 action。同样地,对于奖励,我们也可以把 action 拿掉,这样就会得到一个类似于 MRP 的奖励。 + +- MDP 里面的状态转移跟 MRP 以及 MP 的结构或者计算方面的差异? + + 答: + + - 对于之前的马尔可夫链的过程,它的转移是直接就决定,就从你当前是 s,那么就直接通过这个转移概率就直接决定了你下一个状态会是什么。 + - 但是对于 MDP,它的中间多了一层这个行为 a ,就是说在你当前这个状态的时候,你首先要决定的是采取某一种行为。然后因为你有一定的不确定性,当你当前状态决定你当前采取的行为过后,你到未来的状态其实也是一个概率分布。所以你采取行为以及你决定,然后你可能有有多大的概率到达某一个未来状态,以及另外有多大概率到达另外一个状态。所以在这个当前状态跟未来状态转移过程中这里多了一层决策性,这是MDP跟之前的马尔可夫过程很不同的一个地方。在马尔科夫决策过程中,行为是由 agent 决定,所以多了一个 component,agent 会采取行为来决定未来的状态转移。 + +- 我们如何寻找最佳的policy,方法有哪些? + + 答:本质来说,当我们取得最佳的价值函数过后,我们可以通过对这个 Q 函数进行极大化,然后得到最佳的价值。然后,我们直接在这个Q函数上面取一个让这个action最大化的值,然后我们就可以直接提取出它的最佳的policy。 + + 具体方法: + + 1. **穷举法(一般不使用):**假设我们有有限多个状态、有限多个行为可能性,那么每个状态我们可以采取这个 A 种行为的策略,那么总共就是 $|A|^{|S|}$ 个可能的 policy。我们可以把这个穷举一遍,然后算出每种策略的 value function,然后对比一下可以得到最佳策略。但是效率极低。 + 2. **Policy iteration:** 一种迭代方法,有两部分组成,下面两个步骤一直在迭代进行,最终收敛: + - 第一个步骤是**policy evaluation**,即当前我们在优化这个 policy $\pi$ ,所以在优化过程中得到一个最新的这个 policy 。 + - 第二个步骤是**value iteration**,即取得价值函数后,进一步推算出它的 Q 函数。得到 Q 函数过后,那我们就直接去取它的极大化。 + 3. **Value iteration:** 我们一直去迭代 Bellman Optimality Equation,到了最后,它能逐渐趋向于最佳的策略,这是 value iteration 算法的精髓,就是我们去为了得到最佳的 $v^*$ ,对于每个状态它的 $v^*$ 这个值,我们直接把这个 Bellman Optimality Equation 进行迭代,迭代了很多次之后它就会收敛到最佳的policy以及其对应的状态,这里面是没有policy function的。 + +## Chapter3 表格型方法 + +#### 1 关键词 + +- **P函数和R函数:**P函数就是状态转移的概率,其就是反应的环境的随机性,R函数就是Reward function。但是我们通常处于一个未知的环境(即P函数和R函数是未知的)。 +- **Q表格型表示方法:** 表示形式是一种表格形式,其中横坐标为action(agent)的行为,纵坐标是环境的state,其对应着每一个时刻agent和环境的情况,并通过对应的reward反馈去做选择。一般情况下,Q表格是一个已经训练好的表格,不过,我们也可以每进行一步,就更新一下Q表格,然后用下一个状态的Q值来更新这个状态的Q值(即时序差分方法)。 +- **时序差分(Temporal Difference):** 一种Q函数(Q值)的更新方式,也就是可以拿下一步的 Q 值 $Q(S_{t+_1},A_{t+1})$ 来更新我这一步的 Q 值 $Q(S_t,A_t)$ 。完整的计算公式如下:$Q(S_t,A_t) \larr Q(S_t,A_t) + \alpha [R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)]$ + +- **SARSA算法:** 一种更新前一时刻状态的单步更新的强化学习算法,也是一种on-policy策略。该算法由于每次更新值函数需要知道前一步的状态(state),前一步的动作(action)、奖励(reward)、当前状态(state)、将要执行的动作(action),即 $(S_{t}, A_{t}, R_{t+1}, S_{t+1}, A_{t+1})$ 这几个值,所以被称为SARSA算法。agent没进行一次循环,都会用 $(S_{t}, A_{t}, R_{t+1}, S_{t+1}, A_{t+1})$ 对于前一步的Q值(函数)进行一次更新。 + +#### 2 思考题 + +- 构成强化学习MDP的四元组? + + 答:状态、动作、状态转移概率和奖励,分别对应(S,A,P,R),后面有可能会加上个衰减因子构成五元组。 + +- 基于以上的描述所构成的强化学习的“学习”流程。 + + 答:强化学习要像人类一样去学习了,人类学习的话就是一条路一条路的去尝试一下,先走一条路,我看看结果到底是什么。多试几次,只要能一直走下去的,我们其实可以慢慢的了解哪个状态会更好。我们用价值函数 $V(s)$ 来代表这个状态是好的还是坏的。然后用这个 Q 函数来判断说在什么状态下做什么动作能够拿到最大奖励,我们用 Q 函数来表示这个状态-动作值。 + +- 基于SARSA算法的agent的学习过程。 + + 答:我们现在有环境,有agent。每交互一次以后,我们的agent会向环境输出action,接着环境会反馈给agent当前时刻的state和reward。那么agent此时会实现两个方法:1. 使用已经训练好的Q表格,对应环境反馈的state和reward选取对应的action并输出。2.我们已经拥有了$(S_{t}, A_{t}, R_{t+1}, S_{t+1}, A_{t+1})$ 这几个值,并世界使用 $A_{t+1}$ 去更新我们的Q表格。 + +- Q-learning和Sarsa的区别? + + 答:Sarsa算法是Q-learning算法的改进。 + + 1. 首先,Q-learning 是 off-policy 的时序差分学习方法,Sarsa 是 on-policy 的时序差分学习方法。 + + 2. 其次,Sarsa 在更新 Q 表格的时候,它用到的 A' 。我要获取下一个 Q 值的时候,A' 是下一个 step 一定会执行的 action 。这个 action 有可能是 $\varepsilon$-greddy 方法 sample 出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作。但是就是它实实在在执行了的那个动作。 + + 3. 但是 Q-learning 在更新 Q 表格的时候,它用到这个的 Q 值 $Q(S',a')$ 对应的那个 action ,它不一定是下一个 step 会执行的实际的 action,因为你下一个实际会执行的那个 action 可能会探索。Q-learning 默认的 action 不是通过 behavior policy 来选取的,它是默认 A' 为最优策略选的动作,所以 Q-learning 在学习的时候,不需要传入 A',即 $a_{t+1}$ 的值。 + + 4. 更新公式的对比(区别只在target计算这一部分): + + - Sarsa的公式: $R_{t+1}+\gamma Q(S_{t+1}, A_{t+1})$ ; + - Q-learning的公式:$R_{t+1}+\gamma \underset{a}{\max} Q\left(S_{t+1}, a\right)$ + + Sarsa 实际上都是用自己的策略产生了 S,A,R,S',A' 这一条轨迹。然后拿着 $Q(S_{t+1},A_{t+1})$ 去更新原本的 Q 值 $Q(S_t,A_t)$。 但是 Q-learning 并不需要知道,我实际上选择哪一个 action ,它默认下一个动作就是 Q 最大的那个动作。 + +- On-policy和 off-policy 的区别? + + 答: + + 1. Sarsa 就是一个典型的 on-policy 策略,它只用一个 $\pi$ ,为了兼顾探索和利用,所以它训练的时候会显得有点胆小怕事。它在解决悬崖问题的时候,会尽可能地离悬崖边上远远的,确保说哪怕自己不小心探索了一点了,也还是在安全区域内不不至于跳进悬崖。 + 2. Q-learning 是一个比较典型的 off-policy 的策略,它有目标策略 target policy,一般用 $\pi$ 来表示。然后还有行为策略 behavior policy,用 $\mu$ 来表示。它分离了目标策略跟行为策略。Q-learning 就可以大胆地用 behavior policy 去探索得到的经验轨迹来去优化我的目标策略。这样子我更有可能去探索到最优的策略。 + 3. 比较 Q-learning 和 Sarsa 的更新公式可以发现,Sarsa 并没有选取最大值的 max 操作。因此,Q-learning 是一个非常激进的算法,希望每一步都获得最大的利益;而 Sarsa 则相对非常保守,会选择一条相对安全的迭代路线。 + +## Chapter4 梯度策略 + +#### 1 关键词 + +- **policy(策略):** 每一个actor中会有对应的策略,这个策略决定了actor的行为。具体来说,Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。**一般地,我们将policy写成 $\pi$ 。** +- **Return(回报):** 一个回合(Episode)或者试验(Trial)所得到的所有的reward的总和,也被人们称为Total reward。**一般地,我们用 $R$ 来表示他。** +- **Trajectory:** 一个试验中我们将environment 输出的 $s$ 跟 actor 输出的行为 $a$,把这个 $s$ 跟 $a$ 全部串起来形成的集合,我们称为Trajectory,即 $\text { Trajectory } \tau=\left\{s_{1}, a_{1}, s_{2}, a_{2}, \cdots, s_{t}, a_{t}\right\}$。 +- **Reward function:** 根据在某一个 state 采取的某一个 action 决定说现在这个行为可以得到多少的分数,它是一个 function。也就是给一个 $s_1$,$a_1$,它告诉你得到 $r_1$。给它 $s_2$ ,$a_2$,它告诉你得到 $r_2$。 把所有的 $r$ 都加起来,我们就得到了 $R(\tau)$ ,代表某一个 trajectory $\tau$ 的 reward。 +- **Expected reward:** $\bar{R}_{\theta}=\sum_{\tau} R(\tau) p_{\theta}(\tau)=E_{\tau \sim p_{\theta}(\tau)}[R(\tau)]$。 +- **Reinforce:** 基于策略梯度的强化学习的经典算法,其采用回合更新的模式。 + +#### 2 思考题 + +- 如果我们想让机器人自己玩video game, 那么强化学习中三个组成(actor、environment、reward function)部分具体分别是什么? + + 答:actor 做的事情就是去操控游戏的摇杆, 比如说向左、向右、开火等操作;environment 就是游戏的主机, 负责控制游戏的画面负责控制说,怪物要怎么移动, 你现在要看到什么画面等等;reward function 就是当你做什么事情,发生什么状况的时候,你可以得到多少分数, 比如说杀一只怪兽得到 20 分等等。 + +- 在一个process中,一个具体的trajectory $s_1$,$a_1$, $s_2$ , $a_2$ 出现的概率取决于什么? + + 答: + + 1. 一部分是 **environment 的行为**, environment 的 function 它内部的参数或内部的规则长什么样子。 $p(s_{t+1}|s_t,a_t)$这一项代表的是 environment, environment 这一项通常你是无法控制它的,因为那个是人家写好的,你不能控制它。 + + 2. 另一部分是 **agent 的行为**,你能控制的是 $p_\theta(a_t|s_t)$。给定一个 $s_t$, actor 要采取什么样的 $a_t$ 会取决于你 actor 的参数 $\theta$, 所以这部分是 actor 可以自己控制的。随着 actor 的行为不同,每个同样的 trajectory, 它就会有不同的出现的概率。 + +- 当我们在计算 maximize expected reward时,应该使用什么方法? + + 答: **gradient ascent(梯度上升)**,因为要让它越大越好,所以是 gradient ascent。Gradient ascent 在 update 参数的时候要加。要进行 gradient ascent,我们先要计算 expected reward $\bar{R}$ 的 gradient 。我们对 $\bar{R}$ 取一个 gradient,这里面只有 $p_{\theta}(\tau)$ 是跟 $\theta$ 有关,所以 gradient 就放在 $p_{\theta}(\tau)$ 这个地方。 + +- 我们应该如何理解梯度策略的公式呢? + + 答: + $$ + \begin{aligned} + E_{\tau \sim p_{\theta}(\tau)}\left[R(\tau) \nabla \log p_{\theta}(\tau)\right] &\approx \frac{1}{N} \sum_{n=1}^{N} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(\tau^{n}\right) \\ + &=\frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} R\left(\tau^{n}\right) \nabla \log p_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) + \end{aligned} + $$ + $p_{\theta}(\tau)$ 里面有两项,$p(s_{t+1}|s_t,a_t)$ 来自于 environment,$p_\theta(a_t|s_t)$ 是来自于 agent。 $p(s_{t+1}|s_t,a_t)$ 由环境决定从而与 $\theta$ 无关,因此 $\nabla \log p(s_{t+1}|s_t,a_t) =0 $。因此 $\nabla p_{\theta}(\tau)= + \nabla \log p_{\theta}\left(a_{t}^{n} | s_{t}^{n}\right)$。 + + 具体来说: + + * 假设你在 $s_t$ 执行 $a_t$,最后发现 $\tau$ 的 reward 是正的, 那你就要增加这一项的概率,你就要增加在 $s_t$ 执行 $a_t$ 的概率。 + * 反之,在 $s_t$ 执行 $a_t$ 会导致$\tau$ 的 reward 变成负的, 你就要减少这一项的概率。 + +- 我们可以使用哪些方法来进行gradient ascent的计算? + + 答:用 gradient ascent 来 update 参数,对于原来的参数 $\theta$ ,可以将原始的 $\theta$ 加上更新的 gradient 这一项,再乘以一个 learning rate,learning rate 其实也是要调的,和神经网络一样,我们可以使用 Adam、RMSProp 等优化器对其进行调整。 + +- 我们进行基于梯度策略的优化时的小技巧有哪些? + + 答: + + 1. **Add a baseline:**为了防止所有的reward都大于0,从而导致每一个stage和action的变换,会使得每一项的概率都会上升。所以通常为了解决这个问题,我们把reward 减掉一项叫做 b,这项 b 叫做 baseline。你减掉这项 b 以后,就可以让 $R(\tau^n)-b$ 这一项, 有正有负。 所以如果得到的 total reward $R(\tau^n)$ 大于 b 的话,就让它的概率上升。如果这个 total reward 小于 b,就算它是正的,正的很小也是不好的,你就要让这一项的概率下降。 如果$R(\tau^n)