您的位置:首页 > 其它

强化学习基本方法(二)

2016-06-03 19:37 309 查看

2.2.状态-动作收益评价函数

之前的讨论里面只提到了状态的转化,然而实际情况可能更加复杂,第一:应用在状态上的不同动作其价值本来就是不同的,这也值得我们加入考虑的范围。比如花枯萎的时候,我得去挑水来浇花,这时候我要付出劳动力的,这个动作的收益可以设置为-100,我也可以选择不管,虽然花会死,但是“不管”这个动作的收益可是0,要是花不怎么值钱,我还是任由它死掉算了嘿嘿嘿。第二:不同的动作也会影响状态转移的概率分布,拿前面的例子来说,浇水总比不管让花活下来的几率更大的。

我们还是先不加解释的抛出动作-累计奖励函数的Bellman方程:

Qπ(s,a)=∑s′∈sp(s′|s,a)[r(s′|s,a)+γVπ(s′)]=Eπ[r(s′|s,a)+γVπ(s′)]

这个式子和之前的状态收益函数其实非常像,唯一的区别就在于转换概率加了一个动作,并且一阶收益期望也被动作价值所影响了。

很重要的一点在于,在强化学习的框架里面,动作价值和达到某状态带来的价值是可以直接叠加的!这样做的目的是为了让整个价值评价体系统一,不必费心去分辨这是动作带来的价值收益还是状态带来的价值收益。

还是之前的那个例子:

A→B→C→D

这次我们把每移动一步的动作也加上一个-1的价值,很简答的推算可以得知:

V(C)=0.8∗V(D)+100−1=99

V(B)=0.8∗V(C)+0−1=−1

继续进行迭代:

V(C)=0.8∗V(D)+100−1=99

V(B)=0.8∗V(C)+0−1=78.2

依次类推,直到最终状态收敛

3.最优化策略

3.1.动态规划

现在收益能够量化了,我们需要做的就是根据这两个式子找到策略使得式子所得的收益最大化。这样,整个问题就转变为了一个动态规划问题。优化目标为:

π∗(s)=argmaxπVπ(s)

此时所得到的策略被称为最佳策略π∗此时对应的最佳累计奖励和最佳行为-累计奖励为V∗,Q∗,而且存在关系式:V∗(s)=maxaQ∗(s,a)

从而可以导出Bellman最优性方程:

V∗(s)=maxaE[r(s′|s,a)+γV∗(s′)|s0=s]=maxa∈A(s)∑p(s′|s,π(s))[r(s′|s,π(s))+γVπ(s′)]

Q∗(s)=E[r(s′|s,a)+γV∗(s′)|s0=s]=maxa∈A(s)∑p(s′|s,π(s))[r(s′|s,π(s))+γVπ(s′)]

这里其实是存在一个小技巧的,因为如果将V,Q完全展开的话,可能存在回环一类无限步长的情况。当然,γ的限制是一方面,另一方面,其实也会贪心策略的一种应用,在每次优化的时候只关注当前结点和优化系数相关的情况而忽略其他结点和优化系数的交互作用(其实我们在每一步优化的时候也只优化了当前结点所采取的策略,但是同上文提到的,因为回环与延迟的存在,当前的策略改变可能会在其他节点的消费也有所体现)。

基于这个原则,我们在每一步累计奖励方程选择合适的动作,使其满足最优。由于在每次选择时都有多个动作可以选择,此时,累计奖励方程:

Vπ(s)=∑aπ(a|s)∑s′∈Sp(s′|s,a)[r(s′|s,a)+γVk(s′)]

这样,在全知的条件下,我们可以提出下面的算法思路:

1.随机初始化一个策略π

2.估算这个策略下每个状态的收益

3.尝试更改这个策略,如果更改使得结点收益上升,则接受这个更改

那么,首先我们需要做的就好杀死初始化策略并且估计这个策略下的状态收益。

在既定策略估计每一个状态收益的算法流程如下:

Input π
for all s in S
v(s) = 0
while true
Δ ← 0
for each s in S
temp = v(s)
v(s) = Vπ(s)
Δ = max(Δ,|temp-v(s)|)
if Δ < θ
break


在这个算法中,我们直接使用了每一步更新出来的新值作为当前状态的估计收益,而不是在一遍完整的遍历之后将取出其迭代结果再进行迭代。这样其实是有助于迭代收敛的。

那下一步就是改进我们的策略使其达到(接近)最优了。也就是说,在之后的迭代中,我们只需要修改策略并比较这个策略是不是比原来的策略好,如果更好,就接受这个策略,如果不好,就丢弃掉。这样理解的话,整个问题突然就转回一个动态规划的问题上面来了。这样,我们的整体优化思路就是如下:

1.随机初始化一个策略π

2.估算这个策略下每个状态的收益

3.使用动态规划算法,得到新状态下的收益

4.如果规划稳定 则停止,否则,跳转回2

这时候,我们发现,在每一次优化以后都必须估算这个策略下面每个状态的收益,这一步其实需要大量的迭代步骤,非常耗时,然而这一步是必要的吗?

在改进的策略里面,我们可以直接将每一步获取的最新值作为当前结点收益的更新值,以只更新当前结点的方法来更新全局收益。

这样做的理由是我们在每一个结点的迭代结束之后,再进行全局估计其实是为了预防当前的策略改变没有立即得到收益反馈的影响。但是另一方面来看,由于整个算法是在不断迭代的过程中完成的,所以只要我们这个新的接不小于原来的解(单调递增),其一定是可以收敛到最优极限的。所以,我们可以使用这样的策略来更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  强化学习