深度迷宫求解器

发布: (2025年12月31日 GMT+8 15:56)
4 min read
原文: Dev.to

I’m happy to translate the article for you, but I’ll need the full text of the post (the parts you’d like translated). Could you please paste the content here? Once I have it, I’ll provide a Simplified Chinese translation while preserving the source link, formatting, markdown, and any code blocks or URLs unchanged.

介绍

几天前,我看到一条 X 帖子 解释说,扩散模型可以用于解决算法任务,例如解迷宫。出于好奇,我决定在较小的规模上复现这项工作,并开始构建一个能够解迷宫的神经网络。

问题

目标是构建一个卷积神经网络(CNN),通过监督学习来解决迷宫。
给定一张迷宫图像,CNN 必须找到从 左上角右下角 的路径。
我们将在此任务中使用 PyTorch

Source:

数据集

由于迷宫的生成和求解是确定性的,我们可以在运行时即时生成无限数据集——无需手动标注!

  • 迷宫生成: 递归划分算法
  • 迷宫求解: 深度优先搜索

我们将生成尺寸从 5×5127×127(其中 n×n 表示水平和垂直方向的格子数)的迷宫。每个迷宫会使用最近邻插值缩放至 128×128 像素。缩放可能会导致轻微的失真,但迷宫结构保持不变。

示例

一个 57×57 迷宫及其解答示例:

Sample maze and solution

预处理

  • 输入: 原始迷宫图像。
  • 标签: 已解决的迷宫,仅显示路径(忽略边界和墙壁)。

仅包含解路径的相同迷宫:

Sample maze and path

输入和标签均已调整为 128×128 像素:

Sample dataset

模型

我们将使用标准的 U‑Net 架构——不做花哨的改动——将输入的迷宫映射到其解答路径。

训练

超参数

参数
Batch size16
OptimizerAdam
Loss functionBinary Cross‑Entropy
Learning rate1e‑4
Training set size500 000 样本
Validation set size100 000 样本

由于迷宫是随机生成的,“epoch”(即对训练集的完整遍历)并没有通常的含义;每个 epoch 仅对应生成一批新的迷宫。

结果

训练 / 验证损失

下面的图显示了每 1 000 个样本计算一次的训练损失。验证损失在每个 1 000 样本的训练段后,在 200 个样本上进行评估。

损失图

示例输出

15 × 15 迷宫

输出 15x15

57 × 57 迷宫

输出 57x57

127 × 127 迷宫

输出 127x127

模型在小型和中型迷宫上表现良好,但在最大迷宫上的准确率下降。进一步的改进(例如更深的网络、注意力机制或基于扩散的方法)可以解决此限制。

目前公司主要使用的技术

(大模型、大数据、长时间训练、大硬件、大资金)

结论

在这个项目上工作非常有趣。神经网络正被用于解决更为复杂的问题,但看到它们被应用于此类算法挑战仍然令人着迷。

Back to Blog

相关文章

阅读更多 »