教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载导读本篇以 AI for Beginners 课程「3-NeuralNetworks」章节章节总览为核心骨架系统讲解神经网络从生物启发到数学建模、从单层感知机到多层网络的完整演进路径。你将掌握神经元模型的数学表达与激活函数、感知机的训练原理与代码实现、梯度下降与反向传播的核心推导以及 TensorFlow / PyTorch 框架的选型思路与过拟合的检测、预防方法并了解仓库中配套 notebook 与实验的完整实践路线。一、神经网络与机器学习从人工大脑说起课程开篇指出实现智能的一条经典路径是训练一个计算机模型即人工大脑artificial brain。自 20 世纪中叶起研究者不断尝试各种数学模型直到近年这一方向取得了巨大成功——这类对大脑的数学建模被称为神经网络Neural Networks。当强调它们是模型而非真实的神经元网络时常被称作人工神经网络Artificial Neural Networks, ANNs。1.1 神经网络在机器学习中的位置神经网络属于更大的学科——机器学习Machine Learning的一部分。机器学习的核心目标是用数据训练计算机模型使其具备解决实际问题的能力。机器学习是人工智能的很大一个组成部分但本课程聚焦神经网络模型并不展开经典机器学习方法若想系统学习经典 ML可参考本仓库配套的另一套公开课程 Machine Learning for Beginners。1.2 数据、特征与标签机器学习的基本设定是我们拥有一个样本数据集X及其对应的输出值Y。其中样本examples通常是 N 维向量由若干特征features组成输出被称为标签labels。若以张量tensor表示输入与输出则输入数据集是一个 M×N 的矩阵M 为样本数N 为特征数输出标签Y是长度为 M 的向量。1.3 两类最常见的问题本课程讨论两类机器学习问题分类Classification将输入对象划分到两个或多个类别之一回归Regression为每个输入样本预测一个数值。二、神经元的数学模型生物启发下的第一块积木2.1 从生物神经元说起从生物学我们知道大脑由神经细胞神经元构成每个神经元有多个输入树突dendrites和一个输出轴突axon。树突与轴突都能传导电信号而它们之间的连接——突触synapses——由神经递质调节表现出不同程度的导电性。神经元的这种多输入、单输出、连接可调节结构成为人工神经元模型的直接灵感来源。真实神经元人工神经元上图为课程文档中的对照图左为取自 Wikipedia 的真实神经元示意图右为课程作者绘制的人工神经元示意图。2.2 神经元的最简数学形式最简单的人工神经元模型包含多个输入 X₁, …, X_N 与一个输出 Y以及一组权重 W₁, …, W_N。输出按下式计算其中f是某个非线性的激活函数activation function。权重可以直观理解为该输入有多重要激活函数则负责引入非线性能力——这是后续多层网络能够拟合复杂决策边界的关键。2.3 历史坐标课程文档特别提示了两份里程碑文献1943 年Warren McCulloch 与 Walter Pitts 在经典论文A logical calculus of the ideas immanent in nervous activity中描述了早期的神经元模型Donald Hebb 在The Organization of Behavior: A Neuropsychological Theory一书中提出了如何训练这类网络即著名的 Hebb 学习规则雏形。三、感知机Perceptron最早的二分类神经网络3.1 历史Mark-1 感知机第一次真正接近现代神经网络的尝试来自 1957 年 Cornell 航空实验室的 Frank Rosenblatt。他做出了名为Mark-1的硬件实现用于识别三角形、正方形、圆形等基础几何图形。输入图像由 20×20 的光电池阵列表示因此网络有 400 个输入和 1 个二值输出。这个简单网络只含一个神经元也被称为阈值逻辑单元threshold logic unit其权重扮演类似电位器potentiometer的角色需要在训练阶段手工调节。当时《纽约时报》甚至预言它将成为能够行走、说话、看见、书写、自我复制并意识到自身存在的电子计算机的胚胎——这段话今天读来颇有历史趣味。3.2 感知机模型假设模型有 N 个特征输入向量是 N 维的。感知机是一个二分类模型即只能区分两类输入数据。对每个输入向量 x感知机输出 1 或 -1取决于类别计算公式为y(x) f(wᵀx)其中 f 是阶跃激活函数step activation function当输入 ≥ 0 时输出 1当输入 0 时输出 -1参见课程文档中的 activation-func 示意图。3.3 训练目标最小化误差训练感知机的目标是找到能正确分类绝大多数样本的权重向量 w即让误差error最小。该误差由感知机准则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 的梯度gradient。代入梯度后得到w⁽ᵗ⁺¹⁾ w⁽ᵗ⁾ ∑ η·xᵢ·tᵢ即每次向被误分类样本的加权方向修正权重。3.4 训练代码来自课程文档课程文档给出了如下 Python 训练循环其中pos为正样本、neg为负样本η 默认为 1迭代 100 轮def train(positive_examples, negative_examples, num_iterations 100, eta 1): weights [0,0,0] # 初始化权重近乎随机 for i in range(num_iterations): pos random.choice(positive_examples) neg random.choice(negative_examples) z np.dot(pos, weights) # 计算感知机输出 if z 0: # 正样本被误判为负类 weights weights eta*weights.shape z np.dot(neg, weights) if z 0: # 负样本被误判为正类 weights weights - eta*weights.shape return weights提示上述伪代码在仓库原文档中保留了示意性质eta*weights.shape处需按 numpy 广播语义替换为与样本同维的更新量。想获得可直接运行、工程完整的从零实现可对照仓库示例 examples/02-simple-neural-network.py它用纯 Python math实现了一个含feedforward前向传播与train反向修正的单神经元通过 50 轮训练学会区分直线 y x 上下的点并输出分类准确率——这段示例与感知机课程互为印证非常适合动手验证。3.5 配套 notebook 与实验课程为感知机配备了交互式 notebook Perceptron.ipynb其中用sklearn.datasets.make_classification生成 50 个二维样本正负标签被转换为 1/−1并按 8:2 划分训练/测试集逐步演示感知机的 toy problem 与真实问题求解。对应的课后实验 lab/README.md 则要求把二分类感知机扩展为完整的多分类数字识别思路是逐数字 vs 其余数字构造 10 个二分类感知机并把 10 个权重合并成矩阵一次性做矩阵乘法最后用argmax找出最可能的数字同时计算训练集/测试集准确率并打印混淆矩阵。起始代码见 PerceptronMultiClass.ipynb。四、多层感知机与反向传播突破线性边界上一节讨论的单层感知机是线性二分类模型只能处理线性可分问题。课程在 04-OwnFramework 章节 中将其扩展为更灵活的框架目标是支持除二分类外的多分类multi-class classification除分类外的回归问题regression分离线性不可分的类别。同时课程将带领你用 Python 自建一个模块化框架以理解现代神经网络的工作原理。4.1 机器学习的规范化表述形式化地看给定带标签的训练集X与Y需要构建模型 f 做出最准确的预测预测质量由损失函数loss function衡量。常用损失包括回归问题预测数值绝对误差∑ᵢ|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⟩可以计算出整个数据集上作为参数 θ 之函数的总体误差。神经网络训练的目标就是通过改变参数 θ 来最小化误差。4.2 梯度下降优化函数优化有一个成熟方法——梯度下降计算损失函数关于参数的导数多维情形下即梯度并沿着使误差减小的方向调整参数。形式化如下用随机值初始化参数 w⁽⁰⁾、b⁽⁰⁾反复执行更新步w⁽ⁱ⁺¹⁾ w⁽ⁱ⁾ − η·∂/∂wb⁽ⁱ⁺¹⁾ b⁽ⁱ⁾ − η·∂/∂b4.3 随机梯度下降SGD理论上优化步应基于整个数据集计算因为损失是对所有训练样本求和。但在实际训练中我们取数据集的小块——小批量minibatches——基于子集计算梯度。由于每次随机抽取子集这种方法被称为随机梯度下降Stochastic Gradient Descent, SGD它是现代深度学习训练的默认引擎。4.4 多层网络与链式法则单层网络只能分类线性可分的类别。为了构建更强大的模型可以把若干网络层组合起来。数学上函数 f 会变得更复杂分多步计算z₁ w₁x b₁z₂ w₂α(z₁) b₂f σ(z₂)其中α 是非线性激活函数σ 是 softmax参数 θ ⟨w₁, b₁, w₂, b₂⟩。梯度下降算法本身不变但梯度的计算变难了。依据链式求导法则chain rule可以这样展开∂/∂w₂ (∂/∂σ)·(∂σ/∂z₂)·(∂z₂/∂w₂)∂/∂w₁ (∂/∂σ)·(∂σ/∂z₂)·(∂z₂/∂α)·(∂α/∂z₁)·(∂z₁/∂w₁)注意到这些表达式的最左端部分完全相同因此可以高效地从损失函数出发、沿计算图反向逐层计算导数。这种训练多层感知机的方法因此被称为反向传播backpropagation简称 backprop。课程在 OwnFramework.ipynb 中会给出非常详细的推导与实现你可以亲手构建自己的框架并观察现代神经网络内部的运作细节。4.5 配套实验本节的课后实验 lab/README.md 要求使用本节自建的框架解决MNIST 手写数字分类问题。完成代码见 MyFW_MNIST.ipynb——不用任何 ML 框架训练一个能认手写数字的神经网络正是理解反向传播的绝佳路径。五、深度学习框架TensorFlow 与 PyTorch5.1 为什么需要框架要高效训练神经网络需要解决两件事课程文档 05-Frameworks/README.md张量运算矩阵乘、加法以及 sigmoid、softmax 等函数的计算自动求梯度为执行梯度下降需要计算所有表达式的梯度。numpy能胜任第一点但无法自动求导。在上一节自建框架中我们不得不在backward方法里手工编写每个导数函数。理想的框架应能对任意可定义表达式自动计算梯度。另一个关键诉求是在 GPU 或其他专用计算单元如 TPU上执行计算。深层网络训练的计算量巨大能否把计算并行化到 GPU 上至关重要并行化意为把计算分布到多个设备上。5.2 两大框架与两级 API当前最流行的两个神经网络框架是TensorFlow与PyTorch二者都提供在 CPU/GPU 上操作张量的低层 API其上层又有更高级的封装层级TensorFlowPyTorch低层 APITensorFlowPyTorch高层 APIKerasPyTorch Lightning低层 API允许你构建所谓计算图computational graph该图定义了在给定输入参数下如何计算输出通常是损失函数并可在可用时推送到 GPU 上执行框架还提供对计算图求导、计算梯度的函数用于优化模型参数。高层 API把神经网络看作层的序列sequence of layers让搭建大多数网络变得非常简单训练模型通常只需准备数据然后调用fit函数即可完成。5.3 两级 API 如何取舍高层 API 能让你快速搭建典型网络不必操心大量细节低层 API 对训练过程提供更精细的控制因此在研究新架构时被大量使用二者可以混用比如用低层 API 开发自定义网络层再放进高层 API 构建的大网络里或用高层 API 以层序列定义网络再用自己的低层训练循环做优化。两种 API 基于同一套底层概念设计上就能良好协作。5.4 本课程的学习路径课程尽量为 PyTorch 和 TensorFlow 双线提供内容可按偏好任选其一的 notebook 跟学不确定时建议先浏览两个框架再做决定。在可能的情况下课程优先用高层 API 以简化入门但同时强调从底层理解神经网络如何工作因此开篇仍从低层 API 与张量操作讲起——如果你只想快速上手也可以跳过底层细节直接进入高层 API 的 notebook。动手练习请跟随以下 notebook层级TensorFlow 线PyTorch 线低层 APIIntroKerasTF.ipynbIntroPyTorch.ipynb高层 APIIntroKeras.ipynbPyTorch Lightning配套实验 lab/LabFrameworks.ipynb 要求你使用 PyTorch 或 TensorFlow分别用单层与多层全连接网络解决两个分类问题——恰好用来对比感知机与多层网络的表达能力差异。六、过拟合Overfitting必须一次学对的概念掌握框架之后课程用一节内容专门回顾过拟合——机器学习中极其重要、也极易出错的议题详见 05-Frameworks 章节的 Overfitting 部分。6.1 什么是过拟合考虑用 5 个数据点图中用x标记做曲线拟合线性模型2 个参数非线性模型7 个参数训练误差 5.3训练误差 0验证误差 5.1验证误差 20左图直线近似是恰当的。参数数量与数据规模匹配模型正确把握了点的分布规律右图模型过于强大。只有 5 个点却给了 7 个参数模型可以扭曲自身穿过所有点使训练误差降为 0但这反而阻止模型学到数据背后的真实模式导致验证误差非常高20。可见在模型丰富度参数数量与训练样本数量之间取得平衡至关重要。6.2 过拟合的成因课程文档归纳了三个常见原因训练数据不足模型过于强大输入数据中的噪声过多。6.3 如何检测过拟合从上图可以看出过拟合表现为训练误差极低、验证误差却很高。正常训练过程中训练误差与验证误差通常先一起下降随后验证误差可能停止下降甚至开始回升——这正是过拟合的信号意味着此时应当停止训练或至少为模型保存一份快照。6.4 如何预防过拟合发现过拟合时可以采取以下措施之一增加训练数据量降低模型复杂度使用正则化技术regularization例如课程后续章节08-TransferLearning/TrainingTricks.md中会讲到的Dropout。6.5 过拟合与偏差-方差权衡过拟合本质上是统计学中更一般的问题——偏差-方差权衡Bias-Variance Tradeoff的一个特例。模型误差有两个来源偏差误差bias算法没能正确捕捉训练数据之间的关系通常源于模型能力不足即欠拟合underfitting方差误差variance模型拟合了输入数据中的噪声而非真实关系即过拟合。训练过程中偏差误差随模型逼近数据而下降方差误差则上升。因此重要的是在合适的时机停止训练——无论是人工检测到过拟合而手动停止还是通过引入正则化自动抑制——从而防止过拟合。七、动手实践路径总览结合上述内容本部分的学习路线可以这样串联概念基础阅读 3-NeuralNetworks 章节总览理解神经元模型、机器学习与激活函数感知机实战完成 Perceptron.ipynb再挑战 lab/PerceptronMultiClass.ipynb 的多分类数字识别自建框架跟随 OwnFramework.ipynb 手工实现前向传播与反向传播并用 lab/MyFW_MNIST.ipynb 在 MNIST 上验证框架入门按偏好选择 IntroPyTorch.ipynb 或 IntroKerasTF.ipynb再完成 lab/LabFrameworks.ipynb概念巩固深入理解过拟合的检测与预防为后续计算机视觉、NLP 等章节打好基础。如果想先跑一个最简可运行的完整示例建立直觉仓库根目录的 examples/02-simple-neural-network.py 是一个极佳起点它不依赖任何 ML 框架用 100 行左右的纯 Python 完成数据生成、前向传播、反向修正与准确率评估更早的 examples/01-hello-ai-world.py 则用最简单的权重学习演示了从数据中学习模式这一 AI 最核心的思想可作为进入神经网络前的热身。小结本部分从生物神经元的启发出发依次走过了神经元的数学建模、感知机的历史与训练、多层感知机与反向传播的推导、TensorFlow/PyTorch 框架的两级 API 选择以及贯穿始终的过拟合议题。这条路径完整覆盖了AI for Beginners神经网络入门所需的核心知识配合仓库中的 notebook 与实验足以支撑你从零开始亲手训练出第一个能用的神经网络模型。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI-For-Beginners 神经网络课程导读从感知机到深度学习框架AI For Beginners 神经网络课程导读从感知机到深度学习框架 本节内容是开源课程 AI For Beginners https://link.gi教程人工智能机器学习深度学习AI for Beginners 神经网络入门从感知机到现代深度学习框架AI for Beginners 神经网络入门从感知机到现代深度学习框架 导读 本文是 AI for Beginners 课程第 3 大章《神经网络Neur教程人工智能机器学习深度学习AI-For-Beginners 神经网络入门指南从感知机到现代深度学习框架AI For Beginners 神经网络入门指南从感知机到现代深度学习框架 本指南以 AI For Beginners 课程第三部分神经网络 less教程人工智能机器学习深度学习上一篇wger后端代码覆盖率使用Coveralls集成健身平台测试下一篇3分钟搞定Charles网络调试代理完全破解指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?