标签: reinforcement-learning

自由能源强化学习实施

我一直在尝试实现这里描述的算法,然后在同一篇论文中描述的"大动作任务"上测试它.

算法概述:

在此输入图像描述

简而言之,该算法使用下面所示形式的RBM通过改变其权重来解决强化学习问题,使得网络配置的自由能等于为该状态动作对给出的奖励信号.

为了选择动作,算法在保持状态变量固定的同时执行gibbs采样.有足够的时间,这会产生具有最低自由能的动作,因此是给定状态的最高奖励.

大型行动任务概述:

在此输入图像描述

作者的实施指南概述:

具有13个隐藏变量的受限Boltzmann机器在具有12位状态空间和40位动作空间的大动作任务的实例化上被训练.随机选择了13个关键状态.该网络运行了12000次,学习率从0.1到0.01,在整个培训过程中,温度从1.0到0.1呈指数级增长.每个迭代都以随机状态初始化.每个动作选择包括100次Gibbs采样迭代.

重要的遗漏细节:

  • 是否需要偏置单位?
  • 需要减肥吗?如果是这样,L1或L2?
  • 权重和/或激活需要稀疏性约束吗?
  • 是否有梯度下降的修改?(例如动量)
  • 这些额外机制需要哪些元参数?

我的实施:

我最初假设作者没有使用指南中描述的机制,所以我尝试在没有偏置单元的情况下训练网络.这导致了近乎机会的表现,这是我的第一个线索,即使用的某些机制必须被作者视为"显而易见",因此被省略.

我玩了上面提到的各种省略机制,并通过使用以下方式获得了我最好的结果:

  • softmax隐藏单位
  • 动量为.9(.5直到第5次迭代)
  • 隐藏和可见层的偏置单位
  • 学习率是作者列出的1/100.
  • l2重量衰减为.0002

但即使进行了所有这些修改,我在任务上的表现通常在12000次迭代后的平均奖励为28.

每次迭代的代码:

    %%%%%%%%% START POSITIVE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    data = [batchdata(:,:,(batch)) rand(1,numactiondims)>.5];
    poshidprobs = softmax(data*vishid + hidbiases);

    %%%%%%%%% END OF POSITIVE PHASE  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    hidstates = softmax_sample(poshidprobs);

    %%%%%%%%% START ACTION SELECTION PHASE  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    if test
        [negaction poshidprobs] = choose_factored_action(data(1:numdims),hidstates,vishid,hidbiases,visbiases,cdsteps,0);
    else
        [negaction poshidprobs] = choose_factored_action(data(1:numdims),hidstates,vishid,hidbiases,visbiases,cdsteps,temp);
    end


    data(numdims+1:end) = negaction > rand(numcases,numactiondims);


    if mod(batch,100) == 1
        disp(poshidprobs);
        disp(min(~xor(repmat(correct_action(:,(batch)),1,size(key_actions,2)), key_actions(:,:))));
    end

    posprods …
Run Code Online (Sandbox Code Playgroud)

matlab artificial-intelligence machine-learning bayesian-networks reinforcement-learning

8
推荐指数
1
解决办法
1283
查看次数

如何在Tensorflow中累积和应用Async n-step DQNetwork更新的渐变?

我正在尝试实现深度强化学习的异步方法,其中一个步骤需要在不同的步骤上累积渐变然后应用它.在tensorflow中实现这一目标的最佳方法是什么?我已经积累了渐变,我认为不是实现它的最快方法(从tensorflow到python和back的很多转移).欢迎任何建议.这是我的玩具NN的代码.它不会模拟或计算它只是运行我想要使用的操作的任何东西.

import tensorflow as tf

from model import *


graph = tf.Graph()

