资讯动态

AI-For-Beginners 神经网络入门:从感知机到 PyTorch 的完整学习路线

发布时间:2026/10/1 2:33:35 来源:尧图企业网站定制
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本篇文章基于 AI-For-Beginners 开源课程中神经网络章节translations/ar/lessons/3-NeuralNetworks/README.md对应英文原版见 lessons/3-NeuralNetworks/README.md整理而成。课程围绕训练一个计算机模型人工大脑来实现智能这一主线从机器学习的基本定义出发系统讲解神经元数学模型、感知机、多层网络、主流深度学习框架与过拟合问题。读完本文你将掌握神经元模型的前向计算公式、感知机训练算法、自建神经网络框架的核心层实现含反向传播以及用 PyTorch / Keras 搭建真实网络的实战路径。机器学习神经网络的知识地基神经网络属于一个更大的学科——机器学习Machine Learning。机器学习的目标是用数据训练计算机模型使其能够解决问题。机器学习是人工智能的重要组成部分但本课程AI-For-Beginners不讲解经典机器学习方法而只聚焦神经网络模型如果你希望学习传统机器学习课程作者维护了专门的 ML for Beginners 系列教程。在机器学习的形式化设定中我们假设拥有一组数据样本X和对应的输出值Y样本 X 通常是 N 维向量由多个**特征features**组成输出 Y 被称为标签labels。课程重点讨论机器学习中最常见的两类问题分类Classification需要把输入对象划分到两个或多个类别中回归Regression需要为每个输入样本预测一个数值。当把输入和输出表示为张量tensor时输入数据集是一个大小为 M×N 的矩阵其中 M 是样本数N 是特征数输出标签 Y 是大小为 M 的向量。这一样本—特征—标签的张量视图是后续理解深度学习框架中一切数据结构如 PyTorch Tensor的基础。神经元的数学模型从生物到公式从生物学中我们知道人脑由神经细胞神经元构成每个神经元有多个输入树突和一个输出轴突。树突和轴突都能传导电信号而它们之间的连接——突触synapse——可以表现出不同程度的传导性并由神经递质调节。由此可以抽象出最简单的神经元数学模型包含若干输入 X₁, …, Xₙ、一个输出 Y以及一组权重 W₁, …, Wₙ。输出按如下公式计算其中 f 是某个非线性激活函数activation function。非线性的存在至关重要——没有它多层线性变换叠加后仍然等价于单层线性模型无法拟合复杂分布。需要说明的历史背景神经元的早期数学模型由 Warren McCulloch 与 Walter Pitts 于 1943 年在论文《A logical calculus of the ideas immanent in nervous activity》中提出Donald Hebb 则在《The Organization of Behavior: A Neuropsychological Theory》中提出了这类网络可以被训练的方式即后来所称的Hebb 学习律的思想源头。这也是为什么有时神经网络被称为人工神经网络Artificial Neural Networks, ANNs——强调我们讨论的是数学模型而不是真实的神经元网络。本章导览四个层层递进的主题在进入代码之前先看本小节3-NeuralNetworks的完整路线图后续章节逐一展开Perceptron感知机最早的神经网络模型之一用于二分类任务多层网络Multi-Layered Networks配套笔记本 如何构建我们自己的框架从零写一个可用的神经网络库神经网络框架Frameworks配套笔记本 PyTorch 入门 与 Keras/TensorFlow 入门过拟合Overfitting深度学习中最需要重视的工程问题之一。实战一感知机Perceptron——最早的神经网络感知机的历史可以追溯到 1957 年。当时 Frank Rosenblatt 在康奈尔航空实验室实现了硬件版本的Mark-1感知机用于识别三角形、正方形、圆形等基本几何图形。输入图像由 20×20 的光电池阵列表示因此网络有 400 个输入和 1 个二进制输出这个简单的网络只包含一个神经元也称为阈值逻辑单元threshold logic unit。有趣的是当时的神经网络权重就像电位器一样需要在训练阶段手动调节——这正是早期神经网络的真实样貌。感知机模型假设模型有 N 个特征输入向量大小为 N。感知机是一个二分类模型能区分两类输入数据。对每个输入向量 x感知机输出为 1 或 -1取决于类别计算公式为y(x) f(wᵀx)其中 f 是阶跃激活函数step activation function。阶跃函数的含义很直观当输入大于等于 0 时输出 1小于 0 时输出 -1。这一步函数正是阈值逻辑单元名称的由来。训练感知机感知机准则与梯度下降训练感知机的目标是找到一个权重向量 w使大多数样本被正确分类即总体误差最小。误差 E 由**感知机准则perceptron criterion**定义E(w) -Σ wᵀxᵢ·tᵢ其中求和只针对那些被错误分类的训练数据点 ixᵢ 是输入数据tᵢ 对正样本取 1、对负样本取 -1。该准则是权重 w 的函数我们需要最小化它。通常使用**梯度下降gradient descent**方法先取初始权重 w⁽⁰⁾然后每一步按公式更新w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ - η·∇E(w)其中 η 是学习率learning rate∇E(w) 表示 E 的梯度。计算出梯度后更新公式化简为w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ Σ η·xᵢ·tᵢ课程 README 中给出了完整的 Python 训练实现可逐行对照理解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这段代码的核心逻辑是每次随机抽出一个正样本与一个负样本计算感知机输出若正样本被误判为负z 0则沿正方向调整权重若负样本被误判为正z ≥ 0则沿反方向调整权重。迭代 num_iterations 次后返回权重向量。动手实验课程为感知机提供了配套笔记本 Perceptron.ipynb先构造一个玩具问题例如医学中依据肿瘤大小与年龄区分良性与恶性用sklearn.datasets.make_classification生成二分类数据集并将标签从 0/1 转换为 -1/1按 8:2 切分训练/测试集最后绘制数据散点并训练感知机。完成课时后实验作业 lab 要求把感知机从二分类推广到完整的多类手写数字识别PerceptronMultiClass.ipynb即判断给定图像最可能对应哪个数字0–9。实战二从单层到多层——自建神经网络框架上一节的感知机是单层模型本质是线性二分类器。本小节将其扩展为更灵活的框架从而支持在二分类之外执行多分类任务在分类之外解决回归问题分离线性不可分的类别。同时课程会引导你在 Python 中逐步构建自己的模块化框架以便搭建不同的网络结构。机器学习问题的形式化损失函数设有训练数据集 X 与标签 Y需要构建模型 f 作出尽可能准确的预测。预测质量由损失函数loss functionL 度量。课程列出了常用的损失函数回归问题预测数值绝对误差Σᵢ|f(x⁽ⁱ⁾) - y⁽ⁱ⁾|或平方误差Σᵢ(f(x⁽ⁱ⁾) - y⁽ⁱ⁾)²分类问题0-1 损失本质等同于模型准确率或逻辑损失logistic loss。单层感知机的 f 定义为线性函数 f(x) wx bw 为权重矩阵x 为输入特征向量b 为偏置向量不同网络架构下f 可以取更复杂的形式。分类场景中通常希望网络输出各类别的概率为此引入softmax函数 σ 将任意实数归一化为概率分布函数变为 f(x) σ(wx b)。这里的 w 和 b 被称为参数θ ⟨w, b⟩给定数据集 ⟨X, Y⟩ 后整个数据集上的总体误差可视为参数 θ 的函数。训练神经网络的本质目标就是通过不断调整参数 θ 使误差最小化。梯度下降与随机梯度下降SGD函数优化的经典方法是梯度下降计算损失函数对参数的导数多维情况下称为梯度并按使误差减小的方向调整参数。形式化如下用随机值初始化参数 w⁽⁰⁾, b⁽⁰⁾重复以下更新步骤多次w⁽ⁱ⁺¹⁾ w⁽ⁱ⁾ - η·∂L/∂wb⁽ⁱ⁺¹⁾ b⁽ⁱ⁾ - η·∂L/∂b理论上每次优化应基于整个数据集计算因为损失是所有训练样本之和但实际中我们每次只取数据集的一小部分——小批量minibatches——并基于这一子集计算梯度。由于子集是随机抽取的这种方法被称为随机梯度下降Stochastic Gradient Descent, SGD。这一设定与 AI-For-Beginners 中后续课程如 05-Frameworks里对训练循环的理解直接相关。多层感知机与反向传播单层网络只能分类线性可分的类别。为了构建更丰富的模型可以把多个网络层组合起来。数学上函数 f 将具有更复杂的形式并分多步计算z₁ w₁x b₁z₂ w₂·α(z₁) b₂f σ(z₂)其中 α 是非线性激活函数σ 是 softmax 函数参数 θ ⟨w₁, b₁, w₂, b₂⟩。梯度下降算法本身不变但梯度计算变得更困难。根据链式求导法则可以这样计算导数∂L/∂w₂ (∂L/∂σ)(∂σ/∂z₂)(∂z₂/∂w₂)∂L/∂w₁ (∂L/∂σ)(∂σ/∂z₂)(∂z₂/∂α)(∂α/∂z₁)(∂z₁/∂w₁)注意所有表达式最左侧的部分∂L/∂σ是相同的因此可以从损失函数出发沿计算图反向高效地逐层求出导数。这种训练多层感知机的方法因此被称为反向传播backpropagation简称 backprop。从源码看框架实现前向、反向与参数更新自建框架的核心思想在 OwnFramework.ipynb 中体现得淋漓尽致每个网络层被定义为一个类同时实现forward前向计算与backward反向梯度两个方法。以全连接层Linear为例源码位于笔记本中class Linear: def __init__(self, nin, nout): self.W np.random.normal(0, 1.0/np.sqrt(nin), (nout, nin)) self.b np.zeros((1, nout)) self.dW np.zeros_like(self.W) self.db np.zeros_like(self.b) def forward(self, x): self.x x return np.dot(x, self.W.T) self.b def backward(self, dz): dx np.dot(dz, self.W) dW np.dot(dz.T, self.x) db dz.sum(axis0) self.dW dW self.db db return dx def update(self, lr): self.W - lr*self.dW self.b - lr*self.db几个值得留意的实现细节权重 W 用np.random.normal(0, 1/np.sqrt(nin))初始化——即均值为 0、标准差为输入维数的平方根倒数的高斯分布这种初始化方式有助于缓解梯度消失forward里缓存输入self.x供backward计算 dW 时复用update(lr)直接执行 w ← w - lr·dW 的参数更新对应前文梯度下降公式。与之配套的还有Softmax层其forward使用减去最大值z.max(axis1, keepdimsTrue)的数值稳定技巧后再做指数归一化使每个输出向量的分量之和恰好为 1以及CrossEntropyLoss损失层对每个样本取真实类别对应的对数概率再取均值作为损失对应公式 -log(p_of_y).mean()。把这些层按顺序组合起来就得到一张计算图输入 x → Linear → Softmax → CrossEntropyLoss → 标量损失反向传播时从损失逐层调用backward即可求出全部梯度。完成本小节后实验作业MyFW_MNIST.ipynb要求用你亲手搭建的框架完成 MNIST 手写数字分类从而完整体会从原理到框架再到应用的全过程。实战三接入工业级框架——PyTorch 与 Keras/TensorFlow前两节展示了手写框架的工作机制但高效训练神经网络还需要解决两件事张量运算乘、加以及 sigmoid、softmax 等函数所有表达式的梯度计算以执行梯度下降优化。numpy可以完成第一部分但梯度必须依赖框架机制。在我们上一节的自建框架里所有导数函数都必须手工写进backward方法而理想框架应该能对任意可定义表达式自动求梯度。此外深度网络训练的计算量极大框架还需要能在 GPU或 TPU 等专用计算单元上并行计算——并行化就是把计算分布到多个设备上执行。目前最主流的两个神经网络框架是TensorFlow与PyTorch。两者都提供低层 API 支持 CPU/GPU 上的张量操作并在其上提供高层 APITensorFlow 对应KerasPyTorch 对应PyTorch Lightning抽象层级TensorFlowPyTorch低层 APITensorFlowPyTorch高层 APIKerasPyTorch Lightning两种设计各有取舍低层 API允许构建所谓的计算图图定义了在给定输入参数下如何计算输出通常是损失函数并且可被推送到 GPU 执行框架提供对计算图求导、计算梯度的函数用于优化模型参数。低层 API 对训练过程有更强的控制力常用于研究新网络架构的场景高层 API把神经网络看作层的序列构建大多数常见网络变得非常简单训练模型通常只需准备好数据、调用一个fit函数即可。两者并非互斥你可以用低层 API 开发自定义网络层再放进高层 API 构建的大网络中也可以用高层 API 定义网络再写自己的低层训练循环。由于底层概念一致它们可以很好地协同工作。课程建议追求快速上手可以跳过张量细节直接进入高层 API 笔记本想从底层理解神经网络则先完成低层 API 和张量部分。环境准备与张量概念以 IntroPyTorch.ipynb 为例环境准备非常简单pip install torch torchvision或使用 condaconda install pytorch -c pytorch张量Tensor是多维数组非常适合表示各种类型的数据课程给出了直观的维度对照400×400黑白图片400×400×3彩色图片RGB 三通道16×400×400×3包含 16 张彩色图片的小批量25×400×400×31 秒 25 fps 的视频8×25×400×400×38 段 1 秒视频的小批量。理解张量的维度演进是后续所有计算机视觉、NLP 课程如 4-ComputerVision、5-NLP的数据基础。TensorFlow 一方的对应笔记本为 IntroKerasTF.ipynb 与 IntroKeras.ipynb。过拟合Overfitting训练中最需警惕的现象完成框架学习之后课程引入了一个极其重要的概念——过拟合。考虑用模型近似 5 个数据点图中用 x 标记线性模型2 个参数训练误差 5.3验证误差 5.1——参数数量与数据规模匹配模型正确把握了点的分布规律非线性模型7 个参数训练误差 0验证误差 20——模型过于强大只有 5 个点却拥有 7 个参数它可以调整到穿过所有点、把训练误差做到 0但这阻碍了模型理解数据背后的真实模式导致验证误差极高。过拟合为什么会发生训练数据不足模型过于强大参数过多输入数据中噪声过多。如何检测过拟合从上面的例子可以看到过拟合可以通过极低的训练误差 很高的验证误差来识别。训练过程中通常训练误差与验证误差会一起下降但到某个点之后验证误差可能停止下降甚至回升——这正是过拟合的信号意味着此时应当停止训练或至少对模型做一次快照存档。课程为此专门绘制了训练/验证误差随训练进度变化的示意图见 lessons/3-NeuralNetworks/images/Overfitting.png。如何预防过拟合一旦发现过拟合可以采取以下措施之一增加训练数据量降低模型复杂度使用正则化技术regularization例如 Dropout——该技巧在课程后面的 08-TransferLearning 小节TrainingTricks.md中会详细展开。过拟合与偏差-方差权衡过拟合实际上是统计学中更普遍的**偏差-方差权衡Bias-Variance Tradeoff**问题的一个具体案例。模型误差有两种来源偏差误差Bias算法未能正确捕捉训练数据中的关系通常源于模型不够强大——对应欠拟合underfitting方差误差Variance模型近似的是输入数据中的噪声而非有意义的关系——对应过拟合。训练过程中偏差误差随模型逐渐逼近数据而下降方差误差则不断上升。因此在正确的时间点停止训练——手动检测到过拟合时或自动通过引入正则化——对于防止过拟合至关重要。配套实验与完整学习路径本小节3-NeuralNetworks的每个主题都配有可运行的笔记本与实验作业建议按顺序完成主题核心笔记本实验作业感知机Perceptron.ipynb多类数字识别自建框架OwnFramework.ipynbMNIST 分类深度学习框架IntroPyTorch.ipynb、IntroKerasTF.ipynbLabFrameworks.ipynb用 PyTorch 或 TensorFlow 完成单层与多层全连接网络的两个分类问题课程整体采用12 周、24 课的编排详见 README.md本节是通往计算机视觉4-ComputerVision与自然语言处理5-NLP等后续章节的基石。建议的推进方式先在笔记本中完整跑通感知机与自建框架理解每一层forward/backward的含义再切换到 PyTorch 或 TensorFlow 的高层 API 熟悉生产级开发方式最后带着过拟合的意识去评估每一次训练的验证误差。学习过程中如需回顾环境搭建可参考 lessons/0-course-setup 与仓库根目录的 requirements.txtenvironment.yml 提供 conda 环境定义。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐神经网络入门之感知机从 generative-ai-for-beginners 知识库看单层感知机的模型与训练原理神经网络入门之感知机从 generative ai for beginners 知识库看单层感知机的模型与训练原理 感知机Perceptron是现代神经网教程人工智能大模型感知机Perceptron从原理到训练generative-ai-for-beginners 第 15 课数据源中的神经网络入门感知机Perceptron从原理到训练generative ai for beginners 第 15 课数据源中的神经网络入门 在 generative教程人工智能大模型CANN/asc-devkit WholeReduceMax APIWholeReduceMaxa nameZH CN_TOPIC_0000001953491746 /a 产品支持情况a namesection1人工智能深度学习算子库CANNAscend上一篇戴尔G15散热控制终极指南开源神器Thermal Control Center完全解析下一篇戴尔G15散热控制终极指南开源替代方案快速部署与优化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