mathdqn代码记录

mathdqn代码github地址
对应于论文《MathDQN: Solving Arithmetric Word Problems via Deep Reinforcement Learning》

代码主体

mathdqn代码记录

  • data文件夹中保存了AI2数据集的相关信息,包括每个题目的解析结构数据、训练集和测试集划分的数据等等。
  • model文件夹中保存了训练过程中的模型文件。
  • predict文件夹中包含模型预测的结果【但观察下来,这些题目中仅包含两个操作数,且操作符只有加减】
  • test文件夹保存了训练过程中的准确率和损失信息,还有reward list.
  • python文件中,agent.py,env.py分别代表智能体和环境的角色。DQN.py中定义了dqn网络。config.py给定了基本的设置,包括读取特征、数据文件等。

一些疑问

  • 代码中只有对AI2数据集的处理(仅包含加减操作,且题目量小,395个题目),不能直接处理math23k数据集。
  • dqn网络预测出的两个操作数对应的操作符在和groudtruth做比较时,得到的reward是分类讨论设定的固定值,泛化性弱。
  • 代码中,分数是转换为接近的小数来做的,这样解决小学题并不合理。
  • 对于解决MWP问题,我认为监督学习方法要比强化学习方法更加适用。因为:
    • 数据集中,对于每个题目都有对应的表达式标签。监督学习和强化学习最重要的区别也是在于数据集中的标签。
    • 对于两个操作数组成的状态来说,它能选择的动作只有加减乘除四种,只有操作符选择的正确与否,而没有选择哪个操作符会返回的reward更多。这其实就对应于监督学习的指导型反馈,而不是强化学习的评估型反馈。
    • 在加减乘除四个动作组成的状态空间中,最优动作是固定的,不存在利用强化学习探索出最优动作的过程。所以,这与强化学习和环境交互,不断学习的理念也不符合。