with graph.as_default():

    state = tf.placeholder(tf.float32, shape=[None, 80,80,1])

    with tf.variable_scope('layer1'):
        W = weight_variable([8, 8, 1, 32])
        variable_summaries(W, "layer1/W")
        b = bias_variable([32])
        variable_summaries(b, "layer1/b")
        h = conv2d(state, W, 4) + b
        activation = tf.nn.relu(h)
        pool1 = max_pool_2x2(activation)

    print(pool1.get_shape())
    pool1 = tf.reshape(pool1, [-1, 3200])

    with tf.variable_scope('readout'):
        W = weight_variable([3200, 3])
        b = bias_variable([3])
        logits = tf.matmul(pool1, W) + b
        variable_summaries(h, "y")

    action_indexes = tf.placeholder(tf.int32, shape=[None], name="action_indexes")

    loss = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, …
Run Code Online (Sandbox Code Playgroud)

reinforcement-learning neural-network tensorflow

8
推荐指数
1
解决办法
1528
查看次数

TensorFlow:图形优化(GPU与CPU性能)

此问题最初发布在Github#3320上.最好从那里开始,因为在该线程中有更多关于原始问题的细节而且体积庞大,所以我不希望在StackOverflow上重新发布.问题摘要是使用GPU时性能比CPU处理TensorFlow图表要慢.包含CPU/GPU时间轴(调试)以进行评估.其中一条评论涉及优化图表以加速处理,并要求讨论玩具示例." 原始解决方案 "是我的强化学习代码,表现出缓慢的性能,并为社区讨论和评估创建了一些已发布的代码.

我附上了测试脚本以及一些原始数据,Trace Files和TensorBoard日志文件,以加快审查速度. CPUvsGPU testing.zip

讨论已移至StackOverflow,因为此主题将使所有Tensorflow用户受益.我希望发现的是优化已发布图表性能的方法.可以通过更高效的TensorFlow图解决GPU与CPU的问题.

我做的是采取我的原始解决方案并剥离"游戏环境".我用随机数据生成代替了它.在此游戏环境中,不会创建/修改TensorFlow图.该结构密切关注/利用nivwusquorum的Github强化学习示例.

2016年7月15日,我做了一个"git pull"前往Tensorflow.我在启用和启用GPU的情况下执行图表并记录时间(参见附图).意想不到的结果是GPU的性能超过了CPU(这是最初的期望未达到).因此,带有支持库的代码"cpuvsgpu.py"在GPU上表现更好.所以我把注意力转向了原始解决方案和已发布代码之间的不同之处.我还将头部更新为2016年7月17日.由于原始解决方案上的CPU和GPU之间的整体差异比一周再次接近,因为我看到47s CPU与71s GPU相比,有些东西确实有所改善.快速浏览新的Traces与我的初始跟踪,似乎"摘要"可能已经改变,但也可能有其他改进.

gtx 950计时

我尝试了其他两种组合来更好地反映原始解决方案的功能.那些CPU负载很重(~60% - 70%),并通过并发执行该脚本进行模拟.另一个变化是增加"数据IO",原始解决方案使用观察列表随机选择观察训练.此列表具有固定的上限,然后在附加新列表时开始删除列表中的第一个项目.我想其中一个可能是放慢了数据流到GPU的速度.不幸的是,这些版本都没有导致CPU超越GPU.我还运行了一个快速的GPUTESTER应用程序,它可以进行大型矩阵乘法,以了解与任务大小的时序差异,并且符合预期.

我真的想知道如何改进这个图表并减少小OPS的数量.似乎这是大部分性能可能会发生的地方.学习将较小的ops组合成较大的ops而不影响图形的逻辑(功能)的任何技巧都会很好.

reinforcement-learning tensorflow

8
推荐指数
1
解决办法
2979
查看次数

如何更新keras中的权重以进行强化学习?

我正在加强学习计划,我正在使用这篇文章作为参考.我使用python与keras(theano)创建神经网络和我正在使用的伪代码

Do a feedforward pass for the current state s to get predicted Q-values for all actions.

