DeepLearningFlappyBird

GitHub
6.8k 2.1k 较难 1 次阅读 2天前MIT开发框架
AI 解读 由 AI 自动生成,仅供参考

DeepLearningFlappyBird 是一个利用深度强化学习(具体为深度 Q 网络,DQN)让 AI 自动学会玩“飞扬的小鸟”(Flappy Bird)游戏的开源项目。它解决了传统游戏脚本难以适应复杂动态环境的问题,通过让智能体直接观察屏幕像素并尝试不同操作,自主探索出高分策略,无需人工编写具体的游戏规则代码。

该项目非常适合对人工智能、深度学习或强化学习感兴趣的开发者与研究人员使用。作为学习 DQN 算法的经典入门案例,它完整复现了论文《Playing Atari with Deep Reinforcement Learning》中的核心思想,并将其成功迁移至著名的休闲游戏中。其技术亮点在于端到端的学习能力:系统直接将原始游戏画面转化为灰度图像并堆叠帧序列作为输入,通过卷积神经网络提取特征,输出对应的动作价值函数,从而决定何时跳跃。此外,项目还采用了经验回放机制和ε-贪婪策略优化训练过程,展示了如何从随机试错逐步进化为高手玩家。无论是想深入理解神经网络架构,还是希望动手实践强化学习算法,DeepLearningFlappyBird 都提供了一个直观且可运行的优秀范本。

使用场景

某高校人工智能实验室的研究员正在指导学生复现经典的深度强化学习论文,需要快速验证 DQN 算法在非 Atari 环境下的泛化能力。

没有 DeepLearningFlappyBird 时

  • 环境搭建繁琐:学生需手动整合 TensorFlow、OpenCV 和 Pygame,常因版本兼容性问题(如 Python 2.7 与 3 的差异)耗费数天调试。
  • 算法实现门槛高:从零编写经验回放池(Replay Memory)、$\epsilon$-greedy 策略衰减及卷积神经网络架构,极易在伪代码转代码过程中引入逻辑错误。
  • 数据预处理缺失:缺乏标准的图像灰度化、缩放及帧堆叠(80x80x4)处理流程,导致模型难以从原始像素中提取有效特征,训练无法收敛。
  • 调参盲目低效:没有预设的超参数基准(如学习率、回放池大小),研究人员需盲目尝试,难以区分是算法问题还是参数设置不当。

使用 DeepLearningFlappyBird 后

  • 开箱即用部署:直接克隆仓库即可运行,内置的依赖配置让团队在 10 分钟内完成环境搭建并看到游戏画面,专注点回归算法本身。
  • 核心逻辑标准化:工具完整实现了 DQN 伪代码中的关键步骤,包括状态转移存储和梯度更新,为学生提供了可逐行研读的“教科书级”参考代码。
  • 预处理流水线成熟:自动执行去背景、灰度转换及四帧堆叠操作,显著加速模型收敛,直观展示了输入数据对强化学习效果的影响。
  • 训练策略可视化:内置的 $\epsilon$ 线性退火机制和实时分数反馈,让研究者能清晰观察智能体从随机乱飞到掌握跳跃时机的完整学习曲线。

DeepLearningFlappyBird 将复杂的深度强化学习理论转化为可交互的视觉实验,极大降低了算法验证与教学的成本。

运行环境要求

操作系统
  • 未说明 (基于 Python/Pygame/OpenCV,通常支持 Linux
  • macOS
  • Windows)
GPU

未说明 (使用 TensorFlow 0.7,当时主要依赖 CPU 或旧版 CUDA,README 未明确指定 GPU 型号或显存需求)

内存

未说明

依赖
notes该项目基于较旧的 TensorFlow 0.7 版本,与现代深度学习环境兼容性较差。训练参数中设置了特定的探索率(epsilon)衰减策略以适应游戏节奏。首次运行可能需要修改 checkpoint 路径或调整代码参数以复现结果。
python2.7 或 3
TensorFlow 0.7
pygame
OpenCV-Python
DeepLearningFlappyBird hero image

快速开始

使用深度Q网络学习如何玩Flappy Bird

7分钟版本:DQN for flappy bird

概述

本项目遵循《使用深度强化学习玩Atari游戏》[2]中描述的深度Q学习算法,并展示了该学习算法可以进一步推广到臭名昭著的Flappy Bird游戏中。

安装依赖:

  • Python 2.7 或 3
  • TensorFlow 0.7
  • pygame
  • OpenCV-Python

如何运行?

git clone https://github.com/yenchenlin1994/DeepLearningFlappyBird.git
cd DeepLearningFlappyBird
python deep_q_network.py

什么是深度Q网络?

它是一种卷积神经网络,通过Q学习的一种变体进行训练,其输入是原始像素,输出是一个估计未来奖励的价值函数。

对于那些对深度强化学习感兴趣的人,我强烈推荐阅读以下文章:

