编辑(1/3/16):相应的github问题
我正在使用Tensorflow(Python接口)来实现一个q-learning代理,其函数逼近使用随机梯度下降进行训练.在实验的每次迭代中,调用代理中的步骤函数,其基于新的奖励和激活来更新近似器的参数,然后选择要执行的新动作.
这是问题(加强学习术语):
那么,有没有办法可以(没有强化学习行话):
当然,我考虑过明显的解决方案:
只需对渐变进行硬编码:对于我现在使用的非常简单的逼近器来说这很容易,但如果我在一个大的卷积网络中尝试不同的滤波器和激活函数,那将非常不方便.如果可能的话,我真的很想使用Optimizer类.
从代理内部调用环境模拟: 这个系统做到了这一点,但它会使我更复杂,并删除了很多模块化和结构.所以,我不想这样做.
我已多次阅读API和白皮书,但似乎无法提出解决方案.我试图想出一些方法将目标输入图形来计算梯度,但是无法想出一种自动构建图形的方法.
如果事实证明这在TensorFlow中是不可能的,你认为将它作为一个新的运算符来实现它会非常复杂吗?(我在几年内没有使用C++,所以TensorFlow源看起来有点令人生畏.)或者我会更好地切换到像Torch这样具有强制性差异Autograd,而不是象征性差异的东西?
感谢您抽出宝贵时间帮助我解决这个问题.我试图尽可能地简洁.
编辑:在做了一些进一步的搜索后,我遇到了这个先前提出的问题.它与我的有点不同(他们试图避免在Torch的每次迭代中两次更新LSTM网络),并且还没有任何答案.
如果有帮助,这里有一些代码:
'''
-Q-Learning agent for a grid-world environment.
-Receives input as raw rbg pixel representation of screen.
-Uses an artificial neural network function approximator with one hidden layer
2015 Jonathon Byrd
'''
import random
import sys
#import copy
from rlglue.agent.Agent import Agent
from rlglue.agent import AgentLoader as AgentLoader …Run Code Online (Sandbox Code Playgroud) machine-learning reinforcement-learning q-learning tensorflow