【发布时间】:2018-05-17 14:25:45
【问题描述】:
我刚刚在没有神经网络的情况下实现了 Q-Learning,但我一直坚持使用神经网络来实现它们。
我会给你一个伪代码,展示我的 Q-Learning 是如何实现的:
train(int iterations)
buffer = empty buffer
for i = 0 while i < iterations:
move = null
if random(0,1) > threshold:
move = random_move()
else
move = network_calculate_move()
input_to_network = game.getInput()
output_of_network = network.calculate(input_to_network)
game.makeMove(move)
reward = game.getReward()
maximum_next_q_value = max(network.calculate(game.getInput()))
if reward is 1 or -1: //either lost or won
output_of_network[move] = reward
else:
output_of_network[move] = reward + discount_factor * max
buffer.add(input_to_network, output_of_network)
if buffer is full:
buffer.remove_oldest()
train_network()
train_network(buffer b):
batch = b.extract_random_batch(batch_size)
for each input,output in batch:
network.train(input, output, learning_rate) //one forward/backward pass
我现在的问题是此代码适用于小于 200 的缓冲区大小。 对于任何超过 200 的缓冲区,我的代码不再起作用,所以我有几个问题:
- 这个实现是否正确? (理论上)
- 批量大小与缓冲区大小相比应该有多大
- 通常如何训练网络?多长时间?直到达到整个批次的特定 MSE?
【问题讨论】:
标签: neural-network reinforcement-learning q-learning