方法研究:强化学习中的函数逼近思想
点击上方关注,All in AI中国
概观
在像DP和蒙特卡罗这样的表格方法中,我们已经看到状态的表示实际上是对每个状态的记忆。
现在让我们回顾一下究竟什么是状态。
状态是一组可观察的特征或变量所采用的值。这意味着每次特征或变量具有新值时,都会产生新状态。
让我们举一个具体的例子。假设一个代理处于4x4网格中,因此代理在粒度上的位置是一个特征。这给出了16个不同的位置,意味着16种不同的状态。
网格世界
但这并非全部,假设方向(北,南,东,西)也是一个特征。这为每个位置提供了4种可能性,这使得状态数为16 * 4 = 64。此外,如果代理有可能使用5种不同的工具(包括“无工具”情况),这将使状态数增加到64 * 5 = 320。
表示这些状态的一种方法是创建一个多维数组,例如V [行、列、方向、工具]。然后我们查询或计算状态。
例如,V [1,2、north、torch]表示代理位于第1行第2列的状态,向北看并持有一个torch。此数组单元格中的值表示此状态的价值。
另一个例子是V [4,1、west、nothing],它是一个位于第4行第1列的代理,正在向西移动,但什么也没有。
我们再来看看国际象棋游戏。
每次搬家后董事会的情况都是一种状态。估计的统计数据大约是10 ^ 120!
国际象棋中的一种表示可以是:
V [黑兵,黑车,......,无,无......,白皇后,白主教]
其中每个维度代表黑板上的一个正方形,它的值是一个黑色或是白色的部分。
因此,一旦我们拥有了一组状态,我们就可以为每个状态分配一个值状态函数。
不用说,容纳状态数量所需的存储量是巨大的,并且计算每个状态的值所需的时间量也是令人望而却步的。
从逻辑上讲,这促使我们找到更好、更合适的解决方案。
解决方案
记住我们想要做的事情始终是有用的,因为我们可能会忽视一些细节。
我们的想法是,我们希望在环境中找到每个状态/行为的价值,以便代理遵循收集最大奖励的最佳路径。
在上一节中,我们已经表明,当状态空间变得太大时,表格方法变得不充分且不合适。
为了解决这个缺点,我们可以采用一种基于每个状态特征的新方法。目的是使用这些特征集来概括具有相似特征的状态下的值的估计。
我们使用估计这个词来表明这种方法永远不会找到一个状态的真实值,而是它的近似值。尽管这看似不方便,但这将实现更快的计算和更广泛的推广。
计算这些近似值的方法称为函数逼近。
有许多函数逼近器:
- 线性特征组合
- 神经网络
- 决策树
- 最近邻
- ...
由于我们将使用梯度下降来找到最佳结果,因此函数逼近器必须是可微分的,这使我们得到特征和神经网络线性组合在一起。
特征的线性组合
现在让我们深入研究这种线性函数逼近器方法的细节。
但首先要记住这篇文章后面的数学公式:
这是一个递归公式,它根据下一个状态s'的值计算状态s的值,依此类推......
这个公式的问题在于,每次我们需要计算V(s)时,我们需要计算所有未来的状态,即使我们遇到一个类似于我们已经看到的状态,我们也无法识别它。
用Q学习公式,我们可以估算未来的状态:
我们将使用这些公式来推导出一些有趣的解决方案。
让我们重新定义V(s),例如它反映了它包含的特性。状态值函数可以通过其特征的加权和来表示:
V(s)= W1.F1(s)+ W2。 F2(s)+ ... + Wn.Fn(s)或简称:
Φ(s)是状态s处的特征向量,并且θᵀ是应用于特征的权重的转置矩阵,使得某些特征在任何状态s下比其他特征更有价值。
现在让我们定义δ,也称为TD误差,如下所示:
通过用新定义替换δ中的V(s),我们得到:
记住,根据定义V(St)= R(t₊1)+γV(St₊1),这意味着δ应为零。然而,我们并不处于确定性环境中,这意味着我们不确定相同的行为总会导致相同的结果,并且学习过程不是100%准确,这意味着我们学习的V(s)并不一定等同于R (t₊1)+γV(St₊1)。所有这些会导致δ是非零值。
所以现在我们的目标是计算θ,以便最小化δ。通过最小化J(θ)来实现此目的的便捷方式。
任何回归中的J(θ)计算实际结果与真实结果之间的差异。然而我们的问题是我们不知道真正的结果是什么!相反,我们将计算实际结果与估计结果之间的差异。在每次迭代之后,我们对真实结果进行了新的估计,这使得我们看起来像是在瞄准一个移动的目标。
不过,我们的想法是不断改进估算,直到两者之间的差异变得足够小为止。
事实证明,这种方法有足够的收敛性保证。
成本函数的最小化可以使用梯度下降法来实现,在这里不进一步阐述。
梯度下降法将逐步更新θ朝向最小化J(θ)的值,更新公式为:
其中δΦ(s)大致是J(θ)相对于θ的导数,⍺是学习率[0,1]。
重要说明:实际上,相对于θ的J(θ)的推导是δ[Φ(St)-Φ(St + 1)],但实际上该算法的结果更差。
我们已经建立了状态值函数的函数逼近,现在让我们将这个概念扩展到动作值函数。
设Φ(s,a)为状态s的特征,动作a,我们想要做的是根据策略π估计Q(s,a)的值。
与状态值类似,动作值函数是:
并且权重θ的更新是:
神经网络
与非线性函数逼近(例如神经网络)相比,线性函数逼近的主要缺点是需要良好的手工挑选特征,这可能需要领域知识。
在非线性函数逼近器中,我们将再次重新定义状态和动作值函数V和Q,例如:
所以现在V和Q是非线性函数,它们将Φ(s)/Φ(s,a)和θ作为参数。
在这个公式中我们应该注意的是,θ向量的特征数量和大小不一定相同(只是想象一个神经网络)。
从上面我们现在可以计算出TD误差δ和权重θ的更新
注意,δ是使用先前已知的θ值(此处称为θ - )和新计算的值来计算的。
结论
总之,函数逼近有助于在类似情况发生时找到状态或动作的值,而在计算V和Q的实际值时需要完全的计算,并且不需要从过去的经验中学习。此外,函数逼近节省了计算时间和存储空间。
编译出品