目录
MC Basic
从\(model \: base \:\)的\(Reinforcement \: learning \:\)过渡到\(model \: free \:\)的\(\: Reinforcement \: learning \:\)最难以理解的是怎么在没有模型的情况下去估计一些量。
这里面就有一个重要的\(\: idea \: Monte \: Carlo \: estimation\)
下面有一个抛硬币的例子:
用一个随机变量\((random \; variable \: )X\)来表示硬币的结果
如果正面朝上,\(X \; = \: +1\)
如果反面朝上,\(X \: = \: -1\)
我们的目标是计算\(\: \mathbb{E}\left[ X \right]\)
这里有两种方法去计算\(\: \mathbb{E}\left[ X \right]\)
一种方法是:\(Model-bases\)
假设随机变量模型已知:
\[p(X=1)= \: 0.5 \:, \quad p(X=-1)= \: 0.5 \: \]根据数学期望的定义,就可以计算出随机变量\(X\)的期望\(\mathbb{E}\left[ X \right] = \sum_x{xp(x)}=1 \times 0.5+(-1) \times 0.5 = 0\)
这样期望计算起来就很简单了,但是问题是我们无法做到精确地知道这样的模型
另一种方法\(Model-free\)
idea:投掷硬币多次,然后计算结果的平均值
我们多次投掷硬币得到一系列结果\(\{x_1, x_2, ...,x_N\}\)
然后期望可以用上面的采样去估计
\[\mathbb{E}[X] \approx \bar{x} = \frac{1}{N}\sum_{j=1}^{N}x_j \]第二种方法就是\(\: Monte \: Carlo \: estimation \:\)的基本思想
这里是近似就会存在一个问题,这样去近似得到的结果是否是精确的?
答案是:当\(N\)比较小的时候是不精确的,但当\(N\)足够大得到的结果就比较精确
经过上面的前置知识,接下来就是蒙特卡洛算法了。
\(Policy \; iteration \:\)有两步在每个\(iteration\)
\[\begin{cases} policy \: evaluation:v_{\pi_k}=r_{\pi_k}+\gamma P_{\pi_k}v_{\pi_k} \\ policy \: improvement:\pi_{k+1}=\arg \max (r_{\pi}+\gamma P_{\pi_k}v_{\pi_k}) \end{cases} \]所以关键是计算\(q_{\pi_k}(s,a)\)
要计算\(q_{\pi_k}(s,a)\)实际上由两种方法;
第一种就是\(value \: iteration\)所用的\(require \: model\)的
\[q_{\pi_k}(s,a)=\sum_rp(r|s,a)r+\gamma \sum_{s^{'}}p(s^{'}|s,a)v_{\pi_k}(s^{'}) \]第二种是从\(q_{\pi_k}(s,a)\)的定义出发:
\[q_{\pi_k}(s,a)=\mathbb{E}\left[G_t |S_t=s,A_t=a \right] \]然后这就是一个\(mean \: estimation\)的问题,我们可以用\(monte \: carlo \: estimation\)的方法依赖于数据\(data(samples或者experiences)\)
下面详细看一下是如何做到的
- 首先从任意一个\((s,a)\)出发,然后根据当前的策略\(\pi_k\)生成一个\(episode\)
- 然后计算出这个\(episode\)的\(return\)用\(g(s,a)\)表示
- \(g(s,a)\)是\(G_t\)的一个采样\(Sample \:\) \(q_{\pi_k}(s,a)=\mathbb{E}\left[ G_t \mid S_t=s, A_t=a \right]\)
- 假设我们有一个\(episodes\)的集合\(g^{(j)}(s,a)\),那么我们就可以用这个集合去求一个平均值去估计这个\(G_t\)的期望\(q_{\pi_k}(s,a)=\mathbb{E}\left[ G_t \mid S_t = s, A_t = a\right] \approx \frac{1}{N} \sum^N_{i=1}g^(i)(s,a)\)
总结:当模型未知的时候,我们就需要知道数据.没有数据的时候,需要有模型,反正两者需要其中的一个
数据在统计或者概率里面叫\(sample\),在强化学习中叫\(experience\)
然后这个算法就比较清楚了
\(MC \: Basic \: algorithm\)
首先给定一个初始的策略\((policy)\pi_0\),这里有两步在第\(k\)次迭代中
第一步是:\(Policy \: evaluation\)
这一步就是对所有的\((s,a)\)求得\(q_{\pi_k}(s,a)\),更具体来讲就是对于每一个\((s,a)\)的\(pair\)去采样尽可能多\((infinite)\)个\(episodes\),平均的\(return\)就用来估计\(q_{\pi_k}(s,a)\)
第二步是:\(Policy \: improvement\)
这一步就是去解决\(\pi_{k+1}(s) = \arg \max_{\pi} \sum_a \pi(a|s)q_{\pi_k}(s,a), for \: all \: s \in S \:\)贪心的最优策略就是\(\pi_{k+1}(a^*_k \mid s) = 1, where \: \arg \max_a q_{\pi_k}(s,a)\)
实际上\(MC \: basic\)算法和\(Policy \: iteration\)是一样的,唯一的区别就是在第一步\(Policy \: evaluation(PE)\)的时候,\(Policy \: iteration\)第一步先求解\(state \: value\)然后再根据\(state \: value\)去求解\(action \: value\),而\(MC \: Basic\)算法是直接根据数据\((data)\)得到\(q_{\pi_k}\)
总结:
- \(MC \: Basic\)是\(policy \: iteration\)的一个变型,把\(PE\)部分基于\(model\)计算的部分去掉,换成不需要\(model\)
- 所以要学习基于蒙特卡洛的强化学习算法首先要学习基于\(policy \: iteration\)的强化学习算法
- \(MC \: Basic\)这个算法是很重要的,他清楚地揭示了怎么把\(model \: base\)的算法变为\(model \; free\)但是\(MC \; Basic\)这种算法并不适用,因为\(MC \; Basic\)的效率\((efficiency)\)低
例子:
第一步:\(PE\)计算\(q_{\pi_{k}}(s,a)\),对于上面的例子一共有9个状态\((state)\),5个\(action\),所以一共有\(9 \times 5\)个\(state-action \: pairs\),对于每个\(state-action \: pairs\)都需要进行\(N\)次采样
第二步:\(PL\):贪心地选择\(action \quad a^{*}(s)=\arg\max_{a_i}q_{\pi_k}(s,a)\)
MC Exploring Starts
是\(MC \; Basic\)算法的推广,可以让\(MC \; Basic\)算法变得更加高效
下面是\(MC \: Exploring \: Starts\)如何做使得\(MC \; Basic\)更高效的
考虑一个网格世界,按照一个策略\(\pi\),我们可以得到一个\(episode\)
\[s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_4} s_1 \xrightarrow{a_2} s_2 \xrightarrow{a_3} s_5 \xrightarrow{a_1} ... \]首先引入一个\(visit\)的定义:在一个\(episode\)中每个上面的一个\(state-action \; pair\)被称为对这个\(state-action \; pair\)有了一次访问\(visit \; of \; that \; state-action \; pair\)
在\(MC \; Basic\)算法中采用的是\(Initial-visit \; method \;\):对于上面的\(episode\),只考虑\((s_1,a_2)\),用剩下的得到的\(return\)来估计\((s_1,a_2)\)的\(action \; value\),这样做实际上是没有充分利用这个\(episode\)d的
事实上还是有两种方法
- \(first-visit \; method\):只在第一次\(visit\)的时候估计\(action-value\)
- \(every-visit \; method\):在每一次\(visit\)的时候都估计\(action-value\)
除了让数据的使用更加\(effient\)外还可以让策略的更新更加高效.
\(MC-Basic\)是等待所有的\(episode\)都被计算出之后才做一个\(average \; return\)估计\(action \; value\)进行更新\(policy\),而等待的过程就会浪费很多时间.
而还有一种方法就是在计算出一个\(episode的return\)时就立刻用这个\(episode\)的\(return\)来估计\(action \; value\)然后就直接去改进策略
这里会有一个问题就是用一个\(episode\)去估计\(action \; value\)是不准的,但是根据之前的\(truncated \; policy \; iteration \; algorithm\)告诉我们这样做虽然不是很精确但依然可行。
解释\(exploring \; starts\)
\(exploring\):是指从每一个\((s,a)\)出发都要有\(episode\),如果恰恰有一个\(action\)没有被\(visit\)到,而那个\(action\)恰恰又是最优的,为了能得到最优的策略,我们还是要确保每一个\((s,a)\)都能被访问到
\(starts\):是指从一个\((s,a)\)生成\(reward\)有两种方法,一种是从\((s,a)\)开始一个\(eposide\)就是\(start\),另一种是从其他的\((s^{'}, a^{'})\)开始也能经过\((s,a)\)用后面的数据也可以估计当前\((s,a)\)的\(return\),但是第二种\(visit\)是没办法确保的,因为它依赖于策略和环境,没办法保证从一个\((s,a)\)开始经过其他所有剩下的\((s,a)\)
MC Epsilon-Greedy
\(MC \; without \; exploring \; starts\)
\(soft \; policy\)是对每一个\(action\)都有可能做选择
policy分为两种,一种是\(determinstic\)的,\(gready \; policy\)就是其中之一,还有一种是\(stochastic \; policy\) 如\(soft \; policy\)以及下面的\(\epsilon-gready\)
引入\(soft \; policy \;\)的原因是如果从一个\((s,a)\)出发,如果\(episode\)特别长,就能确保任何一个\((s,a)\)都能被\(visit\)到于是就可以去掉\(exploring \; starts\)这个条件了,不需要从每一个\((s,a) \; start\)
然后\(soft \; policy\)里面要用的就是其中的\(\epsilon-gready\)
\[\pi(a \mid s) = \begin{cases} 1 - \frac{\epsilon}{\mid \mathcal{A}(s) \mid}(\mid \mathcal{A}(s) \mid - 1),for \; the \; gready \; action \\ \frac{\epsilon}{\mid \mathcal{A}(s) \mid}, for \; the \; other \; \mid \mathcal{A}(s) \mid -1 \; actions\\ \end{cases} \]\(where \; \epsilon \in [0,1] \; and \; |\mathcal{A}(s)|\)是 状态\(s\)对应的\(action\)的数量
虽然给其他\(action\)了一些选择概率,但是还是把大概率留给了\(gready \; action\)
为什么使用\(\epsilon-gready \; ?\)
平衡了\(exploitation\)(剥削充分利用)和\(exploration\)(探索)
实际中,我们可以让\(\epsilon\)逐渐减小,在开始时比较大,具有较好的探索能力,随着时间推移,逐渐减小,最后接近最优策略.
标签:MC,05,mid,policy,数学原理,Basic,action,蒙特卡洛,pi From: https://www.cnblogs.com/cxy8/p/18512204