揭秘深度强化学习

髙Q网络算法

根据[1]给出的深度Q学习算法伪代码如下:

初始化回放缓冲区D为大小N
用随机权重初始化动作-价值函数Q
for episode = 1, M do
    初始化状态s_1
    for t = 1, T do
        以概率ϵ选择随机动作a_t
        否则选择a_t=max_a  Q(s_t,a; θ_i)
        在模拟器中执行动作a_t并观察r_t和s_(t+1)
        将转移(s_t,a_t,r_t,s_(t+1))存储在D中
        从D中采样一个小批量的转移(s_j,a_j,r_j,s_(j+1))
        设置y_j:=
            r_j 对于终止状态s_(j+1)
            r_j+γ*max_(a^' )  Q(s_(j+1),a'; θ_i) 对于非终止状态s_(j+1)
        对(y_j-Q(s_j,a_j; θ_i))^2关于θ执行梯度步
    end for
end for

实验

环境

由于深度Q网络是基于每一步从游戏屏幕上观察到的原始像素值进行训练的,[3]发现移除原版游戏中出现的背景可以使网络更快地收敛。这一过程可以用下图表示:

网络架构

根据[1],我首先对游戏画面进行了以下预处理步骤:

  1. 将图像转换为灰度图
  2. 将图像调整为80x80大小
  3. 将最近4帧堆叠起来,形成一个80x80x4的输入数组供网络使用

网络的架构如图所示。第一层使用一个8x8x4x32的卷积核,步长为4,对输入图像进行卷积。然后将输出送入一个2x2的最大池化层。第二层使用一个4x4x32x64的卷积核,步长为2。随后再次进行最大池化。第三层使用一个3x3x64x64的卷积核,步长为1。最后再进行一次最大池化。最后一层隐藏层包含256个全连接的ReLU节点。

最终的输出层与游戏中可执行的有效动作数量相同,其中第0个索引始终对应于不执行任何操作。该输出层的值代表了在给定输入状态下每个有效动作的Q值。在每一步中,网络会根据ϵ-greedy策略选择具有最高Q值的动作来执行。

训练

起初,我使用标准差为0.01的正态分布随机初始化所有权重矩阵,然后将回放缓冲区的最大容量设置为50万条经验。

我开始训练时,在前1万步中均匀随机地选择动作,而不更新网络权重。这样可以让系统在训练开始之前先填充回放缓冲区。

需要注意的是,与[1]中将ϵ初始化为1不同,我在接下来的300万帧中将ϵ从0.1线性退火到0.0001。之所以这样设置,是因为在我们的游戏中,智能体每0.03秒(FPS=30)就可以选择一次动作,如果ϵ过高,它就会过于频繁地“拍打”翅膀,从而一直停留在游戏屏幕的顶部,最终笨拙地撞到管道上。这种情况下,Q函数的收敛速度会相对较慢,因为只有当ϵ较低时,它才会开始考虑其他情况。然而,在其他游戏中,将ϵ初始化为1更为合理。

在训练过程中,每一步网络都会从回放缓冲区中采样32个样本的小批次进行训练,并使用Adam优化算法以0.000001的学习率对上述损失函数执行梯度步。退火结束后,网络将继续无限期地训练下去,此时ϵ固定为0.001。

常见问题解答

找不到检查点

saved_networks/checkpoint的第一行改为

model_checkpoint_path: "saved_networks/bird-dqn-2920000"

如何复现?

  1. 注释掉这些行

  2. 修改deep_q_network.py中的参数如下:

OBSERVE = 10000
EXPLORE = 3000000
FINAL_EPSILON = 0.0001
INITIAL_EPSILON = 0.1

参考文献

[1] Mnih Volodymyr, Koray Kavukcuoglu, David Silver, Andrei A. Rusu, Joel Veness, Marc G. Bellemare, Alex Graves, Martin Riedmiller, Andreas K. Fidjeland, Georg Ostrovski, Stig Petersen, Charles Beattie, Amir Sadik, Ioannis Antonoglou, Helen King, Dharshan Kumaran, Daan Wierstra, Shane Legg, and Demis Hassabis. 通过深度强化学习实现人类水平控制。Nature, 529-33, 2015.

[2] Volodymyr Mnih, Koray Kavukcuoglu, David Silver, Alex Graves, Ioannis Antonoglou, Daan Wierstra, and Martin Riedmiller. 使用深度强化学习玩Atari游戏。NIPS,深度学习研讨会

[3] Kevin Chen. 针对Flappy Bird的深度强化学习 报告 | YouTube结果

免责声明

本工作高度参考了以下仓库:

  1. [sourabhv/FlapPyBird] (https://github.com/sourabhv/FlapPyBird)
  2. asrivat1/DeepLearningVideoGames

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|5天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|6天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

150.7k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|2天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|5天前
插件开发框架