[控场AI]
· 16 分钟阅读· 8,098 字

从零构建AI:503节课开源课程完整学习路径

从零构建AI:503节课开源课程完整学习路径

学AI为什么让人困惑?碎片化学习的困境

很多人学习AI的路径高度相似:挑一门课,跟着敲代码,感觉学会了一周,然后发现自己根本讲不清楚刚刚构建的东西到底是什么。一位开发者在Reddit上分享了这样的困境——他能微调模型,却说不清优化器在做什么;他能调用注意力层,却无法推导它的原理。

这里提到的优化器(Optimizer),是神经网络训练中决定参数如何更新的核心组件。最基础的随机梯度下降(SGD)简单地沿梯度反方向以固定步长更新参数,但在实践中面临学习率选择困难、鞍点逃逸等问题。目前最流行的Adam优化器结合了动量估计和自适应学习率,为每个参数维护独立的更新步长——具体而言,Adam同时追踪梯度的一阶矩(均值)和二阶矩(未中心化方差),用一阶矩提供更新方向的惯性,用二阶矩自适应地缩放每个参数的学习率,使得稀疏梯度对应的参数获得更大的更新步长。此外还有AdaGrad(适合稀疏数据但学习率会单调递减)、RMSProp(解决AdaGrad学习率过早衰减的问题)、AdamW(将权重衰减与自适应学习率解耦,在大模型训练中更为常用)等变体,各有适用场景。理解优化器的工作原理,能帮助开发者诊断训练不收敛、损失震荡等常见问题,而不是在一堆超参数面前盲目试错。

这暴露了当前AI教育的核心问题:大多数课程只教工具,不教工具底层发生了什么。过时的教程、默认你已经会Python的课程、一口气介绍几十个工具却不解释它们如何串联的播放列表——学习者被淹没在碎片化的内容中,始终无法建立完整的知识脉络。

reddit source

于是这位作者做了一个决定:不再到处提问、四处寻找,而是亲手打造一门他理想中的课程——AI Engineering from Scratch(从零开始的AI工程)。这个项目在GitHub上已累积超过4.6万颗星。

核心理念:先手写实现,再使用框架

这门从零构建AI的课程最关键的设计哲学,是在使用任何库之前,先自己实现每一个重要概念。

作者设定了一条清晰的学习主线:从线性代数出发,一路走到自主智能体(autonomous agents)。在这条路径上,学习者需要:

  • 从微积分推导并手写反向传播(backpropagation)
  • 亲手构建一个分词器(tokenizer)
  • 从头实现注意力机制(attention mechanism)
  • 编写一个完整的智能体循环(agent loop)

反向传播:神经网络训练的基石

反向传播是神经网络训练的核心算法,由Rumelhart、Hinton和Williams在1986年的论文《Learning Representations by Back-propagating Errors》中系统化提出(尽管其数学基础可追溯到更早的自动微分研究)。其本质是微积分中链式法则(chain rule)在计算图上的高效应用——通过从输出层向输入层逐层计算损失函数对每个参数的偏导数(即梯度),来指导参数更新的方向和幅度。

没有反向传播,深度网络的训练在计算上几乎不可行,因为逐一扰动每个参数来估算梯度(数值微分)的复杂度会随参数量线性增长——对于拥有数十亿参数的现代模型而言完全不现实。而反向传播只需一次前向传播加一次反向传播即可获得所有梯度,计算复杂度与前向传播同阶。

理解反向传播,也就理解了为什么梯度消失和梯度爆炸会成为深层网络的顽疾——当链式法则连乘的因子持续小于1时梯度指数衰减(消失),持续大于1时指数增长(爆炸)。这一认识直接催生了残差连接(ResNet)、层归一化(Layer Normalization)、梯度裁剪等关键技术的发明。亲手实现反向传播,意味着你需要在每个计算节点上手动定义局部梯度并沿计算图传播,这个过程会让抽象的数学变得具体而直观。

分词器:模型理解语言的第一步

分词器是大语言模型的第一道工序,负责将原始文本切分为模型可处理的离散单元(token)。早期NLP使用基于规则的词级分割(按空格或标点切分),但面对未登录词(out-of-vocabulary)和多语言场景时效果不佳——一个从未见过的新词会被标记为"未知",导致语义完全丢失。

现代主流方法转向了子词分割(subword tokenization),核心思想是在字符级和词级之间找到平衡点。以BPE(Byte Pair Encoding,字节对编码)为例,它从字符级别出发,通过统计训练语料中相邻字符对的共现频率,反复合并最高频的对,直到达到预设词表大小。这样,高频词会被保留为完整token,而罕见词会被拆分为有意义的子词片段。例如"unhappiness"可能被拆分为"un"+"happiness"或"un"+"hap"+"piness",保留了形态学信息。

