Generative AI for Beginners 实战指南:从 TensorFlow/PyTorch 框架到过拟合防治的神经网络基础

Generative AI for Beginners 实战指南:从 TensorFlow/PyTorch 框架到过拟合防治的神经网络基础 Generative AI for Beginners 实战指南从 TensorFlow/PyTorch 框架到过拟合防治的神经网络基础【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners本篇文章基于本项目第 15 课《检索增强生成RAG与向量数据库》知识库中的核心文档「Neural Network Frameworks」西班牙语版、英文原版展开。它系统讲解深度学习框架的核心设计思想——低层 API 与高层 API 的定位与分工以及机器学习中最关键的过拟合问题及其与偏差-方差权衡的关系。读完本文你将掌握 TensorFlow/PyTorch 生态的 API 分层逻辑、计算图与自动微分原理理解过拟合的成因、检测信号与预防手段并能在配套练习中用全连接网络解决真实分类问题。为什么训练神经网络需要专门的框架要高效训练神经网络必须同时具备两方面的能力张量运算对多维数组进行乘法、加法并计算 sigmoid、softmax 等激活函数梯度计算对所有表达式求导以执行梯度下降优化。Python 的numpy库足以胜任第一项工作但梯度计算是它无法直接提供的。在本课程前一部分开发的自研框架中我们不得不把所有导数函数手工编写进执行反向传播的backward方法里——模型每增加一种运算就要手写对应的导数显然不可持续。理想情况下框架应该能对我们定义的任意表达式自动计算梯度。除此之外深度神经网络训练涉及海量计算必须能够在 GPU 或其他专用计算单元如 TPU上执行。所谓「并行化」就是把计算分布到多个设备上同时进行这是框架需要解决的第二个关键问题。✅ 术语『并行化』指将计算分布到多个设备上执行。两大主流框架与 API 分层目前最流行的两个神经网络框架是TensorFlow和PyTorch。两者都提供在 CPU 与 GPU 上操作张量的低层 API在低层 API 之上又分别衍生出高层 APIKeras对应 TensorFlow与PyTorch Lightning对应 PyTorch。原文档用一张表清晰地概括了这一生态结构API 层级TensorFlow 生态PyTorch 生态低层 APITensorFlowPyTorch高层 APIKerasPyTorch Lightning注课程原文档首个表格中 PyTorch 行的高层 API 一栏写作 PyTorch 本身但结合其练习表格「API de Alto Nivel / Keras /PyTorch Lightning」的标注PyTorch 对应的高层 API 实际是 PyTorch Lightning此处以更完整的表述呈现。低层 API计算图与自动微分两个框架的低层 API 都允许你构建所谓的计算图computational graph。这张图定义了给定输入参数如何一步步计算出输出通常是损失函数并且可以被推送到 GPU 上进行计算如果可用。框架提供了对该计算图求导的函数从而自动算出各参数的梯度这些梯度随后被用于优化模型参数。这正是解决「手工编写backward」痛点的关键一旦构建了计算图梯度就可以通过链式法则自动求出与你在自研框架中手工推导的公式完全同源但无需再逐层手写。高层 API把网络看作层的序列高层 API 把神经网络基本视为一系列层的堆叠这让大多数网络的构建变得极其简单训练模型通常只需要准备好数据然后调用一个fit函数即可完成整个训练流程。你无需关心张量如何在层间流动、梯度如何回传等细节。两层 API 的适用场景有明显差异高层 API能极快地搭建典型神经网络适合快速原型与常规任务低层 API对训练过程提供远超高层 API 的控制力因此在研究新网络架构时被大量使用。两种 API 可以协同使用需要特别强调的是低层与高层 API 并非互斥。你完全可以用低层 API 实现自定义的网络层结构再把它嵌入一个由高层 API 构建和训练的大网络或者用高层 API 把网络定义为层的序列再编写自己的低层训练循环来完成优化。两种 API 建立在相同的基本概念之上设计初衷就是能够良好地协作。本课程的学习路径建议课程的大部分内容同时提供了 PyTorch 与 TensorFlow 两个版本你可以选定自己偏好的框架只跟随对应的 notebook 学习。如果不确定选哪个可以先了解PyTorch vs. TensorFlow的社区讨论或同时粗览两个框架再决定。课程的策略是优先使用高层 API 以保证简洁但同时坚持「从零理解神经网络如何工作」的原则——因此开头阶段会先使用低层 API 与张量展开。如果你追求快速上手、不想在底层细节上投入过多时间可以跳过低层部分直接进入高层 API 的 notebook。过拟合机器学习中最需要重视的概念掌握框架之后课程引入了一个极端重要的概念——过拟合overfitting。考虑这样一个问题用模型去逼近下图中的 5 个数据点图中以x表示线性模型过拟合模型线性模型2 个参数非线性模型7 个参数训练误差 5.3训练误差 0验证误差 5.1验证误差 20左侧线性模型直线给出了良好的逼近。因为参数数量合适模型正确捕捉了数据点背后的分布规律训练误差与验证误差都很低且接近。右侧过拟合模型模型过于强大。仅有 5 个点却有 7 个参数模型可以扭曲自身恰好穿过所有数据点把训练误差压到 0。但这反而阻碍了模型理解数据背后的真实模式导致验证误差飙升至 20。这个例子的核心教训是必须在模型复杂度参数数量与训练样本数量之间找到正确的平衡。过拟合为什么发生过拟合通常源于以下三个原因训练数据不足模型过于强大参数过多输入数据中噪声过多。当模型参数多于有效信息所能约束的程度时它就会「记住」数据中的噪声而非学习有意义的关系。如何检测过拟合从上面的例子可以看出过拟合的典型信号是训练误差非常低而验证误差很高。正常训练过程中训练误差与验证误差起初都会下降到达某个点之后验证误差可能停止下降甚至开始回升。这正是过拟合的信号表明此时应该停止训练至少保存一份当前模型的快照。因此在训练过程中持续监控验证集上的表现而不是只看训练集指标是防止模型退化的第一道防线。如何预防过拟合一旦观察到过拟合迹象可以采取以下措施之一增加训练数据量更多样本能约束模型的自由度降低模型复杂度减少层数、神经元数或参数规模使用正则化技术例如 Dropout随机丢弃部分神经元课程后续会详细展开。这些手段本质上都在限制模型「死记硬背」的能力迫使其学习可泛化的模式。过拟合与偏差-方差权衡过拟合其实是统计学中一个更一般性问题的特例——偏差-方差权衡Bias-Variance Tradeoff。把模型误差的来源拆开来看存在两类错误偏差误差Bias errors由算法无法正确捕捉训练数据之间的关系造成根源往往是模型能力不足即欠拟合underfitting方差误差Variance errors由模型拟合了输入数据中的噪声、而非有意义的关联造成即过拟合overfitting。训练过程中随着模型逐步逼近数据偏差误差持续下降与此同时方差误差却在上升。因此必须适时停止训练——要么在检测到过拟合时手动停止要么通过引入正则化自动实现——以在偏差与方差之间取得平衡。仓库源码佐证从感知机到自研多层框架的求导演进frameworks.md开篇提到的「上一节开发的框架」对应仓库中另外两份知识库文档它们恰好构成了一条完整的知识链条能帮你更透彻地理解本文的框架需求感知机文档展示了最朴素的实现单层感知机通过权重向量做二分类用梯度下降更新权重w(t1) w(t) − η∇E(w)其中η是学习率。文档给出的训练函数核心代码如下def train(positive_examples, negative_examples, num_iterations 100, eta 1): weights [0,0,0] # Initialize weights (almost randomly :) for i in range(num_iterations): pos random.choice(positive_examples) neg random.choice(negative_examples) z np.dot(pos, weights) # compute perceptron output if z 0: # positive example classified as negative weights weights eta*weights.shape z np.dot(neg, weights) if z 0: # negative example classified as positive weights weights - eta*weights.shape return weights自研框架文档则把单层感知机扩展为多层感知机引入非线性的激活函数 α、softmax 归一化并用链式法则手写反向传播——例如∂L/∂w₂ (∂L/∂σ)(∂σ/∂z₂)(∂z₂/∂w₂)。同时它引入了小批量minibatch随机梯度下降SGD由于损失是对全部训练样本求和实践中改为每次随机取一小部分数据计算梯度。把这两份文档与本文对照你就能清晰地看出框架存在的意义感知机时代手动写梯度更新公式还能忍受一旦网络变深手动求导变得繁琐易错于是 TensorFlow 与 PyTorch 通过计算图自动微分把这一环节彻底自动化——这正是低层 API 提供的核心能力。在 RAG 课程中的实际应用本文件并非孤立的理论材料它正是第 15 课 RAG 知识库的三份原始数据之一。在 notebook-rag-vector-databases.ipynb 中课程把frameworks.md、own_framework.md、perceptron.md三份 Markdown 文档作为「AI for Beginners 神经网络课程」的知识来源演示了完整的 RAG 落地流程读取与切块notebook 用split_text函数max_length400, min_length300把整篇文档按词切分为 300400 字符的知识块向量化存储切块后的文本通过 embedding 模型如 OpenAI 的text-embedding-ada-002转换为向量存入向量数据库检索增强生成用户提问时检索器用余弦相似度等度量找到最接近的知识块与提示词一起交给 LLM 生成答案。也就是说你现在读到的这篇「框架与过拟合」内容在课程里正是被当作**接地数据grounding data**喂给聊天机器人的素材。想了解切块与向量数据库的具体配置可阅读 第 15 课 README 中「Creating a knowledge base」一节以及 Azure Cosmos DB 的创建命令az cosmosdb create等和基于sklearn.neighbors.NearestNeighbors构建搜索索引的示例。练习与作业用全连接网络解决分类问题在配套 notebook 的末尾附有任务tasks请跟随 notebook 完成练习。掌握框架之后本课的作业要求如下使用 PyTorch 或 TensorFlow解决两个分类问题分别用单层和多层的全连接网络fully-connected networks实现。推荐的自学路径研究 TensorFlow 与 PyTorch 的差异深入理解过拟合与欠拟合的区别结合前文的自研框架代码体会「手工反向传播」与「框架自动微分」之间的演进关系。结论本节课围绕两条主线展开其一认识了最流行的两个 AI 框架 TensorFlow 与 PyTorch 各自低层/高层 API 的差异——低层 API 通过计算图提供自动微分与 GPU 并行能力高层 API 把网络抽象为层的序列并简化训练其二深入理解了过拟合问题——它的成因、检测信号训练误差低而验证误差高、预防手段增加数据、降低复杂度、正则化以及它与偏差-方差权衡的内在联系。掌握这些基础你就具备了在 RAG、Agent、微调等后续生成式 AI 场景中正确构建和评估模型的能力。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考