news 2026/9/7 4:06:31

多层感知机(MLP)与反向传播:generative-ai-for-beginners 课程中的机器学习形式化、梯度下降与反向传播原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多层感知机(MLP)与反向传播:generative-ai-for-beginners 课程中的机器学习形式化、梯度下降与反向传播原理

多层感知机(MLP)与反向传播: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 仓库中的神经网络专题文档data/own_framework.md(阿拉伯语译文 与其内容一致)展开。读完后,你将掌握三个核心能力:把分类/回归问题形式化为“可调参数 + 损失函数”的优化问题、用梯度下降与随机梯度下降(SGD)训练神经网络、以及理解多层感知机(Multi-Layered Perceptron, MLP)为何能分类线性不可分数据——即反向传播的链式求导原理。

文档在课程中的位置

own_framework.md是第 15 课 Retrieval Augmented Generation (RAG) and Vector Databases 配套知识库文档之一。该课程为了演示 RAG,把三篇神经网络教学文档作为“私有数据”注入知识库:

  • perceptron.md:感知机(Perceptron),二分类线性模型(上一节);
  • own_framework.md:本文档,多层感知机与反向传播(本节);
  • frameworks.md:现有主流框架(TensorFlow / PyTorch / Keras 等)的对比(下一节)。

在配套的 notebook-rag-vector-databases.ipynb 中,data/own_framework.md与另外两篇文档一起被读取、分块(chunking)、向量化(embedding),并写入本地索引与 Azure AI Search 供语义检索。也就是说,本文档既是“教学内容”,也是本课程 RAG 演示的“语料”——关于它如何被分块和检索的实操细节,见本文最后一节“仓库中的落地用法”。

从单层感知机出发:为什么要扩展到 MLP

在上一节(perceptron.md)中,课程介绍了最简单的神经网络模型——单层感知机。它是一个线性二分类模型:给定输入向量 x,输出 y(x) = f(wᵀx),其中 f 是阶跃激活函数,w 是需要通过训练求得的权重向量。单层感知机只能处理线性可分的分类问题。

本文档(own_framework.md)将这一模型扩展为更灵活的框架,允许我们:

  • 在二分类之外进行多类别分类(multi-class classification);
  • 在分类之外解决回归问题(regression);
  • 分离线性不可分的类别。

同时,文档的目标是用 Python 开发一个自己的模块化框架(own modular framework),能够构建不同的神经网络架构——这解释了文件名 “own framework” 的由来。

机器学习问题的形式化

文档首先把机器学习问题做严格的形式化表述:

假设有训练数据集X与标签Y,需要构建一个模型f使其预测尽可能准确。预测质量由损失函数(Loss function)ℒ度量。

文档给出的常用损失函数分为两类:

问题类型常用损失函数数学表达
回归(预测一个数值)绝对误差(absolute error)∑ᵢ|f(x⁽ⁱ⁾) − y⁽ⁱ⁾|
回归平方误差(squared error)∑ᵢ(f(x⁽ⁱ⁾) − y⁽ⁱ⁾)²
分类0-1 损失本质上等价于模型的准确率(accuracy)
分类逻辑损失(logistic loss)对数形式的连续可微损失

对于单层感知机,模型函数f被定义为线性函数:

f(x) = wx + b

其中w是权重矩阵,x是输入特征向量,b是偏置向量。而对于不同的神经网络架构,f可以取更复杂的形态。

softmax:把网络输出变成类别概率

文档特别指出:分类场景下,我们往往希望网络的输出是各类别对应的概率。为了把任意实数向量转换为概率(即对输出做归一化),通常引入softmax 函数 σ,于是模型变为:

f(x) = σ(wx + b)

softmax 将每个类别的“原始得分(logits)”归一化为和为 1 的非负概率,这正是多分类任务的标准输出层。

训练目标

在上述f的定义中,wb合称为参数θ = ⟨w,b⟩。给定数据集 ⟨X,Y⟩,我们可以把整个数据集上的总误差计算为参数 θ 的函数。由此得出全文的核心结论:

神经网络训练的目标,就是通过不断调整参数 θ 来最小化误差。

这一句话把“神经网络训练”归结为一个纯粹的数值优化问题——后续的梯度下降与反向传播,都是为了解决这个问题。

梯度下降优化(Gradient Descent)

文档介绍了函数优化的经典方法——梯度下降。核心思想是:计算损失函数关于参数的导数(多维情况下称为梯度),然后沿梯度反方向调整参数,使误差下降。形式化表述如下:

  1. 用随机值初始化参数 w⁽⁰⁾、b⁽⁰⁾;
  2. 反复执行以下更新步骤多次:
