
从零构建多层感知机框架以 generative-ai-for-beginners 的 own_framework 笔记理解梯度下降与反向传播【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners本文围绕 translations/ja/15-rag-and-vector-databases/data/own_framework.md英文原文见 15-rag-and-vector-databases/data/own_framework.md展开它是本项目第 15 课RAG 与向量数据库中用于构建知识库的三份神经网络入门文档之一。这篇笔记以多層パーセプトロン多层感知机为核心系统讲解机器学习问题的形式化定义、损失函数、梯度下降与随机梯度下降SGD的原理并引出**反向传播backpropagation**这一现代神经网络训练的基石算法。读完本文你将掌握从单层感知机推广到多层网络的完整数学推导脉络理解参数 θ 如何被优化、链式法则如何驱动误差从输出层逐层回传并能结合本仓库中的 perceptron.md、frameworks.md 与 RAG 实战笔记本 notebook-rag-vector-databases.ipynb把手写神经网络框架这件事从公式一路落地到可运行的知识库示例中。一、笔记定位从线性感知机到更灵活的框架在进入本笔记之前课程先通过 perceptron.md 介绍了最简单的神经网络模型——单层感知机one-layered perceptron。它本质上是一个线性二分类模型对输入向量 x 计算f(wᵀx)其中 w 是权重向量f 是阶跃激活函数输出为 1 或 -1并借助梯度下降迭代更新权重w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ - η∇E(w)其中 η 是学习率∇E(w) 是误差函数 E 的梯度。单层感知机的局限在于它只能区分线性可分的两类数据。本笔记own_framework正是在此基础上做三件事在二分类之外支持多类分类multi-class classification在分类之外支持回归问题regression能够分离线性不可分的类别。更关键的是笔记承诺带领读者在 Python 中开发一个模块化的自有框架用它来搭建多种神经网络结构。这正是理解现代深度学习框架如 PyTorch、TensorFlow底层机制的最佳路径先手写一遍再使用现成工具。值得一提的是这份笔记在本仓库中并非孤立存在RAG 课程的实战笔记本 notebook-rag-vector-databases.ipynb 把data/frameworks.md、data/own_framework.md、data/perceptron.md三份文档作为知识库的原始数据源读入用于构建检索增强生成的示例。也就是说本文讲解的 MLP 理论笔记同时就是课程里用自有数据做 RAG的素材之一。二、机器学习问题的形式化笔记首先给出机器学习问题的标准表述给定训练数据集X与标签Y需要构建一个能做出最准确预测的模型f。预测质量由损失函数Loss functionℒ 度量。不同的任务使用不同的损失函数任务类型损失函数数学形式回归预测数值绝对误差∑ᵢ |f(x⁽ⁱ⁾) - y⁽ⁱ⁾|回归预测数值平方误差∑ᵢ (f(x⁽ⁱ⁾) - y⁽ⁱ⁾)²分类0-1 损失与模型**准确率accuracy**基本等价分类逻辑损失logistic loss基于对数似然的平滑损失对于单层感知机函数 f 被定义为线性函数 f(x) wx b其中 w 是权重矩阵、x 是输入特征向量、b 是偏置向量而在不同的神经网络结构中f 可以取更复杂的形式。softmax 与概率化输出在分类场景中我们通常希望网络输出的是属于各个类别的概率而不是任意实数。为了把任意数值转换成概率即对输出做归一化常用softmax函数 σ此时函数 f 变为f(x) σ(wx b)softmax 把网络的原始输出logits映射为一个和为 1 的概率分布是多类分类输出层的标配。参数与训练目标在上面的定义中w 与 b 被称为参数parameters记作 θ ⟨w, b⟩。给定数据集 ⟨X, Y⟩可以算出整个数据集上的总体误差——它是参数 θ 的函数。✅神经网络训练的目标就是通过改变参数 θ 来最小化误差。这句话是整个笔记的核心命题训练问题由此转化为一个参数优化问题而解决它的经典工具就是梯度下降。三、梯度下降与随机梯度下降SGD3.1 梯度下降的基本思想梯度下降gradient descent是函数优化的经典方法计算损失函数关于参数的导数在多维情况下称为梯度然后沿误差减小的方向更新参数。形式化如下用随机初始值初始化参数 w⁽⁰⁾、b⁽⁰⁾多次重复以下更新步骤w⁽ⁱ⁺¹⁾ w⁽ⁱ⁾ - η · ∂ℒ/∂wb⁽ⁱ⁺¹⁾ b⁽ⁱ⁾ - η · ∂ℒ/∂b这里的 η 就是学习率它控制每次更新迈出的步子大小过大容易震荡甚至发散过小则收敛缓慢。3.2 为什么需要小批量随机梯度下降严格来说训练中的每个优化步骤都应当基于全量数据集计算——因为损失本身就是对所有训练样本求和得到的。但真实场景中我们只取数据集的一小部分称为小批量minibatches并基于这批子集计算梯度。由于每次选取的子集是随机的这种方法被称为随机梯度下降Stochastic Gradient DescentSGD。SGD 的核心收益是计算开销可控全量梯度在数据集很大时每一步都昂贵到不可接受而小批量梯度在保持收敛能力的同时大幅降低单步成本。这也是现代深度学习训练框架普遍采用 mini-batch 训练的原因。3.3 感知机视角下的梯度下降在课程前置笔记 perceptron.md 中梯度下降已经以最朴素的形式出现过误差 E(w) 定义为仅在误分类样本上求和的感知机准则 E(w) -∑ wᵀxᵢtᵢ更新规则化为 w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ ∑ηxᵢtᵢ。理解这一点有助于看清多层网络中的梯度下降与单层感知机的更新在精神上一脉相承只是梯度的计算复杂得多——这正是反向传播要解决的问题。四、多层感知机MLP与反向传播4.1 多层网络的结构单层网络只能分类线性可分的类别。要构建更丰富的模型需要把网络的多个层组合起来。数学上这意味着函数 f 具有更复杂的形式并分多步计算z₁ w₁x b₁z₂ w₂α(z₁) b₂f σ(z₂)其中α 是非线性激活函数non-linear activation function——正是它让多层网络摆脱线性获得逼近任意函数的能力缺少非线性层叠再多也仍然等价于单个线性变换σ 是 softmax 函数参数 θ ⟨w₁, b₁, w₂, b₂⟩。4.2 链式法则求梯度梯度下降算法本身不变但梯度的计算变得更复杂。借助链式微分法则各层权重对损失的导数可以逐层拆解∂ℒ/∂w₂ (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂w₂)∂ℒ/∂w₁ (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂α)(∂α/∂z₁)(∂z₁/∂w₁)✅ 链式法则用于计算损失函数对参数的导数。观察这两个式子会发现一个关键事实所有表达式最左端的因子完全相同。这意味着可以从损失函数出发沿计算图反向逐层高效地计算导数而不必为每个参数单独从头推导——这个从输出到输入反向传播误差的过程正是多层感知机训练方法被称为**反向传播backpropagation简称 backprop**的原因。原笔记在此处留有TODO: 图片引用的占位并明确说明反向传播的细节会在配套 notebook 示例中更详尽地展开。4.3 从手写 backward 到现代框架手工实现反向传播时必须像我们在 frameworks.md 中看到的那样在框架的backward方法里手动编写每一个导数函数。这带来两个现实问题numpy能完成张量的乘、加与 sigmoid、softmax 等函数计算但它没有自动求导机制——需要框架自己提供对任意可定义表达式求梯度的能力深度网络训练的计算量极其庞大需要把计算**并行化parallelize**到 GPU、TPU 等专用计算单元上。这正是 TensorFlow 与 PyTorch 两大现代框架存在的理由。它们的低层 API允许构建计算图描述输入参数如何计算出输出通常是损失函数支持把计算推到 GPU 上执行并提供对计算图求导获得梯度的函数高层 APIKeras、PyTorch Lightning则把神经网络视为层的序列训练时通常只需准备数据后调用fit即可。两种 API 可以混用——例如用低层 API 开发自定义层再放进高层 API 构建的大网络里训练。理解了 own_framework 笔记中手写 backward 的痛苦才能真正体会自动微分与计算图的价值所在。五、仓库实战佐证own_framework 作为 RAG 知识库数据源本笔记内容在本仓库中有一个非常具体的用途——充当 RAG 课程的自有数据。在 notebook-rag-vector-databases.ipynb 中课程示例将三份神经网络讲义作为知识库原始文档载入data_paths [ data/frameworks.md, data/own_framework.md, data/perceptron.md, ]随后用split_text函数对文档做分块chunkingdef 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 the last chunk didnt reach the minimum length, add it anyway if current_chunk: chunks.append( .join(current_chunk)) return chunks笔记本中的调用参数为split_text(x, 400, 300)即块长控制在 300400 字符之间分块后的 DataFrame 再通过explode(chunks)展开为逐块记录随后转换为 embeddings 向量存储。也就是说本文讲解的 MLP 笔记正文正是 RAG 示例中用户提问 → 检索最相似 chunk → 交给 LLM 生成回答这条链路的被检索对象之一。把 MLP 数学原理与这套检索链路对照阅读可以更直观地理解自有文档 向量化 检索增强的完整闭环。六、实践指引挑战与作业原笔记在结尾给出了清晰的实践路线挑战Challenge在配套的 OwnFramework 笔记本中亲手实现一个用于构建与训练多层感知机的自有框架从而细致观察现代神经网络的工作方式——包括层、激活函数、前向传播、backward反向传播与参数更新这些模块的拼装。复习与自主学习Review Self Study反向传播是 AI 与机器学习领域的高频算法值得深入研究。作业Assignment利用本课构建的框架解决MNIST 手写数字分类问题说明与笔记本为课程配套材料随课程发布。七、总结本笔记own_framework是从零理解神经网络的关键一环它把单层感知机推广为多层感知机用损失函数的形式化定义统一了回归与分类任务用梯度下降及其随机化变体 SGD确立了参数优化的范式再用链式法则引出了反向传播这一核心算法。当你沿着 perceptron.md → own_framework.md → frameworks.md 的顺序读下来就能建立起一条完整的认知链线性模型 → 多层非线性模型 → 手工反向传播 → 现代自动微分框架。而本仓库的 RAG 实战笔记本 notebook-rag-vector-databases.ipynb 则展示了这些讲义文档如何被分块、向量化并检索为生成式 AI 应用提供自有数据的支撑——这正是课程从手写神经网络走向用 LLM 构建真实应用的过渡桥梁。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考