这次我们来看一个非常特别的AI技术专栏——Prof. Tom Yeh的“亲手打造的AI”。这个专栏的核心不是教你调用API也不是展示炫酷的Demo而是回归技术本质通过“手写”的方式从零开始拆解AI背后的数学原理、核心算法与系统架构。对于想深入理解AI“黑箱”内部运作而非仅仅停留在应用层的开发者来说这是一个宝藏。专栏的重点在于“亲手打造”。它引导你从最基础的数学公式推导开始一步步用代码实现算法最终构建出可运行的AI模型或系统组件。这解决了当前AI学习中的一个普遍痛点很多人会用框架却不清楚模型为何有效、梯度如何传播、注意力机制究竟在计算什么。通过手写实现你能获得对Transformer、反向传播、优化器等核心概念的深刻洞察。本文将带你全面了解这个专栏的内容体系、学习方法以及它能为你带来的实际价值。我们会梳理其覆盖的三大核心领域——数学、算法与架构并探讨如何利用它来构建扎实的AI底层能力。无论你是希望夯实基础的学生还是寻求突破瓶颈的工程师这篇文章都将提供清晰的路径。1. 核心能力速览能力项说明项目类型技术专栏/系列教程聚焦AI底层原理与实践。核心方法“手写实现” (From Scratch)拒绝调包从数学公式推导到代码逐行实现。三大支柱数学线性代数、概率统计、微积分在AI中的具体应用与推导。算法机器学习基础算法如梯度下降、深度学习核心算法如反向传播、注意力机制的实现。架构模型架构如Transformer、系统架构如分布式训练、推理服务的设计与搭建。目标受众希望深入理解AI原理的开发者、计算机科学学生、算法工程师。学习门槛需要具备基础的编程能力如Python和高中数学知识对机器学习有初步了解更佳。输出形式专栏文章、代码仓库、可能的示意图或推导笔记。核心价值建立对AI系统“第一性原理”的认知提升调试、优化和创新模型的能力。2. 适用场景与使用边界这个专栏并非一个即插即用的工具库而是一套深度学习方法论和训练体系。明确其适用场景和边界能帮助你更好地利用它。适合谁AI入门后希望“知其所以然”的学习者如果你已经跑通了一些TensorFlow/PyTorch示例但对损失函数为何那样设计、优化器如何工作感到困惑这个专栏正是为你准备的。准备面试的求职者国内外大厂算法岗面试中手推公式、手写算法是高频考点。系统性地跟随专栏练习能极大增强面试信心。遇到瓶颈的算法工程师当模型效果不佳时深厚的底层知识能帮助你更精准地定位问题是修改网络结构、调整优化器还是处理数据本身。技术团队负责人或架构师理解底层架构有助于设计更高效的训练流水线、推理服务或进行技术选型。能解决什么问题概念祛魅将Transformer、BERT、Diffusion等复杂模型拆解为可理解的数学运算和算法步骤。调试能力当自动微分Autograd出现NaN或梯度爆炸时你能通过手算验证快速定位问题层。定制化开发需要为特定任务修改模型结构或设计新算法时扎实的底层知识是创新的基础。性能优化理解计算图、内存布局和并行策略才能进行有效的模型压缩、加速或分布式训练。不适合什么场景追求快速上线应用如果你需要立刻搭建一个聊天机器人或文生图服务直接使用成熟框架如LangChain, Stable Diffusion WebUI是更高效的选择。零基础纯小白完全没有任何编程和数学背景可能会感到吃力。建议先补充Python和高等数学基础。仅需要高级API调用教程专栏不侧重于教授如何使用Hugging Face Transformers或PyTorch Lightning的高级封装。使用边界与合规性提醒 专栏内容聚焦于公开的、基础的数学原理和算法思想这些属于人类共同知识财富。在学习过程中代码实践应使用开源数据集如MNIST, CIFAR-10进行练习确保数据来源合规。知识应用将所学用于解决实际问题时需严格遵守数据隐私、版权和伦理规范特别是在处理人脸、语音、医疗等敏感数据时。学术诚信手写推导和实现是学习过程在学术研究中引用需注明思路来源避免抄袭。3. 环境准备与前置条件“亲手打造的AI”专栏的学习环境相对轻量核心是一台能运行Python的电脑和你的思考。以下是通用的环境准备清单。1. 硬件与操作系统计算机任何主流配置的笔记本电脑或台式机均可。深度学习实验部分如果涉及稍大的模型有GPUNVIDIA会显著加速但CPU也可用于学习核心算法的小规模验证。操作系统Windows 10/11, macOS, 或 Linux (如Ubuntu)。推荐Linux或macOS在配置深度学习环境时可能更顺畅。2. 软件与工具链Python版本3.8或3.9。这是AI领域的主流语言。确保已安装并配置好环境变量。代码编辑器或IDEVSCode、PyCharm、Jupyter Notebook 或任何你顺手的工具。Jupyter适合交互式学习和分步验证。版本控制Git。用于管理你自己的代码仓库跟踪学习进度。数学公式工具可选LaTeX如Overleaf在线编辑器或支持Markdown数学公式的笔记软件如Typora, Obsidian。用于整理自己的推导笔记。3. 核心Python库基础学习阶段可能只需要NumPy和Matplotlib。随着深入会逐渐引入深度学习框架。NumPy用于实现所有基础的矩阵运算、数学函数。pip install numpyMatplotlib用于可视化数据、损失曲线、模型决策边界等。pip install matplotlib深度学习框架后期作为对照和验证工具。可以选择PyTorch或TensorFlow。建议从PyTorch开始因其动态图更贴近“手写”思维。# 安装PyTorch (以CPU版本为例具体命令请参考官网) pip install torch torchvision torchaudio4. 思维准备这是最重要的“环境”。耐心手写推导和调试可能很慢但理解是深刻的。好奇心多问“为什么”不满足于代码能跑通。动手习惯一定要打开编辑器跟着写不要只看。4. 学习路径与内容拆解Prof. Tom Yeh的专栏内容通常以模块化形式组织。我们可以将其学习路径规划为三个循序渐进的阶段每个阶段对应“数学”、“算法”、“架构”中的一个焦点。4.1 第一阶段数学基石与机器学习算法这个阶段目标是打通从数学公式到经典机器学习算法的闭环。核心数学工具线性代数向量、矩阵、张量的运算特征值分解奇异值分解SVD。重点理解这些运算在数据表示和降维如PCA中的应用。微积分偏导数、链式法则、梯度。这是理解优化算法如梯度下降和神经网络反向传播的基石。概率与统计概率分布、贝叶斯定理、最大似然估计。用于理解损失函数如交叉熵和生成模型。手写算法实践线性回归从最小二乘法公式推导开始手写实现梯度下降求解权重。逻辑回归推导Sigmoid函数和交叉熵损失实现二分类器。k-最近邻 (k-NN) k-均值聚类实现距离计算和迭代更新过程理解无监督学习。决策树手写信息增益或基尼系数计算递归构建树结构。验证方法 使用sklearn中的玩具数据集如load_iris生成数据用自己手写的模型进行训练和预测并与sklearn官方实现的结果对比确保正确性。4.2 第二阶段深度学习核心组件进入深度学习领域从神经元开始搭建多层网络。核心组件实现全连接层 (Fully Connected Layer)实现前向传播矩阵乘加偏置和反向传播梯度计算。激活函数手写Sigmoid, Tanh, ReLU及其导数函数。损失函数手写均方误差MSE、交叉熵损失Cross-Entropy函数。优化器实现随机梯度下降SGD、带动量的SGD、Adam优化器的更新规则。反向传播算法这是本阶段核心。通过一个简单的多层网络如3层全连接手动推导每一层的梯度并用代码实现。这是理解自动微分Autograd的关键。迷你项目手写数字识别目标不借助任何深度学习框架仅使用NumPy构建一个能识别MNIST手写数字的神经网络。步骤用NumPy加载MNIST数据像素值归一化标签one-hot编码。实现网络结构如输入层784隐藏层128输出层10。实现前向传播、损失计算、反向传播、参数更新。训练多个Epoch绘制损失和准确率曲线。收获你将彻底明白一个神经网络是如何从数据中“学习”的。4.3 第三阶段现代架构与系统聚焦当前主流AI模型架构及其工程化实现。1. 卷积神经网络 (CNN)手写实现实现卷积操作2D卷积、池化操作最大池化、平均池化的前向和反向传播。搭建经典网络用自己实现的组件搭建LeNet-5并在CIFAR-10数据集上进行测试。2. 循环神经网络 (RNN) 与长短期记忆网络 (LSTM)手写实现推导RNN和LSTM单元的内部状态更新公式并用代码实现。理解其处理序列数据的能力和梯度消失/爆炸问题。3. Transformer 架构重中之重这是当今大语言模型LLM和多模态模型的基石。拆解实现自注意力机制 (Self-Attention)手写实现Q, K, V矩阵计算、缩放点积注意力、多头注意力。位置编码 (Positional Encoding)实现正弦余弦位置编码。前馈网络 (Feed-Forward Network)实现位置逐点前馈层。层归一化 (LayerNorm)与残差连接 (Residual Connection)。组装将上述组件组装成一个Transformer编码器Encoder层进而堆叠成完整的编码器。小规模验证在一个简单的序列任务如文本分类或机器翻译的小数据集上训练你的“迷你Transformer”。4. 系统架构思维模型部署了解如何将手写/训练的模型转换为ONNX格式或使用轻量级推理框架如ONNX Runtime。服务化学习如何使用Flask或FastAPI将模型封装成RESTful API服务。批量处理与性能思考如何设计输入管道以支持批量推理并初步了解性能 profiling 工具。5. 实践方法如何“亲手打造”“亲手打造”不是空话需要一套可执行的方法论。以下是具体的学习循环步骤。步骤一阅读与理解首先阅读Prof. Tom Yeh专栏中关于某个主题的文章。不要急于看代码先理解其提出的问题、背后的数学原理和算法设计思路。用笔在纸上画出数据流图或计算图。步骤二自行推导与设计合上文章尝试自行推导关键公式。例如对于反向传播尝试为一个两层网络推导出损失函数对每一层权重和偏置的梯度。设计你的函数接口和类结构。步骤三手写代码实现打开编辑器根据你的设计开始编码。严格禁止直接复制粘贴专栏的代码。从零开始逐行编写。使用NumPy等基础库避免直接调用高级框架的封装函数如torch.nn.Linear。# 示例手写一个Sigmoid激活函数及其导数 import numpy as np def sigmoid(x): 手写Sigmoid函数 return 1 / (1 np.exp(-x)) def sigmoid_derivative(x): 手写Sigmoid函数的导数用于反向传播 s sigmoid(x) return s * (1 - s) # 测试 x np.array([1.0, 2.0, -1.0]) print(Sigmoid(x):, sigmoid(x)) print(Sigmoid(x):, sigmoid_derivative(x))步骤四单元测试与验证为每个函数或类编写小的测试用例。用已知的输入输出验证其正确性。例如用一个小矩阵测试你的卷积函数并与scipy.signal.convolve2d的结果进行对比。步骤五集成与调试将各个组件集成到一个完整的训练循环中。运行程序几乎一定会遇到bug维度不匹配、梯度为0、数值溢出等。利用打印中间变量、梯度检查Gradient Checking等方法进行调试。这个过程是学习的精华。步骤六对比与反思在你的模型能正确运行后使用相同的超参数和数据集用PyTorch或TensorFlow实现一个功能相同的模型。对比两者的运行结果最终精度和性能。思考你的实现与工业级框架的差距在哪里效率、数值稳定性、功能完整性。6. 资源占用与性能观察虽然“手写AI”主要消耗的是脑力而非大量GPU算力但在实现较大模型如Transformer时仍需关注计算资源。1. 计算资源消耗CPU/内存初期的数学算法和简单神经网络主要在CPU上运行内存占用取决于数据规模。MNIST级别的数据集普通电脑毫无压力。GPU显存当实现CNN或Transformer并进行真实数据训练时显存占用会成为瓶颈。需要关注模型参数量估算模型权重、优化器状态占用的显存。激活值前向传播过程中产生的中间变量尤其在批量大小Batch Size较大时是显存消耗的主力。梯度反向传播需要保存梯度通常与模型参数等量。观察方法在PyTorch中可以使用torch.cuda.memory_allocated()和torch.cuda.memory_reserved()来监控显存。对于自己的NumPy实现需估算主要大型数组如权重矩阵、激活值矩阵的内存大小。2. 性能优化思维在手写实现中性能优化是很好的练习向量化避免Python原生循环尽量使用NumPy的向量化操作。算法复杂度分析你实现的操作的时间复杂度。例如一个朴素的卷积实现是O(n^4)而通过Img2Col或FFT优化可以降低复杂度。批量处理确保你的前向和反向传播函数支持批量输入这能更好地利用硬件并行性。3. 实验管理建议代码版本控制使用Git为每个实验如“手动实现MLP”、“手动实现CNN”创建分支。记录实验配置用YAML或JSON文件记录每次实验的超参数学习率、批量大小、层数等。可视化坚持绘制训练损失/准确率曲线这是观察模型是否正常学习的直接窗口。7. 常见问题与排查方法在手写实现的过程中你会遇到各种典型问题。下表列出了常见问题及其排查思路。问题现象可能原因排查方式解决方案梯度消失/爆炸权重初始化不当如全为0或过大、激活函数选择不当如Sigmoid在饱和区、网络过深。1. 打印每层权重的均值和方差。2. 打印每层激活值的分布。3. 绘制梯度范数随训练迭代的变化。1. 使用Xavier或He初始化。2. 使用ReLU及其变体代替Sigmoid。3. 添加梯度裁剪Gradient Clipping。4. 添加层归一化LayerNorm。损失函数不下降学习率设置过大或过小、数据未归一化、标签错误、模型实现有bug如前向传播错误。1. 尝试不同的学习率如1e-1, 1e-3, 1e-5。2. 检查输入数据是否已标准化均值0方差1。3. 在一个极小的、人脑可判断的合成数据集上测试模型。4.进行梯度检查Gradient Check比较手写反向传播的梯度与数值差分法计算的梯度。1. 使用学习率预热或衰减策略。2. 标准化输入数据。3. 修复模型bug。梯度检查是定位反向传播bug的利器。模型过拟合模型复杂度过高、训练数据量不足、缺乏正则化。观察训练损失持续下降但验证损失先降后升。1. 添加L1/L2权重正则化。2. 添加Dropout层需实现其前向/反向传播。3. 增加训练数据或使用数据增强。数值不稳定NaN/Inf计算中出现除零、对数运算输入为负或零、指数运算溢出。在可能出现问题的运算前后添加断言assert或打印值。1. 添加微小epsilon避免除零x / (y eps)。2. 对Softmax或LogSoftmax输入进行数值稳定化减去最大值。3. 使用双精度浮点数np.float64进行调试。自注意力实现速度极慢使用了未优化的嵌套循环实现时间复杂度为O(n^2 * d)。分析代码中的循环结构。1. 利用NumPy的广播机制和矩阵乘法 (np.matmul) 完全向量化实现。2. 理解并尝试实现Flash Attention等优化思想高级主题。手写模型与框架结果不一致实现细节有差异如参数初始化方式、优化器超参、数据处理流程不同。1. 确保数据加载、预处理流程完全一致。2. 固定随机种子np.random.seed,torch.manual_seed。3. 在第一次迭代前比较手写模型和框架模型对同一批数据的输出。1. 对齐所有可控制的变量。2. 从最简单的模型如线性回归开始对比逐步增加复杂度。8. 最佳实践与工程化建议将“手写打造”的经验沉淀为工程能力需要遵循一些最佳实践。1. 代码组织与模块化不要将所有代码写在一个文件里。按照功能进行模块化设计my_ai_from_scratch/ ├── layers/ # 存放各种层实现 │ ├── linear.py │ ├── conv.py │ └── attention.py ├── losses/ # 存放损失函数 │ ├── mse.py │ └── cross_entropy.py ├── optimizers/ # 存放优化器 │ ├── sgd.py │ └── adam.py ├── models/ # 存放模型定义 │ └── transformer.py ├── utils/ # 存放工具函数 │ ├── data_loader.py │ └── visualization.py └── train.py # 主训练脚本这样便于复用、测试和维护。2. 测试驱动开发为每个核心函数编写单元测试。使用Python的unittest或pytest框架。# test_layers.py import numpy as np import sys sys.path.append(..) from layers.linear import LinearLayer def test_linear_layer_forward(): layer LinearLayer(input_dim3, output_dim2) layer.weights np.ones((3, 2)) # 手动设置权重以便验证 layer.bias np.zeros(2) x np.ones((1, 3)) output layer.forward(x) expected np.array([[3., 3.]]) # 1*11*11*1 3 assert np.allclose(output, expected), fForward pass failed: {output} vs {expected}3. 日志与可视化训练过程中记录关键指标损失、准确率、学习率、梯度范数到日志文件或TensorBoard。可视化能帮你直观理解模型行为。4. 从“玩具”到“现实”初期在MNIST、CIFAR-10等标准学术数据集上验证算法的正确性。中期尝试在稍大的数据集如ImageNet子集或自定义任务上运行观察可扩展性。后期思考如何将你的“手写”组件与主流框架如PyTorch结合。例如用PyTorch的Autograd计算梯度但使用你自己实现的层。5. 知识管理与分享维护学习笔记用Markdown或Notion记录每个主题的推导过程、实现难点和心得。创建个人知识库将你的代码、笔记整理成GitHub仓库。这既是学习记录也是未来面试时有力的作品集。尝试复现论文在基础扎实后挑战自己复现一篇经典或前沿论文的核心部分这是能力的终极试金石。9. 总结与下一步Prof. Tom Yeh的“亲手打造的AI”专栏提供了一条回归技术本质的深度学习路径。它的价值不在于提供又一个可调用的工具包而在于赋予你“造轮子”的能力。通过亲手推导每一个公式编写每一行核心算法代码你对AI模型的理解将从模糊的概念层面深入到精确的数学和工程层面。最值得投入的方向反向传播与自动微分这是深度学习的引擎彻底理解它几乎所有模型都变得透明。Transformer的自注意力机制这是当前大模型时代的核心手写实现一次胜过读十篇解读文章。从零构建一个完整的项目例如用NumPy实现一个能跑MNIST的迷你框架并附带简单的自动微分功能。最容易踩的坑急于求成跳过数学推导直接看代码结果似懂非懂。调试恐惧遇到bug就放弃。调试是学习过程中最有效的部分耐心使用梯度检查、小数据测试等方法。忽视性能满足于功能正确不思考向量化和算法优化导致实现无法扩展到真实数据。后续扩展 完成这个专栏的核心学习后你可以向多个方向深入系统方向学习模型压缩、量化、蒸馏以及高性能推理引擎如TVM, TensorRT的原理。理论方向深入研究优化理论、泛化理论、贝叶斯深度学习等。应用方向将你的底层知识应用于特定领域如计算机视觉、自然语言处理或科学计算此时你会发现自己阅读论文和复现代码的能力大大增强。这条路没有捷径但每一步都算数。当你能够从容地打开一个开源模型代码库不再被复杂的类继承和装饰器迷惑而是能清晰地看到数据流动和计算图时你会感谢当初选择“亲手打造”的自己。建议将这篇文章和你的学习计划收藏作为你深入AI宇宙的导航图。