华为杯ICT Ai赛道 第七章 深度网络基础组件
学习要点
❖ 详细阐述深度学习三要素
❖ 解释神经元的“全或无”特性
❖ 列举不同的损失函数使用条件
❖ 比较不同优化器的优缺点
❖ 比较不同激活函数的优缺点
❖ 对一元二次方程进行梯度下降法计算
❖ 详细阐述BP 算法的基本过程、特点和局限性
❖ 阅读并理解Scikit-learn 编写的感知机模型代码并给出注释
回顾总结:从机器学习到深度学习
知识点总结
1. 机器学习建模流程
-
定义: 机器学习的核心思想是把大量的数据归纳到少数的参数中(即参数估计的过程)。
-
建模流程(顶部框图):
-
输入(数据): 原始数据输入。
-
学习算法: 对数据应用特定的学习算法。
-
输出(模型): 学习算法得到的结果就是一个可用于预测或决策的模型。
-
2. 机器学习与深度学习的关系
- 演进路径: 机器学习到深度学习是从简单到复杂,从线性到非线性,以及从可解释到不可解释的过程。
3. 学习算法的演进(底部框图)
学习算法从最基础的线性模型逐步复杂化,直到引入深度学习:
-
基础模型(最小二乘法):
-
最小二乘法是机器学习最基础的模型。
-
它用于解决一元线性回归(如 y=ax+by=ax+by=ax+b)。
-
公式含义:
-
X,yX, yX,y 是输入数据。
-
a,ba, ba,b 是参数。
-
确定 a,ba, ba,b 的过程就是学习。
-
学习的结构(输出)就是模型(M=F(X,y,a,b)M=F(X, y, a, b)M=F(X,y,a,b))。
-
-
-
复杂化: 一元线性回归扩展到多元线性回归(处理多个特征)。
-
更高级的算法: 线性回归之后,算法种类更加丰富和复杂:
-
逻辑回归 (Logistic Regression)
-
支持向量机 (SVM)
-
主成分分析 (PCA)
-
多层感知机 (MLP):这是第一个指向深度学习(深度神经网络)的模型,因为它引入了多层非线性处理。
-
-
深度学习: 多层感知机 (MLP) 的进一步复杂化和加深就构成了深度学习(深度神经网络)。
案例:最小二乘法(线性回归)
最小二乘法 (Least Squares Method) 在线性回归中的应用,它是机器学习中最基础的数学优化方法之一。
最小二乘法总结
1. 定义
- 最小二乘法是一种通过最小化预测值与实际观测值之间的平方误差来寻找最优数学模型参数的数学优化方法。
2. 模型与数据
-
给定数据点: 一组 nnn 个数据点 (x1,y1),(x2,y2),…,(xn,yn)(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)(x1,y1),(x2,y2),…,(xn,yn)。
-
拟合模型: 一个线性模型,形式为:
y=w⋅x+by = w \cdot x + by=w⋅x+b
其中,www 是斜率(权重/系数),bbb 是截距(偏置项),两者都是需要求解的模型参数。
3. 目标:最小化损失函数
-
损失函数(残差平方和): 衡量模型拟合优劣的标准,即实际值 yiy_iyi 与模型预测值 wxi+bw x_i + bwxi+b 之间差值的平方和。
J(w,b)=∑i=1n(yi−(wxi+b))2J(w, b) = \sum_{i=1}^{n} (y_i - (w x_i + b))^2J(w,b)=i=1∑n(yi−(wxi+b))2
(注意:原始图片中的公式为 J(w,b)=∑i=1n(yi−wxi−b)2J(w, b) = \sum_{i=1}^{n} (y_i - w x_i - b)^2J(w,b)=∑i=1n(yi−wxi−b)2,这与 yi−(wxi+b)y_i - (w x_i + b)yi−(wxi+b) 等价。)
目标是找到参数 www 和 bbb,使 J(w,b)J(w, b)J(w,b) 最小。
4. 参数最优解(解析解)
-
通过对损失函数 J(w,b)J(w, b)J(w,b) 分别对参数 www 和 bbb 求偏导数并令其为零(这是寻找极值的标准方法),可以得到最优参数的解析解:
-
最优权重 www:
w=n∑xiyi−∑xi∑yin∑xi2−(∑xi)2w = \frac{n \sum x_i y_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2}w=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yi
-
最优截距 bbb:
b=yˉ−w⋅xˉb = \bar{y} - w \cdot \bar{x}b=yˉ−w⋅xˉ
-
其中,xˉ\bar{x}xˉ 和 yˉ\bar{y}yˉ 分别是 xxx 与 yyy 的平均值。
xˉ=1n∑xi和yˉ=1n∑yi\bar{x} = \frac{1}{n} \sum x_i \quad \text{和} \quad \bar{y} = \frac{1}{n} \sum y_ixˉ=n1∑xi和yˉ=n1∑yi
-
7.2 图像识别破冰
图像分类 (Image Classification) 问题的核心概念、目标以及它对于人类和计算机的不同难度。
总结要点
1. 图像分类的定义与目标
-
问题: 图像分类问题 (Image Classification Problem)。
-
输入 (Input): 一个图像 (image)。
-
输出 (Output): 将该图像分配到一个固定的类别集合中的一个类别。
-
示例类别集合: cat (猫), bird (鸟), deer (鹿), dog (狗), truck (卡车) 等。
-
目标: 对于输入的猫的图片,模型应正确输出类别 “cat”。
-
2. 人类与计算机的难度对比
-
对人而言 (Easy task for human): 图像分类对人类来说是一个非常简单的任务,人脑可以迅速识别出图片内容。
-
对计算机而言 (Hard for computer): 图像分类对计算机来说是一个非常困难的任务。
3. 计算机如何“看”图像
-
计算机的视角: 计算机看到的图像不是物体或概念,而是一个巨大的数字网格 (big grid of numbers)。
-
数字范围: 这些数字通常在 0 到 255 之间,代表了每个像素点的亮度或颜色强度(对于彩色图像)。
-
图像表示示例: 例如一个 600×600×3600 \times 600 \times 3600×600×3 的图像。
-
600×600600 \times 600600×600 是图像的像素高和宽。
-
×3\times 3×3 代表三个颜色通道(通常是红、绿、蓝,即 RGB)。
-
核心思想: 图像分类的挑战在于,计算机必须从一个庞大的数字矩阵中学习模式和特征(如猫的形状、纹理等),然后将这些模式映射到正确的类别标签。
图像识别
总结了计算机视觉领域中四种核心任务的区别,这些任务在对图像内容的理解和定位上复杂度递增。
计算机视觉四种核心任务总结
| 任务名称 (中文/英文) | 任务目标 | 输出结果 | 关键特征 |
|---|---|---|---|
| 1. 分类 (Classification) | 判断图像中主要包含什么对象,输出一个类别标签。 | 单个类别标签,如 CAT。 | 无空间定位 (No spatial extent)。 忽略对象在图像中的具体位置,只关注图像的整体内容。 |
| 2. 语义分割 (Semantic Segmentation) | 对图像中的每个像素进行分类,标识其所属的类别(如草地、天空、猫等)。 | 每个像素都被标记上类别,形成色块区域。如 GRASS, CAT, TREE, SKY。 | 无对象区分 (No objects, just pixels)。 不区分同一类别的不同个体(例如,如果图中有两只猫,它们会被统一标记为“CAT”类别)。 |
| 3. 目标检测 (Object Detection) | 识别图像中的所有对象,并用边界框 (Bounding Box) 准确地定位出每个对象的位置。 | 多个对象的类别标签和对应的边界框。如 DOG, DOG, CAT。 | 多对象处理 (Multiple Objects)。 能够处理图像中的多个目标,并给出它们大致的位置信息。 |
| 4. 实例分割 (Instance Segmentation) | 识别图像中的所有对象,并为每个个体对象生成一个像素级的掩码 (Mask)。 | 多个对象的类别标签和精确的像素级掩码。如 DOG, DOG, CAT。 | 多对象处理 & 区分实例 (Multiple Objects & Instance-aware)。 比语义分割更进一步,它不仅识别类别,还能区分同一类别下的不同个体(例如,能区分图中的第一只狗和第二只狗)。 |
总结流程:
-
分类: 图像级别理解(“这张图是什么?”)。
-
语义分割: 像素级别理解(“每个像素是什么?”)。
-
目标检测: 定位对象并识别(“对象在哪里?”)。
-
实例分割: 精确分离出每个对象个体(“这个对象在哪里,有多大?”)。
案例:早期视频分析-图像识别
总结了计算机视觉在行为识别和目标跟踪领域的应用,并通过具体的案例和流程展示了图像处理的基本步骤。
总结要点
1. 应用案例
图示展示了计算机视觉在以下三个场景中的应用:
-
车辆识别-减影法(Vehicle Recognition - Subtraction Method):
![[Pasted image 20251021223651.png]]-
通过对比当前帧和背景帧(或前一帧)的差异来检测运动目标(如车辆)。
-
左侧截图展示了:
-
上方:原始视频帧。
-
下方:通过减影法提取出的运动目标(白色区域)及其边界框(红色)。
-
-
核心思想: 利用图像间的像素差异来实现运动物体的检测和识别。
-
-
Morris 水迷宫(Morris Water Maze):
![[Pasted image 20251021223702.png]]-
一种常用的动物认知行为实验。
-
图中左下角的图示是一个圆形的实验水池(可能用于拍摄实验视频)。
-
右下角的蓝色图示展示了小鼠在水迷宫中的运动轨迹,用于分析其学习和记忆能力。
-
-
小鼠穿梭箱(Shuttle Box):
-
一种用于学习和记忆、条件反射等行为研究的实验装置。
-
图中展示了穿梭箱的实物图和两张小鼠的运动轨迹图,用于定量分析小鼠的行为模式和空间利用情况。
-
2. 图像处理与目标识别流程(通用步骤)
图中底部流程框总结了从视频输入到目标识别的通用步骤:
| 步骤 | 中文描述 | 目的/作用 |
|---|---|---|
| 视频分解成图像 | 视频可以解码成一帧一帧的图片,每秒 24 帧。 | 将动态视频转化为计算机可处理的静态序列图像。 |
| 图像灰度化 | 将彩色的 RGB 图像(3 通道)转换成单通道的灰度图像。 | 减少数据量和计算复杂度,方便后续的图像处理。 |
| 图像二值化 | 设定一个阈值范围,将目标与背景区别开来。 | 将灰度图转化为只有黑白两种颜色的图像,突出目标主体。 |
| 边缘检测 | 通过一系列的算子,提取目标的边缘。 | 定位目标的精确轮廓,是形态学和目标识别的基础。 |
| 目标识别 | 通过提取一系列的特征,识别目标的特性并完成计算。 | 最终确定图像中目标是什么、在哪里,并进行定量分析(如计算速度、轨迹等)。 |
其他动物行为分析
总结了计算机视觉和视频分析技术在动物行为学分析中的广泛应用。
总结要点
1. 核心应用:动物行为分析 (Other Animal Behavior Analysis)
图中的大量图标展示了各种用于动物行为研究的实验设置和视频文件,表明计算机视觉技术被广泛用于自动化、定量化地分析动物(通常是啮齿类动物,如小鼠或大鼠)的行为。
2. 常见的实验类型和行为范式
左侧的视频文件列表涵盖了多种经典的动物行为学实验范式。这些实验通常用于研究动物的:
-
空间记忆和学习:
- 水迷宫-白鼠.mp4 / 水迷宫-黑鼠.mp4: 指的是 Morris 水迷宫,用于测试空间学习和记忆能力。
-
焦虑和抑郁:
- 旷场-白鼠.mp4 / 旷场-黑鼠.mp4: 指的是 高架十字迷宫 (Elevated Plus Maze) 或 旷场实验 (Open Field Test),用于评估动物的焦虑水平。
-
社交和探索:
-
社交-黑鼠.mp4: 可能指社交互动测试。
-
新物体-白鼠.mp4 / 新物体-黑鼠.mp4: 指 新物体识别 (Novel Object Recognition) 实验,用于评估探索行为和识别记忆。
-
-
空间选择和偏好:
- Y迷宫-白鼠.mp4 / T迷宫-黑鼠.mp4 / 八臂-黑鼠.mp4: 指各种迷宫实验(如 Y 迷宫、T 迷宫、八臂迷宫),用于研究工作记忆、参考记忆和决策行为。
3. 实时/捕获图像
右侧的图片很可能是一个俯视视角 (Top-down view) 的视频或图像帧,通常来自实验设备(如水迷宫或旷场)上方架设的摄像头。
- 用途: 这种俯视图像是计算机视觉系统进行目标跟踪和行为识别的直接输入。算法会在这个画面中识别并追踪动物的位置、计算运动轨迹、停留时间等定量数据。
总结: 整个图像展示了一个基于视频和图像处理技术的应用领域——利用计算机视觉自动化分析各种动物实验视频,从而对动物的学习、记忆、焦虑、社交等行为进行准确、客观的定量研究。
人眼识别物体的基本过程
这张图总结了人眼识别物体的基本过程,包括光信号的接收、在眼球和视网膜上的处理,以及信息传入大脑的神经通路。
总结:人眼识别物体的基本过程
人眼识别物体的过程是一个将外部世界的光信号转换为大脑可识别的电信号并进行处理的复杂过程。
1. 核心结构与功能
| 结构 | 作用 |
|---|---|
| 眼睛 | 接收物体反射的光信号,通过晶状体聚焦到视网膜。 |
| 视网膜 | 包含光感受器(感官细胞),将光信号转换为电信号。 |
| 视神经 | 将电信号从视网膜传递到大脑。 |
| 大脑 | 处理电信号,形成最终的、完整的视觉图像。 |
2. 视觉信息处理流程(从光线到物像)
这个过程可以分为光信号输入、视网膜信号转换和大脑神经通路三个阶段。
流程图:
步骤分解:
-
光线输入: 物体反射的光线分别进入左眼和右眼。
-
信号转换(视网膜):
-
光线激活感官细胞(光感受器),光信号转换为电信号。
-
电信号经过中间神经元网进行初步处理和整合。
-
-
信息传输:
-
信号通过视神经纤维传出视网膜。
-
在大脑入口处(视交叉),来自两眼的部分信息发生交叉,将信号整理为左右视野的信息流。
-
-
大脑感知:
-
信号经过大脑内部多级视神经纤维的传输和处理(视觉通路)。
-
最终在大脑皮层形成物像右(左视野)和物像左(右视野),构建出完整的视觉感知。
-
大脑中的神经元网络
主要介绍了大脑的组成和神经元网络的工作原理。
文字内容翻译如下:
“大脑是由约111千亿 (101110^{11}1011) 个神经元组成的,这些神经元都是同质的,而且功能很简单,但当大量神经元通过突触连接在一起,形成神经元网络,就可以完成很复杂的功能。”
图片展示了:
-
神经元(Neuron)的结构,包括胞体(Cell Body/Soma)、树突(Dendrites)和轴突(Axon)。
-
突触(Synapse)结构,即神经元之间信息传递的连接点。
-
神经元网络(Neural Network)的示意图,表示多个神经元相互连接。
-
神经元如何产生和传递动作电位(Action Potential)或脉冲(Impulse)。
核心观点是:大脑的复杂功能是通过大量相对简单的神经元通过突触连接组成的复杂网络(即神经元网络)来实现的。
大脑中的神经元网络-神经元数量随年龄增长逐渐增加
2. 大脑神经连接的早期发育
-
婴儿期(突触发生): 婴儿出生后,大脑中神经元连接(突触)的数量急剧增加(Synapse formation),以实现最大的连接潜力。
-
儿童期(突触修剪): 到一定年龄后(大约 2 岁以后),连接的数量趋于稳定或减少,但连接会进行优化和增强(Synaptic pruning)。
-
发育结果: 大脑通过“修剪”不常用或冗余的连接,留下并增强最有效、最常用的连接,使神经回路变得更加高效和成熟。
大脑中的神经元网络——神经元的可学习和“全或无”现象
介绍了神经元连接的可塑性以及神经元活动的**“全或无”现象**,这是理解大脑学习和信息处理的关键概念。
1. 神经元连接的“可学习性”与技能获得
左侧的文字和图片表达了以下核心观点:
![[Pasted image 20251021225316.png]]
-
连接可塑性(Plasticity): “神经元之间的连接是可学习的。” 这指的是突触可塑性(Synaptic Plasticity),即神经元之间的连接强度、效率或结构可以根据经验和活动而改变。
-
学习的机制: “我们就是通过这种能力,慢慢学会了各种技能。” 学习和记忆被认为是神经元连接强度持续变化的结果。当我们学习新事物时,神经元之间的特定突触连接会被强化或削弱。
-
图片: 配图是电镜下试图建立连接的两个神经元(可能是突触),形象地展示了连接的微观结构。
2. 神经元的“全或无”现象(All-or-None Phenomenon)
神经元产生动作电位(Action Potential)的基本规律:
-
阈值要求: “只有当外来刺激有足够大的强度,才能引起神经元细胞的兴奋并产生动作电位。” 这个“足够大的强度”被称为阈值(Threshold)。
-
“全或无”体现:
-
关于幅度: “但增加刺激强度并不会导致动作电位的幅度发生变化。” 一旦刺激达到阈值,产生的动作电位强度(幅度)是固定的、最大的,不会因为刺激更强而更大。这就是**“全”,要么发生,要么不发生“无”**。
-
关于传播: “神经元细胞产生的动作电位沿着细胞膜周围传播,传播的范围和距离也不会随刺激强度的不同而不同。” 动作电位以恒定的方式(恒定的幅度和速度)传播。
-
总结:
神经元的**“全或无”现象确保了信息的可靠编码和传递(数字信号),而神经连接的可塑性**则提供了学习和适应的机制(可变网络)。两者共同构成了大脑高效处理和存储信息的微观基础。
什么是深度学习?
介绍了深度学习(Deep Learning, DL)的概念、它在人工智能领域中的位置,以及它的核心思想与生物神经网络的联系。
1. 深度学习的定义与定位
-
定义: 深度学习(Deep Learning, DL)是机器学习的一个子集。
-
用途: 它使用多层人工神经网络来精确完成诸如物体检测、语音识别、语言翻译等复杂的任务。
-
层级关系(韦恩图):
![[Pasted image 20251021225412.png]]-
最外层:人工智能(AI)
-
中间层:机器学习(ML)
-
最内层:深度学习(DL)
(这表明深度学习是实现机器学习的一种方法,而机器学习是实现人工智能的一种途径。)
-
2. 深度学习的灵感来源与基本思想
-
灵感来源: 深度学习模拟了人脑(生物)神经网络,从而形成了人工神经网络(Artificial Neural Network, ANN)。
-
基本思想:
-
通过构建多层网络(这也是“深度”的由来)。
-
对目标进行多层表示(Multi-layer Representation)。
-
目的是通过多层处理,从原始数据中提取出高维特征来表示数据的抽象语义信息。
-
最终目标是获得更好的特征鲁棒性,使得模型能够更好地理解和泛化数据。
-
总结: 深度学习是利用多层人工神经网络,模仿人脑处理信息的方式,通过层次化的特征提取,来解决复杂AI问题的先进技术。
深度学习-多层网络结构与特性
介绍了深度学习(Deep Learning)的多层网络结构与特性,这是理解深度学习如何工作的关键。
1. 多层网络结构 (Multi-layer Network Structure)
-
组成: 由多层神经元(或节点)组成。
-
输入层 (Input Layer): 接收原始数据。
-
隐藏层 (Hidden Layer): 位于输入层和输出层之间,是进行复杂特征提取和抽象表示的核心。深度学习的“深”就是指隐藏层数量多。
-
输出层 (Output Layer): 产生最终的结果(如分类标签、预测值)。
-
-
连接方式: “这些层之间通过权重和偏差进行连接,形成复杂的网络结构。”(图中的连线代表权重,每个神经元都有一个偏差/偏置项。)
-
示意图: 图中清晰地展示了一个拥有 111 个输入层、333 个隐藏层(hidden layer 1, 2, 3)和 111 个输出层的全连接神经网络结构。
2. 神经网络的特性 (Characteristics of Neural Networks)
深度学习模型具有以下关键特性:
-
自动特征提取 (Automatic Feature Extraction):
-
“自动从原始数据中提取有用的特征,无需人工设计特征工程。”
-
这是深度学习相比传统机器学习最大的优势。网络通过其多层结构,可以自主学习数据的层次化、抽象表示。
-
-
非线性激活函数 (Non-linear Activation Functions):
-
“深度学习模型中通常使用非线性激活函数(如 ReLU、sigmoid 等)。”
-
作用: 激活函数将非线性引入到网络的每一层,使得模型能够学习和表示数据中复杂的非线性关系。如果没有非线性,无论网络有多少层,它都只能表示线性关系。
-
-
大规模数据处理能力 (Large-scale Data Processing Capability):
-
“借助现代计算技术和大数据资源,深度学习模型能够处理大规模数据集,提高模型的准确性和泛化能力。”
-
深度学习模型通常拥有大量的参数(权重和偏差),需要大量的计算资源(如 GPU/TPU)和数据进行训练才能发挥其潜力。
-
总结: 深度学习通过其多层非线性的结构,实现了自动、高效地从海量数据中学习抽象特征的能力。
常用深度学习模型
展示了深度学习领域中的一些主要模型类型,每种模型都针对特定类型的数据或任务进行了优化。
文字标题列出了一些主要模型:多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)、Transformer 等。
图片详细列举了八种重要的神经网络或模型架构及其简称:
| 模型类型(中文) | 简称 | 常见应用领域 | 主要特点 |
|---|---|---|---|
| 卷积神经网络 | CNN(Convolutional Neural Network) | 图像识别、物体检测 | 使用卷积层(Convolutional Layer)来自动提取空间特征。 |
| 循环神经网络 | RNN(Recurrent Neural Network) | 序列数据(如文本、时间序列)处理 | 具有内部循环结构,允许信息在时间步中保持和传递(记忆)。 |
| 生成对抗网络 | GAN(Generative Adversarial Network) | 图像生成、数据增强 | 由一个生成器(Generator)和一个判别器(Discriminator)相互对抗学习。 |
| 强化学习模型(如DQN) | DQN(Deep Q-Network)/ 强化学习 | 决策制定、机器人控制、游戏AI | 将深度学习与强化学习结合,用于学习最优的行为策略。 |
| 图神经网络 | GNN(Graph Neural Network) | 社交网络分析、推荐系统、分子结构 | 直接处理图结构数据,学习节点和边的表示。 |
| 长短期记忆网络 | LSTM(Long Short-Term Memory) | 改进的RNN,用于处理长序列依赖 | RNN的一种变体,通过“门”结构(遗忘门、输入门、输出门)解决了梯度消失问题,能有效学习长期依赖。 |
| Transformer | Transformer | 机器翻译、自然语言理解(BERT、GPT) | 基于自注意力机制(Self-Attention Mechanism),极大地提高了序列处理的并行性和效果。 |
| 深度置信网络 | DBN(Deep Belief Network)/ 深度网络 | 特征学习、预训练 | 由多层受限玻尔兹曼机(RBM)组成,常用于早期深度学习的无监督预训练。 |
这张图总结了深度学习领域中结构复杂性不断提升、适用范围不断扩展的多种先进模型架构。
感知机模型
人工神经网络起源的历史背景和早期模型,特别是M-P 模型和感知机(Perceptron)。
1. 人工智能模型的起源
-
基本思路: 科学家们一直试图通过仿生的方法寻找识别物体的方法。
-
建模过程: 模仿生物识别图像的原理进行人工智能建模,首先建立了神经元模型,然后由多个神经元组成人工神经网络结构。
2. 早期数学模型:M-P 模型
-
提出者: 最早对神经元建立数学模型的是沃伦·麦卡洛克(Warren McCulloch)和沃尔特·皮茨(Walter Pitts)。
-
模型名称: M-P 模型(McCulloch-Pitts Model),一个简易数学模型。
-
M-P 模型的示意图(右侧):
-
它是一个简单的神经元模型,接收多个输入 x1,x2,…,xj,…x_1, x_2, \ldots, x_j, \ldotsx1,x2,…,xj,…。
-
每个输入都有一个对应的权重 Wn1,Wn2,…,Wnj,…W_{n1}, W_{n2}, \ldots, W_{nj}, \ldotsWn1,Wn2,…,Wnj,…。
-
净输入 (net): 是所有输入与其对应权重的乘积之和:
netn=∑jWnj⋅Xj\text{net}_n = \sum_{j} W_{nj} \cdot X_jnetn=j∑Wnj⋅Xj
-
输出 (yny_nyn): 净输入 (netn\text{net}_nnetn) 会经过一个激活函数 f(a)f(a)f(a),然后产生最终的输出 yny_nyn。M-P 模型通常使用阈值函数作为激活函数。
-
3. 第一个神经网络模型:感知机 (Perceptron)
-
提出者: Frank Rosenblatt(弗兰克·罗森布拉特)。
-
提出时间/地点: 195719571957 年,在 Cornell 航空实验室(Cornell Aeronautical Laboratory)发明。
-
本质: 它是一种最简单形式的前馈式人工神经网络(Feedforward Artificial Neural Network),本质上是一个二元线性分类器。
总结: M-P 模型为人工神经网络奠定了数学基础,而感知机则是第一个真正用于解决分类问题的、可学习的人工神经网络模型,开启了连接主义(Connectionism)在人工智能领域的研究浪潮。
神经元M-P模型
这张图片深入地解析了人工神经元(或称M-P模型)的数学工作原理,这是所有人工神经网络的基础。
1. 人工神经元(第 iii 个神经元)的数学模型
图示将神经元的工作流程分为了三个主要阶段:
| 阶段 | 中文名称 | 数学表示 | 功能描述 | 生物对应 |
|---|---|---|---|---|
| 1. 接收输入 | 加权求和 | neti=∑jωijxj\text{net}_i = \sum_{j} \omega_{ij} x_jneti=∑jωijxj | 接收来自 jjj 个突触的输入 xjx_jxj,并与相应的连接强度(权重 ωij\omega_{ij}ωij)相乘后进行求和。 | 树突接收信号 |
| 2. 内部状态 | 净输入(Net) | Ti(neti+θi)T_i(\text{net}_i + \theta_i)Ti(neti+θi) | 将加权求和结果 neti\text{net}_ineti 加上偏差项 θi\theta_iθi(也称阈值),形成神经元的总输入。 | 胞体处理信号 |
| 3. 激活/输出 | 传递函数 FiF_iFi | yi=fi(ai)y_i = f_i(a_i)yi=fi(ai) | 总输入 ai=neti+θia_i = \text{net}_i + \theta_iai=neti+θi 经过传递函数 FiF_iFi(或激活函数 fif_ifi)处理,产生最终的输出 yiy_iyi。 | 轴突输出信号 |
总的数学表达式:
yi=Ti(neti+θi)=Ti(∑j=1nωijxj+θi)y_i = T_i\left(\text{net}_i + \theta_i\right) = T_i\left(\sum_{j=1}^{n} \omega_{ij} x_j + \theta_i\right)yi=Ti(neti+θi)=Ti(j=1∑nωijxj+θi)
2. M-P 模型的信息处理步骤和参数
文字部分详细解释了 M-P 模型的信息处理过程:
-
可变参数: ωij\omega_{ij}ωij(连接强度/权重)和 θi\theta_iθi(阈值/偏差项)是可变参数,可以通过经验或学习获得。
-
信息处理的 3 个部分:
-
完成信息输入并与连接参数做内积运算 neti\text{net}_ineti。
-
将内积运算结果通过传递函数 TTT。
-
由阈值函数 fi(ai)f_i(a_i)fi(ai) 判决:
-
若输出值大于阈值门限 θi\theta_iθi,则神经元被激活(输出 111)。
-
否则处于抑制状态(输出 000)。
-
-
-
阈值函数(阶跃函数):
fi(ai)={1if ai>θi0if ai≤θif_i(a_i) = \begin{cases} 1 & \text{if } a_i > \theta_i \\ 0 & \text{if } a_i \le \theta_i \end{cases}fi(ai)={10if ai>θiif ai≤θi
这个函数也称为阶跃函数,它将连续的净输入转化为离散的二进制输出(000 或 111),体现了神经元的**“全或无”**特性。
核心总结: 人工神经元通过加权求和接收信号,并使用激活函数对总输入进行非线性转换,最终产生输出信号。通过调整权重和偏差,可以实现不同的输入-输出映射关系,从而实现学习。
感知机模型
综合了前面的神经元模型,并明确了在深度学习中常用的Sigmoid函数作为激活函数时的神经元数学表达。
1. 神经元的工作原理(文字描述)
-
输入向量 (XXX): 输入 XXX 是一个 nnn 维向量:
X=[x1,x2,…,xn]X = [x_1, x_2, \ldots, x_n]X=[x1,x2,…,xn]
-
权重向量 (WWW): WWW 是 XXX 的权重向量:
W=[w1,w2,…,wn]W = [w_1, w_2, \ldots, w_n]W=[w1,w2,…,wn]
-
线性变换(加权求和): 网络通过 Σ=WXT+b\Sigma = WX^T + bΣ=WXT+b 完成线性变换(其中 bbb 是偏差/偏置,即 θ\thetaθ)。
-
非线性变换(激活): FFF 是激活函数,完成非线性变换。
2. 图示中的具体计算步骤
图示展示了一个具有 333 个输入 x1,x2,x3x_1, x_2, x_3x1,x2,x3 的神经元,其计算过程分为三步:
-
Weigh (加权): 将输入 xix_ixi 与权重 ωi\omega_iωi 相乘。
-
Sum up (求和): 将所有加权后的输入相加,并加上偏差 (bias)。
- 净输入(Net): Net=(x1ω1+x2ω2+x3ω3)+b\text{Net} = (x_1 \omega_1 + x_2 \omega_2 + x_3 \omega_3) + bNet=(x1ω1+x2ω2+x3ω3)+b
-
Activate (激活): 将净输入通过激活函数(图示中为 Sigmoid 函数)进行处理。
3. 思考题的公式化表示
根据图示的计算过程和文字描述的数学符号,完整的神经元输出公式表示(激活后的输出 yyy)为:
公式化表示:
y=F(∑)y = F\left(\sum\right)y=F(∑)
其中 Σ=WXT+b\Sigma = WX^T + bΣ=WXT+b。
将 WWW, XXX, 和 FFF (Sigmoid) 代入,最终输出 yyy 的公式为:
y=sigmoid(∑i=1nwixi+b)y = \text{sigmoid}\left(\sum_{i=1}^{n} w_i x_i + b\right)y=sigmoid(i=1∑nwixi+b)
或者根据图示中的 333 个输入:
y=sigmoid(x1ω1+x2ω2+x3ω3+b)y = \text{sigmoid}\left(x_1 \omega_1 + x_2 \omega_2 + x_3 \omega_3 + b\right)y=sigmoid(x1ω1+x2ω2+x3ω3+b)
思考题的答案填空:
F=sigmoid(∑i=1nwixi+b)F = \text{sigmoid}\left(\sum_{i=1}^{n} w_i x_i + b\right)F=sigmoid(i=1∑nwixi+b)
或
F=sigmoid(WXT+b)F = \text{sigmoid}\left(W X^T + b\right)F=sigmoid(WXT+b)
(其中 bbb 是偏差 bias,对应于之前模型的 θ\thetaθ 阈值)。
感知机案例【7-1】-分类模型
感知机模型(Perceptron Model) 在 二分类问题(线性分类)中的应用。
![[Pasted image 20251021230639.png]]
以下是具体的知识点总结:
1. 感知机模型基础
-
定义: 感知机是神经网络和深度学习的基础模型之一,是一种线性分类模型。
-
应用: 主要用于解决二分类问题,即判断输入属于两个类别中的哪一个(例如:是否获得贷款、是/否、0/1)。
-
核心思想: 通过一个线性组合(加权和)和一个激活函数,将输入特征映射到一个输出结果。
2. 模型构建过程(如例题所示)
-
输入变量(Features): x=[x1,x2,x3,… ]x = [x_1, x_2, x_3, \dots]x=[x1,x2,x3,…],代表数据的特征。
- 例中: x=[x1,x2,x3]x = [x_1, x_2, x_3]x=[x1,x2,x3],分别代表年龄、薪资、债务信息。
-
权重(Weights): W=[w1,w2,w3,… ]W = [w_1, w_2, w_3, \dots]W=[w1,w2,w3,…],代表每个输入特征对最终结果的重要性。
- 例中: W=[w1,w2,w3]W = [w_1, w_2, w_3]W=[w1,w2,w3]。
-
偏置项(Bias): bbb(或 w0w_0w0),相当于给线性模型增加的常数项,用于调整决策边界的位置。
- 例中: bbb。
-
线性组合/加权和: 将输入特征与对应的权重相乘并求和,再加上偏置项。
- 数学表达式: z=w1x1+w2x2+w3x3+bz = w_1x_1 + w_2x_2 + w_3x_3 + bz=w1x1+w2x2+w3x3+b
3. 激活函数(Activation Function)
-
作用: 引入非线性因素(尽管感知机本质是线性分类器,但激活函数将线性输出转化为概率或类别),将线性组合的结果映射到最终的输出空间。
-
例中选择: Sigmoid 函数(逻辑函数)。
-
数学表达式: Sigmoid(z)=11+e−zSigmoid(z) = \frac{1}{1 + e^{-z}}Sigmoid(z)=1+e−z1
-
特性: 将任意实数 zzz 映射到 (0, 1) 区间内的值,常用于表示概率。
-
-
最终输出: y=Sigmoid(w1x1+w2x2+w3x3+b)y = Sigmoid(w_1x_1 + w_2x_2 + w_3x_3 + b)y=Sigmoid(w1x1+w2x2+w3x3+b)
4. 分类判别与决策边界
-
输出解释: 由于 Sigmoid 函数的输出 yyy 介于 0 到 1 之间,在二分类问题中,它通常被解释为属于某一类别的概率。
-
判别标准(阈值 Threshold): 需要设定一个阈值(Cut-off Value) 来将概率值转换为最终的分类结果。
-
例中设定: 阈值 Cut-off=0.5\text{Cut-off} = 0.5Cut-off=0.5。
-
分类规则:
-
当 y<0.5y < 0.5y<0.5 时,判断为未获批(类别 0)。
-
当 y≥0.5y \ge 0.5y≥0.5 时,判断为获批(类别 1)。
-
-
-
决策边界: 由 w1x1+w2x2+w3x3+b=0w_1x_1 + w_2x_2 + w_3x_3 + b = 0w1x1+w2x2+w3x3+b=0 所定义的超平面(在高维空间中)。当 y=0.5y = 0.5y=0.5 时,z=0z=0z=0,这个平面就是区分两类样本的“界限”。
5. 建模目标
- 目标: 通过训练(学习算法,如梯度下降)来确定最优的权重 WWW 和偏置 bbb,使得模型能够最准确地对训练数据进行分类,从而对新的输入数据(如“自己”)做出预测。
感知机案例【7-2】-线性回归
关于感知机模型实现线性回归预测的问题。
1. 知识点总结
| 知识点类别 | 具体内容 | 描述/公式 |
|---|---|---|
| 问题类型 | 线性回归问题 | 预测目标(薪水)与输入特征(销售额)之间存在线性关系。 |
| 模型基础 | 感知机模型 | 尽管感知机常用于分类,但通过调整激活函数,它可以用于线性回归。 |
| 数据特征 | 输入 xxx | 销售额(万元)。 |
| 预测目标 | 输出 yyy | 薪水(万元)。 |
| 线性模型 | y=Wx+by = Wx + by=Wx+b | WWW: 权重(提成比例),bbb: 偏置项(底薪)。 |
| 关键点:激活函数 | f(x)=xf(x) = xf(x)=x (恒等函数) | 在线性回归中,感知机模型不使用 Sigmoid 等非线性函数,而是使用恒等函数。 y=f(Wx+b)=Wx+by = f(Wx + b) = Wx + by=f(Wx+b)=Wx+b。 |
| 模型结论 | 普适性 | 感知机模型可以实现所有的线性分类和线性回归问题。 |
2. 预测步骤(Python 实现思路)
要预测第 7 个月的薪水,你需要先用前 6 个月的数据拟合(训练) 出模型的参数 WWW(提成比例)和 bbb(底薪)。
步骤一:模型拟合(找到 WWW 和 bbb)
这个问题本质上是找到一条最佳拟合直线 y=Wx+by = Wx + by=Wx+b 来描述前 6 个月的销售额 xxx 和薪水 yyy 的关系。
-
准备数据:
-
X=[1.2,1.5,3.2,2.7,5.3,3.3]X = [1.2, 1.5, 3.2, 2.7, 5.3, 3.3]X=[1.2,1.5,3.2,2.7,5.3,3.3] (销售额)
-
Y=[0.36,0.375,0.48,0.435,0.724,0.465]Y = [0.36, 0.375, 0.48, 0.435, 0.724, 0.465]Y=[0.36,0.375,0.48,0.435,0.724,0.465] (薪水)
-
-
使用线性回归方法: 可以使用最小二乘法或 Python 的科学计算库(如
scikit-learn或numpy)进行拟合,求出 WWW 和 bbb 的最优值。
步骤二:进行预测
-
输入第 7 个月的销售额: x7=4.1x_{7} = 4.1x7=4.1 万元。
-
代入模型公式: 将拟合得到的 WWW 和 bbb 代入公式,计算预测薪水 y^7\hat{y}_{7}y^7。
y^7=W×4.1+b\hat{y}_{7} = W \times 4.1 + by^7=W×4.1+b
3. 课后作业思考题分析
-
思考: 上述算法是税前的薪水,如何预测税后的薪水?
-
分析: 税后的薪水 y^后\hat{y}_{\text{后}}y^后 是税前薪水 y^前\hat{y}_{\text{前}}y^前 减去税金 Tax\text{Tax}Tax。
-
方法一(分步计算):
-
先用线性回归预测出税前薪水 y^前=Wx+b\hat{y}_{\text{前}} = Wx + by^前=Wx+b。
-
根据税法计算出 Tax\text{Tax}Tax(税金通常是分段阶梯计算的)。
-
y^后=y^前−Tax\hat{y}_{\text{后}} = \hat{y}_{\text{前}} - \text{Tax}y^后=y^前−Tax。
-
-
方法二(复杂模型): 尝试建立一个直接预测税后薪水的非线性模型(因为税收是阶梯式的非线性关系),但由于税收逻辑固定,通常采用方法一更精确和可解释。
-
-
思考: 如果提成比例是分段提成的,又该如何预测?
-
分析: 分段提成意味着提成比例 WWW 不再是一个常数,而是根据销售额 xxx 变化的。
-
方法: 这将不再是简单的线性回归。你需要使用分段线性回归(Piecewise Linear Regression):
-
确定销售额的分段点(例如:销售额 ≤2\le 2≤2 万元,W=W1W=W_1W=W1;销售额 >2> 2>2 万元,W=W2W=W_2W=W2)。
-
对每个分段分别建立线性回归模型,找到对应的 WiW_iWi 和 bib_ibi。
-
预测时,根据 xxx 落在哪个区间,使用该区间的模型进行预测。
-
-
感知机的局限
总结了感知机模型(Perceptron Model)的局限性,特别是其线性模型的本质无法解决非线性可分问题。
以下是图片中的知识点总结:
1. 感知机的核心局限性(“死刑”宣判)
-
历史事件: 1969年,马文·明斯基(Marvin Minsky)出版了《感知机》(Perceptrons)一书。
-
核心论断: 该书证明了感知机无法解决“异或问题”(XOR Problem)。
-
影响: 这一发现给当时尚处于初期的感知机模型直接宣判了“死刑”,导致神经网络研究陷入低谷(即第一次AI寒冬),直到**多层感知机(Multi-layer Perceptron, MLP)和反向传播算法(Backpropagation)**出现后才得以解决。
2. “异或问题”(XOR Problem)的本质
- 异或真值表:
| A | B | 异或 (A⊕BA \oplus BA⊕B) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
-
几何意义(局限性的原因): 在二维平面上,感知机试图用一条直线(线性决策边界)将数据点进行分类。然而,对于异或问题,属于同一类别(1)的点 (0,1)(0, 1)(0,1) 和 (1,0)(1, 0)(1,0),以及属于另一类别(0)的点 (0,0)(0, 0)(0,0) 和 (1,1)(1, 1)(1,1),无法用任何一条直线将它们完美地分割开。
-
结论: 异或问题是典型的**线性不可分(Non-linearly Separable)**问题。
3. 感知机模型的图形化和数学表示
-
感知机的最基本表示:
-
数学公式: f(x)=wTx+bf(\mathbf{x}) = \mathbf{w}^T\mathbf{x} + bf(x)=wTx+b
-
x\mathbf{x}x: 输入向量(特征 x1,x2,…x_1, x_2, \dotsx1,x2,…)
-
w\mathbf{w}w: 权重向量(w1,w2,…w_1, w_2, \dotsw1,w2,…)
-
bbb: 偏置项(Bias)
-
-
图形表示: 一个单层结构,输入特征 (x\mathbf{x}x) 通过权重 (w\mathbf{w}w) 相加并加上偏置 (bbb),最后输出 f(x)f(\mathbf{x})f(x)(未画出激活函数)。
-
4. 线性模型的局限性
-
核心原因: 感知机是一个线性模型(Linear Model)。
-
限制描述: 数据可能不是线性可分的(The data may be NOT linear separable)。
-
线性可分 (Linear): 数据点可以通过一条直线(或高维空间中的超平面)清晰地分开。
-
非线性可分 (Nonlinear): 数据点必须通过一条曲线(或高维空间中的非线性决策边界)才能正确分开。感知机无法创建这种曲线决策边界。
-
总结: 感知机模型的局限性在于其单层结构和线性模型的本质,使其无法处理像异或问题这样的非线性可分数据。这是推动神经网络发展到多层结构(即深度学习的基础)的关键历史教训。
激活函数 f ——解决感知机局限的方法
总结了解决单层感知机局限性(即无法处理非线性问题)的两个关键方法,这是通往现代神经网络和深度学习的基础。
1. 解决感知机局限性的核心方法
感知机的局限在于其线性模型的本质。要解决这个问题,必须引入非线性。
1.1 引入非线性(Adding a nonlinear transform)
-
方法: 通过在外层增加一个非线性激活函数 σ\sigmaσ。
-
数学表达式: f(x)=σ(wTx+b)f(\mathbf{x}) = \sigma(\mathbf{w}^T\mathbf{x} + b)f(x)=σ(wTx+b)
-
wTx+b\mathbf{w}^T\mathbf{x} + bwTx+b: 线性变换(感知机的核心)
-
σ(… )\sigma(\dots)σ(…): 非线性激活函数,对线性变换的结果进行非线性映射。
-
-
作用: 使得神经网络可以进行非线性的拟合(解决异或问题等非线性可分问题)。
1.2 著名的激活函数(Named activation functions)
激活函数是神经网络能够处理非线性数据的关键组件。
| 激活函数 | 数学表达式 | 特性/用途 |
|---|---|---|
| ReLU (Rectified Linear Unit) | σ(z)=max(0,z)\sigma(z) = \max(0, z)σ(z)=max(0,z) | 简单高效,模拟神经元的“电脉冲不能为负”,解决了 Sigmoid 的梯度消失问题,是目前深度学习中最常用的激活函数。 |
| Sigmoid | σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+e−z1 | 将值映射到 (0, 1) 区间,常用于二分类输出层,将输出解释为概率。 |
2. 多层输出的表示(How to represent multiple outputs)
现代神经网络通常需要多个输出节点(例如:多分类问题、多回归目标),这要求将权重和输出进行矩阵化表示。
-
方法: 将权重 w\mathbf{w}w 推广为权重矩阵 W\mathbf{W}W。
-
图形表示: 如图右侧所示,每个输入节点(蓝色圆点)都连接到每个输出节点(红色圆点),形成一个全连接层。
-
数学表达式:
-
单个输出: f(x)=σ(wTx+b)f(x) = \sigma(\mathbf{w}^T\mathbf{x} + b)f(x)=σ(wTx+b)
-
多个输出(矩阵形式): f(x)=σ(Wx+b)f(\mathbf{x}) = \sigma(\mathbf{W}\mathbf{x} + \mathbf{b})f(x)=σ(Wx+b)
-
W\mathbf{W}W: 权重矩阵,每一行对应一个输出节点的权重向量。
-
b\mathbf{b}b: 偏置向量,每一个元素对应一个输出节点的偏置。
-
-
-
作用: 矩阵化的形式使得神经网络能够方便地处理多输出任务和多层结构的并行计算。
总结: 通过多层结构(Multi-layer Perceptron)结合非线性激活函数,神经网络解决了单层感知机的线性局限性,从而开启了现代深度学习时代。
激活函数-Softmax
展示了Softmax 函数的计算过程,这是多分类问题中常用的激活函数。
以下是关于 Softmax 函数的知识点总结,以及对图中计算过程的解释:
1. Softmax 函数的知识点总结
-
定义: Softmax 函数通常用在神经网络的输出层,用于解决**多分类(Multi-class Classification)**问题。
-
作用:
-
将输入层(通常是模型最后一层线性输出)的任意实数值 ziz_izi(称为 logits)转换为介于 0 到 1 之间的概率值 SiS_iSi。
-
确保所有输出概率值之和为 1 (∑Si=1\sum S_i = 1∑Si=1)。
-
-
数学公式: Softmax 函数将输入向量 Z=[z1,z2,…,zK]\mathbf{Z} = [z_1, z_2, \dots, z_K]Z=[z1,z2,…,zK] 映射到输出概率向量 S=[S1,S2,…,SK]\mathbf{S} = [S_1, S_2, \dots, S_K]S=[S1,S2,…,SK]。
Si=ezi∑j=1KezjS_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}Si=∑j=1Kezjezi
-
ziz_izi:第 iii 个类别的输入值(logit)。
-
KKK:类别的总数。
-
ezie^{z_i}ezi:指数运算保证了所有输出为正数。
-
∑j=1Kezj\sum_{j=1}^{K} e^{z_j}∑j=1Kezj:归一化项(分母),确保概率总和为 1。
-
2. 图中计算过程解析
图中输入 X\mathbf{X}X 向量即为 Softmax 函数的输入 ZZZ 向量(logits),共有 4 个类别 (K=4K=4K=4)。
输入 (Logits):
Z=[z1,z2,z3,z4]=[2,0.7,−1.5,−0.9]\mathbf{Z} = [z_1, z_2, z_3, z_4] = [2, 0.7, -1.5, -0.9]Z=[z1,z2,z3,z4]=[2,0.7,−1.5,−0.9]
步骤一:计算指数和(归一化分母)
首先,计算所有输入值的指数之和 sum\text{sum}sum:
sum=∑j=14ezj=e2+e0.7+e−1.5+e−0.9\text{sum} = \sum_{j=1}^{4} e^{z_j} = e^{2} + e^{0.7} + e^{-1.5} + e^{-0.9}sum=j=1∑4ezj=e2+e0.7+e−1.5+e−0.9
-
e2≈7.389e^{2} \approx 7.389e2≈7.389
-
e0.7≈2.014e^{0.7} \approx 2.014e0.7≈2.014
-
e−1.5≈0.223e^{-1.5} \approx 0.223e−1.5≈0.223
-
e−0.9≈0.407e^{-0.9} \approx 0.407e−0.9≈0.407
sum≈7.389+2.014+0.223+0.407=10.033\text{sum} \approx 7.389 + 2.014 + 0.223 + 0.407 = 10.033sum≈7.389+2.014+0.223+0.407=10.033
图中结果: sum=10.03\text{sum} = 10.03sum=10.03
步骤二:计算每个类别的 Softmax 输出(概率)
将每个输入值的指数 ezie^{z_i}ezi 除以总和 sum\text{sum}sum:
-
第 1 类概率 S1S_1S1:
S1=ez1sum=e210.03≈7.38910.03≈0.736≈0.74S_1 = \frac{e^{z_1}}{\text{sum}} = \frac{e^{2}}{10.03} \approx \frac{7.389}{10.03} \approx 0.736 \approx 0.74S1=sumez1=10.03e2≈10.037.389≈0.736≈0.74
-
第 2 类概率 S2S_2S2:
S2=ez2sum=e0.710.03≈2.01410.03≈0.200≈0.20S_2 = \frac{e^{z_2}}{\text{sum}} = \frac{e^{0.7}}{10.03} \approx \frac{2.014}{10.03} \approx 0.200 \approx 0.20S2=sumez2=10.03e0.7≈10.032.014≈0.200≈0.20
-
第 3 类概率 S3S_3S3:
S3=ez3sum=e−1.510.03≈0.22310.03≈0.022≈0.02S_3 = \frac{e^{z_3}}{\text{sum}} = \frac{e^{-1.5}}{10.03} \approx \frac{0.223}{10.03} \approx 0.022 \approx 0.02S3=sumez3=10.03e−1.5≈10.030.223≈0.022≈0.02
-
第 4 类概率 S4S_4S4:
S4=ez4sum=e−0.910.03≈0.40710.03≈0.040≈0.04S_4 = \frac{e^{z_4}}{\text{sum}} = \frac{e^{-0.9}}{10.03} \approx \frac{0.407}{10.03} \approx 0.040 \approx 0.04S4=sumez4=10.03e−0.9≈10.030.407≈0.040≈0.04
结果验证: 所有概率之和 S1+S2+S3+S4=0.74+0.20+0.02+0.04=1.00S_1 + S_2 + S_3 + S_4 = 0.74 + 0.20 + 0.02 + 0.04 = 1.00S1+S2+S3+S4=0.74+0.20+0.02+0.04=1.00。
结论: 模型的预测结果是输入属于第 1 类的概率最高(74%)。Softmax 的计算过程是正确的。
7.3 浅层人工神经网络模型
多层感知器MLP(单隐含层)
**多层感知器(MLP)和反向传播算法(BP)**在神经网络发展史上的重要地位。
以下是包含的关键知识点:
1. 多层感知器(MLP)的地位和作用
-
定义: MLP 是 Multi-layer Perceptron 的缩写,即多层感知器,通常包含一个或多个隐藏层。
-
核心贡献: 多层神经网络解决了感知器模型只能处理线性可分问题的缺陷。
-
意义: 使得神经网络真正成为了强大的建模工具,能够处理复杂的非线性可分问题(如异或问题)。
-
结构特点: 相比单层感知机,MLP 引入了隐藏层(Hidden Layer) 和非线性激活函数。
2. 反向传播算法(BP)的重要性
-
提出时间/人物: 1986年,戴维·鲁梅尔哈特(David E. Rumelhart)、杰弗里·辛顿(Geoffrey Hinton)和罗纳德·威廉姆斯(Ronald J. Williams)在《自然》(Nature)杂志上发表论文,提出了**“反向传播算法”(Backpropagation, BP)**。
-
作用: BP 算法是一种训练方法,它使得多层神经网络训练成为了可能。
-
原理(简述):
-
前向传播:计算模型的输出。
-
计算误差:比较输出与实际目标值的差异。
-
反向传播:将误差从输出层反向传播回网络中的所有层。
-
调整权重:根据误差调整网络中的权重(weights)和偏置(biases),以最小化误差。
-
-
论文标题: Learning representations by back-propagating errors(通过反向传播误差学习表示)。
3. 奠基人与荣誉(Hinton)
-
杰弗里·辛顿(Geoffrey Hinton):被誉为“深度学习教父”之一,是 BP 算法的共同作者,对神经网络的复兴和现代深度学习的发展做出了巨大贡献。
-
约翰·霍普菲尔德(John J. Hopfield):与 Hinton 一起被图片引用(虽然 BP 论文中没有他),他在循环神经网络(Recurrent Neural Networks)和Hopfield 网络等领域做出了开创性贡献。
总结: MLP 提供了处理非线性问题的结构,而 BP 算法提供了训练这个复杂结构的有效方法。这两者的结合是神经网络历史上一次革命性的突破,为后来的深度学习技术奠定了基础。
多层感知器(MLP)
总结了多层感知器(MLP),即现代神经网络的基础结构和工作原理。
以下关键知识点:
1. 多层感知器的定义与结构
-
起源: 多层感知器是罗森布拉特标准感知器的扩展。
-
罗森布拉特(Frank Rosenblatt): 康奈尔大学的实验心理学家,于 1957 年提出了感知器模型。
-
层数定义: 如果以神经元来计算层数,一个多层感知器至少包含三层:
-
一个输入层 (Input Layer):接收原始数据。
-
一个隐藏层 (Hidden Layer):进行特征提取和转换的核心层。
-
一个输出层 (Output Layer):给出最终的预测结果。
-
-
结构图示:
-
上图清晰展示了输入层(白色节点)、隐藏层(黑色节点)和输出层(白色节点)之间的全连接关系。
-
下图展示了不同复杂度的网络结构(单隐藏层和多隐藏层)。
-
2. 多层感知器的工作原理
-
数据流向: 数据通过输入层节点进入网络。
-
连接与权重: 数据乘以连接的权重后输入到隐藏层节点。
-
核心处理(隐藏层):
-
隐藏层节点将这些加权后的输入求和。
-
求和结果经过一个非线性变换,称为激活函数(Activation Function)。
-
-
激活函数的作用: 引入非线性,使得网络可以拟合复杂的非线性函数。
-
输出: 处理后的信号被发送往输出层。
3. 多层感知器的数学表示与复杂函数拟合
-
组合复杂函数 (Compose a more complicated function): 多层感知器的强大之处在于可以将多层线性变换和非线性激活函数进行复合(Compose)。
-
数学表达式示例(两隐藏层):
f(x)=σ(W3σ(W2σ(W1x+b1)+b2)+b3)f(\mathbf{x}) = \sigma(\mathbf{W}_3 \sigma(\mathbf{W}_2 \sigma(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2) + \mathbf{b}_3)f(x)=σ(W3σ(W2σ(W1x+b1)+b2)+b3)
-
W\mathbf{W}W 和 b\mathbf{b}b 分别是各层的权重矩阵和偏置向量。
-
σ\sigmaσ 是非线性激活函数。
-
每一层的计算 (Wx+b\mathbf{W}\mathbf{x} + \mathbf{b}Wx+b) 构成一个线性变换,紧随其后的 σ\sigmaσ 构成了非线性变换。通过多层复合,网络可以拟合任意复杂的函数。
-
4. 深度学习的定义
-
浅层学习网络: 只有一个隐藏层的网络被称为浅层学习网络。
-
深度学习网络: 隐藏层大于一层的网络被称为深度学习网络。这是现代深度学习概念的简洁定义。
【例7-3】税后收入预测(基于例7-2)
内容是对前一个线性回归问题(预测销售人员薪水)的扩展和深化,旨在建立一个多层感知机(MLP)来预测税后收入。
以下是图片中的知识点和核心思想总结:
1. 核心问题和模型目标
-
核心问题: 在已知税前收入 Y1Y_1Y1、税前销售额 xxx 的情况下,预测销售人员的税后收入 Y2Y_2Y2(假设税率只有一档,不考虑分段提成)。
-
建模目标: 设计一个更复杂的数学模型(感知机模型) 来实现这个预测。
2. 税后收入的数学推导
-
已知税前薪资模型(来自前一例题):
Y1=w1x+b1Y_1 = w_1x + b_1Y1=w1x+b1
-
Y1Y_1Y1:税前薪资
-
xxx:销售额
-
w1w_1w1:提成比例(权重)
-
b1b_1b1:底薪(偏置)
-
-
税后收入的计算公式(根据税法):
Y2=税前收入−税金Y_2 = \text{税前收入} - \text{税金}Y2=税前收入−税金
-
假设:税起征点为 zzz,税比例为 kkk。
-
税金 =k(Y1−z)= k (Y_1 - z)=k(Y1−z) (对超过起征点的部分征税)
-
税后收入 Y2Y_2Y2 =Y1−k(Y1−z)= Y_1 - k (Y_1 - z)=Y1−k(Y1−z)
-
-
简化与重组:
Y2=Y1−kY1+kzY_2 = Y_1 - kY_1 + kzY2=Y1−kY1+kz
Y2=(1−k)Y1+kzY_2 = (1 - k)Y_1 + kzY2=(1−k)Y1+kz
3. 感知机模型的建立(2 层感知机模型)
-
模型形式: 将最终的税后收入公式 Y2=(1−k)Y1+kzY_2 = (1 - k)Y_1 + kzY2=(1−k)Y1+kz 视为一个线性感知机模型。
-
近似表示: 它可以近似地表示为 Y2=w2Y1+b2Y_2 = w_2Y_1 + b_2Y2=w2Y1+b2 的数学形式。
-
新的权重 w2w_2w2: 对应于 (1−k)(1 - k)(1−k)
-
新的偏置 b2b_2b2: 对应于 kzkzkz
-
-
结构图示: 这是一个 2 层的(或 2 神经元的)串联感知机模型(没有画出隐藏层,而是将两个线性模型串联):
-
第一层(左侧神经元): 输入 x→Y1x \to Y_1x→Y1(计算税前收入)。
-
第二层(右侧神经元): 输入 Y1→Y2Y_1 \to Y_2Y1→Y2(计算税后收入)。
- 名称: 于是得到:2 层感知机模型。
-
4. 进一步复杂模型的思考(MLP 扩展)
提出了将模型升级为更复杂的 MLP (多层感知机) 的方向,以解决更真实的问题:
-
分段税收: 建立可以处理多档税征点和税率的模型(涉及非线性,需要隐藏层和非线性激活函数)。
-
多档销售提成: 建立可以处理分段提成比例的模型(同样涉及非线性或分段线性模型,需要更复杂的网络结构)。
-
网络结构调整: 增加层数和增加每层的神经元个数来构建更复杂的 MLP 模型。
总结: 这一页的关键思想是:通过将复杂的业务逻辑(税收计算)分解为两个串联的线性关系,我们可以用两层感知机的模型思想来表示,并引出更进一步使用 MLP 解决真实世界中非线性复杂问题的思路。
损失函数
主要总结了神经网络中的损失函数(Loss Function),即模型优化的目标。
以下是图片中的知识点总结:
1. 神经网络结构(多层感知机)
-
结构名称: 单隐藏层 MLP 拓扑结构(Multi-layer Perceptron)。
-
组成部分:
-
输入层(Input Layer):接收输入模式 x\mathbf{x}x,节点索引通常用 iii 表示。
-
隐藏层(Hidden Layer):对输入进行加权求和和非线性激活,节点索引通常用 jjj 表示。
-
输出层(Output Layer):给出最终预测结果,节点索引通常用 kkk 表示。
-
-
连接和参数: 层与层之间通过连接(connections)相连,每个连接上有一个权重 wijw_{ij}wij 或 wjkw_{jk}wjk,这些权重是模型需要学习的参数。
2. 损失函数:模型优化的目标
-
定义: 损失函数(Loss Function) 或 误差函数(Error Function) 是衡量模型预测输出与真实目标值之间差异的指标,它是模型优化的目标。
-
目标: 在训练过程中,通过调整权重和偏置,使损失函数的值最小化。
-
常用的损失函数(回归和分类): 图中展示的是一种常用的误差表示方法——**均方误差(Mean Squared Error, MSE)**的变体。
3. 损失函数(误差)的数学表达式
图中展示了两种计算总误差 EEE 的公式,都是基于平方误差:
| 符号 | 公式 | 含义 |
|---|---|---|
| 总误差 EEE | E=12∑p∑k(tpk−ypk)2E = \frac{1}{2} \sum_{p} \sum_{k} (t_{pk} - y_{pk})^2E=21p∑k∑(tpk−ypk)2 | 对所有样本 ppp 和所有输出节点 kkk 的误差进行求和。优化时通常使用这个总和。 |
| 单样本误差 EpE_pEp | Ep=12∑k(tpk−ypk)2E_p = \frac{1}{2} \sum_{k} (t_{pk} - y_{pk})^2Ep=21k∑(tpk−ypk)2 | 只对单个样本 ppp 的所有输出节点 kkk 的误差进行求和。 |
-
符号说明:
-
ppp: 训练样本的索引(第 ppp 个样本)。
-
kkk: 输出层节点的索引(第 kkk 个输出)。
-
tpkt_{pk}tpk: 样本 ppp 的第 kkk 个输出的**目标值(Target Value)**或真实值。
-
ypky_{pk}ypk: 样本 ppp 的第 kkk 个输出的预测值(Predicted Value)。
-
12\frac{1}{2}21: 这是一个常见的因子,用于在求导(梯度下降)时抵消平方项求导后产生的 2,使计算更简洁。
-
(tpk−ypk)2(t_{pk} - y_{pk})^2(tpk−ypk)2: 核心的平方误差,强调大误差的影响。
-
4. EEE 和 EpE_pEp 的区别
-
EEE (总误差): 对所有样本进行误差求和。 在批量梯度下降(Batch Gradient Descent)中,一次迭代会计算所有样本的总误差 EEE 来更新权重。
-
EpE_pEp (单样本误差): 对单个样本进行误差求和。 在随机梯度下降(Stochastic Gradient Descent)中,一次迭代只计算一个样本的误差 EpE_pEp 来更新权重。
5. 生物学联系(神经元连接)
图片下方的神经元突触图,旨在说明神经网络的灵感来源于生物神经元之间的联结关系(通过突触传递信号),这种联结对应于模型中的权重。
反向传播算法(BP算法)
总结了反向传播算法(Backpropagation, BP) 作为神经网络学习算法的核心流程。
以下是关于反向传播算法的知识点和流程总结:
1. 反向传播算法的定义和适用范围
-
定义: 反向传播算法是一种常见且高效的人工神经网络学习算法。
-
适用范围: 特别适用于多层前馈神经网络(Multi-layer Feedforward Neural Networks) 的训练。
2. 反向传播算法的核心组成
BP 算法由学习过程中的两个主要阶段组成,这两个阶段在一个训练周期(Iteration)中交替进行:
-
信号正向传播(Forward Propagation): 计算模型的输出。
-
误差的反向传播(Backward Propagation): 根据误差调整模型的权重。
3. 反向传播算法的详细流程图解
BP 算法的整个训练过程是一个循环优化的过程,直到损失满足预期:
| 阶段/步 骤 | 流程描述 | 涉及要素 |
|---|---|---|
| 1. 准备数据 | 输入训练集,包括输入特征 XXX 和真实标签 YYY。 | XXX (输入), YYY (标签/目标值) |
| 2. 正向传播 | 数据 XXX 从输入层传入网络,逐层计算并传递信号,最终到达输出层,产生预测输出 Out\text{Out}Out。 | Out\text{Out}Out (预测输出) |
| 3. 计算误差 | 将预测输出 Out\text{Out}Out 与真实标签 YYY 进行比较,通过损失函数(Loss Function)计算出模型的当前误差。 | 损失函数, 误差 |
| 4. 判断收敛 | 检查当前误差(Loss)是否符合预期或达到设定的阈值。 | Loss 符合预期? |
| 5. 训练结束 | 如果误差符合预期(“符合”),则训练结束,模型收敛。 | 训练结束 |
| 6. 反向传播 | 如果误差不符合预期(“不符合”),则算法进入反向传播阶段。误差从输出层向后传播回各层。 | |
| 7. 调整权重 | 根据反向传播回来的误差,使用优化器(如梯度下降法)计算每个权重和偏置的梯度,并调整权重值(Update Weights),使损失函数沿梯度减小的方向变化。 | 调整权重值 |
| 8. 循环 | 调整后的模型返回到步骤 2,进行下一次正向传播,直到满足收敛条件。 |
BP算法原理
介绍了反向传播(BP)算法的原理,特别侧重于正向传播的计算过程和反向传播的优化目标。
以下是图片中的知识点总结:
1. BP 算法的两个阶段
反向传播算法由两个核心阶段组成:正向传播和反向传播。
2. 正向传播(Forward Propagation)的原理
正向传播是信号从输入层流向输出层的计算过程,它定义了神经网络的输出。
-
输入层: 接收输入模式(x\mathbf{x}x)。
-
隐藏层(Hidden Layer)的计算:
-
输入(加权和): 第 jjj 个神经元的输入 netj\text{net}_jnetj 是上一层(输入层)所有输出的加权和加上偏置 bbb。
netj=∑iwjixi+b\text{net}_j = \sum_i w_{ji} x_i + bnetj=i∑wjixi+b
-
xix_ixi: 输入层第 iii 个节点的输出(即输入特征)。
-
wjiw_{ji}wji: 连接输入层第 iii 个节点到隐藏层第 jjj 个节点的权重。
-
-
输出(激活): 隐藏层第 jjj 个神经元的输出 aja_jaj 是其输入 netj\text{net}_jnetj 经过激活函数 fff 的结果。
aj=f(netj)a_j = f(\text{net}_j)aj=f(netj)
-
例中激活函数: f(netj)f(\text{net}_j)f(netj) 可能是 Sigmoid 函数:
Sigmoid(net)=11+e−netSigmoid(\text{net}) = \frac{1}{1 + e^{-\text{net}}}Sigmoid(net)=1+e−net1
-
-
-
输出层(Output Layer)的计算:
-
输入(加权和): 第 kkk 个神经元的输入 netk\text{net}_knetk 是上一层(隐藏层)所有输出的加权和加上偏置 bbb。
netk=∑jwkjaj+b\text{net}_k = \sum_j w_{kj} a_j + bnetk=j∑wkjaj+b
-
输出: 输出层第 kkk 个神经元的最终输出 aka_kak 是其输入 netk\text{net}_knetk 经过(可能不同的)激活函数 fff 的结果。
ak=f(netk)a_k = f(\text{net}_k)ak=f(netk)
-
3. 反向传播(Backward Propagation)的原理与优化目标
反向传播是训练的核心,目的是调整网络参数以最小化误差。
-
触发条件: 当目标函数(损失函数)的输出值与期望输出不相符时,触发反向传播。
-
核心过程:
-
将误差(Difference between output and target)以某种形式通过隐藏层逐层反传。
-
获得各层神经元的误差信号(或称误差项 δ\deltaδ)。
-
算法根据这些误差值(通过梯度下降法)调整连接权重。
-
-
优化目标: 这种调整的目标是使目标函数(损失函数)的输出值不断减小,直到达到预期。
4. 优化机制:梯度下降(Gradient Descent)
-
图示: 右下角的 3D 图显示了梯度下降法(Gradient Descent)的概念。
-
曲面: 代表损失函数(目标函数)在参数空间(权重和偏置)中的形状。
-
曲线: 代表模型训练过程中,损失函数的值沿着最陡峭的下降方向(即负梯度方向)不断下降,寻找最低点(全局或局部最小值)。
-
-
关联: 反向传播算法就是用来高效计算损失函数对每个权重和偏置的梯度(即下降的方向和幅度),从而指导梯度下降优化过程。
BP算法特性
总结了反向传播(BP)算法的特点(优点) 和局限性(缺点),这是评估该算法性能的关键知识点。
1. BP 算法的特点(优点)
BP 算法的优点主要源于其作为神经网络训练算法的机制:
| 序号 | 特点 | 描述 |
|---|---|---|
| (1) 自适应、自学习 | 参数更新机制 | BP 算法能够根据预设的参数更新规则(如梯度下降),不断地调整神经网络中的权重和偏置,以达到最符合期望的输出。 |
| (2) 较强的非线性映射能力 | 处理复杂问题 | 神经网络中的激活函数是非线性的(如 Sigmoid, ReLU),因此 BP 算法能训练出处理复杂非线性问题的网络。 |
| (3) 严谨的推导过程 | 数学基础 | 误差的反向传播过程采用了已经非常成熟的链式法则(Chain Rule)进行梯度计算,其推导过程严谨且科学。 |
| (4) 较强的泛化能力 | 解决新问题 | 在训练结束后,BP 算法可以利用从训练数据中学到的知识来解决新的、未见过的问题(即泛化到训练集之外的数据)。 |
2. BP 算法的局限性(缺点)
BP 算法的局限性主要与其采用的优化方法(梯度下降)和网络结构的设计有关:
| 序号 | 局限性 | 描述 |
|---|---|---|
| (1) 易陷入局部最小值 | 优化问题 | 由于 BP 算法采用的是梯度下降(Gradient Descent)方法,它容易沿着梯度的方向找到局部极小值(Local Minima),而不能保证得到全局最优解(Global Minima)。 |
| (2) 收敛速度慢 | 效率问题 | 神经网络中的参数(权重和偏置)众多。每次迭代都需要更新所有参数,尤其在面对大规模数据时,导致收敛速度较慢。 |
| (3) 隐节点选取缺乏理论指导 | 结构设计问题 | 传统的 BP 算法需要不断地设置隐藏层层数和每层节点数进行试凑、试错(Trial and Error),缺乏确定的理论指导来确定最优的隐藏层结构。 |
| (4) 学习新样本时可能遗忘旧样本 | 灾难性遗忘 | 在训练过程中,如果使用新的样本进行学习(尤其是针对增量学习),模型可能会遗忘之前已经学习过的旧样本的知识。这被称为灾难性遗忘(Catastrophic Forgetting)。 |
通俗理解-神经网络学习的基本概念原理
总结了神经网络学习的基本概念原理,通过将训练过程类比为**“猜数字”和“打靶”** 这两个生活中的例子进行解释。
以下是关于神经网络学习基本原理的知识点总结:
1. 神经网络训练的基本思想
-
核心过程: 神经网络的训练是一个不断迭代优化的过程,目标是使预测结果与真实结果之间的差异最小。
-
流程概括:
-
“猜”一个结果(即前向传播)。
-
计算这个结果与训练集真实标签 YYY 之间的差异(损失/误差)。
-
根据差异(损失函数),有依据地向真实结果调整(即反向传播和梯度下降)。
-
如此反复多次,直到预测结果和真实结果之间相差无几,完成训练。
-
-
三个重要概念: 神经网络的训练过程围绕三个核心概念展开:正向传播、梯度下降、损失函数。
2. 类比一:“猜数字”游戏
这是一个简化了的二分查找游戏,用来解释神经网络的训练要素:
| 神经网络概念 | 猜数字流程 | 解释 |
|---|---|---|
| 初始化 | 猜一个数(如甲猜 50)。 | 随机化:猜一个范围内的初始值。 |
| 正向传播 | 根据猜的数得到结果(如乙的反馈:“太大了”)。 | 得到预测结果,并将结果与目标值进行比较。 |
| 损失函数 | 根据猜的数和确定值做比较,得出“大”或“小”的结论。 | 计算误差(“大”、“小”是误差的定性描述)。 |
| 反向传播 | 乙告诉甲“小了”或“大了”。 | 将误差信号反馈给模型,指导参数调整。 |
| 梯度下降 | 根据乙的反馈调整下一轮的猜测值。 | 根据误差信号,有方向地(“往小了/大了调”)调整参数,使下次猜测更接近目标。 |
3. 类比二:“打靶”过程
这是一个描述如何通过试错和修正来掌握复杂技能的例子,用来解释训练的方向性调整:
| 神经网络概念 | 打靶流程 | 解释 |
|---|---|---|
| 初始化 | 随便开一枪。 | 随机权重和偏置的初始值。 |
| 前向传播 | 子弹射中靶子。 | 模型根据初始参数计算出预测结果。 |
| 损失函数 | 环数、偏离靶心距离。 | 计算预测结果与靶心(目标值)之间的差异(损失/误差)。 |
| 反向传播 | 把靶子拉回来一看(弹着点偏左)。 | 将误差信号反馈回射击者(模型),确认调整的方向。 |
| 梯度下降 | 根据本次的偏差,有意识地调整下一步的射击角度(往右侧调几毫米),再进行前向传播。 | 根据误差的梯度,有方向性地调整模型的权重/参数,以最小化损失。 |
总结: 无论是“猜数字”还是“打靶”,都体现了神经网络训练的循环本质:预测 →\to→ 算误差 →\to→ 修正参数 →\to→ 再次预测,其中梯度下降提供了修正的方向和幅度,是优化的核心机制。
梯度下降法
总结了梯度下降(Gradient Descent) 算法的原理、定义、核心要素和应用方法,它是神经网络中最核心的 优化算法。
1. 梯度下降的定义与目标
-
定义: 以最快的速度找到函数局部最小值的优化算法。
-
目标: 在机器学习和深度学习中,这个函数就是损失函数(Loss Function),目标是找到损失函数最小化时的网络参数(权重和偏置)。
2. 梯度的定义与数学表示
梯度是指导优化方向的核心概念。
-
梯度(∇\nabla∇): 函数在某点变化最快的方向(即斜率最大的方向)。
-
一元方程: 梯度就是某点的斜率(导数)。
-
多元方程: 梯度是一个向量,由函数对所有变量在某处的偏导数组成。
-
数学公式:
gradf(x,y,z)=∇f(x,y,z)=[∂f∂x,∂f∂y,∂f∂z]\text{grad} f(x, y, z) = \nabla f(x, y, z) = \left[\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z}\right]gradf(x,y,z)=∇f(x,y,z)=[∂x∂f,∂y∂f,∂z∂f]
-
3. 寻找最小值的核心过程
梯度下降是一个迭代寻找最小值的过程,由三个关键步骤组成:
| 序号 | 步骤 | 解释 |
|---|---|---|
| (1) 方向的选择 | 梯度 | 梯度指向函数值增大的方向。因此,为了寻找最小值,我们必须沿着梯度的反方向移动。 |
| (2) 前进的步长 | 学习率(Learning Rate) | 决定了每一步沿着负梯度方向移动的距离。学习率过大可能导致震荡甚至发散;学习率过小可能导致收敛速度慢。 |
| (3) 何时终止 | 梯度 ≈0\approx 0≈0 | 当函数到达局部最小值时,该点的斜率(或梯度向量的模)会接近于零,此时参数的更新量会很小,训练可以终止。 |
4. 梯度下降在神经网络中的应用
-
应用方式: 设计损失函数,沿着损失函数梯度的反方向更新网络参数(权重 W\mathbf{W}W 和偏置 b\mathbf{b}b)。
-
更新公式(基本形式):
新参数=旧参数−学习率×∇(损失函数)\text{新参数} = \text{旧参数} - \text{学习率} \times \nabla (\text{损失函数})新参数=旧参数−学习率×∇(损失函数)
- 其中 ∇(损失函数)\nabla (\text{损失函数})∇(损失函数) 是通过反向传播算法计算得到的。
5. 图形化解释
图片中的多个图示形象地展示了梯度下降过程:
![[Pasted image 20251022102958.png]]
-
左一图(一维): 抛物线代表一元损失函数,红线和红点展示了参数如何沿着斜率下降的方向一步步逼近最低点。
-
中间和右侧图(多维): 3D 曲面代表二元或多元损失函数在参数空间中的形状。黑线轨迹展示了优化过程如何沿着曲面(损失)最陡峭下降的方向(负梯度)曲折前进,最终到达一个局部最低点。
梯度下降法-权重调整的数学原理分析
展示了单层神经网络或感知机的两种基本情况,以及用于梯度下降优化的权重更新公式。
![[Pasted image 20251022103949.png]]
左侧是单个输入的情况:
-
模型输出 (Y′Y'Y′): Y′=wx+bY' = wx + bY′=wx+b (线性回归模型)
-
损失函数 (LossLossLoss): Loss=12(Y′−Y)2=12(wx+b−Y)2Loss = \frac{1}{2}(Y' - Y)^2 = \frac{1}{2}(wx + b - Y)^2Loss=21(Y′−Y)2=21(wx+b−Y)2 (均方误差的一半)
-
权重更新 (Δw\Delta wΔw): Δw=−α∂Loss∂w=−α(wx+b−Y)(x)=−α(Y′−Y)x\Delta w = -\alpha \frac{\partial Loss}{\partial w} = -\alpha (wx + b - Y)(x) = -\alpha (Y' - Y)xΔw=−α∂w∂Loss=−α(wx+b−Y)(x)=−α(Y′−Y)x
-
这是梯度下降的更新规则。α\alphaα 是学习率。
-
更新后的权重:w+Δw→w′w + \Delta w \to w'w+Δw→w′
-
右侧是两个输入 (X1,X2X1, X2X1,X2) 的情况(可以推广到多个输入 XXX):
-
模型输出 (Y′Y'Y′): Y′=w1x1+w2x2+bY' = w_1 x_1 + w_2 x_2 + bY′=w1x1+w2x2+b (线性组合)
-
损失函数 (LossLossLoss): Loss=12(Y′−Y)2=12(w1x1+w2x2+b−Y)2Loss = \frac{1}{2}(Y' - Y)^2 = \frac{1}{2}(w_1 x_1 + w_2 x_2 + b - Y)^2Loss=21(Y′−Y)2=21(w1x1+w2x2+b−Y)2
-
权重 w1w_1w1 更新 (Δw1\Delta w_1Δw1): Δw1=−α∂Loss∂w1=−α(w1x1+w2x2+b−Y)(x1)=−α(Y′−Y)x1\Delta w_1 = -\alpha \frac{\partial Loss}{\partial w_1} = -\alpha (w_1 x_1 + w_2 x_2 + b - Y)(x_1) = -\alpha (Y' - Y)x_1Δw1=−α∂w1∂Loss=−α(w1x1+w2x2+b−Y)(x1)=−α(Y′−Y)x1
-
权重 w2w_2w2 更新 (Δw2\Delta w_2Δw2): Δw2=−α∂Loss∂w2=−α(w1x1+w2x2+b−Y)(x2)=−α(Y′−Y)x2\Delta w_2 = -\alpha \frac{\partial Loss}{\partial w_2} = -\alpha (w_1 x_1 + w_2 x_2 + b - Y)(x_2) = -\alpha (Y' - Y)x_2Δw2=−α∂w2∂Loss=−α(w1x1+w2x2+b−Y)(x2)=−α(Y′−Y)x2
- 更新后的权重:w1+Δw1→w1′w_1 + \Delta w_1 \to w_1'w1+Δw1→w1′, w2+Δw2→w2′w_2 + \Delta w_2 \to w_2'w2+Δw2→w2′
核心概念总结:
-
前向传播 (Forward Propagation):计算 Y′Y'Y′(从输入 XXX 到输出 Y′Y'Y′)。
-
损失函数 (Loss Function):量化预测值 Y′Y'Y′ 和真实值 YYY 之间的差异。
-
反向传播/梯度下降 (Backpropagation/Gradient Descent):计算损失函数对于每个权重的梯度 (∂Loss∂wi\frac{\partial Loss}{\partial w_i}∂wi∂Loss),并用梯度来更新权重,以最小化损失。
-
学习率 (α\alphaα):控制每一步权重更新的幅度。
深度学习三要素概述
概括了深度学习的三个基本条件以及其目标和应用流程。
1. 深度学习的目标
-
目标: 从海量的数据中自动寻找特征。
-
例子: 如自然语言理解(NLP)。
2. 三个基本条件
深度学习的实现和成功依赖于以下三个要素:
(1) 算法
-
误差反向传播算法 (BP 算法):是训练神经网络的核心算法,用于计算损失函数对模型参数的梯度。
-
激活函数 (f(x)\text{f}(x)f(x)):引入非线性,使得网络可以学习复杂的模式(图中省略了具体形式,如 ReLU\text{ReLU}ReLU、Sigmoid\text{Sigmoid}Sigmoid 等)。
-
优化器: 梯度下降法(或其变体如 Adam\text{Adam}Adam、SGD\text{SGD}SGD 等),用于根据梯度调整模型参数。
-
网络拓扑结构: 带计算的网络(图中右上方是一个多层全连接神经网络的示意图)。
-
训练方式: 预训练-微调(这是迁移学习和现代深度学习的常用范式)。
(2) 数据
-
海量数据:深度学习需要大量的训练数据。
-
训练过程示例:
-
图中展示了一个10 层的深度学习网络的训练结构。
-
预训练(使用 3 层):在大量的通用数据上进行初始化训练。
-
微调(使用 2 层、2 层、3 层):在特定任务的小规模数据上进一步训练模型,调整参数以适应特定任务。
-
(3) 算力
-
硬件支持:图中虽然没有直接列出硬件,但“算力”意味着需要强大的计算资源(如 GPU\text{GPU}GPU、TPU\text{TPU}TPU 等)来处理海量数据和复杂的模型训练。
-
流程示例:
-
预训练大规模模型:使用海量数据进行预训练。
-
微调与下游任务: 预训练好的大规模模型通过微调适应不同的专业小数据集,从而应用于各种下游任务(如任务 1、任务 2、任务 3)。这是迁移学习的典型应用。
-
总而言之,该图清晰地阐述了深度学习在充足的算法、海量的数据和强大算力支持下,通过预训练-微调的模式,实现从通用知识到特定任务的高效迁移学习过程。
数据
关于人工智能(AI) 和 深度学习背景信息,主要关注神经元规模和图像领域的数据集。
文本内容总结
-
AI 与人脑神经元规模的对比:
-
人脑: 拥有约 101110^{11}1011 个神经元,组成庞大的神经网络系统。
-
AI 模型的设想: 如果让 AI\text{AI}AI 模型具备这种规模的神经元和感知机,是否可以产生人类的智能?
-
现状: 目前轰动全球的 ChatGPT\text{ChatGPT}ChatGPT 已经拥有了大规模的参数,虽然它与人脑的差距甚远,但已经表现出非凡的能力。
-
-
图像领域的数据集:
-
列举了一些用于训练图像识别和计算机视觉模型的著名数据集:
-
ImageNet
-
CIFAR-10
-
Labelme
-
Youtube-8M
-
CelebFaces
-
-
图像内容总结
图片下方的图像展示了两种常见的数据集格式:
-
左侧的拼贴图:
- 展示了大量不同类别的、复杂的、真实世界的图像。这很可能是 ImageNet 这种大规模、多样性高的图像数据集的缩影。
-
右侧的网格图:
-
展示了三行小的、清晰的图像,每张图下方都有一个对应的标签 (Label),例如 ship (船), dog (狗), deer (鹿), bird (鸟), horse (马), frog (青蛙), cat (猫), automobile (汽车), truck (卡车) 等。
-
这种格式和图片大小(32×3232\times3232×32 像素或类似)非常接近 CIFAR-10 或类似的标准分类数据集,用于训练图像分类任务。它直观地演示了监督学习中数据样本及其对应类别的关系。
-
核心主题:
图片传达的核心信息是现代 AI\text{AI}AI(尤其是深度学习模型)的发展,它正试图通过增加模型规模(如 ChatGPT\text{ChatGPT}ChatGPT 的参数数量)来逼近人脑的复杂性,并且 AI\text{AI}AI 的成功依赖于大规模、高质量的训练数据集(如 ImageNet\text{ImageNet}ImageNet 和 CIFAR-10\text{CIFAR-10}CIFAR-10)的支持。
算力
解释了算力 (Computing Power) 的定义和衡量单位。
算力的定义
-
广义上: 算力是计算机设备或计算/数据中心处理信息的能力。
-
狭义上: 算力是指一台计算设备理论上最大的每秒浮点运算次数。
算力的单位(FLOPs 及其前缀)
图片中的表格列出了衡量算力的基本单位 FLOPs 及其不同数量级的单位:
| 单位 | 英文全称 (Full English Name) | 中文全称 (Full Chinese Name) | 数量级 |
|---|---|---|---|
| FLOPS | Floating-Point Operations PerSecond | 每秒浮点运算次数 | 10010^0100 |
| MFLOPS | Mega FLOPS | 每秒一百万浮点运算次数 | 10610^6106 |
| GFLOPS | Giga FLOPS | 每秒十亿浮点运算次数 | 10910^9109 |
| TFLOPS | Tera FLOPS | 每秒一万亿浮点运算次数 | 101210^{12}1012 |
| PFLOPS | Peta FLOPS | 每秒一千万亿浮点运算次数 | 101510^{15}1015 |
| EFLOPS | Exa FLOPS | 每秒一百亿亿浮点运算次数 | 101810^{18}1018 |
| ZFLOPS | Zetta FLOPS | 每秒十万亿亿浮点运算次数 | 102110^{21}1021 |
关键点:
-
FLOPS 是衡量计算机(尤其是高性能计算和 AI\text{AI}AI 训练设备)处理速度和能力的关键指标。
-
每个单位都使用国际单位制的前缀(Mega, Giga, Tera, Peta, Exa, Zetta),代表了相应的 1000n1000^n1000n 倍关系(即 103,106,109,…10^3, 10^6, 10^9, \dots103,106,109,…)。
-
在深度学习和超级计算机领域,算力通常以 TFLOPS (万亿次) 或更高的 PFLOPS (千万亿次) 为单位进行衡量。
注:中文中 Exa\text{Exa}Exa 对应 101810^{18}1018,常被称为“百亿亿”。Zetta\text{Zetta}Zetta 对应 102110^{21}1021,常被称为“十万亿亿”。
7.5 扩展阅读知识
激活函数(7.5.1 激活函数的选择)
介绍了激活函数 (Activation Function) 的作用,并通过对比线性网络和非线性网络,以及以 Sigmoid 函数为例,解释了其重要性和特性。
激活函数的作用
- 核心目的: 激活函数的作用是通过非线性变换,使神经网络具备非线性特性,以解决一些非线性任务。
线性网络 vs. 非线性网络
![[Pasted image 20251022105317.png]]
-
线性网络 (Linear Network):
-
图示: 由几条直线组成,表示其决策边界或特征映射是线性的。
-
限制: 线性模型只能通过直线(或超平面)来分隔数据,无法解决复杂的、非线性的分类问题。
-
-
非线性网络 (Non-linear Network):
-
图示: 曲线或复杂的非线性函数,表示其决策边界或特征映射是非线性的。
-
能力: 引入非线性激活函数后,神经网络可以拟合任意复杂的函数,从而解决现实世界中的大多数非线性任务。
-
右侧散点图: 展示了一个典型的非线性分类问题。红点和蓝点不能被一条直线分开,但可以被一条非线性曲线(图中的黑色曲线)完美地分隔。这正是非线性网络的能力所在。
-
Sigmoid 激活函数
图片详细介绍了经典的 Sigmoid 激活函数:
![[Pasted image 20251022105358.png]]
-
函数公式:
f(x)=11+e−xf(x) = \frac{1}{1 + e^{-x}}f(x)=1+e−x1
-
函数图像: 呈现出一个“S”形的曲线,将任意实数输入映射到 (0,1)(0, 1)(0,1) 区间内。
-
特性分析:
-
非线性性: 曲线是非线性的,因此能为网络引入非线性能力。
-
在 -3 与 3 之间,优化比较明显: 在这个区间内,函数的梯度(导数)较大,进行梯度下降时,权重更新(优化)效果明显。
-
在 -3 与 3 之外,优化不明显: 当 ∣x∣|x|∣x∣ 较大时(如 x>3x>3x>3 或 x<−3x<-3x<−3),曲线变得非常平坦,梯度接近于 0。这会导致梯度消失 (Vanishing Gradient) 问题,使模型权重更新非常缓慢,优化停滞。
-
值域在 0-1 之间,是非对称算法: * 值域 [0,1][0, 1][0,1]: 使它常用于二分类任务的输出层(表示概率)。
-
“非对称算法” (Non-zero centered output): 它的输出均值不是 0(而是 0.5)。这会导致下一层的神经元接收到非零均值的输入。在反向传播时,这会使得梯度的计算方向一致(要么全部是正,要么全部是负),从而导致锯齿状 (zigzagging) 的优化路径,减慢收敛速度。
-
注:文本描述“这意味着下一个神经元只能接受正值的输入”的措辞略有不准确,更准确的说法是“这意味着下一层神经元的输入是全正的 (positive),且不是零均值的,从而可能导致优化问题”。
-
-
1. ReLU (Rectified Linear Unit)
-
函数公式:
f(x)=max(0,x)f(x) = \max(0, x)f(x)=max(0,x)
-
图示:![[Pasted image 20251022105648.png]]
-
当输入 x≤0x \le 0x≤0 时,输出 f(x)=0f(x) = 0f(x)=0 (水平线)。
-
当输入 x>0x > 0x>0 时,输出 f(x)=xf(x) = xf(x)=x (斜率为 1 的直线)。
-
-
特性:
-
非线性性: 虽然右侧是线性的,但整体上是分段线性的,是非线性函数。
-
不会同时激活所有神经元: 当输入 x≤0x \le 0x≤0 时,神经元会被“关闭” (输出为 0),这使得网络具有稀疏性,有助于提高计算效率和特征提取能力。
-
计算速度快: 相比 Sigmoid\text{Sigmoid}Sigmoid 和 Tanh\text{Tanh}Tanh 涉及指数运算,ReLU\text{ReLU}ReLU 只涉及简单的比较和加法,计算效率高。
-
有趋于 0 的梯度: 对于 x>0x > 0x>0,梯度恒为 1,解决了梯度消失问题。但对于 x<0x < 0x<0,梯度恒为 0,这会导致神经元死亡 (Dying ReLU) 问题,即一旦神经元输出为 0,它将永远不会再被激活和更新。
-
(注意:图中的错误信息) 图中写道:“ReLU\text{ReLU}ReLU 是目前隐藏层中最为常用的损失函数”。这是错误的。 ReLU\text{ReLU}ReLU 是激活函数,不是损失函数。
-
2. ELU (Exponential Linear Unit)
-
函数公式:
f(x)={xif x>0α(ex−1)if x≤0f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha (e^x - 1) & \text{if } x \le 0 \end{cases}f(x)={xα(ex−1)if x>0if x≤0
- 其中 α\alphaα 是一个可调参数,通常取值为正数 (如 1)。
-
图示:![[Pasted image 20251022105724.png]]
-
当 x>0x > 0x>0 时,与 ReLU\text{ReLU}ReLU 相同,输出 f(x)=xf(x) = xf(x)=x。
-
当 x≤0x \le 0x≤0 时,输出是一个指数曲线,逐渐趋近于 −α-\alpha−α (渐近线),但不会像 ReLU\text{ReLU}ReLU 那样直接降到 0。
-
-
特性:
-
非线性性: 曲线在负数区间是非线性的。
-
计算速度快: (特指收敛速度快) 它可以产生负值输出,使得激活函数的均值接近 0,从而缓解了之前提到的非零均值带来的优化问题,有助于加快收敛。
-
参数可调,可控制负数部分的表现: 通过参数 α\alphaα 可以调整负数区间的形状。
-
与 ReLU\text{ReLU}ReLU 相比,没有死亡神经元: 在 x≤0x \le 0x≤0 时,梯度不为 0(虽然很小),神经元仍有机会被激活,从而解决了 ReLU\text{ReLU}ReLU 的神经元死亡问题。
-
-
缺点:
- 负数部分计算较慢: 相比 ReLU\text{ReLU}ReLU 的简单归零,ELU\text{ELU}ELU 在负数部分涉及指数运算 (exe^xex),计算量更大,速度稍慢。
常用损失函数
总结了常用损失函数 (Loss Functions) 的选择,并将其分为回归损失函数和分类损失函数两大类,同时也提到了自定义损失函数的重要性。
1. 回归损失函数 (Regression Loss Functions)
用于衡量回归系统的误差,即预测值 YiY_iYi 和真实值 TiT_iTi 之间的差距。常见的有以下几种:
-
均方误差 (Mean Squared Error, MSE):
MSE=1N∑i=1N(Yi−Ti)2\text{MSE} = \frac{1}{N} \sum_{i=1}^{N} (Y_i - T_i)^2MSE=N1i=1∑N(Yi−Ti)2
- 特点: 对较大的误差(离群点)惩罚力度大。
-
平均绝对误差 (Mean Absolute Error, MAE):
MAE=1N∑i=1N∣Ti−Yi∣\text{MAE} = \frac{1}{N} \sum_{i=1}^{N} |T_i - Y_i|MAE=N1i=1∑N∣Ti−Yi∣
- 特点: 对所有误差一视同仁,惩罚力度均匀,对离群点不敏感。
-
平均绝对百分比误差 (Mean Absolute Percentage Error, MAPE):
MAPE=1N∑i=1N∣Yi−TiTi∣×100\text{MAPE} = \frac{1}{N} \sum_{i=1}^{N} \left|\frac{Y_i - T_i}{T_i}\right| \times 100MAPE=N1i=1∑NTiYi−Ti×100
- 特点: 结果是百分比形式,便于解释。常用于时间序列和预测,但当 TiT_iTi 接近 0 时会出问题。
-
均方对数误差 (Mean Squared Logarithmic Error, MSLE):
MSLE=1N∑i=1N[log(Ti+1)−log(Yi+1)]2\text{MSLE} = \frac{1}{N} \sum_{i=1}^{N} [\log(T_i + 1) - \log(Y_i + 1)]^2MSLE=N1i=1∑N[log(Ti+1)−log(Yi+1)]2
- 特点: 通过取对数来缩小误差范围。对较小的误差(尤其是在真实值 TiT_iTi 较小的情况下)惩罚较小,对较大的误差惩罚较大。常用于预测有长尾分布(即少数样本值极大)的变量。
2. 分类损失函数 (Classification Loss Functions)
用于衡量分类系统的误差。
-
二进交叉熵 (Binary Crossentropy):
Loss=−1N∑i=1N[Yi×logTi+(1−Yi)×log(1−Ti)]Loss = -\frac{1}{N} \sum_{i=1}^{N} [Y_i \times \log T_i + (1 - Y_i) \times \log (1 - T_i)]Loss=−N1i=1∑N[Yi×logTi+(1−Yi)×log(1−Ti)]
-
用途: 用于二分类问题。
-
对应激活函数: Sigmoid (将输出映射到 0 到 1 的概率)。
-
注:公式中的 YiY_iYi 应为真实标签 TiT_iTi,而 TiT_iTi 应为预测概率 Y^i\hat{Y}_iY^i。此处可能符号与文本描述的回归损失函数有所混淆,但公式本身代表二元交叉熵。
-
-
多分类交叉熵 (Categorical Crossentropy):
Loss=−1N∑i=1NYi×logTiLoss = -\frac{1}{N} \sum_{i=1}^{N} Y_i \times \log T_iLoss=−N1i=1∑NYi×logTi
-
用途: 用于多分类问题。
-
对应激活函数: Softmax (将输出转化为所有类别概率之和为 1 的分布)。
-
注:与二进交叉熵类似,公式中的 YiY_iYi 应为真实标签 TiT_iTi(One-Hot 编码),TiT_iTi 应为预测概率 Y^i\hat{Y}_iY^i。
-
3. 损失函数的设计
-
重要性: 在开发具体的应用时,也可以根据自身要求设计损失函数。损失函数的设计也是非常重要的技术创新领域。
-
挑战与收益: 损失函数的设计具有很大的挑战性,但是对提高系统的性能、模型训练的质量是非常重要的。
-
定律: 图片底部引用了“没有免费的午餐 (No Free Lunch, NFL)”定律,暗示没有一个损失函数在所有问题上都具有绝对优势,损失函数的选择和设计必须根据具体的任务特点来决定。
优化器-梯度下降的优化
这张图片对比了两种重要的神经网络优化算法 (Optimization Algorithms):随机梯度下降 (SGD\text{SGD}SGD) 及其变体,以及自适应梯度算法 (AdaGrad\text{AdaGrad}AdaGrad) 及其后续改进算法。
1. 随机梯度下降 (Stochastic Gradient Descent, SGD)
-
基本原理: 一次计算全部样本的误差之和(这是批梯度下降 BGD\text{BGD}BGD 的定义),但 SGD\text{SGD}SGD 的定义是一次只计算一个(批)样本的梯度来更新权重。
- 注:图中的描述“一次计算全部样本的误差之和”与 SGD\text{SGD}SGD 的标准定义(每次只用一个样本)有出入,但其后一句“一次只计算一个(批)样本”更符合实际应用中的小批量 SGD\text{SGD}SGD 概念。
-
优点:
-
高效。
-
可并行计算。
-
可适应新数据变化(预训练思想的萌芽)。
-
有机会找到全局最优(由于引入了随机性,可以跳出局部最优)。
-
-
局限:
-
不稳定: 梯度更新的方差较大,导致损失函数震荡。
-
没有解决学习率选择问题: 学习率需要手动调整,难以确定一个最佳值。
-
随机最优解: 最终收敛点带有随机性,可能不如批梯度下降稳定。
-
模型不可控。
-
-
改进:
-
小批量梯度下降 (Mini-batch SGD\text{Mini-batch SGD}Mini-batch SGD): 实践中最常用的版本,每次使用一小批样本进行计算,平衡了 BGD\text{BGD}BGD 的稳定性和 SGD\text{SGD}SGD 的效率。
-
动量梯度下降 (Momentum SGD\text{Momentum SGD}Momentum SGD): 引入动量项,使得更新方向不仅依赖当前梯度,还依赖历史梯度,有助于加速收敛和减少震荡。
-
-
Python 实现 (使用 PyTorch 的 optim\text{optim}optim 模块):
optimizer = optim.SGD(model.parameters(), lr=0.01) optimizer = optim.SGD(model.parameters(), momentum=0.9)
2. 自适应梯度算法 (Adaptive Gradient, AdaGrad)
-
基本原理: 根据权重的历史梯度来自适应地调整每个权重的学习率。
-
优点:
-
自动化调整学习率: 无需手动为每个参数选择学习率。
-
自适应: 对不经常更新的权重(即历史梯度较小的),给予较大的学习率;对经常更新的权重(即历史梯度较大的),给予较小的学习率。
-
-
局限:
-
梯度消失: 因为训练次数作为分母不断累加历史梯度的平方和,导致学习率随训练次数增加而单调递减,最终趋近于 0,使得模型过早停止学习(梯度消失)。
-
训练速度慢。
-
-
改进:
-
自适应平方根梯度下降法 (RMSProp\text{RMSProp}RMSProp): 解决了 AdaGrad\text{AdaGrad}AdaGrad 学习率单调递减的问题,通过使用指数加权平均来计算历史梯度平方和,从而只关注最近的梯度信息。
-
自适应矩估计法 (Adam\text{Adam}Adam): 目前最常用的优化器之一。它结合了 Momentum\text{Momentum}Momentum (一阶矩的指数加权平均) 和 RMSProp\text{RMSProp}RMSProp (二阶矩的指数加权平均) 的优点,并加入了偏差校正。
-
-
Python 实现 (使用 PyTorch 的 optim\text{optim}optim 模块):
optimizer = optim.Adagrad(model.parameters(), lr=0.01, weight_decay=1e-4, eps=1e-10) optimizer = optim.Adam(model.parameters(), lr=0.01, betas=(0.9, 0.999), eps=1e-8, weight_decay=0)
更多推荐


所有评论(0)