问题标签 [q-learning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - 具有神经网络近似 Q 函数的奖励函数
在 Q-learning 中,如果我的 Q-function 由普通的前馈神经网络近似,我应该如何表示我的 Reward 函数?
我是否应该将其表示为“接近”、“非常接近”目标等离散值。我所关心的是,只要我已经转移到 Q 函数的神经网络近似Q(s, a, θ)
并且不使用不再是查找表,我还需要建立一个奖励表吗?
machine-learning - 推荐系统上的 DQN
我想在零售行业的推荐系统上使用 DQN
但问题是,这个问题的状态空间是时间不均匀且不确定的
(与 Atari 游戏相比)
我想出了解决这个问题的两种方法
- 使状态转换成为确定性
- 使用历史数据计算转移概率,使用概率转移状态
但是……他们两个似乎都没有意义
有人指出这类问题
如果我想建立一个基于强化学习的推荐系统
我应该从哪里开始?
terminology - 为什么 Q-learning 在未知环境中起作用?
Q-learning 使用即时奖励矩阵 R 对环境进行建模。这意味着它使用一个已知的矩阵 R 进行学习,那么为什么人们说“Q-learning 可以在未知环境中工作”呢?
python - Keras 中的策略梯度
我一直在尝试使用“深度 Q 学习”构建一个模型,其中我有大量的动作 (2908)。在使用标准 DQN 取得了一些有限的成功后:( https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf ),我决定做更多的研究,因为我认为行动空间太大而无法做到有效探索。
然后我发现了这篇论文:https ://arxiv.org/pdf/1512.07679.pdf ,他们使用了演员-评论家模型和策略梯度,然后我发现了:https ://arxiv.org/pdf/1602.01783.pdf他们使用策略梯度来获得比 DQN 整体更好的结果。
我发现了一些他们在 Keras 中实施策略梯度的网站,https ://yanpanlau.github.io/2016/10/11/Torcs-Keras.html和https://oshearesearch.com/index.php/ 2016/06/14/kerlym-a-deep-reinforcement-learning-toolbox-in-keras/但是我很困惑它们是如何实现的。在前者中(当我阅读论文时),似乎不是为参与者网络提供输入和输出对,而是为所有权重提供梯度,然后使用网络对其进行更新,而在后者中他们只是计算一个输入-输出对。
我只是把自己弄糊涂了吗?我只是应该通过提供输入-输出对并使用标准的“拟合”来训练网络,还是我必须做一些特别的事情?如果是后者,我该如何使用 Theano 后端呢?(上面的例子使用 TensorFlow)。
keras - 在 Keras 中只训练一个网络的输出
我在 Keras 有一个具有许多输出的网络,但是,我的训练数据一次只提供一个输出的信息。
目前我的训练方法是对有问题的输入进行预测,更改我正在训练的特定输出的值,然后进行单批更新。如果我是对的,这与将所有输出的损失设置为零相同,除了我正在尝试训练的那个。
有没有更好的办法?我已经尝试过班级权重,除了我正在训练的输出之外,我将所有的权重设置为零,但它并没有给我预期的结果?
我正在使用 Theano 后端。
python-2.7 - 不生成所有状态的tictactoe搜索空间的前序探索
我正在尝试为 tictactoe 实现 q-learning。这样做的步骤之一涉及枚举tictactoe板的所有可能状态以形成状态值表。我已经编写了一个从空板开始递归生成所有可能状态的程序。为此,我隐式地执行搜索空间树的前序遍历。然而,最后,我只得到了 707 个独特的州,而普遍的共识是合法州的数量大约是 5000 个。
注意:我指的是合法州的数量。我知道如果允许任何一名玩家在比赛结束后继续比赛(我的意思是非法状态),状态数接近 19,000。
代码:
如果需要,您可以在此处查看完整代码。
编辑: 我在链接和此处对代码进行了一些整理,并添加了更多注释以使事情更清晰。希望有帮助。
python - Pybrain强化学习;状态维度
我正在做一个项目,使用 Pybrain 包将强化学习与交通灯模拟相结合。我已经阅读了教程并实现了我自己的Environment
和子类Task
。我使用ActionValueNetwork
as 控制器是因为我希望我的状态是一个具有连续值的向量,这样它就可以包含诸如每条车道上等待的汽车数量、每条车道的总等待时间等信息。
我将 的输入维度设置ActionValueNetwork
为我的状态向量的维度,这表明可以将向量用作状态变量。当我使用 Q-learner 或 SARSA 学习器时,代码起初运行良好,但一旦learn()
调用该方法,我就会收到一条错误消息。此函数包含行
错误信息是
这表明只能使用标量形状的状态。
pybrain 强化学习环境是否支持向量形状态?如果是这样,我如何修改我的代码,使其能够与他们的 Q-learning 或其他方法的实现一起使用?
reinforcement-learning - 如何理解 Sutton&Barto 的 RL 书中 Watkins 的 Q(λ) 学习算法?
在 Sutton&Barto 的 RL 书籍(链接)中,Watkins 的 Q(λ) 学习算法如图 7.14 所示: 第 10 行“对于所有 s,a:”,这里的“s,a”是所有 (s,a),而第 8 行和第 9 行中的 (s,a) 是当前的 (s,a),对吗?
在第 12 和 13 行,当 a'!=a* 时,执行第 13 行,所以所有的 e(s,a) 都将被设置为 0,那么当所有的资格迹都设置为 0 时,资格迹的意义是什么,因为情况 a'!=a* 会经常发生。即使 a'!=a* 的情况并不经常发生,但一旦发生,资格迹的意义就完全丧失,那么 Q 就不会再更新了,因为所有的 e(s,a)= 0,那么在每次更新中,如果使用替换跟踪,e(s,a) 仍将为 0。
那么,这是一个错误吗?
machine-learning - 为什么我的神经网络 Q-learner 不学习井字游戏
好的,所以我使用与 DeepMind 的 Atari 算法相同的想法创建了一个神经网络 Q-learner(除了我提供原始数据而不是图片(还))。
神经网络构建:
9 个输入(0 表示空白点,1 表示“X”,-1 表示“O”)
1 个具有 9-50 个神经元的隐藏层(尝试不同大小,激活函数 sigmoid)
9 个输出(每个动作 1 个,输出 Q 值,激活函数 sigmoid)
- MSE 损失函数
- 亚当反向传播
由于梯度检查和大量测试,我 100% 确信网络是正确构建的。
Q 参数:
- -1 输掉比赛的奖励
- 如果尝试移动到已经占据的位置,则 -1 奖励(例如,X 已经在玩家 O 尝试放置“O”的位置)
- 0 抽奖奖励
- 0 奖励移动,不会导致终止状态
- +1 获胜游戏奖励
- 下一个状态(在 s,a,r,s' 中)是您自己和对手移动之后的状态。例如,空棋盘和玩家 X 先转牌并将“X”放在左上角。然后玩家O把“O”放在右上角。那么 s,a,r,s' 将是 s = [0,0,0,0,0,0,0,0,0], a = 0, r = 0, s' = [1,0,- 1,0,0,0,0,0,0]
问题
如果我在移动到已经占据的位置时给予 -1 奖励,我所有的 Q 值都会归零。如果我不这样做,网络就不会知道它不应该移动到已经被占用的地方,并且似乎学习任意 Q 值。我的错误似乎也没有缩小。
无效的解决方案
我试图将奖励更改为 (0, 0.5, 1) 和 (0, 1) 但它仍然没有学习。
我试图将状态显示为 0 表示空,0.5 表示 O,1 表示 X,但没有奏效。
我试图在移动后立即给出下一个状态,但它没有帮助。
我试过用 Adam 和 vanilla back prop,但结果还是一样。
- 我已经尝试过重放内存和随机梯度下降的批次,但仍然相同
- 将 sigmoid 更改为 ReLU 但没有帮助。
- 各种现在想不起来的事
GitHub 中的项目:https ://github.com/Dopet/tic-tac-toe (对于丑陋的代码很抱歉,主要是由于所有这些代码重构,这应该很容易测试以查看算法是否有效)
要点:
- TicTac 类具有游戏本身(使用抽象 Game 类的模板方法模式制作)
- NeuralNetwork 类将一些数据记录到当前目录中名为 MyLogFile.log 的文件中
- Block 和 Combo 类仅用于创建获胜情况
- jblas-1.2.4.jar 包含 DoubleMatrix 库
reinforcement-learning - q-learning 中的迭代和奖励
早上好,在 Q-learning 中,代理会采取行动直到达到目标。该算法被执行多次,直到获得收敛。例如,目标是在时间模拟结束之前获得最大吞吐量。模拟时间被划分为 n 个相等的周期 T,并且奖励随时间变化。因此,代理在每个周期开始时会更新其状态 n 次。在这种情况下,n 被认为是步数或迭代数?此外,Q值的更新是在执行所选动作之后还是在执行之前完成(使用奖励函数,它是真实奖励的近似值)?如果您能回答我的问题,我将不胜感激。