Merge branch 'master' of github.com:datawhalechina/leedeeprl-notes

This commit is contained in:
qiwang067
2021-02-07 09:36:17 +08:00
4 changed files with 159 additions and 0 deletions

View File

@@ -88,4 +88,25 @@
environment 跟 reward function 不是我们可以控制的environment 跟 reward function 是在开始学习之前,就已经事先给定的。我们唯一能做的事情是调整 actor 里面的 policy使得 actor 可以得到最大的 reward。Actor 里面会有一个 policy 这个 policy 决定了actor 的行为。Policy 就是给一个外界的输入,然后它会输出 actor 现在应该要执行的行为。
## 3 Something About Interview
- 高冷的面试官: 看来你对于RL还是有一定了解的,那么可以用一句话谈一下你对于强化学习的认识吗?
答: 强化学习包含环境,动作和奖励三部分,其本质是agent通过与环境的交互,使得其作出的action所得到的决策得到的总的奖励达到最大,或者说是期望最大。
- 高冷的面试官: 你认为强化学习与监督学习和无监督学习有什么区别?
答: 首先强化学习和无监督学习是不需要标签的,而监督学习需要许多有标签的样本来进行模型的构建;对于强化学习与无监督学习,无监督学习是直接对于给定的数据进行建模,寻找数据(特征)给定的隐藏的结构,一般对应的聚类问题,而强化学习需要通过延迟奖励学习策略来得到"模型"对于正确目标的远近(通过奖励惩罚函数进行判断),这里我们可以将奖励惩罚函数视为正确目标的一个稀疏、延迟形式。另外强化学习处理的多是序列数据,样本之间通常具有强相关性但其很难像监督学习的样本一样满足IID条件。
- 高冷的面试官: 根据你上面介绍的内容,你认为强化学习的使用场景有哪些呢?
答: 七个字的话就是多序列决策问题。或者说是对应的模型未知,需要通过学习逐渐逼近真实模型的问题并且当前的动作会影响环境的状态,即服从马尔可夫性的问题。同时应满足所有状态是可重复到达的(满足可学习型的)。
- 高冷的面试官: 强化学习中所谓的损失函数与DL中的损失函数有什么区别呀?
答: DL中的loss function目的是使预测值和真实值之间的差距最小,而RL中的loss function是是奖励和的期望最大。
- 高冷的面试官: 你了解model-free和model-based吗?两者有什么区别呢?
答: 两者的区别主要在于是否需要对于真实的环境进行建模, model-free不需要对于环境进行建模,直接与真实环境进行交互即可,所以其通常需要较大的数据或者采样工作来优化策略,这也帮助model-free对于真实环境具有更好的泛化性能; 而model-based 需要对于环境进行建模,同时再真实环境与虚拟环境中进行学习,如果建模的环境与真实环境的差异较大,那么会限制其泛化性能。现在通常使用model-free进行模型的构建工作。

View File

