十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从零构建多层感知机:gradient descent、backpropagation 与自研神经网络框架实战指南

从零构建多层感知机:gradient descent、backpropagation 与自研神经网络框架实战指南 从零构建多层感知机gradient descent、backpropagation 与自研神经网络框架实战指南【免费下载链接】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 课程第 15 课Retrieval Augmented Generation 与向量数据库中作为知识库数据源的 own_framework.md 为主体系统讲解多层感知机Multi-Layered Perceptron, MLP的数学原理与训练算法从机器学习问题的形式化、损失函数、梯度下降优化到链式法则与反向传播backpropagation。读者学完后将能够理解现代神经网络前向传播—反向传播—参数更新的完整训练闭环并具备独立实现一个模块化 Python 神经网络框架、进而将其接入 RAG 检索增强应用的知识基础。课程背景一份神经网络文档的两种身份在 15-rag-and-vector-databases/README.md 构建的 RAG 示例场景中课程选择AI for Beginners 的神经网络讲义作为 grounding 数据源用于让聊天机器人回答关于感知机、多层感知机、深度学习框架等问题。这份数据源正是由三份 Markdown 讲义组成data/frameworks.md神经网络框架与过拟合、data/own_framework.md多层感知机与反向传播以及data/perceptron.md单层感知机入门。从配套笔记本 notebook-rag-vector-databases.ipynb 的代码可以看到这三份文档被显式加载进知识库data_paths [data/frameworks.md?WT.mc_idacademic-105485-koreyst, data/own_framework.md?WT.mc_idacademic-105485-koreyst, data/perceptron.md?WT.mc_idacademic-105485-koreyst]因此本文讨论的这份多层感知机讲义拥有双重身份一方面它自身就是一篇完整的深度学习入门讲义讲解 MLP 的数学原理与训练算法另一方面它是整个 RAG 课程中向量索引与检索链路所依赖的核心知识内容。理解了它的技术内涵才能理解 RAG 检索结果中什么是感知机什么是多层感知机这些回答的知识来源。机器学习问题的形式化本节内容继承自原文档 Formalization of Machine Learning 一节是整个框架设计的前提。数据、模型与损失函数假设我们有一个训练数据集X及其标签Y需要构建一个模型f使其做出尽可能准确的预测。预测质量由损失函数Loss functionℒ 度量。常用的损失函数有两类问题类型损失函数数学形式回归预测数值绝对误差∑i|f(x(i)) − y(i)|回归预测数值平方误差∑i(f(x(i)) − y(i))²分类0-1 损失与模型准确率本质等价分类logistic 损失基于对数似然的软性损失在单层感知机中f被定义为线性函数f(x) wx b其中w是权重矩阵x是输入特征向量b是偏置向量。对于不同的神经网络架构f可以呈现更复杂的形式。分类场景下通常希望网络输出的是各类别的概率。将任意实数转换为概率即对输出做归一化时常用softmax函数 σ此时f(x) σ(wx b)。参数与训练目标在f的定义中w与b被称为参数记作 θ ⟨w, b⟩。给定数据集 ⟨X,Y⟩可以计算出整个数据集上的总误差它是参数 θ 的函数。✅神经网络训练的目标就是通过改变参数 θ 来最小化误差。这一句是本篇讲义乃至整个深度学习训练范式的核心纲领后续的梯度下降、反向传播全都是围绕如何高效地找到使损失最小的参数展开的。梯度下降优化对于损失函数这类可微目标最经典的优化方法就是梯度下降Gradient Descent。其核心思想是计算损失函数对参数的导数多维情况下称为梯度并沿梯度下降方向调整参数使误差逐步减小。算法步骤用随机值初始化参数 w(0)、b(0)多次重复以下更新步骤w(i1) w(i)− η·∂ℒ/∂wb(i1) b(i)− η·∂ℒ/∂b其中 η 是学习率learning rate控制每次参数更新的步长∂ℒ/∂w 与 ∂ℒ/∂b 是损失函数对权重和偏置的偏导数。从全量梯度到随机梯度下降理论上训练中的优化步骤应当基于整个数据集计算因为损失是对所有训练样本求和。但在实际中我们从数据集中取出小块样本称为小批量minibatch并基于这批子集数据计算梯度。由于子集每次都是随机选取的这种方法被称为随机梯度下降Stochastic Gradient Descent, SGD。SGD 的核心收益在于单次参数更新的计算量从全数据集降为一个小批量大幅加快了迭代速度同时随机子样本引入的噪声反而有助于跳出局部极小值。这也是现代深度学习训练中事实上的标准做法——numpy、PyTorch、TensorFlow 等库中的优化器均以 minibatch 为基础工作单元。多层感知机从线性到非线性单层网络如感知机只能处理线性可分的数据。为了构建更强大的模型需要把多个网络层串联起来。前向传播的数学表达多层结构意味着函数f呈现更复杂的形式需要分多步计算z1 w1x b1z2 w2α(z1) b2f σ(z2)其中α 是非线性激活函数non-linear activation function如 sigmoid、ReLU 等σ 是 softmax 函数负责将输出转换为概率分布参数集合扩展为 θ ⟨w1, b1, w2, b2⟩。为什么需要非线性如果没有非线性激活函数 α多层线性变换的复合仍然是线性变换堆叠再多层也无法表达非线性决策边界。正是 α 的引入使得网络能够分离线性不可分的类别这也是本文开篇所述三大目标之一多分类、回归、非线性可分能够实现的关键。反向传播链式法则驱动的梯度计算梯度下降的算法框架不变但多层结构使梯度的计算变得复杂。借助链式求导法则可以逐层计算导数∂ℒ/∂w2 (∂ℒ/∂σ)·(∂σ/∂z2)·(∂z2/∂w2)∂ℒ/∂w1 (∂ℒ/∂σ)·(∂σ/∂z2)·(∂z2/∂α)·(∂α/∂z1)·(∂z1/∂w1)✅ 链式求导法则被用来计算损失函数对各层参数的导数。计算图的复用与反向传播命名由来观察上述表达式可以发现所有式子的最左端部分完全相同。这意味着可以从损失函数出发沿着计算图从后向前高效地复用中间结果、批量计算所有层的导数。正因如此多层感知机的训练方法被称为反向传播backpropagation简称 backprop。原文档强调讲义配套的 notebook 中会更详细地展开 backprop 的实现细节notebook-rag-vector-databases.ipynb 的 RAG 链路中这份内容同时承担了知识库文档的角色。本课程的姊妹篇讲义 data/frameworks.md 也指出在自研框架中我们需要在backward方法里手工编写所有导数函数来完成反向传播这正是理解 PyTorch/TensorFlow 这类现代框架自动微分能力的起点——它们把这一过程自动化并支持将计算图推到 GPU/TPU 上并行执行。知识库中的实践印证从文档到可检索的向量为了让上面的数学原理与本课程的实际应用场景衔接可以观察 notebook-rag-vector-databases.ipynb 是如何把这几份讲义加工成 RAG 可检索的知识库的。这也回答了MLP 讲义的原理在本课程里到底被用在哪里。分块Chunking笔记本复用了课程 README 中给出的split_text函数将长文档切成小段调用时使用max_length400、min_length300def 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随后用splitted_df.explode(chunks)将每个分块展开为独立行形成检索的基本单元。这样做的原因是 LLM 有输入 token 上限无法一次接收整篇文档分块既让检索粒度更细也降低了通过 LLM 的 token 成本。向量化与相似度检索每个分块通过create_embeddings转换为向量def create_embeddings(text, modelNone): # Create embeddings for each document chunk using your embeddings deployment model model or embeddings_deployment embeddings client.embeddings.create(inputtext, modelmodel).data[0].embedding return embeddings再使用sklearn的最近邻算法构建搜索索引from sklearn.neighbors import NearestNeighbors embeddings flattened_df[embeddings].to_list() # Create the search index nbrs NearestNeighbors(n_neighbors5, algorithmball_tree).fit(embeddings) # To query the index, you can use the kneighbors method distances, indices nbrs.kneighbors(embeddings)当用户提问what is a perceptron?时系统将该问题向量化后查询最近邻命中与多层感知机讲义语义最接近的分块再连同问题一起交给 LLM 生成 grounded 回答。也就是说本文介绍的 MLP 概念感知机、权重、激活函数、softmax正是该知识库中被检索和回答的核心知识点——数学原理与 RAG 应用在此形成闭环。实战挑战与作业 挑战实现自己的框架原文档给出的挑战是在配套 notebook 中亲手实现一个用于构建和训练多层感知机的自有框架并借此深入理解现代神经网络的实际运作方式。具体而言需要实现张量层面的基本运算矩阵乘法、加法、sigmoid/softmax 等激活函数在自定义层的backward方法中手工编写全部导数计算完成反向传播用 minibatch SGD 完成参数更新在一个简单的二维分类任务上验证框架的正确性。正如 data/frameworks.md 所强调numpy能完成第一部分张量运算但梯度计算机制必须自己搭建。亲手实现 backward 是理解 PyTorch 自动微分autograd原理的最好方式。复习与自学方向反向传播是 AI 与机器学习领域极其常用的算法值得深入研读。建议从以下角度加深理解链式法则在多层计算图上的递推复用梯度消失/梯度爆炸与激活函数选择的关系现代框架PyTorch/TensorFlow如何把计算图抽象出来并自动求导。作业MNIST 手写数字识别课程作业要求使用本讲义构建的框架解决MNIST 手写数字分类任务输入28×28 像素的灰度手写数字图像共 784 个输入特征输出10 个类别数字 0–9属于多分类问题关键要点输出层使用 softmax 将 logits 转换为概率分布损失函数对应多分类交叉熵训练过程与本文的梯度下降 反向传播框架完全一致。对照单层感知机讲义 data/perceptron.md 中的二分类任务两个手写数字的区分MNIST 全量分类是难度递增的进阶练习它同时验证了框架对多分类、softmax 归一化以及非线性多层结构三大能力的支持。总结本篇以 own_framework.md 为骨架完整覆盖了机器学习问题形式化、损失函数选择、梯度下降与 SGD 优化、多层感知机前向传播、链式法则与反向传播等核心内容并补充了它在 RAG 课程知识库中的实际应用链路。核心要点回顾训练的本质是调整参数 θ 使损失函数最小化梯度下降及其随机变体 SGD通过参数沿负梯度方向迭代更新来实现优化学习率 η 决定步长多层感知机通过非线性激活函数 α 获得表达非线性决策边界的能力输出层 softmax 将输出归一化为概率反向传播利用链式法则从损失出发沿计算图反向高效复用梯度是训练深层网络的基础算法在 notebook-rag-vector-databases.ipynb 中这份讲义经分块、向量化、最近邻索引后成为 RAG 检索增强应用的可检索知识源。掌握这些原理后你可以进一步阅读本仓库第 15 课的完整讲义 15-rag-and-vector-databases/README.md 和配套 notebook将自研框架的知识与向量数据库、检索增强生成技术贯通构建真正基于自有数据的大模型应用。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表