GPT系列使用BPE(具体是基于字节级的BPE变体,直接操作UTF-8字节以处理任意语言),BERT使用WordPiece(与BPE类似,但合并标准基于似然最大化而非频率),Google的T5则使用SentencePiece(能直接处理原始文本,不需要预分词)。分词策略直接影响模型的词表大小(通常在3万到10万之间)、输入序列长度(同样文本,不同分词方式产生的token数可能差数倍)和对罕见词的处理能力。因此亲手实现一个分词器,能帮助理解模型"看到"的文本与人类看到的文本之间的本质差异——模型处理的不是"词",而是经过统计压缩的离散符号序列。

注意力机制:Transformer的核心引擎

注意力机制最早由Bahdanau等人在2014年提出,用于解决序列到序列模型中长距离依赖的信息瓶颈问题——传统的编码器-解码器架构将整个输入序列压缩为单一固定长度的向量,信息损失严重。注意力机制允许解码器在生成每个输出时,动态地"回看"编码器的所有隐藏状态,根据相关性分配不同权重。

2017年Vaswani等人在Google的论文《Attention Is All You Need》中提出了Transformer架构,将自注意力(self-attention)作为唯一的序列建模手段,彻底取代了RNN和CNN在NLP中的主导地位。其核心操作是:将输入序列中的每个位置通过三个线性变换映射为Query(查询)、Key(键)、Value(值)三个向量,通过Query与所有Key的缩放点积(除以维度的平方根以稳定梯度)计算注意力权重,经Softmax归一化后用该权重对Value加权求和,从而让每个位置都能"看到"序列中所有其他位置的信息。这种全局感受野是RNN需要多步传播才能实现的,而Transformer在单层内即可完成。

多头注意力(Multi-Head Attention)则是在不同的低维子空间中并行执行多次这一操作(通常8头或16头),捕捉不同类型的语义依赖关系——有的头可能关注句法结构,有的头可能关注语义共指,有的头可能关注位置邻近性。最终将多头输出拼接并线性变换回原始维度。这一设计使得Transformer具有极强的表达能力,也是GPT、BERT、LLaMA等所有现代大模型的共同基础。

自主智能体:从问答到自主决策

在AI工程语境中,自主智能体(Autonomous Agent)指的是能够感知环境、制定计划、调用工具并迭代执行任务的系统。与单轮问答的聊天机器人不同,智能体具备循环决策能力:它观察当前状态,选择行动(如调用API、执行代码、检索文档),观察行动结果,再决定下一步。

典型的智能体循环包括感知-推理-行动-反馈四个阶段,这一架构与人工智能经典教材中的理性智能体(rational agent)概念一脉相承,只是现在的"推理"由大语言模型提供。智能体的关键能力包括:任务分解(将复杂目标拆分为子任务)、工具使用(调用搜索引擎、计算器、数据库等外部能力)、记忆管理(维护短期工作记忆和长期经验记忆)、以及自我反思(评估行动效果并调整策略)。

2023年以来,以AutoGPT、BabyAGI、LangChain Agents、OpenAI Function Calling为代表的框架将这一概念推向主流应用。然而,当前智能体系统仍面临诸多挑战:幻觉导致的行动错误、长程规划能力不足、错误累积与恢复困难等。理解智能体循环的底层逻辑——本质上是一个带有状态管理和工具调用能力的有限状态机或规划器——是构建可靠AI应用的关键,也能帮助开发者理解为什么某些看似简单的任务在智能体执行时会失败。

这样设计的好处非常直接:当你最终接触到PyTorch这样的框架时,你已经清楚地知道它在替你计算什么。框架不再是黑盒,而是你早已理解的操作的加速封装。

为什么"手写实现"比"直接调库"更重要

直接调库能让你快速跑通一个Demo,却无法建立可迁移的理解。当你亲手写过一遍反向传播,你才能真正理解梯度是如何流动的;当你自己实现过注意力机制,你才能读懂论文中的公式,并在遇到新架构时快速上手。这种"从第一性原理出发"的学习方式,虽然更慢,却能构建起真正扎实、可解释的知识体系。

这一理念与Andrej Karpathy推崇的教学方法一脉相承——他的micrograd项目用不到200行Python代码实现了一个完整的自动微分引擎,正是为了证明深度学习的核心机制并不神秘,只是被框架的复杂API所掩盖了。同样的思路也体现在他的makemore(从零构建字符级语言模型)和nanoGPT(用约300行代码训练GPT-2)项目中。这些项目共同传递的信息是:当你剥去工程复杂性的外壳,核心算法往往出奇地简洁——但你必须自己动手剥,才能获得这份洞察。

