首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是否是DQN/DDQN强化训练的有效稳定性问题?

这是否是DQN/DDQN强化训练的有效稳定性问题?
EN

Data Science用户
提问于 2020-06-04 22:31:42
回答 1查看 285关注 0票数 0

大家都知道,DQN或DDQN以“不稳定的训练”而闻名。

让我们使用众所周知的"CartPole“。代理必须平衡棍子并得到每帧+1的奖励。你可以达到195的门槛与Cartpold-V0,但结果会有很大的变化。你将很难让它发挥作用,直到它“几乎稳定”。可能的原因是学习速度,批次大小等.

如果您掌握了v0,切换到“Cartpold-v1”,我相信您的“稳定”系统将再次失败。您通常需要调整参数才能使它再次工作。(只是我的经验)

但是,在algo的工作流程中,我不明白:

代码语言:javascript
复制
for ep in range(num_episodes):

    state = env.reset()
    total = 0.0
    done  = False

    while not done:

        action = agent.get_action(state)
        next_state, reward, done, info = env.step(action)
        agent.remember(state, action, reward, next_state, done)

        agent.train()

        total += reward
        state = next_state

    ep_rewards.append(total)

你们都见过这个工作流,这里有什么问题.?

1.我们在训练和移动权重

时测量性能

每个agent.train()调用都会进行批处理训练并更改权重。“总”报酬是用很多不同的模型来计算的,我们衡量的是哪一个?

2.在Cart极示例中,如果不能平衡

,则集结束(已完成)。

有些(第一次)跑步非常短--这导致了较少的训练(不一致的循环计数)。这意味着,如果特工表现不好,就会进行较少的训练。如果它运行良好-它训练很多,做了很多循环,直到完成,并移动它的权重远离好的政策,并可能变得不稳定。

3.如果我们保存一个模型-我们真正保存的是哪个模型?

我们有效地测试了一堆模型并获得了某种类型的平均性能,但是如果我们在运行良好之后保存模型会发生什么呢?我们可以有一个良好的运行(高总回报)-但拯救一个坏(最后)模式?我们到底节省了什么重量,我无法用一种合理的方式来解释,对吗?

现在,通过移动一些代码部分来解决所有问题的一个简单改进:

代码语言:javascript
复制
for ep in range(num_episodes):

    state = env.reset()
    total = 0.0
    done  = False

    while not done:

        action = agent.get_action(state)
        next_state, reward, done, info = env.step(action)
        agent.remember(state, action, reward, next_state, done)

        total += reward
        state = next_state

    # the total result comes from a fixed model
    # correct performance measures and saving ONE model are now possible
    ep_rewards.append(total)

    # train outside of while(done)
    # every episode has now a constant number of train runs, 50 for example
    for i in range(50):
        agent.train()

更改后,我在最大值时获得了非常稳定的性能,如下所示:

代码语言:javascript
复制
Run 7 | Episode: 770 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 780 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 790 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 800 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 810 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 820 | eps 0.0 | total: 432.00 | ddqn True
Run 7 | Episode: 830 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 840 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 850 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 860 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 870 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 880 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 890 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 900 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 910 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 920 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 930 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 940 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 950 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 960 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 970 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 980 | eps 0.0 | total: 500.00 | ddqn True
Run 7 | Episode: 990 | eps 0.0 | total: 500.00 | ddqn True

我的担心有效吗?

这是一个有效的改进,还是我在这里遗漏了什么?

EN

回答 1

Data Science用户

回答已采纳

发布于 2020-06-05 03:49:50

“总”报酬是用很多不同的模型来计算的,我们衡量的是哪一个?

原则上,总回报应该通过冻结策略(相当于冻结参数策略的参数),然后计算环境上多次推出的平均值(通常的Monte )来计算。

如果它运行良好-它训练很多,做了很多循环,直到完成,并移动它的权重远离好的政策,并可能变得不稳定。

在非策略学习中存在重放缓冲区的原因之一,原则上是为了防止神经网络中这种灾难性遗忘,将其参数化为数据集移位下的策略(状态、行为和奖励的分布变化)。

如果我们拯救一个模型-我们到底是在拯救哪一个模型?

您可能希望像前面提到的那样计算奖励(成为某种验证集),并选择给出最佳平均报酬(可能是方差)的模型。这通常是昂贵的,廉价的代理是算法的第一个版本,它在报酬计算上是有偏差的,但是随着策略在理论上的收敛,偏差降低到零。

您对数据收集和学习循环所做的更改是有效的。然而,这通常是不这样做的,因为原则上这是样本效率低下。你必须等待完成一个完整的轨道,然后才能将这些信息纳入模型。在文献中,一个更吸引人的方法是,你最好每隔几步就做一次。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/75483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档