我对Pong游戏实现深度神经网络有一些麻烦,因为我的网络始终发散,无论我改变哪些参数。 我参加了一个Pong游戏,并实施了一个基于theano/lasagne的深度q学习算法,该算法基于Googles Deepmind着名的自然论文。为pong游戏寻找神经网络的正确参数
我想什么:
相反饲喂像素数据的网络的欲输入的x和球的y位置和桨叶的连续4帧的y位置。所以我总共有12个输入。
我只想奖励一轮的命中,损失和胜利。
有了这个配置,网络没有收敛,我的经纪人也无法玩游戏。相反,桨直接驱动到顶部或底部或重复相同的模式。所以我想我会尽量让代理更简单一些,并添加一些信息。
我所做的:
国:
- 球(-1到1)x位置
- 球(的y位置-1到1 )
- 球的归一化x-速度
- 球的归一化y-速度
- 桨(-1至1)
随着连续4帧的y位置我得到的20
奖励总输入:
- 10如果扳钮命中球
- +100如果代理赢得回合
- -100如果代理丢失回合
- -5到0表示球的预测结束位置(y位置)与当前桨的y位置之间的距离如果球的预测结束位置位于球的当前范围内,则该球的预测结束位置为
- +20。桨(命中预见)
- -5如果球位于桨(未命中可能的了)后面
利用这种配置,网络仍然发散。我尝试了解学习速率(0.1到0.00001),隐藏层的节点(5到500),隐藏层的数量(1到4),批量累加器(总和或平均值),更新规则(rmsprop或Deepminds rmsprop)。
所有这些都没有导致令人满意的解决方案。损失平均值的图形大部分看起来像this。 您也可以下载实现我的当前版本here
我将是任何提示:)
Koanashi
由于我没有足够的信誉点发布更多信息我想在这里提供两条链接: [Pong-Game](http://pygame.org/project-py-pong-2040-.html); [Theano/Lasagne实施](https://github.com/spragunr/deep_q_rl); [Nature paper](https://storage.googleapis.com/deepmind-data/assets/papers/DeepMindNature14236Paper.pdf); [另一个损失情节](http://i.imgur.com/U5ZBLcQ.png); – Koanashi
您是否尝试过使用较低的奖励值?如果可能的话,我建议使用您当前使用的奖励,根据最小和最大可能值,将所有奖励标准化为[0.0,1.0]或[-1.0,1.0]。如果难以确定这些最小值和最大值,它可能仍然至少有助于使一切接近0(也许将您现在使用的所有奖励除以100?)。这可能有助于网络更快地融合。 –
谢谢,我还没有,但我会知道,然后报告。 – Koanashi