强化学习-Chpater5-蒙特卡洛学习

蒙特卡洛估计

以抛硬币为例,正面记为1,反面记为0

1、有模型的情况下,那么我们知道1和0的概率分别为0.5,可以得到期望为\mathbb{E}[X]=\sum_xxp(x)=1\times0.5+(-1)\times0.5=0

2、无模型的情况下,我们只能通过黑盒的方式不停的抛硬币得到一组样本序列,比如是{1,1,1,0,1,0,......}记为{{x_1,x_2,...,x_N}},则有期望\mathbb{E}[X]\approx\bar{x}=\frac{1}{N}\sum_{j=1}^Nx_j,这就是蒙特卡洛估计的思想

最简单的基于蒙特卡洛的强化学习算法

策略迭代算法有以下两个步骤:

\left.\left\{ \begin{array} {l}\textbf{Policy evaluation: }v_{\pi_k}=r_{\pi_k}+\gamma P_{\pi_k}v_{\pi_k} \\ \textbf{Policy improvement: }\pi_{k+1}=\arg\max_\pi(r_\pi+\gamma P_\pi v_{\pi_k}) \end{array}\right.\right.

展开Policy improvement步骤的公式:\begin{aligned} \pi_{k+1}(s) & =\arg\max_\pi\sum_a\pi(a|s)\left[\sum_rp(r|s,a)r+\gamma\sum_{s^{\prime}}p(s^{\prime}|s,a)v_{\pi_k}(s^{\prime})\right] \\ & =\arg\max_\pi\sum_a\pi(a|s)q_{\pi_k}(s,a),\quad s\in\mathcal{S} \end{aligned}

当我们得到最大的q(s,a)其对应的概率则为1,关键就是计算q_{\pi_k}(s,a)

方式一:model-based

q_{\pi_k}(s,a)=\sum_rp(r|s,a)r+\gamma\sum_{s^\prime}p(s^\prime|s,a)v_{\pi_k}(s^\prime)

上式中,我们需要每个action获得的reward、这个reward的概率、action到达的下一状态s‘,这就要求我们提前设计好模型

方式二:model-free

q_{\pi_k}(s,a)=\mathbb{E}[G_t|S_t=s,A_t=a]

根据蒙特卡洛估计的思想,在状态s、动作a、策略v_{\pi_k}下,对回报G_t 进行采样得到g(s,a),多次采用后得到一个序列\{g^{(j)}(s,a)\} ,那么

q_{\pi_k}(s,a)=\mathbb{E}[G_t|S_t=s,A_t=a]\approx\frac{1}{N}\sum_{i=1}^Ng^{(i)}(s,a)

由此可以计算得到q_{\pi_k}(s,a)

关于model-base和model-free:(深入理解)强化学习中Model-based和Model-free的区别是什么_modelbase和modelfree有什么区别-优快云博客

蒙特卡洛基础算法(The MC Basic algorithm):

给定一个初始策略v_0,在第k次3迭代有两个步骤:

步骤一:策略估算

这一步是为了获得q_{\pi_k}(s,a)。对于每一对(s,a),执行数次episode,得到的return的均值即q_{\pi_k}(s,a)的近似值。

步骤二:策略优化

这一步是解决\pi_{k+1}(s)=\arg\max_\pi\sum_a\pi(a|s)q_{\pi_k}(s,a)。采用贪心算法,那么我们可以选择q_{\pi_k}(s,a)时的action的概率为1,即\pi_{k+1}(a_k^*|s)=1\mathrm{~where~}a_k^*=\arg\max_aq_{\pi_k}(s,a)

MC Exploring Starts

更高效的使用数据

The MC Basic algorithm有什么问题呢?效率低下。

考虑一个网格世界的例子,根据策略\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}\ldots

我们仅仅计算了q_{\pi_k}(s_1,a_1),并没有完整利用数据。上面的episode可以进行如下的拆解:

