【机器学习】什么是连续状态空间?如何构建一个强化学习的算法以及构建强化学习算法中的一些问题

系列文章目录

第十八章 Python 机器学习入门之强化学习


目录

系列文章目录

文章目录

一、什么是连续状态空间?

二、 构建一个强化学习的算法

三、 学习状态值函数(重点)

四、学习状态动作函数(Q 函数)的完整的算法

总结



一、什么是连续状态空间?

我们使用简化的火星探测器示例,如果使用一组离散的状态,这意味着火星探测器可以在六个可能位置的任意一个,但是实际上大多数机器人可以在6个以上的位置中的任意一个位置。

因为位置是由一个数字表示的,例如沿线2.5公里,或3.2公里又或 0 到6 之间的任何其他数字。

换一个例子,我们来控制汽车的应用程序,如果我们正在建造一辆自动驾驶汽车,我们想要它平稳行驶。这时候,汽车的一些状态 可能是一些数字,例如它的x 方向, y 方向, 角度theta θ,x 方向速度, y 方向速度,以及它的转动速度。

我们在来看看另一个例子,如果我们正在构建强化学习算法来控制一架自主直升飞机,我们如何来描述直升机的位置?

它的x 位置, y 位置,z 在地面的高度,φ phi 捕获直升机向左还是向右摆动,theta θ捕获直升机是向前倾斜还是向后倾斜,以及 Omega ω 指南针方向朝西的偏航,和各个方向的速度。

这实际上就是用于控制直升机的12个状态,这12个数字的列表输入到策略中,策略的工作是查看这12个数字并决定在直升机上采取的适当行动。

所以任何连续状态强化学习问题或连续状态的马尔科夫决策过程,问题的状态不仅仅是少数可能的离散值之一,相反,它是一个数字向量,其中任何一个都可以是大量值中的任意一个。

 

二、 构建一个强化学习的算法

下面我们来看看如何构建一个强化学习算法,以构建 登月器着陆的算法为例。

如图,我们想要的是着陆器安全的降落在两个小黄旗之间,如果它向左偏,那么就向左给它一个助力,让它向右运动。它的状态也可以写策略,其中的l,r 表示着陆器的左脚着陆和右脚着陆,每个状态的输出只有0或1.

最后要设置奖励函数

我们的目标是学习策略Pi, 当给定一个状态S 时,选择一个动作a 等于Π(S),从而使折扣奖励总和的回报最大化,通常对于月球着陆器来说,折扣因子gamma γ的值都是接近于1 的相当大的值。

三、 学习状态值函数(重点)

让我们来看看任何使用强化学习来控制月球着陆器或其他强化学习问题,关键思想是我们要训练一个神经网络,计算状态S 的状态动作值函数Q(s,a) ,而计算出来的状态动作函数值又会反过来让我们选择好的行动。

学习算法的核心是我们要训练一个当前状态和当前动作的神经网络,然后用它来计算Q(s,a).

对于月球着陆器,我们采用状态s 和 任何动作a 并将它们放在一起,其中,状态s 就是我们上面说的8个数字的列表,x,y,θ,l,r…. ,然后我们的动作有4个可能: nothing ,left, main, right,我们可以对这4个动作中的任何一个进行编码,使用one-hot 特征向量,如果动作是第一个动作,我们可以使用(1,0,0,0)对其编码,如果是第二个动作,前面可以使用(0, 1, 0, 0)对其编码。

所以这12个数字的列表,8个代表状态的数字,4个数字是动作的one-hot 编码,是我们对神经网络的输入,我们称之为 向量X。

然后我们将这12个数字输入神经网络,例如第一个隐藏层有64个单元,第二个隐藏层有64个单元,然后是输出层1个单元。神经网络的工作是输出Q(s,a) 状态动作值函数。

给定输入s和 a 的月球着陆器,因为后面还使用神经网络训练算法,所以将输出的Q(s,a) 称为目标值 Y。