w⁽ⁱ⁺¹⁾ = w⁽ⁱ⁾ − η · ∂ℒ/∂w b⁽ⁱ⁺¹⁾ = b⁽ⁱ⁾ − η · ∂ℒ/∂b

其中η(eta)是学习率(learning rate),控制每一步参数更新的幅度;∂ℒ/∂w、∂ℒ/∂b 是损失函数对相应参数的偏导数。

从批量到随机:Minibatch 与 SGD

文档进一步区分了理想与现实:

  • 理论上,每一步优化都应考虑整个数据集(因为损失被定义为对所有训练样本求和);
  • 实际中,我们每次只取数据集的一小部分——称为minibatch(小批量)——基于这个数据子集计算梯度。由于每次被选中的子集都是随机的,这种方法被称为随机梯度下降(stochastic gradient descent, SGD)

这解释了现代深度学习训练循环的典型形态:循环遍历多个 epoch,每个 epoch 内把数据切成若干随机 minibatch,逐批计算梯度并更新参数。SGD 的随机性反而带来了计算效率提升和一定程度的正则化效果(可结合 frameworks.md 中关于计算图与 GPU 并行的讨论理解其工程意义)。

多层感知机(MLP):前向传播结构

单层网络的表达能力有限——它只能分类线性可分的类别。要构建更丰富的模型,就把网络的若干层串联起来。文档给出的两层 MLP 前向传播公式为:

z₁ = w₁x + b₁ z₂ = w₂α(z₁) + b₂ f = σ(z₂)

各符号含义:

符号含义
α非线性激活函数(non-linear activation function),这是打破线性叠加、获得非线性表达力的关键
σsoftmax 函数
θ = ⟨w₁, b₁, w₂, b₂⟩整个网络的参数集合(每层各自持有一组权重与偏置)

直观理解:输入 x 先经第一层线性变换得到 z₁,α 引入非线性“弯折”,第二层再做线性变换得到 z₂,最后 softmax 输出类别概率。只要 α 是非线性的,多层叠加后f就不再是输入的线性函数,理论上可以逼近复杂的非线性决策边界——这就是 MLP 能处理线性不可分类别的数学依据。

反向传播(Backpropagation):链式法则如何工作

有了多层结构后,梯度下降算法本身不变,但梯度怎么算变得更复杂。文档利用**链式求导法则(chain differentiation rule)**给出各层权重的导数:

∂ℒ/∂w₂ = (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂w₂) ∂ℒ/∂w₁ = (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂α)(∂α/∂z₁)(∂z₁/∂w₁)

✅ 链式求导法则用于计算损失函数关于各参数的导数。

文档随后点出了反向传播命名的本质原因:

注意上面所有表达式最左侧的部分都是相同的(即 ∂ℒ/∂σ 这一项)。因此我们可以从损失函数出发,沿着计算图“由后往前”逐层高效地计算导数,避免重复计算公共子表达式。

正是这种“从损失出发、沿计算图反向逐层传递”的求导方式,得名backpropagation(反向传播)或简称 backprop。可以这样理解其工程价值:若逐参数独立求导,公共因子会被反复计算;而反向传播把中间结果(如 ∂ℒ/∂σ、∂σ/∂z₂)复用给更早的层,使得训练成本与参数量近似线性相关,而非指数膨胀。

文档原文在此处留有 “TODO: image citation” 占位(即仓库中未附带该示意图),并声明反向传播将在配套 notebook 中更详细地展开。

课程实战任务:Challenge 与 Assignment

文档结尾给出了三层递进的实践安排,完整继承如下:

  1. Challenge(挑战):在配套 notebook 中,自己动手实现一个用于构建和训练多层感知机的框架——从源码层面看清现代神经网络是如何运转的。课程原文指向 “OwnFramework notebook”;在本仓库的当前形态中,该课程第 15 课配套的 notebook 是 notebook-rag-vector-databases.ipynb,它把本文档作为 RAG 知识库语料,展示了“文本 → 分块 → embedding → 检索 → 增强生成”的完整链路(适用前提:需配置AZURE_OPENAI_ENDPOINTAZURE_OPENAI_API_KEYAZURE_OPENAI_EMBEDDINGS_DEPLOYMENTAZURE_OPENAI_DEPLOYMENT等环境变量,notebook 中通过os.getenv读取)。
  2. Assignment(作业):使用本课自己构建的框架,完成MNIST 手写数字分类——这正是“多类别分类 + 线性不可分”两个能力的综合检验(10 个数字类别,单个像素值无法线性分离)。
  3. Review & Self Study(复习与自研):文档明确建议对反向传播做更深入的学习——它是 AI 与机器学习中最通用的算法之一。

