mul-dino —— 人工智能方法接入谷歌小恐龙游戏

记录

跑原项目

包都过期了,换包

盘源码逻辑

从 apps 入手,模型和游戏代码

修改 NNModel(练手)

  1. 添加下蹲预测状态
  2. 修改 Model 的损失函数:均方误差 -> 交叉熵损失,更适应多选项预测

新建 DQNModel(Deep Q-Learning Network)

  1. 优化 reward(为了方便,我直接把 reward 写在小恐龙的代码而不是 AI 的代码里,对性能可能有一丢丢影响?)
  2. 引入优先级经验回放机制,根据 TD-Error 优先采样对模型改进潜力更大的经验(后续又在 tdError 中加入 reward 的权重)
  3. 将实时状态得出的经验加入经验池,训练效率大大提升(((其实本来就该这样?我一直在模仿别的模型,只把小恐龙死亡那一刻的数据用来训练

改进方案

  1. 优化 dqn.js
  2. 加个面板,监控模型的训练情况并做可视化(之前Mnist手写识别实验的那种)
  3. 在 TrexGroup.js 里调参 —— reward 的影响因素
  4. 新建 PPO、Dueling Q-Learning…… 别的类型的模型
  5. 包装:美化界面/串联成一个教学项目

资料

Chrome自带恐龙小游戏的源码研究(一)
前端人工智能?TensorFlow.js 学会游戏通关
PPO、DQN、A2C


反思与总结

  • 借机熟悉了开源项目的学习流程:
    了解项目的前因后果 -> 本地跑原项目 -> 拆结构,盘代码 -> 在对项目的理解基础上,做出自己的修改
  • 面对这种大作业,大家各有各的做法;只需记住,投入就有回报的机会。我无疑对 AI 的代码实践有了更加深刻的理解
  • 工程和实验密不可分。我现在学习的每一点工程知识,都会对未来的研究有帮助。只要在学,在做,就没有浪费时间一说
  • 把自己的实现思路完整清晰地表达出来 —— 我缺少这种能力,有待加强即时思考的能力