@@ -65,3 +65,38 @@
- 第一个步骤是 **policy evaluation** ,即当前我们在优化这个 policy $\pi$ ,所以在优化过程中得到一个最新的这个 policy 。
- 第二个步骤是 **policy improvement** ,即取得价值函数后,进一步推算出它的 Q 函数。得到 Q 函数过后,那我们就直接去取它的极大化。
3. **Value iteration:** 我们一直去迭代 Bellman Optimality Equation到了最后它能逐渐趋向于最佳的策略这是 value iteration 算法的精髓,就是我们去为了得到最佳的 $v^*$ ,对于每个状态它的 $v^*$ 这个值,我们直接把这个 Bellman Optimality Equation 进行迭代迭代了很多次之后它就会收敛到最佳的policy以及其对应的状态这里面是没有policy function的。
## 3 Something About Interview
- 高冷的面试官: 请问马尔可夫过程是什么?马尔可夫决策过程又是什么?其中马尔可夫最重要的性质是什么呢?
答: 马尔可夫过程是是一个二元组 $ <S,P> $ ,S为状态的集合,P为状态转移概率矩阵;
而马尔可夫决策过程是一个五元组 $ <S,P,A,R,\gamma> $,其中 $R$ 表示为从 $S$ 到 $S'$ 能够获得的奖励期望, $\gamma$为折扣因子, $A$ 为动作集合.
马尔可夫最重要的性质是下一个状态只与当前状态有关,与之前的状态无关,也就是 $P[S_{t+1} | S_t] = P[S_{t+1}|S_1,S_2,...,S_t]$
- 高冷的面试官: 请问我们一般怎么求解马尔可夫决策过程?
答: 我们直接求解马尔可夫决策过程可以直接求解贝尔曼等式(动态规划方程),即$V(s)=R(S)+ \gamma \sum_{s' \in S}P(s'|s)V(s')$ ,特别地,矩阵形式:$V=R+\gamma PV$.但是贝尔曼等式很难求解且计算复杂度较高,所以可以使用动态规划,蒙特卡洛,时间差分等方法求解.
- 高冷的面试官: 请问如果数据流不满足马尔科夫性怎么办?应该如何处理?
答: 如果不满足马尔科夫性,即下一个状态与之前的状态也有关,若还仅仅用当前的状态来进行求解决策过程,势必导致决策的泛化能力变差。 为了解决这个问题可以利用RNN对历史信息建模获得包含历史信息的状态表征。表征过程可以 使用注意力机制等手段。最后在表征状态空间求解马尔可夫决策过程问题。
- 高冷的面试官: 请分别写出基于状态值函数的贝尔曼方程以及基于动作值的贝尔曼方程.
答:
- 基于状态值函数的贝尔曼方程: $v_{\pi}(s) = \sum_{a}{\pi(a|s)}\sum_{s',r}{p(s',r|s,a)[r(s,a)+\gamma v_{\pi}(s')]}$
- 基于动作值的贝尔曼方程: $q_{\pi}(s,a)=\sum_{s',r}p(s',r|s,a)[r(s',a)+\gamma v_{\pi}(s')]$
- 高冷的面试官: 请问最佳价值函数(optimal value function) $v^*$ 和最佳策略(optimal policy) $\pi^*$ 为什么等价呢?
答: 最佳价值函数的定义为: $v^* (s)=\max_{\pi} v^{\pi}(s)$ 即我们去搜索一种 policy $\pi$ 来让每个状态的价值最大。$v^*$ 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy),即 $ \pi^{*}(s)=\underset{\pi}{\arg \max }~ v^{\pi}(s) $. Optimal policy 使得每个状态的价值函数都取得最大值。所以如果我们可以得到一个 optimal value function就可以说某一个 MDP 的环境被解。在这种情况下,它的最佳的价值函数是一致的,就它达到的这个上限的值是一致的,但这里可能有多个最佳的 policy就是说多个 policy 可以取得相同的最佳价值。
- 高冷的面试官能不能手写一下第n步的值函数更新公式呀另外当n越来越大时值函数的期望和方差分别变大还是变小呢
答:$n$越大,方差越大,期望偏差越小。值函数的更新公式? 话不多说,公式如下:
$$
Q\left(S, A\right) \leftarrow Q\left(S, A\right)+\alpha\left[\sum_{i=1}^{n} \gamma^{i-1} R_{t+i}+\gamma^{n} \max _{a} Q\left(S',a\right)-Q\left(S, A\right)\right]
$$

View File

@@ -50,3 +50,60 @@
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 则相对非常保守,会选择一条相对安全的迭代路线。
## 3 Something About Interview
- 高冷的面试官同学你能否简述on-policy和off-policy的区别
答: off-policy和on-policy的根本区别在于生成样本的policy和参数更新时的policy是否相同。对于on-policy行为策略和要优化的策略是一个策略更新了策略后就用该策略的最新版本对于数据进行采样对于off-policy使用任意的一个行为策略来对于数据进行采样并利用其更新目标策略。如果举例来说Q-learning在计算下一状态的预期收益时使用了max操作直接选择最优动作而当前policy并不一定能选择到最优的action因此这里生成样本的policy和学习时的policy不同所以Q-learning为off-policy算法相对应的SARAS则是基于当前的policy直接执行一次动作选择然后用这个样本更新当前的policy因此生成样本的policy和学习时的policy相同所以SARAS算法为on-policy算法。
- 高冷的面试官小同学能否讲一下Q-Learning最好可以写出其 $Q(s,a)$ 的更新公式。另外它是on-policy还是off-policy为什么
答: Q-learning是通过计算最优动作值函数来求策略的一种时序差分的学习方法其更新公式为
$$
Q(s, a) \larr Q(s, a) + \alpha [r(s,a) + \gamma \max_{a'} Q(s', a') - Q(s, a)]
$$
其是off-policy的由于是Q更新使用了下一个时刻的最大值所以我们只关心哪个动作使得 $Q(s_{t+1}, a)$ 取得最大值,而实际到底采取了哪个动作(行为策略),并不关心。这表明优化策略并没有用到行为策略的数据,所以说它是 off-policy 的。
- 高冷的面试官小朋友能否讲一下SARSA最好可以写出其Q(s,a)的更新公式。另外它是on-policy还是off-policy为什么
SARSA可以算是Q-learning的改进这句话出自「神经网络与深度学习」的第 342 页可参考SARSA「on-line q-learning using connectionist systems」的 abstract 部分),其更新公式为:
$$
Q(s, a) \larr Q(s, a) + \alpha [r(s,a) + \gamma Q(s', a') - Q(s, a)]
$$
其为on-policy的SARSA必须执行两次动作得到 $(s,a,r,s',a') $才可以更新一次;而且 $a'$ 是在特定策略 $\pi$ 的指导下执行的动作,因此估计出来的 $Q(s,a)$ 是在该策略 $\pi$ 之下的Q-value样本生成用的 $\pi$ 和估计的 $\pi$ 是同一个因此是on-policy。
- 高冷的面试官请问value-based和policy-based的区别是什么
答:
1. 生成policy上的差异前者随机后者确定。Value-Base中的 action-value估计值最终会收敛到对应的true values通常是不同的有限数可以转化为0到1之间的概率因此通常会获得一个确定的策略deterministic policy而Policy-Based不会收敛到一个确定性的值另外他们会趋向于生成optimal stochastic policy。如果optimal policy是deterministic的那么optimal action对应的性能函数将远大于suboptimal actions对应的性能函数性能函数的大小代表了概率的大小。
2. 动作空间是否连续前者离散后者连续。Value-Base对于连续动作空间问题虽然可以将动作空间离散化处理但离散间距的选取不易确定。过大的离散间距会导致算法取不到最优action会在这附近徘徊过小的离散间距会使得action的维度增大会和高维度动作空间一样导致维度灾难影响算法的速度而Policy-Based适用于连续的动作空间在连续的动作空间中可以不用计算每个动作的概率而是通过Gaussian distribution 正态分布选择action。
3. value-based例如Q-learning是通过求解最优值函数间接的求解最优策略policy-based例如REINFORCEMonte-Carlo Policy Gradient等方法直接将策略参数化通过策略搜索策略梯度或者进化方法来更新策略的参数以最大化回报。基于值函数的方法不易扩展到连续动作空间并且当同时采用非线性近似、自举和离策略时会有收敛性问题。策略梯度具有良好的收敛性证明。
4. 补充:对于值迭代和策略迭代:策略迭代。它有两个循环,一个是在策略估计的时候,为了求当前策略的值函数需要迭代很多次。另外一个是外面的大循环,就是策略评估,策略提升这个循环。值迭代算法则是一步到位,直接估计最优值函数,因此没有策略提升环节。
- 高冷的面试官:请简述以下时序差分(Temporal DifferenceTD)算法。
TD算法是使用广义策略迭代来更新Q函数的方法核心使用了自举bootstrapping即值函数的更新使用了下一个状态的值函数来估计当前状态的值。也就是使用下一步的 $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})]
$$
- 高冷的面试官请问蒙特卡洛方法Monte Carlo AlgorithmMC和时序差分(Temporal DifferenceTD)算法是无偏估计吗?另外谁的方法更大呢?为什么呢?
蒙特卡洛方法MC是无偏估计时序差分TD是有偏估计MC的方差较大TD的方差较小原因在于TD中使用了自举bootstrapping的方法实现了基于平滑的效果导致估计的值函数的方差更小。
- 高冷的面试官:能否简单说下动态规划、蒙特卡洛和时序差分的异同点?
答:
- 相同点:都用于进行值函数的描述与更新,并且所有方法都是基于对未来事件的展望来计算一个回溯值。
- 不同点蒙特卡洛和TD算法隶属于model-free而动态规划属于model-basedTD算法和蒙特卡洛的方法因为都是基于model-free的方法因而对于后续状态的获知也都是基于试验的方法TD算法和动态规划的策略评估都能基于当前状态的下一步预测情况来得到对于当前状态的值函数的更新。
另外TD算法不需要等到实验结束后才能进行当前状态的值函数的计算与更新而蒙特卡洛的方法需要试验交互产生一整条的马尔科夫链并直到最终状态才能进行更新。TD算法和动态规划的策略评估不同之处为model-free和model-based 这一点动态规划可以凭借已知转移概率就能推断出来后续的状态情况而TD只能借助试验才能知道。
蒙特卡洛方法和TD方法的不同在于蒙特卡洛方法进行完整的采样来获取了长期的回报值因而在价值估计上会有着更小的偏差但是也正因为收集了完整的信息所以价值的方差会更大原因在于毕竟基于试验的采样得到和真实的分布还是有差距不充足的交互导致的较大方差。而TD算法与其相反因为只考虑了前一步的回报值 其他都是基于之前的估计值,因而估计具有偏差但方差较小。
- 三者的联系:对于$TD(\lambda)$方法,如果 $ \lambda = 0$ 那么此时等价于TD即只考虑下一个状态如果$ \lambda = 1$等价于MC即考虑 $T-1$ 个后续状态即到整个episode序列结束。

View File

@@ -68,3 +68,49 @@
- 请详细描述REINFORCE的计算过程。
首先我们需要根据一个确定好的policy model来输出每一个可能的action的概率对于所有的action的概率我们使用sample方法或者是随机的方法去选择一个action与环境进行交互同时环境就会给我们反馈一整个episode数据。对于此episode数据输入到learn函数中并根据episode数据进行loss function的构造通过adam等优化器的优化再来更新我们的policy model。
## 3 Something About Interview
- 高冷的面试官:同学来吧,给我手工推导一下策略梯度公式的计算过程。
首先我们目的是最大化reward函数即调整 $\theta$ ,使得期望回报最大,可以用公式表示如下
$$
J(\theta)=E_{\tau \sim p_{\theta(\mathcal{T})}}[\sum_tr(s_t,a_t)]
$$
对于上面的式子, $\tau$ 表示从从开始到结束的一条完整路径。通常,对于最大化问题,我们可以使用梯度上升算法来找到最大值,即
$$
\theta^* = \theta + \alpha\nabla J({\theta})
$$
所以我们仅仅需要计算(更新)$\nabla J({\theta})$ ,也就是计算回报函数 $J({\theta})$ 关于 $\theta$ 的梯度,也就是策略梯度,计算方法如下:
$$
\nabla_{\theta}J(\theta) = \int {\nabla}_{\theta}p_{\theta}(\tau)r(\tau)d_{\tau}
=\int p_{\theta}{\nabla}_{\theta}logp_{\theta}(\tau)r(\tau)d_{\tau}=E_{\tau \sim p_{\theta}(\tau)}[{\nabla}_{\theta}logp_{\theta}(\tau)r(\tau)]
$$
接着我们继续讲上式展开,对于 $p_{\theta}(\tau)$ ,即 $p_{\theta}(\tau|{\theta})$ :
$$
p_{\theta}(\tau|{\theta}) = p(s_1)\prod_{t=1}^T \pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
$$
取对数后为:
$$
logp_{\theta}(\tau|{\theta}) = logp(s_1)+\sum_{t=1}^T log\pi_{\theta}(a_t|s_t)p(s_{t+1}|s_t,a_t)
$$
继续求导:
$$
\nabla logp_{\theta}(\tau|{\theta}) = \sum_{t=1}^T \nabla_{\theta}log \pi_{\theta}(a_t|s_t)
$$
带入第三个式子,可以将其化简为:
$$
\nabla_{\theta}J(\theta) =E_{\tau \sim p_{\theta}(\tau)}[{\nabla}_{\theta}logp_{\theta}(\tau)r(\tau)] = E_{\tau \sim p_{\theta}}[(\nabla_{\theta}log\pi_{\theta}(a_t|s_t))(\sum_{t=1}^Tr(s_t,a_t))] = \frac{1}{N}\sum_{i=1}^N[(\sum_{t=1}^T\nabla_{\theta}log \pi_{\theta}(a_{i,t}|s_{i,t}))(\sum_{t=1}^Nr(s_{i,t},a_{i,t}))]
$$
- 高冷的面试官:可以说一下你了解到的基于梯度策略的优化时的小技巧吗?
答:
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)<b$ 你就要让这个 state 采取这个 action 的分数下降 。这样也符合常理。但是使用baseline会让本来reward很大的“行为”的reward变小降低更新速率。
2. **Assign suitable credit** 首先第一层,本来的 weight 是整场游戏的 reward 的总和。那现在改成从某个时间 $t$ 开始,假设这个 action 是在 t 这个时间点所执行的,从 $t$ 这个时间点,一直到游戏结束所有 reward 的总和,才真的代表这个 action 是好的还是不好的接下来我们再进一步我们把未来的reward做一个discount这里我们称由此得到的reward的和为**Discounted Return(折扣回报)** 。
3. 综合以上两种tip我们将其统称为**Advantage function**`A` 来代表 advantage function。Advantage function 是 dependent on s and a我们就是要计算的是在某一个 state s 采取某一个 action a 的时候advantage function 有多大。