记录
跑原项目
包都过期了,换包
盘源码逻辑
从 apps 入手,模型和游戏代码
修改 NNModel(练手)
- 添加下蹲预测状态
- 修改 Model 的损失函数:均方误差 -> 交叉熵损失,更适应多选项预测
新建 DQNModel(Deep Q-Learning Network)
- 优化 reward(为了方便,我直接把 reward 写在小恐龙的代码而不是 AI 的代码里,对性能可能有一丢丢影响?)
- 引入优先级经验回放机制,根据 TD-Error 优先采样对模型改进潜力更大的经验(后续又在 tdError 中加入 reward 的权重)
- 将实时状态得出的经验加入经验池,训练效率大大提升(((其实本来就该这样?我一直在模仿别的模型,只把小恐龙死亡那一刻的数据用来训练
改进方案
- 优化 dqn.js
- 加个面板,监控模型的训练情况并做可视化(之前Mnist手写识别实验的那种)
- 在 TrexGroup.js 里调参 —— reward 的影响因素
- 新建 PPO、Dueling Q-Learning…… 别的类型的模型
- 包装:美化界面/串联成一个教学项目
资料
Chrome自带恐龙小游戏的源码研究(一)
前端人工智能?TensorFlow.js 学会游戏通关
PPO、DQN、A2C
反思与总结
- 借机熟悉了开源项目的学习流程:
了解项目的前因后果 -> 本地跑原项目 -> 拆结构,盘代码 -> 在对项目的理解基础上,做出自己的修改 - 面对这种大作业,大家各有各的做法;只需记住,投入就有回报的机会。我无疑对 AI 的代码实践有了更加深刻的理解
- 工程和实验密不可分。我现在学习的每一点工程知识,都会对未来的研究有帮助。只要在学,在做,就没有浪费时间一说
- 把自己的实现思路完整清晰地表达出来 —— 我缺少这种能力,有待加强即时思考的能力