写在后面#

致来者:

常有人问我,为什么要为社团活动重新准备这些资料,而不是直接使用现成的教材——这看起来像是在“重新发明轮子”。说实话,我自己也没有一个非常确定的答案。这些文档在我看来,更像是一页页的 PPT,而非信息完备的教程。

理论上,我当然可以直接选用几本深度学习领域的经典著作,比如斋藤康毅老师的“鱼书”。但如果只是像学校上课那样照本宣科,对于纯粹由兴趣驱动的社团来说,恐怕不太合适。这样做很可能导致参与人数随时间“指数级衰减”。我个人对这种单向灌输的模式并不认同——它更像是在把整理与消化知识的负担,从备课者转移给听讲者,效率甚至不如鼓励大家自学。

但避免糟糕的单向灌输算不上什么真正的动机,这更像是一种妥协,就像做 presentation 必须准备 slides 一样。直到 Bob 老师告诉我“搞完这一年社团,总得留下点什么”,创作的动机才真正落地。回忆大约两年前我研究 YOLOv5 时,论文和教程中出现的各种黑话总是令人困惑。他们既没有解释这些是什么,也没有解释为什么——这些黑话被以一种常人看不懂的模式放在一起,在逻辑和现实中却是行得通的。我浏览了几乎所有我找得到的文章,仍然是一头雾水,因为字里行间似乎透露着理所应当,或者作者默认了读者能够理解。为什么复杂的 PAN/FPN 有用?为什么这卷积堆起来卷来卷去就能提取特征信息?为什么 bottleneck 要先变小再变大?为啥要残差?训练为什么退火?训练多少个 epoch 比较好?什么时候结束训练?诚然,对于论文的作者和其他的学者来说,这些所谓的黑话有另一个名字:术语(terminology)——一种高效沟通的协议。但对初学者而言,这些术语背后牵扯的问题与答案太多、太复杂,似乎非得啃下厚厚的数学教材才能理解。

但是果真如此吗?一个合理的符合现实的逻辑或现象必定可以使用一个简洁易懂的自然语言描述出来,哪怕这种描述是不严谨的。在知识体系尚未建立的阶段,准确性必须让位于理解本身,因为只有能理解那些论文在讨论什么,那些文章在分析什么,我们才有资格讨论这理解本身是否准确。而过早地陷入不必要的准确的细节,正是我最开始尝试理解时犯下的错误。

问题来了,如何才能找到相对准确客观的自然语言描述呢?答案之一来自一种常见的文学手段:类比。那问题又来了,如何找到类比的对象?答案在于寻找底层逻辑的共通性——只要事物发展的核心驱动力(矛盾)类似,其表现出的现象就有共通之处。因此,选取日常生活中的常识作为类比,是合理的。对定义的理解来源于相似性,而非定义本身。

另一种方法是追寻发展的脉络。罗马不是一天建成的,因此,研究庞杂的系统,可以从它与其前代版本的演进角度入手,并尝试回答:改进/增加某个模块是为了解决什么;设计哲学的改变是为了规避什么。这或许可以一路追寻到这个复杂系统的第一个原始版本。那时候,这东西还没有变得复杂起来。

还有一种是寻找不严格的数学上的类比:将高级的复杂的操作不严谨地概括为一个已知操作的推广(比如这里 CNN 本质是在求 kernel 和特征图的滑动窗口内的部分的相似程度,通过我们都学过的点积)。

因此,为了规避过早陷入细节的问题,为了其他人不重蹈覆辙,将知识点重新梳理,用上述方式呈现出来,对初学者来说就显得尤为必要。这些资料的主要目的,并非成为面面俱到的百科全书,而是一份循序渐进的、带有解释的“知识清单”。

但是这足够吗?未必。就像那哲学三问(我是谁,从哪来,到哪去),构建知识体系也可以有精确对应的三问:这是什么,为什么会有/成立,so what。这份清单大体能回答前两问,有时也不行,但真正的理解大致产生于回答第三个问题时。因为理解本身更像是一种直觉,难以完全被语言捕捉。语言本身只能像盲人摸象一样勾勒出轮廓。

最后,希望几年后,这些文字还能帮到那些初来乍到的新朋友。也希望你能在这个社团里,找到探索世界的好奇与同行者。


以上是关于这些资料的一点私心。下面是一些你可能想问的技术问题:

可能的 FAQ:#

关于组织:为什么这些主题看起来有点跳跃?#

我本人是个行动派,习惯边做边想,不太热衷于“三思而后行”。在编写这些文档时,我并没有一个非常完整的大纲,因此内容组织的先后顺序可能显得有些跳跃,但都是大体围绕“是什么”到“为什么”再到“怎么用”这样的顺序。这个问题我们会在后续的修订中尽力改善。

关于形式:为什么不使用传统的PPT?#

那么,为什么我没有选择做成PPT呢?PPT固然能突出重点,但它难以处理复杂的引用、丰富的图表插入,以及便捷的公式书写。更重要的是,现有的AI工具在辅助PPT创作方面还不够成熟。

为什么是Sphinx?#

TL;DR

总的来说,我们选择了一种兼顾结构化、可扩展与网页友好的技术语言(Sphinx + Markdown),它在技术文档中已经被广泛验证

最初我使用LaTeX编写,生成的PDF效果很好,但想要编译成网页就不太方便了。我曾尝试用Lwarp配合一个Vue.js写的文档查看器来搭建在线站点,但效果并不理想。受限于Lwarp的一些古怪问题,部署过程屡屡受阻,而且它处理文件间引用的能力也较弱。在寻找替代方案时,我遇到了Sphinx——这个支撑了Linux和Python文档的强大工具。

为什么大量使用AI辅助书写?#

坦白说,一半是因为懒,一半是因为自己水平有限。但主要原因有两点:第一,我们毕竟是AI社团;第二,我们选择的方案(编写Markdown/LaTeX再编译)本身很适合AI辅助。在我看来,只要信息准确、语言简洁,文本是否由AI生成,从功利角度讲并不重要。人们反感的“AI文”,通常是通篇套话的废话文学,而非这样有实质内容、表述清晰的辅助创作。当然,这能否完全代表我个人对知识的理解?我觉得还不够。事实上,AI在输出内容时,也常常给我带来新的启发。而文章质量的把控,始终是我这个“审稿人”的责任。从某种角度看,这也是一种“氛围编码”(Vibe coding)吧。

我发现了疏漏,该如何反馈?#

如果你发现了文档中的错误或不足,我们非常欢迎你的指正。如果你愿意为后来的同学做点贡献,可以fork本资料的仓库,修改后提交Pull Request。我和其他组员审核确认后,便会合并你的修改。(请在PR中尽量详细地说明改动内容,以节省大家的时间。在此先表示感谢!)


2026年6月 于上海
Anson2251

贡献者与修订历史

查看详细修订记录
  • f0a270d 2026-06-11 - Heyan Zhu: CI: add git-lfs for PDF tracking; postscript: expand with teaching philosophy and FAQ
  • b20ef3e 2026-04-28 - Heyan Zhu: docs: update pytorch practice section with detailed explanations and code examples
  • 49fd5d9 2025-12-07 - Heyan Zhu: update(doc): complete migrate lesson2 & 4
  • 1f38654 2025-12-07 - Heyan Zhu: feat(doc): partially migrated to sphinx