用Java实现DQN,训练不会死的FlappyBird

本文介绍了如何使用Java和DJL深度学习库实现DQN算法,训练一个能玩FlappyBird的智能体。通过强化学习的Q-Learning和卷积神经网络(CNN),经过约三百万步训练,小鸟得分可达8000多。文章详细阐述了RL架构、CNN训练、数据处理和训练过程,展示了Java在强化学习领域的应用。
摘要由CSDN通过智能技术生成


使用 DeepJavaLibrary(DJL) - 基于Java 的深度学习框架

英文版 发布在 DataScience。

1. 前言

FlappyBird 是2013年推出的一款手机游戏,因其简单的玩法(振翅 / 不振翅)但极度困难的设定迅速走红全网。随着深度学习(DL)与增强学习(RL)等前沿算法的发展,我们可以使用 Java 非常方便地训练出一个智能体来控制 Flappy Bird。今天,来一起看一下如何在Java实现这个算法并用来做增强学习应用的。游戏主体我使用了一个开源的 Java 编写的 FlappyBird,在训练方面,我们使用了DeepJavaLibrary(DJL),一个基于Java的深度学习框架来构建增强学习训练网络并进行训练。经过了差不多三百万步(四小时)的训练后,小鸟已经可以获得最高8000多分的成绩。

在这个文章中,我们将从原理开始,一步一步实现增强学习算法并用它对游戏进行训练。如果任何一个时刻不清楚如何继续进行下去,可以参阅这个项目的代码仓库

2. 增强学习(RL)的架构

在这一节,我们会介绍主要用到的算法以及神经网络帮助你更好的了解如何进行训练。这个项目与DeepLearningFlappyBird(Python 项目)使用了类似的方法进行训练。算法整体的架构是Q-Learning+卷积神经网络(CNN),我们把游戏每一帧的状态存储起来,即小鸟采用的动作和采用动作之后的效果,这些将作为卷积神经网络的训练数据。

2.1 CNN 训练简述

CNN 的输入数据为连续的 4 帧图像,我们将这图像stack起来作为小鸟当前的“observation”,图像会转换成灰度图以减少所需的训练资源。图像存储的矩阵形式是 (batch size, 4 (frames), 80 (width), 80 (height))。数组里的元素就是当前帧的像素值。这些数据将输入到 CNN 后将输出 (batch size, 2) 的矩阵,矩阵的第二个维度就是小鸟 (振翅,不采取动作) 对应的收益。

2.2 训练数据

在小鸟采取动作后,我们会得到 preObservation and currentObservation,即是两组 4 帧的连续的图像表示小鸟动作前和动作后的状态。然后我们将 preObservation, currentObservation, action, reward, terminal 组成的五元组作为一个 step 存进 replayBuffer 中。replayBuffer 是一个有限大小的训练数据集,他会随着最新的操作动态更新内容。

public void step(NDList action, boolean training) {
   
    if (action.singletonOrThrow().getInt(1) == 1) {
   
        bird.birdFlap();
    }
    stepFrame();
    NDList preObservation = currentObservation;
    currentObservation = createObservation(currentImg);
    FlappyBirdStep step = new FlappyBirdStep(manager.newSubManager(),
            preObservation, currentObservation, action, currentReward, currentTerminal);
    if (training) {
   
        replayBuffer.addStep(step);
    }
    if (gameState == GAME_OVER) {
   
        restartGame(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值