\begin{aligned} 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}. & \text{. [original episode]} \\ s_{2}\xrightarrow{a_{4}}s_{1}\xrightarrow{a_{2}}s_{2}\xrightarrow{a_{3}}s_{5}\xrightarrow{a_{1}} & ...\quad[\text{episode starting from }(s_2,a_4)] \\ s_{1}\xrightarrow{a_{2}}s_{2}\xrightarrow{a_{3}}s_{5}\xrightarrow{a_{1}} & ...\quad[\text{episode starting from }(s_1,a_2)] \\ s_{2}\xrightarrow{a_{3}}s_{5}\xrightarrow{a_{1}}. & ..\quad[\text{episode starting from }(s_2,a_3)] \\ s_{5}\xrightarrow{a_{1}} & ...\quad[\text{episode starting from }(s_5,a_1)] \end{aligned}

则,可以估计q_\pi(s_1,a_2),q_\pi(s_2,a_4),q_\pi(s_2,a_3),q_\pi(s_5,a_1),...

更高效的策略估计

在更新策略时,有下面两种方法:

方法一:first-visit method:采集从这个状态-动作对开始的所有episode的return,并求期望作为action value的近似值

方法二:every-visit method:一个episode的return直接作为action value的近似值。

采用方法二并不会因为值不够近似导致问题,方法二的思想类似于截断策略迭代算法。

MC Exploring Starts

如果采用了上面提到的高效的数据使用和策略估计的方式,我们得到一个新的算法,名为:MC Exploring Starts。算法描述如下:

初始化猜测一个策略\pi_0,对于每一个episode:

步骤一:episode generation。随机选择一个状态-动作对(s_0,a_0),并确保每一个动作-状态对都有可能被选到,根据当前的策略,产生一个长为T的episode的数据:s_0,a_0,r_1,\ldots,s_{T-1},a_{T-1},r_T

步骤二:策略估算和策略更新:

初始化累计奖励为0即g\leftarrow 0,对于这个episode中的每一步,t=T-1,T-2,\ldots,0, 计算每一步的回报:g\leftarrow\gamma g+r_{t+1}

使用first-visit method:

如果这是第一次遇到状态-动作对(s_t,a_t),那么1️⃣将累积奖励g加到它的返回值上,2️⃣再计算状态-动作对(s_t,a_t)的平均返回值,得到其动作价值函数q(s_t,a_t),3️⃣更新策略,使得在状态s_t下,选择动作a的概率为1,如果a是使q(s_t,a)最大的动作。公式如下:

Returns(s_t,a_t)\leftarrow Returns(s_t,a_t)+g \\\\ q(s_t,a_t)=\mathrm{average}(Returns(s_t,a_t)) \\\\ \pi(a|s_t)=1\mathrm{~if~}a=\arg\max_aq(s_t,a)

MC without exploring starts

ε-greedy policies

ε-greedy policy是一种平衡探索(exploration)和利用(exploitation)的策略。它通过一个参数ε来控制选择动作的概率。公式如下:

\pi(a|s) = \begin{cases} 1 - \frac{\varepsilon}{|\mathcal{A}(s)|}(|\mathcal{A}(s)| - 1), & \text{for the greedy action}, \\ \frac{\varepsilon}{|\mathcal{A}(s)|}, & \text{for the other } |\mathcal{A}(s)| - 1 \text{ actions}. \end{cases}
其中,\varepsilon \in [0,1]表示探索的概率;|\mathcal{A}(s)| 表示在状态s下可选的动作数量。

1️⃣对于“贪婪”动作(即当前估计价值最高的动作),选择它的概率为1 - \frac{\varepsilon}{|\mathcal{A}(s)|}(|\mathcal{A}(s)| - 1)
2️⃣对于其他所有动作,每个动作被选择的概率为\frac{\varepsilon}{|\mathcal{A}(s)|}

ε-greedy policy的主要目的是在探索和利用之间找到一个平衡点。

探索(Exploration): 尝试不同的动作以发现可能更好的策略。
利用(Exploitation): 使用当前已知的最佳策略来获得最大奖励。

不同ε值的影响:
1️⃣当 \varepsilon = 0 时,策略完全变成贪婪策略(Greedy Policy),总是选择当前估计价值最高的动作。这会导致更多的利用但较少的探索。
2️⃣当\varepsilon = 1时,策略变成均匀分布,每个动作被选择的概率相同。这会导致更多的探索但较少的利用

