我正在尝试为具有连续状态空间和离散化动作空间的宠物问题实施深度 Q 学习。
基于表的 Q-Learning 算法更新 Q 表的单个条目 - 即单个. 然而,神经网络输出表格的一整行——即给定状态下每个可能动作的 Q 值。那么,网络的目标输出向量应该是什么?
我一直在尝试让它与以下内容一起使用:
q_values = model(state)
action = argmax(q_values)
next_state = env.step(state, action)
next_q_values = model(next_state)
max_next_q = max(next_q_values)
target_q_values = q_values
target_q_values[action] = reward(next_state) + gamma * max_next_q
结果是我的模型倾向于针对每个可能的动作收敛于一组固定值——换句话说,无论输入状态是什么,我都会得到相同的 Q 值。(我的猜测是,这是因为,因为只有 1 个 Q 值被更新,所以训练告诉我的模型,它的大部分输出已经很好了。)
我应该将什么用于训练的目标输出向量?我应该计算每个动作的目标 Q 值,而不仅仅是一个吗?