深度迷宫求解器
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×5 到 127×127(其中 n×n 表示水平和垂直方向的格子数)的迷宫。每个迷宫会使用最近邻插值缩放至 128×128 像素。缩放可能会导致轻微的失真,但迷宫结构保持不变。
示例
一个 57×57 迷宫及其解答示例:
预处理
- 输入: 原始迷宫图像。
- 标签: 已解决的迷宫,仅显示路径(忽略边界和墙壁)。
仅包含解路径的相同迷宫:
输入和标签均已调整为 128×128 像素:
模型
我们将使用标准的 U‑Net 架构——不做花哨的改动——将输入的迷宫映射到其解答路径。
训练
超参数
| 参数 | 值 |
|---|---|
| Batch size | 16 |
| Optimizer | Adam |
| Loss function | Binary Cross‑Entropy |
| Learning rate | 1e‑4 |
| Training set size | 500 000 样本 |
| Validation set size | 100 000 样本 |
由于迷宫是随机生成的,“epoch”(即对训练集的完整遍历)并没有通常的含义;每个 epoch 仅对应生成一批新的迷宫。
结果
训练 / 验证损失
下面的图显示了每 1 000 个样本计算一次的训练损失。验证损失在每个 1 000 样本的训练段后,在 200 个样本上进行评估。
示例输出
15 × 15 迷宫
57 × 57 迷宫
127 × 127 迷宫
模型在小型和中型迷宫上表现良好,但在最大迷宫上的准确率下降。进一步的改进(例如更深的网络、注意力机制或基于扩散的方法)可以解决此限制。
目前公司主要使用的技术
(大模型、大数据、长时间训练、大硬件、大资金)
结论
在这个项目上工作非常有趣。神经网络正被用于解决更为复杂的问题,但看到它们被应用于此类算法挑战仍然令人着迷。