课程规模与结构:503节课覆盖20个阶段

经过无数个夜晚和周末的积累,这门开源AI课程如今包含:

  • 503节课,分布在20个阶段(phases)
  • 提供Python、TypeScript、Rust、Julia四种语言的实现
  • 每一节课都以一个可运行的产物结束——你构建它,并且能一直保留下来

多语言实现是一个值得注意的亮点。同一个概念用不同语言写一遍,能帮助学习者剥离语言语法的干扰,看清算法本身的骨架。选择这四种语言也颇具深意:Python是AI领域的通用语言,拥有NumPy、PyTorch、Hugging Face等最完整的生态;TypeScript便于将模型部署到Web端和Node.js生产环境,且其类型系统有助于代码可维护性;Rust提供内存安全和零成本抽象,在底层推理引擎(如candle、burn)和高性能服务端开发中日益重要;Julia则在科学计算和数值模拟领域有天然优势,其多重派发(multiple dispatch)机制非常适合表达数学运算的多态性,且能达到接近C的运行速度。

用多种语言实现同一算法还有一个额外好处:它迫使你思考哪些是算法的本质(数据结构选择、迭代逻辑、数学运算),哪些只是语言的语法糖(列表推导、模式匹配、所有权模型)。这种抽象能力正是从"会用一个框架"跃升到"理解一类问题"的关键跳板。

而"每节课都有可运行产物"的设计,则确保了学习的即时反馈感,避免陷入"看懂了但没做出来"的虚假成就。这符合学习科学中"产出导向学习"(productive learning)的原则——只有当你能用代码复现一个概念并看到正确输出时,你才真正掌握了它。

完全开源、本地运行、零付费墙

这门课程采用MIT许可证,完全免费,在本地运行,没有任何付费内容或需要解锁的章节。MIT许可证是最宽松的开源许可之一,允许任何人自由使用、修改和分发,甚至用于商业目的,唯一要求是保留版权声明。这意味着教育机构可以将其整合到自己的课程体系中,企业可以用于内部培训,而个人开发者可以自由fork并定制自己的学习路径。

这在如今遍地是订阅制、会员制AI课程的环境中,显得尤为难得。本地运行意味着学习者无需依赖云服务(如Google Colab或Jupyter Hub)、无需担心数据隐私,甚至可以在离线环境中完成全部学习——这对网络条件受限的地区的学习者特别友好,也避免了"平台下线课程就无法访问"的风险。作者提到,目前已有来自顶尖高校、企业以及个人自学者在使用这套材料。

为每节课配上可视化图示

课程最近的重要更新,是为每一节课都加上了可视化图示。这些是专门为所教概念创建的轻量级SVG图,包括:

  • 分支式的提交图(commit graph)
  • 可读性强的注意力热力图(attention heatmap)
  • 带策略箭头的Q-learning网格世界(gridworld)
  • 逐步去噪成图像的扩散模型网格(diffusion grids)

Q-learning与强化学习的直观理解

Q-learning是一种无模型(model-free)的强化学习算法,由Christopher Watkins在1989年的博士论文中提出,并于1992年由Watkins和Dayan证明了其收敛性。其核心思想是学习一个Q函数(动作-价值函数),它估计在给定状态s下执行动作a后,遵循最优策略能获得的最大累积折扣奖励。

