Q-学习示例
为了更好地理解 Q-学习,让我们举一个简单的例子
- 你是一只在这个小迷宫中的老鼠。你总是**从同一个起点开始**。
- 目标是**吃到右下角的那一大块奶酪**并避开毒药。毕竟,谁不喜欢奶酪呢?
- 如果我们吃到毒药、**吃到那一大块奶酪**或者走了超过五步,则回合结束。
- 学习率为 0.1
- 折扣率(gamma)为 0.99
奖励函数如下所示
- **+0:**进入没有奶酪的状态。
- **+1:**进入有少量奶酪的状态。
- **+10:**进入有大量奶酪的状态。
- **-10:**进入有毒药的状态,从而死亡。
- **+0** 如果我们走了超过五步。
为了训练我们的智能体拥有最优策略(即向右、向右、向下的策略),**我们将使用 Q-学习算法**。
步骤 1:初始化 Q 表
所以,目前,**我们的 Q 表毫无用处**;我们需要**使用 Q-学习算法来训练我们的 Q 函数**。
让我们进行 2 个训练时间步
训练时间步 1
步骤 2:使用 Epsilon 贪婪策略选择动作
因为 epsilon 很大(= 1.0),所以我采取随机动作。在本例中,我向右走。
步骤 3:执行动作 At,获取 Rt+1 和 St+1
向右走后,我得到了一小块奶酪,所以我进入了一个新的状态。
步骤 4:更新 Q(St, At)
我们现在可以使用公式更新。
训练时间步 2
步骤 2:使用 Epsilon 贪婪策略选择动作
由于 epsilon=0.99 很大,我再次采取随机动作。(请注意,我们稍微降低了 epsilon 的值,因为随着训练的进行,我们希望探索的次数越来越少)。
我选择了“向下”这个动作。这是一个不好的动作,因为它导致我吃到毒药。
步骤 3:执行动作 At,获取 Rt+1 和 St+1
因为我吃到了毒药,我得到,并且我死了。
步骤 4:更新 Q(St, At)
因为我们死了,所以我们开始一个新的片段。但我们在这里看到的是,经过两个探索步骤,我的智能体变得更聪明了。
随着我们继续探索和利用环境,并使用 TD 目标更新 Q 值,Q 表将为我们提供越来越好的近似值。在训练结束时,我们将获得对最优 Q 函数的估计。
< > 在 GitHub 上更新