ARTICLE DETAIL

资讯详情

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

Generative AI 课程实战:手写多层感知机框架,吃透梯度下降与反向传播

Generative AI 课程实战:手写多层感知机框架,吃透梯度下降与反向传播 Generative AI 课程实战手写多层感知机框架吃透梯度下降与反向传播【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners本篇文章以 own_framework.md 的内容为骨架系统讲解机器学习问题的形式化表达、梯度下降Gradient Descent与随机梯度下降SGD、多层感知机MLP的数学结构以及贯穿全过程的**反向传播Backpropagation**原理。读完本文你将能够理解从单层感知机升级到多层神经网络的完整动机与推导过程并具备在 Notebook 示例 中自行构建一个模块化神经网络框架、直至解决 MNIST 手写数字分类问题的实战能力。需要说明的是本文对应的文档在本仓库中位于 RAG 与向量数据库课程 的 data 目录它来源于神经网络的系统化讲解在本课程中作为知识库示例数据被 notebook-rag-vector-databases.ipynb 分块、向量化后用于检索增强生成RAG演示——因此理解其技术内核同时也能让你看懂这些底层文档如何被加工成可检索的文本块。为什么需要从单层感知机走向多层感知机在上一份资料 perceptron.md 中我们认识了最简单的神经网络模型——单层感知机one-layered perceptron它本质上是一个线性二分类模型输出为 y(x)f(wᵀx)其中 f 是阶跃激活函数。单层感知机的能力上限很明确它只能分隔线性可分的类别。为了把它扩展成更通用的学习框架我们希望在以下三个方面获得能力提升多分类multi-class classification把输出从两个类别扩展到两个以上回归regression除分类外还能预测连续的数值非线性可分能够把线性不可分的类别也正确区分开。为此我们会用 Python 开发一个模块化modular的自研框架用它来组合构造各种不同的神经网络结构。这正是本仓库中 data/frameworks.md 所强调的从底层理解网络如何工作的思路先用底层 API 与张量打交道再逐步抽象出可复用的框架。机器学习问题的形式化从数据集到损失函数要扩展模型首先需要把问题本身说清楚。假设我们有训练数据集X及其对应的标签Y我们的任务是构建一个模型f使其预测尽可能准确。预测质量的度量标准是损失函数loss functionℒ不同问题类型对应不同的常用损失回归问题预测一个数值绝对误差absolute error∑ᵢ |f(x⁽ⁱ⁾) − y⁽ⁱ⁾|平方误差squared error∑ᵢ (f(x⁽ⁱ⁾) − y⁽ⁱ⁾)²分类问题0-1 损失0-1 loss与模型的准确率accuracy本质等价logistic 损失logistic loss即对数似然视角下的交叉熵形式具有处处可微的良好性质便于梯度优化。在单层感知机中函数f被定义为线性函数f(x) wx b其中w是权重weight矩阵x是输入特征向量b是偏置bias向量。在不同的网络结构下函数f会取更复杂的形式。用 softmax 把输出变成概率在分类任务中通常希望网络输出的是各个类别对应的概率。要把任意实数转换为概率即对输出做归一化我们通常使用softmax 函数σ此时函数变为f(x) σ(wx b)softmax 会保证所有类别的输出落在 (0, 1) 区间内且总和为 1使损失计算和概率解释都成为可能。参数与训练目标在上述定义中w和b被统称为参数θ ⟨w,b⟩。给定数据集 ⟨X,Y⟩我们可以把整个数据集上的总体误差写成参数 θ 的函数。于是得到贯穿整个神经网络的训练信条✅神经网络训练的目标就是通过不断改变参数 θ 来最小化误差。梯度下降与随机梯度下降参数如何被优化误差是参数的函数我们希望在参数空间中往下走找到谷底。最经典的方法是梯度下降gradient descent计算损失函数对参数的导数在多维情形下称为梯度 gradient并朝误差减小的方向更新参数。其形式化过程为用随机值初始化参数 w⁽⁰⁾、b⁽⁰⁾反复执行如下更新步骤直到收敛w⁽ⁱ⁺¹⁾ w⁽ⁱ⁾ − η · ∂ℒ/∂wb⁽ⁱ⁺¹⁾ b⁽ⁱ⁾ − η · ∂ℒ/∂b这里的 η 称为学习率learning rate它控制每一步沿梯度方向迈出的步长。学习率过大容易震荡发散过小则收敛缓慢是训练时最重要的超参数之一。从全量计算到 minibatchSGD理论上损失是以所有训练样本之和计算的优化步骤也应当基于整个数据集。但在实践中我们会取数据集的小批次子集minibatches仅基于这批子数据计算梯度。由于每一轮子集都是随机选取的这种方法被称为随机梯度下降stochastic gradient descent, SGD。它一方面大幅降低了单步计算量另一方面由于采样的随机性反而常常帮助模型跳出局部极小点。绝大多数现代深度学习框架如 PyTorch、TensorFlow的默认优化流程都建立在 SGD 及其变体的思想之上。多层感知机用层堆叠出更丰富的模型如前所述单层网络只能处理线性可分的类别。为了构建更强的模型我们把多个网络层组合起来。数学上这相当于让函数f呈现更复杂的形态并分多步计算z₁ w₁x b₁z₂ w₂·α(z₁) b₂f σ(z₂)其中α 是非线性激活函数non-linear activation function例如 sigmoid、tanh 或 ReLU。它给网络引入非线性是多层真正能超越单层表达能力的核心原因——若没有非线性多层线性变换仍等价于一层线性变换σ 是 softmax 函数用于最终输出概率参数集合扩展为 θ ⟨w₁,b₁,w₂,b₂⟩。由 data/frameworks.md 可知构建此类网络需要两类基础能力一是对张量做乘法、加法并计算 sigmoid、softmax 等函数二是为所有表达式计算梯度。前者可由numpy胜任后者则是我们自研框架需要解决的核心问题——这正是下一节反向传播登场的理由。反向传播链式法则驱动梯度流动多层模型的梯度下降算法本身没有改变真正的难点在于如何计算梯度。利用链式求导法则chain differentiation rule我们可以逐层展开损失对各层参数的导数∂ℒ/∂w₂ (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂w₂)∂ℒ/∂w₁ (∂ℒ/∂σ)(∂σ/∂z₂)(∂z₂/∂α)(∂α/∂z₁)(∂z₁/∂w₁)✅ 链式法则被用来计算损失函数对参数的导数。仔细观察可以发现上述所有表达式最左侧的部分是相同的都是 ∂ℒ/∂σ 起头的公共因子。因此我们可以从损失函数出发沿着计算图computational graph从后往前逐层复用这些中间结果高效地求出全部导数。这种训练多层感知机的方法被称作反向传播backpropagation或简称 backprop。理解反向传播的关键在于两点前向传播按 z₁ → z₂ → f 的顺序计算输出并缓存各层中间量反向传播从损失开始按与计算顺序相反的方向把梯度传回去逐层更新 w₁、b₁、w₂、b₂。在原 data/frameworks.md 中亦印证了这一实现方式在自研框架里我们需要在backward方法中手工编写所有导数函数来执行反向传播。现代框架TensorFlow、PyTorch则通过自动微分机制让你可以对任意表达式自动求梯度并支持把计算推送到 GPU/TPU 等专用计算单元上并行执行——但对于理解原理而言手工实现一遍backward是无可替代的必修课。动手实践从二维分类到 MNIST 手写数字识别理解了上述理论与数学推导后即可进入编码实践环节。文档对应的完整学习路径是先实现自己的神经网络库然后逐步检验它二维分类任务用自研框架解决一个简单的二维分类问题验证前向计算、损失计算与反向传播代码的正确性挑战Challenge进入配套的OwnFramework 笔记notebook在其中亲手实现一个用于构建和训练多层感知机的框架你会直观看到现代神经网络内部到底是如何运作的实验作业Assignment运用本讲构建的框架解决MNIST 手写数字分类问题——把 28×28 的手写图片像素展平为输入特征经过含隐藏层的多层感知机输出 10 个类别的概率分布。说明OwnFramework 笔记来自该系列资料配套的深度学习课程素材。在本仓库中这三份 Markdown 文本frameworks.md、own_framework.md、perceptron.md作为知识库样本被 RAG 课程 notebook 读入并切分为文本块随后转换成向量嵌入供以神经网课文档为知识底座的聊天机器人在检索时使用——因此本文的内容既是神经网络原理也是理解 RAG 数据管道原材料从哪来的窗口。小结三条主线串起整份材料回顾全文可以把核心收获归纳为三条主线问题侧回归用绝对误差 / 平方误差分类用 0-1 损失或 logistic 损失配合 softmax 得到概率输出训练目标是最小化关于参数 θ 的损失优化侧梯度下降以 η·∂ℒ/∂θ 的步长更新参数随机选取 minibatch 演化为 SGD结构侧非线性激活函数 α 让多层堆叠产生真正的表达能力链式法则与计算图上的反向传播让深层网络的梯度计算高效可行。自学建议与延伸反向传播是人工智能与机器学习中最通用的算法之一值得深入研读。建议结合 data/frameworks.md 中关于过拟合overfitting与偏差-方差权衡Bias-Variance Tradeoff的讨论一并学习——当你在 MNIST 上用自研框架训练多层网络时训练误差低而验证误差高的现象就是过拟合的直接信号可以通过增加数据量、降低模型复杂度或引入 Dropout 等正则化手段加以缓解。完成以上内容后可回到 第 15 课 RAG 与向量数据库 的完整流程中把同样的文本数据切块、嵌入并接入检索与向量搜索体验从一篇技术文章到可问答的知识库的完整链路。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表