强化学习--初步学习中的反思与心得

MDP原理

其中内容大多基于AndrewNG的Youtube课程,python编码


Optimal value function:
V π ( s ) = R ( s ) + γ M a x ∑ s ′ ϵ s , a ϵ A P s π ( s ′ ) V π ( s ′ ) V^\pi(s) = R(s) + \gamma Max\sum_{s'\epsilon s,a\epsilon A}P_{s\pi}(s')V^\pi(s') Vπ(s)=R(s)+γMaxsϵsaϵAPsπ(s)Vπ(s)
符号解释:
R ( s ) \R(s) R(s)表示的是immediate reward
γ M a x ∑ s ′ ϵ s P s π ( s ′ ) V π ( s ′ ) \gamma Max\sum_{s'\epsilon s}P_{s\pi}(s')V^\pi(s') γMaxsϵsPsπ(s)Vπ(s)表示的是future discounted reward, 在future discounted reward中max的标志意味着会选取最优值
P s π P_{s\pi} Psπ代表着从当前状态S前往下一个状态S‘的概率转移矩阵
V π ( s ′ ) V^\pi(s') Vπ(s)代表下一个状态S’的状态函数

混淆点:

个人在根据AndrewNg的课堂笔记完成相关的课后程序设计时,在Optimal value function这个公式的符号理解上栽了跟头。
首先,第一个要明确的一点是,Optimal value function只考虑从当前状态S转移向S‘的过程中,并不考虑从状态S转移向最终状态的全过程。因此,公式中的 s ′ ϵ s s'\epsilon s sϵs代表着下一个节点可能是总状态 S S S中的任意一个。
其次,Optimal value function数值的迭代更新往往是在全过程做完后通过新旧值差来不断逼近tolerance点完成的。因此,在执行policy的过程中,关于policy make总是基于上一次循环中的value的优化值。
最后,在每一个阶段中都相应地对应着一个value值,而不是随着每一个周期过程的进行一直更新到最后。

收敛代码:

def update_mdp_value(mdp_data, tolerance, gamma):
    """
    Update the estimated values in your MDP.

    Perform value iteration using the new estimated model for the MDP.
    The convergence criterion should be based on `TOLERANCE` as described
    at the top of the file.

    Return true if it converges within one iteration.
    
    Args:
        mdp_data: The data for your MDP. See initialize_mdp_data.
        tolerance: The tolerance to use for the convergence criterion.
        gamma: Your discount factor.

    Returns:
        True if the value iteration converged in one iteration

    """

    # *** START CODE HERE ***
    iters = 0
    transition_probs = mdp_data['transition_probs']

    while True:
        iters += 1

        value = mdp_data['value']
        new_value = mdp_data['reward'] + gamma * value.dot(transition_probs).max(axis=1)
        mdp_data['value'] = new_value

        if np.max(np.abs(value - new_value)) < tolerance:
            break

    return iters == 1
    # *** END CODE HERE ***

POLICY MAKE:
π = a r g m a x a ϵ A ∑ s ′ ϵ s P s s ′ V ( s ′ ) \pi = argmax_{a\epsilon A}\sum_{s'\epsilon s} P_{ss'}V(s') π=argmaxaϵAsϵsPssV(s)

混淆点:
个人在编写代码的时候栽跟头主要是因为认为 V ( s ′ ) V(s') V(s)是在一个周期的过程中随着过程的推进不断更新的。然而 V ( s ′ ) V(s') V(s)是一个固定值,只有在一周期结束后才会进行更新。


反思与心得
这是继卷积神经网络以后,第二次写代码出现问题了。主要是出现再对与公式的误解上。Value是一个周期后进行收敛变化的,但是我却当成了在一个周期中不断发生变化的。两次写代码的经验下来看,个人对于复杂模型的构建还是缺乏一定的能力。今后就主要向复杂模型的实现进发。

参考AndrewNg的代码后,重新修改的图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值