MC ε-Greedy algorithm

算法的目标是找到一个最优策略,即在所有可能的策略中,能够最大化长期奖励的策略。

从一个初始猜测的策略\pi_0开始,并设定一个介于0和1之间的ε值。对于每一个episode(一次完整的尝试或游戏),执行以下步骤:

  1. 随机选择一个起始的状态-动作对(s_0,a_0),根据当前的策略,生成一个长度为T的episode。这包括一系列的状态、动作和奖励,s_0, a_0, r_1, \ldots, s_{T-1}, a_{T-1}, r_T
  2. 策略评估与改进:这部分涉及计算每个状态-动作对的价值,并根据这些价值来更新策略
    1. 初始化累计奖励为0即g\leftarrow 0
    2. 对于这个episode中的每一步,t=T-1,T-2,\ldots,0,
      1. 计算每一步的回报:g\leftarrow\gamma g+r_{t+1}​​​​​​​
      2. 使用every-visit method:
        1. q(s_t, a_t) = \text{average}(\text{Returns}(s_t, a_t)),将累积奖励g加到状态-动作对(s_t,a_t)的返回值上
        2. q(s_t, a_t) = \text{average}(\text{Returns}(s_t, a_t)), 计算状态-动作对(s_t,a_t)的平均返回值,得到其动作价值函数q(s_t,a_t)
        3. 找到使q(s_t, a)最大的动作a^*a^* = \arg\max_a q(s_t, a)
        4. \pi(a|s_t) = \begin{cases} 1 - \frac{|\mathcal{A}(s_t)|-1}{|\mathcal{A}(s_t)|}\epsilon, & a = a^* \\ \frac{1}{|\mathcal{A}(s_t)|}\epsilon, & a \neq a^* \end{cases}:更新策略,使得再状态s_t下,选择动作a^*的概率为1 - \frac{|\mathcal{A}(s_t)|-1}{|\mathcal{A}(s_t)|}\epsilon,选择其他动作的概率为\frac{1}{|\mathcal{A}(s_t)|}\epsilon​​​​​​
  3. 通过不断重复上述过程,算法逐渐优化策略,最终逼近最优策略

### 如何在 DB Browser for SQLite 中打开 `apple.db` 并创建新表 要在 DB Browser for SQLite 中操作数据库文件,需按照以下方式完成: #### 打开指定路径中的数据库 如果目标数据库位于 `/Users/username/chpater5/apple.db` 路径下,则可以通过 Finder 或命令行访问此路径。对于 macOS 用户,默认情况下 Library 文件夹可能被隐藏[^1]。可以按下快捷键 `Command + Shift + G` 后输入具体路径来定位到目标位置。 一旦找到了 `apple.db` 文件,在 DB Browser for SQLite 的界面里单击 “Open Database”,然后浏览至上述提到的目标地址选取该 `.db` 文件即可加载它进入程序环境之中[^2]。 #### 创建新的数据表 users 当成功连接上现有的 SQLite 数据库之后,就可以着手建立一个新的表格叫做 `users` 。以下是实现这一目的的具体 SQL 命令以及其解释: ```sql CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL, email TEXT UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` 这条语句的作用如下: - 使用 CREATE TABLE 来定义一个新的关系型结构; - 设置字段名及其属性类型,比如整数 (`INTEGER`) 和字符串 (`TEXT`); - 添加约束条件如主键(`PRIMARY KEY`)、自动增长(`AUTOINCREMENT`)、唯一性(`UNIQUE`)和非空值(`NOT NULL`); - 设定默认时间戳[`DEFAULT CURRENT_TIMESTAMP`]以便记录每条记录何时加入系统中[^4]。 执行以上脚本前,请确认已切换到了正确的数据库实例,并且拥有足够的权限来进行此类变更动作。 ### 注意事项 确保所使用的版本是最新的稳定版之一,因为不同发行版之间可能存在功能差异或者 bug 修复情况不一致等问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值