仓库中的落地用法:本文档如何成为 RAG 语料

这一节把文档内容与仓库源码串联起来,说明own_framework.md在本仓库中的真实用途——它是 RAG 演示的被检索对象

在 notebook-rag-vector-databases.ipynb 中,可以确认以下处理链路:

  1. 加载语料:notebook 将data/frameworks.mddata/own_framework.mddata/perceptron.md三个文件读入 pandas DataFrame,每行记录{path, text}
  2. 分块(chunking):对全文调用split_text(x, 400, 300)——即把每篇文档按词切分为长度介于 300 与 400 字符之间的文本块,再用explode('chunks')把块展开为独立行。这正是 README 所述“因 LLM 存在输入 token 上限,需把长文档拆成 chunk 并附带上下文”策略的具体实现;
  3. 向量化:分块文本经 Azure OpenAI 的 embedding 部署(AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT)转换为向量;
  4. 检索与重排:用sklearn.neighbors.NearestNeighborsn_neighbors=5, algorithm='ball_tree')在本地构建最近邻索引,对查询向量执行kneighbors找出语义最接近的块,再把这些块拼进 prompt 交给 LLM(gpt-4o-minitemperature=0.7)生成基于私有数据的回答;
  5. 评估维度:README 同时给出了 RAG 应用的评估标准——回答质量、groundedness(回答是否来自提供的文档)、相关性与流畅度。

也就是说,本文档讲解的“多层感知机 / 梯度下降 / 反向传播”知识点,恰好会被课程的 RAG 演示以“what is a perceptron?”这类问题检索到并返回给用户——教学内容与工程演示在此形成了闭环。

小结

  • 形式化:任何机器学习任务 = 模型f(θ) + 数据集 ⟨X, Y⟩ + 损失函数 ℒ;分类常用 0-1 损失或逻辑损失,回归常用绝对/平方误差;softmax 把输出归一化为类别概率。
  • 优化:训练目标是最小化总误差;梯度下降按 w⁽ⁱ⁺¹⁾ = w⁽ⁱ⁾ − η∂ℒ/∂w 迭代更新参数;实际训练用随机 minibatch,即 SGD。
  • 表达力:多层感知机通过“线性层 + 非线性激活 α + 线性层 + softmax”叠加,获得处理线性不可分问题的能力。
  • 反向传播:利用链式法则,从损失出发沿计算图反向逐层求导,公共子表达式天然复用,因此高效。
  • 仓库佐证:data/own_framework.md 既是教学正文,也是 RAG notebook 的知识库语料(分块参数 400/300),完整链路可参考 第 15 课 README。

继续学习的自然路径是 frameworks.md:在掌握“手写框架”的原理之后,理解 TensorFlow / PyTorch 等主流框架的 low-level API(计算图、GPU 并行)与 high-level API(Keras 等)如何把本文档中的原理产品化。

【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 4:05:46

3DMAX新手入门:从环境排查到卡通角色建模完整流程

刚把 3DMAX 装好,满脑子都是“今天一定要做出一个完整的卡通角色”,结果双击图标,启动界面闪一下就没了;好不容易装完,安装过程又报一个 1603 错误;就算顺利打开软件,面对四个视图和密密麻麻的工…

作者头像 李华
网站建设 2026/9/7 4:04:40

游戏军团队友信任体系构建:从数据记录到量化评估的完整方案

在多人策略游戏中,一个人的操作上限始终有限,真正决定军团能走多远的,往往不是某个人的神操作,而是整个“茶碗军推网络”里有没有一批值得背靠背信任的队友。这里的“军推”可以理解为军团推进、集结协作,也可以看作是…

作者头像 李华
网站建设 2026/9/7 4:03:24

ComfyUI漫剧工作流学习路径:从缺包报错到稳定批量产出

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 4:03:18

NSK轴承手册PDF高效使用指南:型号查询、寿命计算与选型要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 4:00:38

压力测试怎么做?用HeavyLoad全面检测CPU、内存、硬盘和显卡稳定性

简介:HeavyLoad是一款轻量级的PC压力测试工具,面向需要验证系统在CPU高负载及3D渲染场景下稳定性的用户。它无需安装即可运行,特别适合临时测试环境或便携使用,帮助快速定位硬件瓶颈与系统崩溃隐患。资源包共13个文件,…

作者头像 李华
网站建设 2026/9/7 4:00:35

YOLO数据集训练前准备:格式转换、数据清洗与划分实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华