DRL实战 : Dynamic Programming

DRL in Action :

Dynamic Programming

把目标分解为一组更易于解决的子目标,同时保存子目标的所有的解决方案,以便在次遇到该子问题时,可以直接查找到之前的解决方案,不用重新计算.

# 计算斐波那楔数列
def fib(n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)
fib(7)
13
fib(4)的计算分解:
  1. fib(4)
  2. fib(3)+fib(2)
  3. fig(2)+fib(1)+fib(0)+fib(1)

fib()函数是递归调用的,其中有一些计算被重复执行多次,例如’fib(2),fib(1)’,如果采用动态编程的方法,把需要重复计算的子运算存储起来,就可以提高效率,同时也需要一小部分的内存开销.

# 用字典存储子运算的结果
mem = {0:0, 1:1}

def fib_mem(n):
    if n not in mem:
        mem[n] = fib(n - 1) + fib(n - 2)
    return mem[n]
fib_mem(7)
13

Time Performance

%timeit fib(35)
5.04 s ± 83.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit fib_mem(35)
The slowest run took 4.40 times longer than the fastest. This could mean that an intermediate result is being cached.
504 ns ± 382 ns per loop (mean ± std. dev. of 7 runs, 1 loop each)

解决连续决策过程的两个极端:

  • 动态编程
  • 随机试错:从环境中进行随机抽样
  • 混合策略:一定数量的随机试错,同时对已经熟知的环境直接利用,解决简单的子目标.

小结:

  1. 强化学习是机器学习的一个子集,强化学习的目标是为了在某些环境中获得最大化的奖励,尤其是涉及控制决策类的问题,强化学习非常有用,原则上强化学习算法可以采用任何统计学习模型,但是神经网络模型很流行也很有效.为什么:因为深度学习算法可以学习抽象出状态的重要特征,深度学习算法虽然参数很多但是是有限的,因此我们可以用它来将任何可能的状态压缩为可以有效处理的状态,然后使用压缩后状态表示形式进行决策,例如 Atari DQN仅有1792个参数(16x8x8,32x4x4,256个节点全链接隐藏层),而不是要存储 26 5 28228 265^{28228} 26528228个(key/value)状态空间.
  2. agent是强化学习的核心,它也是强化学习算法的一部分,感受环境的变化采取下一步的行动.
  3. env是agent所在的环境,为agent生成输入的数据.
  4. state就是env在某一时刻的快照,agent根据state做出下一步决策.环境通常是不断变化的,所以可以通过在特定的时间点采样给agent提供环境的状态信息.
  5. action是agent做出的动作/决策,该动作会引发环境的变化.
  6. reward是在agent采取了’良好’的动作后,环境给予agent的一个积极信号.有奖励就有惩罚,当agent做出了’不良’的行为,会收到一个消极的信号,强化学习的目标就是奖励最大化.
  7. RL的Pipeline是一个循环,agent接收输入环境的state,agent评估输入,输出下一步的操作,执行动作后,环境发送改变,环境将(奖|惩)信号发送给agent,以上过程重复进行.当agent为神经网络模型时,每次迭代都会基于信号评估损失函数,通过反向传播算法更新权重提高agent的表现.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值