ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

从感知机到自建框架:在 generative-ai-for-beginners 中动手实现多层感知机与反向传播

2026/9/10 20:45:50 拓冰建站 浏览量
从感知机到自建框架:在 generative-ai-for-beginners 中动手实现多层感知机与反向传播 从感知机到自建框架在 generative-ai-for-beginners 中动手实现多层感知机与反向传播【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners导读本文基于 generative-ai-for-beginners 课程 RAG 与向量数据库章节的知识库文档《Introduction to Neural Networks: Multi-Layered Perceptron》仓库路径 translations/ko/15-rag-and-vector-databases/data/own_framework.md英文原版见 15-rag-and-vector-databases/data/own_framework.md展开。该文档是课程第 15 课RAG 与向量数据库中用来落地groundingLLM 的三份神经网络知识文档之一。读完本文你将掌握机器学习问题如何被形式化为损失函数最小化、梯度下降与随机梯度下降SGD的数学原理、多层感知机MLP的前向传播与反向传播推导以及如何在 Python 中自建一个模块化神经网络框架并用它完成 MNIST 手写数字分类。背景从单层感知机到更灵活的框架在进入本主题之前课程先介绍了最简单的神经网络模型——单层感知机one-layered perceptron它是一个线性二分类模型其历史可以追溯到 Frank Rosenblatt 1957 年在康奈尔航空实验室实现的硬件感知机 Mark-1详见 15-rag-and-vector-databases/data/perceptron.md。单层感知机的输出由公式 y(x) f(wᵀx) 计算其中 f 是阶跃激活函数其训练则基于感知机准则 E(w) −Σwᵀxᵢtᵢ 的梯度下降。单层感知机的核心局限是只能处理线性可分的二分类问题。因此本节将其扩展为一个更灵活的框架以实现三个目标在二分类之外支持多分类multi-class classification在分类之外解决**回归regression**问题能够分离线性不可分的类别。为此我们将用 Python 开发一个自有的模块化神经网络框架用于搭建不同的神经网络架构。这正是后续理解现代深度学习框架TensorFlow、PyTorch底层原理的关键一步——正如 15-rag-and-vector-databases/data/frameworks.md 所指出的无论高层 API 如何封装其本质都是张量运算 自动求梯度这两件事而自建框架正是把这两件事从头实现一遍。机器学习的形式化数据、模型、损失函数从数学上机器学习问题可以这样形式化给定训练数据集X与标签Y我们需要构建一个模型f使其能做出最准确的预测预测质量用损失函数Loss functionℒ 衡量。常用的损失函数有两类问题类型损失函数数学形式回归预测数值绝对误差Σᵢ |f(x⁽ⁱ⁾) − y⁽ⁱ⁾|回归预测数值平方误差Σᵢ (f(x⁽ⁱ⁾) − y⁽ⁱ⁾)²分类0-1 损失等价于模型准确率—分类逻辑损失logistic loss—对于单层感知机函数f被定义为线性函数f(x) wx b其中w是权重矩阵x是输入特征向量b是偏置向量。对于不同的神经网络架构该函数可以取更复杂的形式。关于 softmax 的关键补充对于分类问题我们通常希望网络输出的是各类别的概率。为了把任意实数转化为概率即对输出做归一化常用softmax函数 σ此时函数f变为f(x) σ(wx b)。softmax 把 logits 映射成一个和为 1 的合法概率分布是多分类神经网络的标配输出层。在上述定义中w和b被称为模型的参数θ ⟨w,b⟩。给定数据集 ⟨X,Y⟩我们可以把整个数据集上的总体误差写成参数 θ 的函数。✅神经网络训练的目标就是通过调整参数 θ 来最小化该误差。梯度下降优化最小化损失的核心算法函数优化有一个广为人知的方法——梯度下降gradient descent。核心思想是计算损失函数对参数的导数多维情形下称为梯度 gradient然后朝误差减小的方向调整参数。形式化表达如下用随机初值初始化参数 w⁽⁰⁾、b⁽⁰⁾反复执行以下更新步骤多次w⁽ⁱ⁺¹⁾ w⁽ⁱ⁾ − η·∂ℒ/∂wb⁽ⁱ⁺¹⁾ b⁽ⁱ⁾ − η·∂ℒ/∂b其中ηeta称为学习率learning rate它控制每次参数更新的步长。学习率过大会导致震荡甚至发散过小则收敛缓慢。在感知机训练的 Python 实现中可以看到学习率 η 与权重更新的实际用法15-rag-and-vector-databases/data/perceptron.mddef train(positive_examples, negative_examples, num_iterations 100, eta 1): weights [0,0,0] # 初始化权重 for i in range(num_iterations): pos random.choice(positive_examples) neg random.choice(negative_examples) z np.dot(pos, weights) # 计算感知机输出 if z 0: # 正例被误判为负类 weights weights eta*weights.shape z np.dot(neg, weights) if z 0: # 负例被误判为正类 weights weights - eta*weights.shape return weights从全数据集到随机梯度下降SGD理论上训练中的每个优化步骤都应基于整个数据集计算因为损失是所有训练样本之和。但在实际中我们每次只取数据集的一小部分——称为小批量minibatch——基于这批数据计算梯度。由于子集是每次随机选取的这种方法被称为随机梯度下降Stochastic Gradient DescentSGD。SGD 以牺牲梯度精度为代价换来了巨大的计算效率提升是现代神经网络训练的事实标准。多层感知机与反向传播让网络学会非线性如前所述单层网络只能分类线性可分的类别。要构建更强大的模型可以把网络的多个层组合起来。数学上这意味着函数f具有更复杂的形式并通过多个步骤计算z₁ w₁x b₁z₂ w₂α(z₁) b₂f σ(z₂)其中 α 是非线性激活函数例如 sigmoid、ReLUσ 是 softmax 函数参数为 θ ⟨w₁,b₁,w₂,b₂⟩。正是中间的非线性激活函数 α让多层网络摆脱了线性限制能够拟合任意复杂的决策边界——这也是深度之所以有效的根本原因。链式法则梯度计算的钥匙梯度下降算法本身保持不变但梯度的计算变得更加复杂。利用链式求导法则chain rule我们可以这样计算导数∂ℒ/∂w₂ (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂w₂)∂ℒ/∂w₁ (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂α)(∂α/∂z₁)(∂z₁/∂w₁)✅ 链式求导法则用于计算损失函数对参数的导数。反向传播Backpropagation仔细观察上述表达式可以发现所有式子的最左侧部分是相同的即 ∂ℒ/∂σ 这一段在每一层都复用。因此我们可以从损失函数出发沿着计算图反向逐层高效地计算导数。这种训练多层感知机的方法因此被称为反向传播backpropagation简称 backprop。反向传播的价值在于复用每一层的梯度都建立在后面各层已计算好的中间结果之上从而把逐层单独求导的指数级开销降低为线性级。在本课程的配套 notebook 示例中见下文仓库中的实战落点backprop 会有远比此处更详细的展开——自建框架的每个模块都要在自己的backward方法中手工编写所有导数函数这一点在 15-rag-and-vector-databases/data/frameworks.md 中有明确说明。仓库中的实战落点把本文档作为 RAG 知识库数据这份《多层感知机》文档并非孤立存在——在 15-rag-and-vector-databases/README.md 描述的 RAG 教学场景中它正是AI for Beginners 神经网络课程这一知识库数据的组成部分。课程用三份数据文档来增强 LLM 聊天机器人data/frameworks.md、data/own_framework.md即本文档、data/perceptron.md。学习者在掌握自建框架原理后可以亲历文档 → 切块 → 向量化 → 向量检索 → 生成的完整 RAG 链路。在 15-rag-and-vector-databases/notebook-rag-vector-databases.ipynb 中可以观察到完整的落地方案加载文档notebook 按路径读取三份 markdown 知识文档data/frameworks.md、data/own_framework.md、data/perceptron.md存入 DataFrame每行包含path与text两列。文本切块chunking调用split_text(text, max_length, min_length)函数把长文档切成多个 300400 字符的块。切块的原因在于 LLM 有 token 输入上限且切块可以降低传入 LLM 的 token 成本。仓库中切块实现的要点是把单词累积进current_chunk当长度落在(min_length, max_length)区间时即形成一个 chunk 并重置末尾不足最小长度的残余内容也强制追加保证信息不丢失def split_text(text, max_length, min_length): words text.split() chunks [] current_chunk [] for word in words: current_chunk.append(word) if len( .join(current_chunk)) max_length and len( .join(current_chunk)) min_length: chunks.append( .join(current_chunk)) current_chunk [] if current_chunk: # 末尾残块也加入 chunks.append( .join(current_chunk)) return chunks向量化与存储随后把 chunk 转换为 embeddingnotebook 中通过 OpenAI/Azure OpenAI 兼容客户端调用 embeddings 部署存放到向量数据库示例使用 Azure Cosmos DB可通过 Azure CLI 创建或本地 DataFrame 中。用户提问what is a perceptron?这类问题时检索器先将其转为查询向量再通过最近邻搜索如 sklearn 的NearestNeighbors见 15-rag-and-vector-databases/README.md找到最相似的文档块与用户问题一起拼进 prompt交给 LLM 生成 grounded 的答案。这意味着你在本文中掌握的 MLP 数学推导不仅是神经网络理论更是 RAG 课程里真实被检索、被引用、被用来增强生成的知识内容。挑战与作业亲手实现你自己的框架 挑战实现自建框架在配套的 OwnFramework notebook 中你将自己动手实现一个用于构建和训练多层感知机的框架从而亲眼看到现代神经网络是如何运转的。建议按以下层次推进实现张量运算基础矩阵乘法、加法以及 sigmoid/softmax 等函数这正是 15-rag-and-vector-databases/data/frameworks.md 中框架必须能做两件事的第一件为每个运算实现反向传播backward手工编写各导数函数第二件事——计算梯度以驱动梯度下降优化用搭建好的框架训练一个简单的二维分类问题验证框架可用性。作业MNIST 手写数字分类在本次实验中你需要使用本课搭建的框架解决MNIST 手写数字分类问题——把感知机时代的区分两个手写数字升级为完整的多分类任务共 10 个数字类别。这正好对应了本文开头设定的目标之一从二分类走向多分类并验证 softmax 输出层与交叉熵/逻辑损失的组合效果。复习与自学建议反向传播backpropagation是 AI 与机器学习中被广泛使用的算法值得深入钻研。建议结合以下方向继续学习把自建框架与主流框架对照比较你手工编写的backward与 TensorFlow/PyTorch 的自动求导机制理解框架应能对任意可定义表达式求梯度这一设计动机15-rag-and-vector-databases/data/frameworks.md体会**过拟合overfitting**与偏差-方差权衡当模型参数过多而训练样本不足时训练误差趋近于 0 而验证误差飙升这是训练神经网络必须警惕的问题同一文档中给出了线性模型 2 参数 vs 非线性模型 7 参数在 5 个点上的对比示例。结语本课完成了从单层感知机到多层感知机 反向传播的理论跃迁并在 Python 中构建了自己的模块化神经网络库且已用它解决了简单的二维分类问题。这套框架与后续真实框架TensorFlow/PyTorch在思想上同源——计算图上的前向计算与反向求导。同时本课对应的文档也以知识库数据的身份嵌入了 RAG 课程成为用自有数据增强 LLM的实际案例。下一步请进入 OwnFramework notebook 动手实践并完成 MNIST 作业将理论彻底转化为代码能力。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考