Do a feedforward pass for the next state s’ and calculate maximum overall network outputs max a’ Q(s’, a’).

Set Q-value target for action to r + ?max a’ Q(s’, a’) (use the max calculated in step 2). For all other actions, set the Q-value target to the same as originally returned from step 1, making the error 0 for those …
Run Code Online (Sandbox Code Playgroud)

python reinforcement-learning theano keras

8
推荐指数
1
解决办法
1380
查看次数

为强化学习算法有效地提供数据

我目前正在TensorFlow中实现深度双Q学习算法.我有一个基于NumPy数组实现的体验重放缓冲区.但是,一些性能分析表明,使用feed_dict将数据从NumPy数组馈送到图形是非常低效的.这也在文档https://www.tensorflow.org/performance/performance_guide中指出.

有没有人建议可以更有效地完成喂食?使用静态数据集,可以使用输入管道(例如记录读取器)完成馈送.然而,经验重播缓冲区随着时间的推移而变化,使得这种类型的喂养更具挑战性.

非常感谢任何答案,谢谢!

reinforcement-learning tensorflow

8
推荐指数
1
解决办法
262
查看次数

Openai健身房环境适合多智能体游戏

是否有可能将openai健身房环境用于多智能体游戏?具体来说,我想模拟一个有四个玩家(代理商)的纸牌游戏.得分转弯的球员在下一回合开始.我如何模拟玩家之间的必要协调(例如,接下来是谁)?最终,我想对四个相互对抗的特工使用强化学习.

reinforcement-learning openai-gym

8
推荐指数
1
解决办法
3016
查看次数

是否有使用强化学习进行文本分类的示例?

想象一下二元分类问题,如情绪分析.既然我们有标签,我们不能用实际预测的间隔作为RL的奖励吗?

我想尝试强化学习分类问题

nlp machine-learning reinforcement-learning deep-learning

8
推荐指数
1
解决办法
4060
查看次数

如何使用Keras手动更新权重

我正在使用Keras构建LSTM,并通过使用外部成本函数进行梯度下降来对其进行调整。因此权重将更新为:

weights := weights + alpha* gradient(cost)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用获得权重keras.getweights(),但是如何进行梯度下降并更新所有权重并相应地更新权重。我尝试使用initializer,但仍然没有弄清楚。我只找到了一些与tensorflow相关的代码,但我不知道如何将其转换为Keras。

任何帮助,提示或建议,将不胜感激!

performance reinforcement-learning keras rnn

8
推荐指数
2
解决办法
4743
查看次数

PyTorch Model Training: RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR

After training a PyTorch model on a GPU for several hours, the program fails with the error

RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR

Training Conditions

  • Neural Network: PyTorch 4-layer nn.LSTM with nn.Linear output
  • Deep Q Network Agent (Vanilla DQN with Replay Memory)
  • state passed into forward() has the shape (32, 20, 15), where 32 is the batch size
  • 50 seconds per episode
  • Error occurs after about 583 episodes (8 hours) or 1,150,000 steps, where each step involves a forward pass through …

python reinforcement-learning lstm pytorch dqn

8
推荐指数
2
解决办法
1万
查看次数

稳定基线3库中的“确定性= True”是什么意思?

我正在尝试将稳定基线3库https://stable-baselines3.readthedocs.io/en/master/中的 PPO 算法应用到我制作的自定义环境中。

我不明白的一件事是下面这一行:

mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10, deterministic=True)
Run Code Online (Sandbox Code Playgroud)

我应该始终让确定性等于 True 吗?当我保持确定性=“真”时,我的自定义环境“以某种方式”总是得到解决(即总是返回 1 +/- 0 标准的奖励)。

当我将其更改为“False”时,它开始以合理的方式表现(即有时会成功(奖励=1),有时会失败(奖励=0)。

reinforcement-learning python-3.x stable-baselines

8
推荐指数
1
解决办法
4143
查看次数