强化学习和监督学习不同,虽然这里输出可以称为Y,但我们的目的并不是输入一个状态让它输出一个动作,我们要做的事输入一个状态动作对它尝试输出Q(s,a) 并在强化学习算法中使用神经网络方法,在着陆器的例子中,我们可以通过神经网络分别计算4个状态动作函数值,然后取最大的一个,选择动作 A 。

例如在这个例子中,Q(s,main )最大,那么我们会决定去点燃月球着陆器的主发动机,也就是选择main 动作。

现在的问题是,我们如何训练一个神经网络来输出Q(s,a)?

我们可以使用贝尔曼方程用于创建包含大量示例的训练集,x和y, 然后我们使用监督学习进行学习,从x到 y 的映射,即从状态动作对 到 目标值 Q(s,a )的映射。

但是,我们如何获得具有x 和 y值的训练集,然后来训练神经网络呢?

写出贝尔曼方程,左边可以看作是输入X, 等式的右边可以看作是输出Y。神经网络的工作就是输入X,即输入状态动作对,并尝试准确预测右侧的值。

在监督学习中,我们训练一个神经网络来学习一个函数f,这取决于许多参数w和b,神经网络各层的参数,神经网络的工作是输入X,希望可以得到一些接近目标值y的值。

问题是,我们怎么样才能提供一个训练集,含有x,y 可以供神经网络学习,这就是我们要做的,使用月球着陆器和试着在其中采取不同的行动,如果我们没有好的策略,则会随机采取行动, nothing ,left, main, right,4个可能的动作其中之一,通过在月球着陆器中尝试不同的动作,我们会得到很多例子。

 这些例子说明我们何时处于某种状态并采取了一些行动,可能是好的行动,也可能是更糟的行动。我们会得到(s, a, R(s), s')

当我们在月球着陆器上采用不同的行动时,(s, a,R(s), s')可以是很多不同的值,如图所示,这个在python 中被称为元组

这些元组中的每一个都可以创建一个训练示例,例如由(s1, a1, R(s1), s1')可以得到x1,y1,其中x1 由(s1, a1)得到,s1 是表示状态的8个数字,a1 是表示动作的one-hot 编码的4个数字。而y1的计算也可以根据贝尔曼方程获得,这样我们就可以获得这个训练集的第一个训练示例了。

这里,有一个疑惑,计算y1,使用贝尔曼方程,那其中的Q(s1', a') 是怎么来的,其实一开始我们并不知道什么是Q函数,但是事实证明,我们可以从一个完全随机的猜测开始,来找到Q函数。

但是在每一步中,这里的Q都是一些猜测,随着时间的推移,它们会变得更好,事实证明实际的Q函数是什么。

让我们来看看第二个训练示例,如果我们处在状态S2, 也就是(s2, a2, R(s2), s2'),我们将创建第二个训练示例x2,y2, 其中x2 可以计算出来,而y2和y1一样,我们不清楚Q函数,现在不管这个数是多少,我们把y2放在我们不断增长的训练集中,以此类推,知道我们最终得到1000个带有这些x,y 对的训练示例。

在后面,我们实际上会将这个训练集带到 x 是输入(12个特征),y只是数字,我们将训练一个新的神经网络,例如均方差损失,来尝试预测y作为输入x的函数(预测y),我们在这里描述的只是我们将使用的学习算法的一部分。

四、学习状态动作函数(Q 函数)的完整的算法

下面来看看,学习Q 函数的完整的算法是什么样的。

首先,我们将使用我们的神经网络,并初始化神经网络随机性的所有参数。最初我们不知道它是否是一个Q函数,让我们选择完全随机的值,

我们假设这个神经网络是我们对Q函数的初始随机猜测。

接着,我们反复进行以下操作:

我们将在月球着陆器上采取行动(随机采取一些好的行动,一些坏的行动),获得很多(s, a,R(s), s')这样的元组;

存储这些元组的10000个最新示例(当你运行这个算法是,你会在月球着陆器上看到很多步骤,可能几十万步,但是为例确保我们最终不会使用过多的计算机内存,通常的做法是只记住我们在MTP 中看到的最近10000个此类元组采取行动,这种仅存储最新示例的技术在强化学习算法中被称为 重放缓冲区replay buffer)

目前,我们只是随机飞行月球着陆器,有时会坠毁,有时会安全着陆,让这些元组对我们的学习算法有经验。

有时我们会训练神经网络:

为了训练神经网络,我们将查看保持的10000个最近的元组,并创建一个包含10000个示例的训练集。

训练集需要很多对x和y,对于我们的训练示例,x将是(s,a )来自元组的一部分(含有12个数字,8个数字表示代表状态和表示动作的one-hot 编码的4个数字)。

我们希望神经网络尝试预测的目标值y,y=R(S) + γ*maxQ(s', a')

如何得到Q(s', a')值?

最初是我们随机初始化的这个神经网络,这可能不是一个很好的猜测,但是这个猜测创建这10000个训练样例后,我们将得到训练样例x1,y1,x2,y2……x10000,y10000.

我们将训练一个新的神经网络,我们将新的神经网络称为Qnew,使得S中的Qnew(s,a) 与目标值y接近。

这正是训练该神经网络以输出带有参数的fw,b,f(x)≈y,输入x以尝试逼近目标值y,

现在这个神经网络应该更好地估计什么是Q函数或状态动作函数,我们要做的是将Q设置为我们刚刚学习的新神经网络Q=Qnew。

事实证明,如果我们在开始的地方运行这个算法,Q函数的真正随机猜测,然后使用贝尔曼方程反复尝试改进Q函数的估计,然后通过一遍又一遍地这样做,采取很多行动训练一个模型,这将提供我们Q函数的猜测,对于我们训练的下一个模型,我们现在有一个更好的估计Q函数是什么,那么我们训练的下一个模型会更好。当我们更新Q=Qnew时,然后下一次我们训练一个Q(s', a')模型将是一个更好地估计。

当我们在每次迭代中运行这个算法时,Q(s', a' )有望成为对Q函数更好地估计,因此,当我们将平均值运行足够长的时间时,这实际上将成为一个Q(S,a )真实值的很好的估计,以便我们可以使用它来选择 好的行动或MTP。

上面说的这个算法有时也被称为代表的DQN算法,对于deep Q-Network ,因为我们正在使用深度学习和神经网络来训练模型学习Q函数,因此使用神经网络的 DQN 或 DQ。

 


总结

以上就是今天要讲的内容,本文主要讲解了如何去构建一个强化学习算法以及构建算法中存在的问题及如何去解决。首先介绍了什么是连续状态空间,这是构建强化学习算法必须理解的,然后介绍了构建一个强化学习算法的框架,重点就是找到策略Pi。随后提到了学习状态值函数的完整算法。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
强化学习,处理连续状态空间算法有很多。以下是一些常见的算法: 1. Q-learning:Q-learning是一种基本的强化学习算法,适用于离散状态和动作空间。然而,在连续状态空间,Q-learning需要对状态空间进行离散化处理,这会导致维度灾难问题。 2. Deep Q Network (DQN):DQN是一种使用深度神经网络来逼近Q函数的方法。在连续状态空间,可以使用函数逼近器(如神经网络)来估计Q值。然而,DQN仍然需要对状态空间进行离散化处理。 3. Deep Deterministic Policy Gradient (DDPG):DDPG是一种用于连续动作空间的算法。它结合了策略梯度和Q-learning的思想,使用深度神经网络来估计策略和Q函数。DDPG通过使用确定性策略来解决连续动作空间的探索问题。 4. Proximal Policy Optimization (PPO):PPO是一种基于策略梯度的算法,用于连续动作空间。它通过在每次迭代执行多个轨迹来更新策略,并使用一种称为“重要性采样”的技术来改善采样效率。 5. Trust Region Policy Optimization (TRPO):TRPO也是一种基于策略梯度的算法,用于连续动作空间。它通过定义一个约束,使得每次策略更新都在一个可接受的范围内,从而保证策略的改进。 这些算法只是强化学习处理连续状态空间的一部分方法。还有其他算法,如Actor-Critic、Soft Actor-Critic(SAC)等,可以根据具体问题选择适合的算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓亮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值