算法通过贝尔曼最优方程的迭代更新来逼近最优Q值:Q(s,a) ← Q(s,a) + α[r + γ·max_a' Q(s',a') - Q(s,a)],其中α是学习率(控制新信息覆盖旧估计的速度),γ是折扣因子(表达对即时奖励vs未来奖励的偏好),r是当前奖励,s'是下一状态。Q-learning的一个重要特性是它是"离策略"(off-policy)的——它学习的是最优策略的Q值,即使当前执行的是探索性策略(如ε-greedy)。

网格世界(Gridworld)是Q-learning最经典的教学环境——智能体在一个离散网格中移动(上下左右),部分格子有正奖励(目标)、负奖励(陷阱)或障碍物。可视化Q值表和策略箭头,能直观展示算法如何从随机探索逐步收敛到最优路径:初始时所有箭头杂乱无章,随着训练推进,箭头逐渐统一指向目标方向,Q值的颜色梯度清晰呈现出从目标向外衰减的价值地形。这种可视化将抽象的数学更新变成了肉眼可见的策略演化。

扩散模型:从噪声中生成图像

扩散模型(Diffusion Model)是当前图像生成领域的主流架构,DALL-E 2、Stable Diffusion、Midjourney和Imagen都基于这一技术路线。其理论根基可追溯到2015年Sohl-Dickstein等人的工作,但真正突破性进展来自2020年Ho等人的DDPM(Denoising Diffusion Probabilistic Models)论文。

其原理分为两个过程:前向扩散过程按照预设的噪声调度表(noise schedule)逐步向图像添加高斯噪声,经过T步(通常数百到数千步)后,图像的信号被完全淹没,变为近似纯随机的高斯噪声;反向去噪过程则训练一个神经网络(通常采用U-Net架构,包含下采样、瓶颈层和上采样路径,并通过跳跃连接保留多尺度信息)学习在每一步中预测当前步添加的噪声(或等价地预测去噪后的清晰图像),从而逐步从纯噪声中恢复出清晰图像。

数学上,前向过程定义了一个马尔可夫链,反向过程对应学习其逆过程的转移概率。这与随机微分方程(SDE)和分数匹配(score matching)密切相关——分数函数(对数概率密度的梯度)指导去噪方向。扩散模型相比GAN的优势在于训练更稳定(无需对抗训练中的博弈平衡)、模式覆盖更全面(生成多样性更强、不易模式坍缩),但推理速度较慢(需要多步迭代去噪,尽管DDIM等方法可加速到20-50步)。

课程中的"扩散网格"可视化,展示的正是这个逐步去噪、从混沌到清晰的完整过程——每个格子对应一个时间步的中间结果,让学习者直观看到模型是如何一步步"雕刻"出最终图像的。

可视化在AI教学中的独特价值

对于AI这种高度抽象的领域,可视化的价值不容小觑。认知科学研究表明,人类大脑处理视觉信息的带宽远超文字——约65%的人是视觉型学习者。一张清晰的注意力热力图,往往胜过大段文字描述——它能让你一眼看出模型在生成某个词时,究竟在"关注"输入序列中的哪些位置,比如翻译"the cat sat on the mat"时,生成"猫"这个token的注意力权重主要集中在"cat"位置。一个动态的Q-learning网格,能让强化学习的策略更新变得直观可感——从随机到有序的演化过程,比任何数学推导都更有说服力。

这些图不是从网上随便找来的通用插图,而是针对具体概念定制的轻量级SVG(可缩放矢量图形),因此能精准服务于教学目标。SVG格式的选择也值得一提:它体积小、缩放不失真、可以在浏览器中直接渲染,且容易通过代码程序化生成——这意味着学习者甚至可以修改参数,观察可视化如何随之变化,进一步强化交互式学习体验。

给AI学习者的建议

如果你正陷在不同课程和工具之间反复横跳、始终无法建立完整认知的困境中,这门课提供了一条可能的出路:从Phase 0开始,一步步构建到底。

这个项目的成功——4.6万GitHub星、来自高校和企业的使用反馈——某种程度上验证了一个观点:市面上不缺教"怎么用工具"的内容,真正稀缺的是系统性地讲清楚"底层为什么"的学习路径。

这也呼应了学习科学中的一个核心发现:生成效应(generation effect)——这一概念最早由Slamecka和Graf在1978年的实验中系统证实:主动生成知识(如自己推导公式、编写代码、构造解释)比被动接收知识(如看视频、读文档、听讲座)能带来更深层的记忆编码和理解。其认知机制在于,生成过程迫使学习者激活更多的语义网络连接、进行更深层次的信息加工(elaborative processing),并在工作记忆中建立更丰富的提取线索。当你从零手写一个注意力机制时,你的大脑被迫处理每一个细节——矩阵维度是否匹配、Softmax的数值稳定性如何保证、mask应该在哪一步应用——建立的神经连接远比观看一段教程视频更加牢固和可检索。

此外,手写实现还提供了一种独特的"调试式学习":当你的代码输出与预期不符时,排查bug的过程本身就是深化理解的最佳途径——你不得不回到数学公式,逐层验证每一步中间结果,这种主动纠错带来的学习效果远超被动阅读正确答案。

对于严肃的AI学习者而言,这类"从零构建"的资源值得纳入学习清单。它可能不如速成教程那样让你一周内跑出结果,但它构建的是能陪你走得更远的理解力。在AI领域日新月异的今天——新架构、新训练范式、新应用模式几乎每月都在涌现——真正的竞争力不在于你会使用多少工具,而在于当新工具、新架构出现时,你能多快理解并掌握它。这正是第一性原理学习所赋予的能力:当你理解了注意力机制的本质,你就能快速读懂Mamba(选择性状态空间模型)为何能替代它;当你理解了反向传播,你就能评估新优化算法的真正创新点在哪里。

项目地址:https://github.com/rohitg00/ai-engineering-from-scratch 课程网站:https://aiengineeringfromscratch.com

#从零学AI#AI开源课程#AI Engineering from Scratch#手写反向传播#注意力机制实现#AI系统学习路径#免费AI课程#AI第一性原理
分享:

相关推荐