当前位置: 首页 > news >正文

深度学习入门:从神经网络基础到 BP 算法全解析

目录

引言

一、深度学习的基本概念

1.1 深度学习与机器学习、神经网络的关系

1.2 深度学习的核心优势

二、神经网络的构造

2.1 神经元的基本结构

2.2 神经网络的层级结构

2.3 神经网络的关键特性

三、感知器:最简单的神经网络

3.1 感知器的结构

3.2 感知器的局限性

3.3 感知器的训练过程

四、多层感知器:解决非线性问题的关键

4.1 多层感知器的结构

4.2 隐藏层的作用:实现非线性分类

4.3 偏置节点的处理

4.4 多层感知器的参数设置

4.4.1 输入层与输出层节点数

4.4.2 隐藏层数量与节点数

五、损失函数:衡量模型误差的核心工具

5.1 损失函数的基本概念

5.2 常用损失函数详解

5.2.1 0-1 损失函数(0-1 Loss Function)

5.2.2 均方差损失函数(Mean Squared Error, MSE)

5.2.3 平均绝对差损失函数(Mean Absolute Error, MAE)

5.2.4 交叉熵损失函数(Cross-Entropy Loss)

5.2.4.1 二分类交叉熵损失

5.2.4.2 多分类交叉熵损失

5.2.5 合页损失函数(Hinge Loss)

5.3 多分类任务的损失计算特殊处理

六、正则化:防止过拟合的关键技术

6.1 过拟合的产生原因

6.2 常用正则化方法

6.2.1 L1 正则化(L1 Regularization)

6.2.2 L2 正则化(L2 Regularization)

6.2.3 正则化强度参数 λ 的选择

七、梯度下降:神经网络的优化核心

7.1 梯度的数学定义

7.2 梯度下降算法的基本流程

7.3 梯度下降的关键参数:学习率 α

7.4 梯度下降的常见变种

7.4.1 批量梯度下降(Batch Gradient Descent, BGD)

7.4.2 随机梯度下降(Stochastic Gradient Descent, SGD)

7.4.3 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)

八、BP 神经网络:误差反向传播的实现

8.1 BP 神经网络的基本原理

8.2 正向传播的数学推导

8.3 反向传播的数学推导(核心)

8.3.1 输出层误差项 δ^(L) 的计算

8.3.2 隐藏层误差项 δ^(l) 的计算(l < L)

8.3.3 损失对参数的梯度计算

8.4 BP 神经网络的参数更新

8.5 BP 神经网络的训练实例(简化版)

九、深度神经网络的发展与规模

9.1 深度神经网络的核心优势

9.2 大规模参数的影响

9.3 深度神经网络的挑战与应对

十、总结与学习建议

10.1 核心知识总结

10.2 学习建议


引言

在人工智能飞速发展的当下,深度学习作为机器学习领域的重要分支,已经成为推动图像识别、自然语言处理、语音识别等众多前沿技术发展的核心动力。无论是日常使用的人脸识别解锁,还是智能助手的语音交互,背后都离不开深度学习模型的支撑。本次博客将结合《第 1 章 . 深度学习入门》PPT 内容,从深度学习的基本概念出发,逐步深入讲解神经网络的构造、感知器、多层感知器、损失函数、正则化以及梯度下降与 BP 算法等关键知识,帮助读者系统入门深度学习,每部分内容都会结合 PPT 进行详细解读,为后续更深入的学习打下坚实基础。

一、深度学习的基本概念

1.1 深度学习与机器学习、神经网络的关系

深度学习(DL, Deep Learning)并非独立于机器学习(ML, Machine Learning)的全新领域,而是机器学习领域中一个新的研究方向,它通过模拟人脑神经元的工作方式,构建多层次的神经网络模型,从数据中自动学习特征并进行预测或分类,它以神经网络为核心技术基础,通过构建更深层次、更复杂的网络结构来挖掘数据中的复杂特征和规律。

从概念范畴来看,三者的关系可以用 "包含与被包含" 来概括:机器学习是人工智能的一个重要分支,而深度学习是机器学习的一个子领域;神经网络则是深度学习实现的核心技术载体,深度学习可以看作是 "深度" 的神经网络(通常指包含多个隐藏层的神经网络)。PPT 中通过清晰的概念层级图直观展示了这一关系,帮助我们快速理清三者的定位。

                                   图 1 机器学习、神经网络与深度学习的概念关系

1.2 深度学习的核心优势

与传统的机器学习算法相比,深度学习具有以下核心优势:

​自动特征提取​​:传统机器学习算法需要人工设计和提取数据特征,这一过程不仅耗时耗力,还高度依赖工程师的经验,且难以处理复杂数据(如高分辨率图像、长文本等)。而深度学习模型能够通过多层网络结构,自动从原始数据中学习和提取特征,从底层的简单特征(如图像的边缘、纹理)逐步构建到高层的复杂特征(如物体的形状、类别),大大减少了人工干预。

​处理复杂数据能力强​​:随着数据规模的不断扩大和数据类型的日益复杂(如海量图像、视频、自然语言文本等),传统算法在处理这些数据时往往面临性能瓶颈。深度学习模型通过大规模的参数和复杂的网络结构,能够有效建模数据中的复杂非线性关系,在处理大规模、高维度复杂数据时表现出卓越的性能。

​泛化能力提升​​:在充足的数据和合理的模型设计下,深度学习模型能够通过正则化、 dropout 等技术有效避免过拟合,具有更强的泛化能力,能够更好地适应新的、未见过的数据,从而在实际应用中保持稳定的性能。

二、神经网络的构造

神经网络是深度学习的核心架构,其灵感来源于人类大脑的神经元连接结构。一个完整的神经网络由大量的节点(或称 "神经元")和节点之间的连接构成,每个节点代表一种特定的输出函数(激活函数),每两个节点间的连接代表一个权重(相当于神经网络的 "记忆")。

2.1 神经元的基本结构

神经元是神经网络的基本组成单元,其结构可以用一个简单的数学模型来描述。PPT 中展示了神经元的基本结构,主要包括输入层、权重、求和单元和激活函数四部分:

                                                       图 2 神经元基本结构

​输入(x₁, x₂, ..., xₙ)​​:神经元的输入来自前一层的输出或原始数据的特征,每个输入对应一个特征维度。例如,在处理图像数据时,输入可能是图像的像素值;在处理文本数据时,输入可能是单词的向量表示。

​权重(w₁, w₂, ..., wₙ)​​:每个输入都对应一个权重,权重用于衡量该输入对神经元输出的重要程度。权重的大小和正负表示输入特征对输出的影响程度和方向,正权重表示该输入特征对输出有正向促进作用,负权重表示有反向抑制作用。在神经网络训练过程中,核心任务就是不断调整这些权重值,使得模型的预测结果与真实结果尽可能接近。

​求和单元(Σ)​​:求和单元的作用是将所有输入与对应权重的乘积相加,并加上一个偏置项(b),得到一个线性组合结果(z)。其数学表达式为:

z = w₁x₁ + w₂x₂ + ... + wₙxₙ + b

偏置项(b)的引入是为了调整神经元的激活阈值,使得模型能够更好地拟合数据。如果没有偏置项,当所有输入都为 0 时,神经元的输出也为 0,限制了模型的表达能力。为了方便计算,通常会将偏置项融入权重中,即增加一个恒为 1 的输入 x₀,对应的权重为 w₀ = b,此时求和公式可改写为:

z = w₀x₀ + w₁x₁ + w₂x₂ + ... + wₙxₙ(其中 x₀ = 1)

​激活函数(g (・))​​:激活函数的作用是对求和单元的线性输出(z)进行非线性变换,将其映射到一个特定的范围内,从而使神经网络能够建模数据中的非线性关系。如果没有激活函数,无论神经网络有多少层,最终的输出都只是输入的线性组合,无法处理复杂的非线性问题。

                                                          图 3 sigmoid 激活函数

PPT 中提到了 sigmoid 激活函数,其数学表达式为:g (z) = 1 / (1 + e⁻ᵢ)

sigmoid 函数的输出范围在 (0, 1) 之间,具有平滑可导的特点,常用于二分类问题的输出层,将模型的预测结果映射为概率值。除了 sigmoid 函数,常用的激活函数还有 ReLU 函数(g (z) = max (0, z))、tanh 函数(g (z) = (eᵢ - e⁻ᵢ) / (eᵢ + e⁻ᵢ))等,不同的激活函数具有不同的特性,适用于不同的网络结构和任务场景。

2.2 神经网络的层级结构

一个完整的神经网络通常分为输入层、隐藏层和输出层三个部分(此处插入 PPT 中 "神经网络层级结构" 图,标注:图 4 神经网络层级结构):

​输入层​​:输入层是神经网络与外部数据交互的接口,其节点数与输入数据的特征维度一致。例如,处理一张 28×28 的灰度图像时,输入数据的特征维度为 784(28×28),因此输入层的节点数为 784;处理一个包含 5 个特征的结构化数据时,输入层的节点数为 5。输入层的作用是将原始数据或特征向量传递到下一层(隐藏层或输出层),它不进行任何计算,仅起到数据传递的作用。

​隐藏层​​:隐藏层位于输入层和输出层之间,是神经网络进行特征提取和数据变换的核心部分。隐藏层可以有一层或多层,当隐藏层的数量较多时(通常大于等于 3 层),该神经网络就被称为深度神经网络。隐藏层的节点数没有固定的理论标准,通常需要根据具体的任务场景、数据规模和模型复杂度进行经验性设置。一般的做法是预先设定几个可选的节点数(如 32、64、128 等),通过实验对比不同节点数下模型的性能(如准确率、损失值等),选择性能最优的节点数作为最终的隐藏层节点数。隐藏层的每个节点都会对前一层的输出进行线性组合和非线性激活变换,通过多层的堆叠,逐步将输入数据的浅层特征转化为深层的抽象特征,为输出层的预测提供有力支持。

​输出层​​:输出层是神经网络产生预测结果的部分,其节点数与任务的目标维度一致。在分类任务中,输出层的节点数通常与类别数量相同,例如二分类任务的输出层节点数为 1(使用 sigmoid 激活函数输出概率)或 2(使用 softmax 激活函数输出各类别概率),多分类任务(如 10 类分类)的输出层节点数为 10(使用 softmax 激活函数);在回归任务中,输出层的节点数通常为 1(预测一个连续值)或多个(预测多个连续值)。输出层的激活函数也需要根据任务类型进行选择,分类任务常用 sigmoid(二分类)或 softmax(多分类)函数,回归任务常用线性激活函数(即不使用激活函数,直接输出线性组合结果)。

2.3 神经网络的关键特性

​拓扑结构与数据流向​​:神经网络的拓扑结构指的是节点的连接方式和层级分布,它决定了数据在网络中的传递路径。在预测过程中,数据从输入层流入,经过隐藏层的逐层处理,最终从输出层流出,这种数据传递方式称为正向传播。需要注意的是,神经网络结构图中的拓扑与箭头代表的是预测过程中数据的流向,与训练过程中的数据流(正向传播计算预测值,反向传播调整参数)有所区别。

​核心在于连接权重​​:神经网络结构图中的 "神经元"(圆圈)本身并不是关键,真正关键的是神经元之间的连接(连接线)以及对应的权重值。每个连接对应一个不同的权重,这些权重是神经网络通过训练从数据中学习到的 "知识",它们决定了输入特征对输出结果的影响程度。在神经网络的程序实现中,并不需要实际构建 "神经元" 和 "连接线" 的实体,而是通过矩阵运算来高效实现数据的正向传播和权重的更新,因此,一个高效的线性代数库(如 NumPy、TensorFlow 中的线性代数模块)是实现神经网络的重要工具。

​偏置神经元​​:在神经网络的每个层次中(除了输出层以外),都会默认存在一个偏置神经元(节点)。偏置神经元的本质是一个只含有存储功能且存储值永远为 1 的单元,它没有输入(即前一层中没有箭头指向它),其作用是为该层的每个节点提供一个偏置项,调整节点的激活阈值。在绘制神经网络结构图时,为了简洁,通常不会明确画出偏置神经元,但在实际的模型计算和实现中,必须考虑偏置项的影响。

三、感知器:最简单的神经网络

感知器(Perceptron)是由两层神经元组成的最简单的神经网络,它是神经网络发展史上的重要里程碑,为后续复杂神经网络的研究奠定了基础。

3.1 感知器的结构

感知器由输入层和输出层组成,没有隐藏层(此处插入 PPT 中 "感知器结构" 图,标注:图 5 感知器结构)。输入层包含若干个输入节点,用于接收输入数据的特征;输出层包含一个或多个输出节点,用于产生预测结果。感知器的数学模型可以通过线性代数方程组和矩阵乘法来表示,这使得感知器的计算过程更加高效和简洁。

假设感知器的输入层有 n 个节点(对应 n 个特征),输入向量为 x = [x₁, x₂, ..., xₙ]ᵀ(其中上标 T 表示转置,将行向量变为列向量);输出层有 m 个节点(对应 m 个预测目标),权重矩阵为 W(m×n 维矩阵,其中 Wᵢⱼ表示输入层第 j 个节点到输出层第 i 个节点的连接权重);偏置项为 b = [b₁, b₂, ..., bₘ]ᵀ(输出层每个节点对应一个偏置项)。

感知器的正向传播过程分为两步:

​线性组合​​:输出层每个节点先对输入向量与对应权重进行线性组合,并加上偏置项,得到线性输出 z。对于输出层第 i 个节点,其线性输出为:

zᵢ = Wᵢ₁x₁ + Wᵢ₂x₂ + ... + Wᵢₙxₙ + bᵢ

使用矩阵乘法表示,整个输出层的线性输出向量 z(m×1 维)为:

z = Wx + b

​非线性激活​​:对线性输出 z 使用激活函数 g (・) 进行非线性变换,得到感知器的最终输出 y(m×1 维):

y = g (z) = g (Wx + b)

PPT 中以一个输入层有 3 个节点、输出层有 2 个节点的感知器为例(此处插入 PPT 中 "感知器矩阵运算示例" 图,标注:图 6 感知器矩阵运算示例),展示了矩阵乘法在感知器计算中的应用。该感知器的权重矩阵 W 为 2×3 维(W = [[W₁₁, W₁₂, W₁₃], [W₂₁, W₂₂, W₂₃]]),输入向量 x 为 3×1 维(x = [x₁, x₂, x₃]ᵀ),则线性输出 z 为:

z₁ = W₁₁x₁ + W₁₂x₂ + W₁₃x₃ + b₁
z₂ = W₂₁x₁ + W₂₂x₂ + W₂₃x₃ + b₂

用矩阵乘法表示为:

[z₁; z₂] = [[W₁₁, W₁₂, W₁₃], [W₂₁, W₂₂, W₂₃]] × [x₁; x₂; x₃] + [b₁; b₂]

3.2 感知器的局限性

感知器虽然是神经网络的基础,但它存在一个严重的局限性:只能线性划分数据。这意味着感知器只能处理线性可分的问题,对于线性不可分的问题(如异或(XOR)问题),感知器无法得到正确的分类结果。

以异或问题为例,异或运算的真值表如下:

x₁x₂输出 y
000
011
101
110

我们将这些数据点在二维平面上进行可视化,可以发现无法找到一条直线将输出为 0 和输出为 1 的数据点完全分开,即异或问题是线性不可分的。由于感知器的决策边界是线性的(由线性组合和激活函数决定),因此它无法解决异或问题。

感知器的这一局限性在 20 世纪 60 年代被发现后,导致神经网络的研究进入了一段低谷期。直到后来多层感知器(增加隐藏层)的提出,才解决了线性不可分问题,推动了神经网络研究的复兴。

3.3 感知器的训练过程

感知器的训练目标是找到合适的权重矩阵 W 和偏置项 b,使得模型的预测输出 y 与真实标签 t 尽可能接近。其训练过程主要包括以下步骤:

  1. ​初始化参数​​:随机初始化权重矩阵 W 和偏置项 b,初始化的权重值通常选择较小的随机数(如在 [-0.1, 0.1] 范围内),以避免激活函数进入饱和区(如 sigmoid 函数在 | z | 较大时导数接近 0,导致梯度消失)。

  2. ​正向传播计算预测值​​:对于每个训练样本(x, t),将输入 x 传入感知器,通过线性组合和激活函数计算得到预测输出 y。

  3. ​计算损失函数​​:损失函数用于衡量预测输出 y 与真实标签 t 之间的误差,感知器常用的损失函数是均方误差损失函数(适用于回归任务)或交叉熵损失函数(适用于分类任务),具体的损失函数定义和计算将在后续章节详细介绍。

  4. ​反向传播调整参数​​:根据损失函数的梯度,使用梯度下降法调整权重矩阵 W 和偏置项 b,以减小损失值。对于感知器而言,由于没有隐藏层,反向传播过程相对简单,直接根据输出层的误差计算权重和偏置的梯度,并更新参数。

  5. ​迭代训练​​:重复步骤 2-4,对所有训练样本进行多轮迭代训练,直到损失函数的值小于预设的阈值,或达到预设的迭代次数,此时认为模型训练完成。

四、多层感知器:解决非线性问题的关键

多层感知器(Multilayer Perceptron, MLP)是在感知器的基础上增加了一个或多个隐藏层的神经网络,它通过隐藏层的非线性变换,能够有效解决线性不可分问题,大大增强了神经网络的表达能力。

4.1 多层感知器的结构

多层感知器的结构包括输入层、一个或多个隐藏层和输出层(此处插入 PPT 中 "多层感知器结构" 图,标注:图 7 多层感知器结构)。与感知器相比,多层感知器的核心区别在于增加了隐藏层,隐藏层的每个节点都与前一层的所有节点相连(称为全连接层),并通过激活函数进行非线性变换。

假设多层感知器有 L 层,其中第 1 层为输入层,第 L 层为输出层,第 2 层到第 L-1 层为隐藏层。对于第 l 层(2 ≤ l ≤ L),设其节点数为 nₗ,前一层(第 l-1 层)的输出为 a^(l-1)(n^(l-1)×1 维向量),第 l 层的权重矩阵为 W^(l)(nₗ×n^(l-1) 维矩阵,其中 W^(l)ᵢⱼ表示第 l-1 层第 j 个节点到第 l 层第 i 个节点的连接权重),偏置项为 b^(l)(nₗ×1 维向量),激活函数为 g^(l)(・),则第 l 层的输出 a^(l)(nₗ×1 维向量)的计算过程如下:

​线性组合​​:计算第 l 层的线性输出 z^(l),即前一层输出与权重矩阵的乘积加上偏置项:

z^(l) = W^(l) a^(l-1) + b^(l)

​非线性激活​​:对线性输出 z^(l) 应用激活函数 g^(l)(・),得到第 l 层的输出 a^(l):

a^(l) = g^(l)(z^(l))

以一个包含 1 个隐藏层的多层感知器为例(输入层 3 个节点、隐藏层 2 个节点、输出层 1 个节点),其正向传播过程如下:

​输入层到隐藏层​​:输入向量 a^(1) = [x₁, x₂, x₃]ᵀ,隐藏层权重矩阵 W^(2)(2×3 维),偏置项 b^(2)(2×1 维),则隐藏层线性输出 z^(2) = W^(2) a^(1) + b^(2),隐藏层输出 a^(2) = g^(2)(z^(2))(g^(2) 通常选择 ReLU、tanh 等激活函数)。

​隐藏层到输出层​​:输出层权重矩阵 W^(3)(1×2 维),偏置项 b^(3)(1×1 维),则输出层线性输出 z^(3) = W^(3) a^(2) + b^(3),输出层输出 a^(3) = g^(3)(z^(3))(g^(3) 根据任务选择,分类任务用 sigmoid 或 softmax,回归任务用线性激活函数)。

PPT 中通过公式推导展示了多层感知器的正向传播过程(此处插入 PPT 中 "多层感知器正向传播公式推导" 图,标注:图 8 多层感知器正向传播公式推导),清晰地呈现了各层之间的数值传递关系,帮助我们理解多层感知器的计算逻辑。

4.2 隐藏层的作用:实现非线性分类

隐藏层是多层感知器能够解决非线性问题的核心,其本质是通过多层非线性变换,将输入空间中的线性不可分数据映射到更高维度的特征空间中,使其在新的特征空间中变得线性可分。

以异或问题为例,我们通过一个包含 1 个隐藏层的多层感知器来解决它。假设隐藏层有 2 个节点,激活函数选择 sigmoid 函数,输出层 1 个节点,激活函数也选择 sigmoid 函数。通过训练调整权重和偏置后,隐藏层会将输入空间中的(0,0)、(0,1)、(1,0)、(1,1)四个数据点映射到新的特征空间中,使得在新的特征空间中可以用一条直线将输出为 0 和 1 的数据点分开,从而实现异或问题的正确分类。

PPT 中强调 "神经网络可以做非线性分类的关键 -- 隐藏层"(此处插入 PPT 中 "隐藏层作用说明" 图,标注:图 9 隐藏层实现非线性分类的原理),直观地揭示了隐藏层在突破线性限制、提升模型表达能力方面的重要作用。

4.3 偏置节点的处理

在多层感知器中,偏置节点的设置与感知器类似:在每个隐藏层和输入层(通常将偏置视为输入层的一个特殊节点)中,默认存在一个偏置节点,其值恒为 1,没有输入(即前一层没有节点连接到它),仅用于为对应层的节点提供偏置项。

偏置节点的引入有以下重要意义:

​调整激活阈值​​:偏置项可以改变神经元的激活阈值,使得模型能够更好地拟合数据。例如,对于 sigmoid 激活函数,当没有偏置项时,只有当输入的线性组合 z≥0 时,神经元的输出才会大于 0.5;而加入偏置项后,可以通过调整偏置项的大小,改变神经元激活的 "难易程度",从而使模型能够适应不同的数据分布。

​避免模型表达受限​​:如果没有偏置项,神经网络的输出将始终通过原点,限制了模型的表达范围。偏置项的存在使得模型能够自由调整输出的偏移量,从而更灵活地拟合数据中的非线性关系。

在实际的模型绘制中,为了简化图形,通常不会明确画出偏置节点,但在代码实现和公式推导中,必须包含偏置项的计算。PPT 中展示了包含偏置节点的多层感知器结构(此处插入 PPT 中 "含偏置节点的多层感知器结构" 图,标注:图 10 含偏置节点的多层感知器),并对偏置节点的特性进行了说明,帮助我们正确理解偏置在多层感知器中的作用。

4.4 多层感知器的参数设置

多层感知器的参数设置(如隐藏层数量、隐藏层节点数)直接影响模型的性能和训练效率,目前业界没有完善的理论来指导这些参数的选择,主要依靠经验和实验对比来确定。

4.4.1 输入层与输出层节点数

​输入层节点数​​:输入层节点数由输入数据的特征维度决定,与特征维度保持一致。例如,处理一张 28×28 的灰度图像(特征维度为 784)时,输入层节点数为 784;处理一个包含 10 个特征的结构化数据集时,输入层节点数为 10。

​输出层节点数​​:输出层节点数由任务的目标维度决定:

  • ​二分类任务​​:通常设置 1 个输出节点(使用 sigmoid 激活函数,输出值表示正类的概率)或 2 个输出节点(使用 softmax 激活函数,输出两类的概率)。
  • ​多分类任务(如 K 类分类)​​:设置 K 个输出节点,使用 softmax 激活函数,每个输出节点对应一个类别的概率,所有输出节点的概率和为 1。
  • ​回归任务​​:如果预测一个连续值,设置 1 个输出节点(使用线性激活函数);如果预测多个连续值,设置与连续值数量相同的输出节点(每个节点使用线性激活函数)。
4.4.2 隐藏层数量与节点数

​隐藏层数量​​:隐藏层数量越多,模型的表达能力越强,能够处理更复杂的非线性问题,但同时也会增加模型的复杂度和训练难度(如过拟合、梯度消失等)。对于简单的任务(如线性回归、二分类),1-2 个隐藏层通常足够;对于复杂的任务(如图像识别、自然语言处理),可能需要更多的隐藏层(此时多层感知器会逐渐向深度神经网络过渡)。

​隐藏层节点数​​:隐藏层节点数的选择需要平衡模型的表达能力和训练效率。节点数过少,模型的表达能力不足,可能导致欠拟合;节点数过多,模型复杂度增加,容易导致过拟合,且训练时间变长。常用的经验做法是:

  1. 参考类似任务的模型设置,选择一个初始节点数(如 64、128、256 等)。
  2. 通过实验对比不同节点数(如 32、64、128)下模型的性能(如训练集损失、测试集准确率)。
  3. 选择在测试集上性能最优的节点数作为最终的隐藏层节点数。

PPT 中对多层感知器的参数设置原则进行了总结(此处插入 PPT 中 "多层感知器参数设置说明" 图,标注:图 11 多层感知器参数设置原则),明确了输入层、输出层节点数的确定方法和隐藏层节点数的选择思路,为我们搭建多层感知器模型提供了重要的参考。

五、损失函数:衡量模型误差的核心工具

模型训练的核心目标是通过调整参数,使模型的预测结果尽可能接近真实结果。损失函数(Loss Function)是衡量模型预测误差的关键工具,它将预测值与真实值之间的差异量化为一个数值(损失值),模型训练过程就是不断最小化损失值的过程。

5.1 损失函数的基本概念

损失函数是定义在单个训练样本上的函数,用于计算模型对该样本的预测值与真实值之间的误差。设模型对样本 i 的预测值为 yᵢ,真实值为 tᵢ,则损失函数 L (yᵢ, tᵢ) 表示该样本的损失值,损失值越小,说明模型对该样本的预测越准确。

在实际训练中,我们通常使用代价函数(Cost Function)来衡量模型在整个训练集上的平均误差,代价函数是损失函数在所有训练样本上的平均值。设训练集包含 N 个样本,则代价函数 J (θ)(θ 表示模型的所有参数,如权重和偏置)为:

J (θ) = (1/N) × Σ(从 i=1 到 N)L (yᵢ, tᵢ)

模型训练的目标就是找到一组参数 θ*,使得代价函数 J (θ) 最小,即 θ* = arg min(θ)J (θ)。

PPT 中通过流程图展示了损失函数在模型训练中的作用(此处插入 PPT 中 "损失函数在训练中的作用流程" 图,标注:图 12 损失函数在模型训练中的作用),清晰地呈现了 "参数初始化→正向传播预测→计算损失→反向传播调整参数" 的循环过程,其中损失函数是连接预测结果与参数调整的关键桥梁。

5.2 常用损失函数详解

不同的任务类型(分类、回归)需要选择不同的损失函数,以下详细介绍深度学习中常用的损失函数,包括其公式、适用场景和特点。

5.2.1 0-1 损失函数(0-1 Loss Function)

0-1 损失函数是最简单的损失函数,直接根据预测值与真实值是否一致来计算损失:

L (yᵢ, tᵢ) = 1,若 yᵢ ≠ tᵢ(预测错误);L (yᵢ, tᵢ) = 0,若 yᵢ = tᵢ(预测正确)

​适用场景​​:二分类或多分类任务的误差衡量,常用于理论分析(如计算模型的错误率)。

​特点​​:

  • ​优点​​:直观易懂,直接反映预测的对错。
  • ​缺点​​:不连续、不可导,无法用于梯度下降法优化(梯度下降需要损失函数可导),因此在实际模型训练中很少直接使用。
5.2.2 均方差损失函数(Mean Squared Error, MSE)

均方差损失函数通过计算预测值与真实值之间差值的平方来衡量误差,是回归任务中最常用的损失函数之一。其定义为:

L (yᵢ, tᵢ) = (1/2) × (yᵢ - tᵢ)²(单个样本)

代价函数为:J (θ) = (1/(2N)) × Σ(从 i=1 到 N)(yᵢ - tᵢ)²

​适用场景​​:回归任务(如房价预测、股票价格预测、温度预测等),预测值为连续值。

​特点​​:

  • ​优点​​:可导、计算简单,能够有效惩罚较大的误差(因为误差被平方放大)。
  • ​缺点​​:
    • ​对异常值敏感​​:异常值的误差会被平方后大幅放大,导致模型过度关注异常值,影响整体性能。
    • ​不适用于分类任务​​:分类任务的预测值是离散的类别或概率,MSE 会将类别之间的差异线性化,不符合分类任务的误差逻辑(如二分类中,类别 0 和 1 的差异与类别 1 和 2 的差异性质不同)。

PPT 中在介绍损失函数时提到了均方差损失,并结合回归任务的场景进行了说明(此处插入 PPT 中 "均方差损失函数说明" 图,标注:图 13 均方差损失函数的定义与适用场景),帮助我们理解其在回归任务中的应用。

5.2.3 平均绝对差损失函数(Mean Absolute Error, MAE)

平均绝对差损失函数通过计算预测值与真实值之间差值的绝对值来衡量误差,也是回归任务中常用的损失函数。其定义为:

L (yᵢ, tᵢ) = |yᵢ - tᵢ|(单个样本)

代价函数为:J (θ) = (1/N) × Σ(从 i=1 到 N)|yᵢ - tᵢ|

​适用场景​​:回归任务,尤其适用于存在较多异常值的场景。

​特点​​:

  • ​优点​​:
    • ​对异常值不敏感​​:由于使用绝对值,异常值的误差不会被放大,相比 MSE 更稳健。
    • ​直观易懂​​,能够反映预测值与真实值的平均绝对偏差。
  • ​缺点​​:
    • ​在 yᵢ = tᵢ处不可导​​(绝对值函数在 0 点不可导),可能影响梯度下降的收敛速度(实际中可通过次梯度方法解决)。
    • ​对所有误差的惩罚力度相同​​,没有像 MSE 那样对大误差进行更严厉的惩罚,在某些需要重点关注大误差的场景中表现不如 MSE。
5.2.4 交叉熵损失函数(Cross-Entropy Loss)

交叉熵损失函数源于信息论中的交叉熵概念,用于衡量两个概率分布之间的差异,是分类任务中最常用的损失函数,分为二分类交叉熵和多分类交叉熵两种形式。

5.2.4.1 二分类交叉熵损失

二分类任务中,模型的输出通常是单个节点(使用 sigmoid 激活函数),输出值 yᵢ表示样本 i 属于正类的概率(0 ≤ yᵢ ≤ 1),属于负类的概率为 1 - yᵢ。真实标签 tᵢ通常用 0(负类)或 1(正类)表示。二分类交叉熵损失函数的定义为:

L (yᵢ, tᵢ) = -[tᵢ × log (yᵢ) + (1 - tᵢ) × log (1 - yᵢ)](单个样本)

代价函数为:J (θ) = - (1/N) × Σ(从 i=1 到 N)[tᵢ × log (yᵢ) + (1 - tᵢ) × log (1 - yᵢ)]

​公式解读​​:

  • 当 tᵢ = 1(样本为正类)时,损失函数简化为 -log (yᵢ):yᵢ越接近 1,log (yᵢ) 越接近 0,损失值越小;yᵢ越接近 0,log (yᵢ) 越接近 -∞,损失值越大,从而惩罚预测错误的样本。
  • 当 tᵢ = 0(样本为负类)时,损失函数简化为 -log (1 - yᵢ):yᵢ越接近 0,log (1 - yᵢ) 越接近 0,损失值越小;yᵢ越接近 1,log (1 - yᵢ) 越接近 -∞,损失值越大,同样惩罚预测错误的样本。
5.2.4.2 多分类交叉熵损失

多分类任务中,模型的输出通常是 K 个节点(K 为类别数),使用 softmax 激活函数,输出向量 yᵢ = [yᵢ₁, yᵢ₂, ..., yᵢₖ]ᵀ,其中 yᵢⱼ表示样本 i 属于类别 j 的概率(0 ≤ yᵢⱼ ≤ 1,且 Σ(从 j=1 到 K)yᵢⱼ = 1)。真实标签 tᵢ通常采用独热编码(One-Hot Encoding),即 tᵢ = [tᵢ₁, tᵢ₂, ..., tᵢₖ]ᵀ,其中 tᵢⱼ = 1(若样本 i 属于类别 j),否则 tᵢⱼ = 0。多分类交叉熵损失函数的定义为:

L (yᵢ, tᵢ) = - Σ(从 j=1 到 K)tᵢⱼ × log (yᵢⱼ)(单个样本)

代价函数为:J (θ) = - (1/N) × Σ(从 i=1 到 N)Σ(从 j=1 到 K)tᵢⱼ × log (yᵢⱼ)

​公式解读​​:

由于真实标签采用独热编码,对于样本 i,只有其真实类别对应的 tᵢⱼ=1,其余均为 0,因此损失函数可简化为 -log (yᵢⱼ*)(其中 j为样本 i 的真实类别)。这意味着:当模型对真实类别的预测概率 yᵢⱼ越接近 1 时,log (yᵢⱼ*) 越接近 0,损失值越小;当 yᵢⱼ越接近 0 时,log (yᵢⱼ) 越接近 -∞,损失值越大,从而精准惩罚对真实类别预测错误的情况。

PPT 中以 "猫图片分类" 为例,展示了多分类交叉熵损失的计算过程(此处插入 PPT 中 "多分类交叉熵损失计算示例" 图,标注:图 14 多分类交叉熵损失计算过程):假设模型输出经过 softmax 归一化后,猫类别的概率为 0.5247,其他类别的概率分别为 0.4748 和 0.0005,由于真实标签为猫,因此损失值计算为 -log (0.5247)≈0.645,若模型将猫误判为其他类别(如概率仅为 0.0005),则损失值会急剧增大至 -log (0.0005)≈7.6,直观体现了交叉熵损失对错误预测的强惩罚性。

​适用场景​​:

  • ​二分类任务​​(如垃圾邮件识别、疾病诊断):使用二分类交叉熵损失。
  • ​多分类任务​​(如手写数字识别、图像分类):使用多分类交叉熵损失。

​特点​​:

  • ​优点​​:
    • 与 sigmoid/softmax 激活函数配合使用时,梯度计算更高效,可避免梯度消失问题(相比 MSE 损失)。
    • 直接衡量概率分布差异,符合分类任务的误差逻辑,训练收敛速度快。
  • ​缺点​​:仅适用于分类任务,无法直接用于回归任务。
5.2.5 合页损失函数(Hinge Loss)

合页损失函数源于支持向量机(SVM),主要用于二分类任务,其核心思想是 "最大化分类间隔",即不仅要求样本被正确分类,还要求分类结果与决策边界有足够的距离。其定义为:

L (yᵢ, tᵢ) = max (0, 1 - tᵢyᵢ)(单个样本)

其中,tᵢ ∈ {-1, 1}(真实标签,分别表示负类和正类),yᵢ表示模型的线性输出(未经过 sigmoid 激活,取值范围为ℝ)。

​公式解读​​:

  • 当 tᵢyᵢ ≥ 1(样本被正确分类且距离决策边界足够远)时,损失值为 0,模型无需调整。
  • 当 0 < tᵢyᵢ < 1(样本被正确分类但距离决策边界较近)时,损失值为 1 - tᵢyᵢ,模型需要优化以增大分类间隔。
  • 当 tᵢyᵢ ≤ 0(样本被错误分类)时,损失值为 1 - tᵢyᵢ,且随着错误程度的增加而增大,模型会强烈调整参数以纠正错误。

​适用场景​​:二分类任务,尤其适用于对分类间隔有要求的场景(如支持向量机模型)。

​特点​​:

  • ​优点​​:注重分类间隔,泛化能力强,对噪声样本有一定的鲁棒性。
  • ​缺点​​:
    • 不可导(在 tᵢyᵢ=1 处不可导),需通过次梯度方法优化。
    • 仅适用于二分类任务,且对模型输出格式有特定要求(需为线性输出)。

5.3 多分类任务的损失计算特殊处理

在多分类任务中,除了选择多分类交叉熵损失函数,还需要配合 softmax 激活函数对模型输出进行归一化处理,确保输出符合概率分布(所有类别概率和为 1),具体流程如下:

  1. ​模型线性输出​​:设输出层有 K 个节点,线性输出为 z = [z₁, z₂, ..., z_K]ᵀ(z_j = W_j・a^(L-1) + b_j,其中 W_j 为输出层第 j 个节点的权重向量,a^(L-1) 为隐藏层输出)。
  2. ​softmax 归一化​​:对线性输出 z 应用 softmax 函数,得到概率分布 y = [y₁, y₂, ..., y_K]ᵀ,其中:
    y_j = exp (z_j) / Σ(从 k=1 到 K)exp (z_k)
  3. ​交叉熵损失计算​​:结合独热编码的真实标签 t,使用多分类交叉熵损失函数计算损失值 L = -Σ(从 j=1 到 K)t_j・log (y_j)。

PPT 中通过具体数值示例展示了这一过程(此处插入 PPT 中 "多分类损失计算流程" 图,标注:图 15 多分类任务损失计算完整流程):假设模型线性输出为 [148.413, 134.289, 0.135],经过 softmax 归一化后得到概率 [0.9772, 0.0179, 0.0049],若真实标签为第一类(独热编码为 [1,0,0]),则损失值为 -log (0.9772)≈0.023,若真实标签为第三类,则损失值为 -log (0.0049)≈5.32,清晰体现了 softmax 与交叉熵的配合逻辑。

六、正则化:防止过拟合的关键技术

在神经网络训练中,过拟合是一个常见问题:模型在训练集上表现优异(损失值小、准确率高),但在未见过的测试集上表现糟糕,这意味着模型 "死记硬背" 了训练数据的噪声,而没有学习到通用规律。正则化(Regularization)是防止过拟合的核心技术,其核心思想是 "惩罚过大的权重参数",通过在代价函数中加入正则化项,限制模型的复杂度,从而提升泛化能力。

6.1 过拟合的产生原因

过拟合的产生主要与以下因素相关:

  1. ​模型复杂度过高​​:当神经网络的隐藏层数量过多、隐藏层节点数过大或参数数量过多时,模型的表达能力过强,容易拟合训练数据中的噪声和随机波动。
  2. ​训练数据不足或质量低​​:若训练数据量过少,或数据中存在大量噪声、异常值,模型无法学习到数据的真实分布,只能通过 "记忆" 训练数据来降低损失。
  3. ​训练迭代次数过多​​:训练迭代次数过多时,模型会不断优化参数以适应训练数据,即使已经学习到通用规律,仍会继续拟合训练数据的噪声,导致过拟合。

PPT 中通过 "权重对比示例" 直观展示了过拟合与权重的关系(此处插入 PPT 中 "权重与过拟合关系示例" 图,标注:图 16 权重分布对过拟合的影响):假设输入向量为 [1,1,1,1],存在两组权重 w1=[1,0,0,0] 和 w2=[0.25,0.25,0.25,0.25],两组权重与输入的乘积均为 1,但 w1 仅依赖第一个输入特征,忽略了其他特征,容易 "片面记忆" 训练数据(导致过拟合);而 w2 均匀利用所有输入特征,能够学习到更通用的规律(泛化能力强)。这一示例表明,权重的 "均衡性" 对防止过拟合至关重要,而正则化的核心就是通过惩罚极端权重,促进权重均衡。

6.2 常用正则化方法

6.2.1 L1 正则化(L1 Regularization)

L1 正则化通过在代价函数中加入所有权重参数的绝对值之和作为正则化项,惩罚绝对值过大的权重。其公式为:

J_reg (θ) = J (θ) + λ × Σ(所有 w)|w|

其中,J (θ) 为原始代价函数(如交叉熵损失、MSE),λ 为正则化强度参数(λ≥0),λ 越大,正则化惩罚越强;Σ|w | 为 L1 正则化项。

​作用原理​​:

L1 正则化会使部分权重参数变为 0,实现 "特征选择" 的效果。因为当权重的绝对值较小时,正则化项的惩罚会使权重进一步减小,直至为 0,从而忽略不重要的特征,降低模型复杂度。例如,在图像分类任务中,L1 正则化可能会使与分类无关的像素特征对应的权重变为 0,仅保留关键像素特征的权重。

​特点​​:

  • ​优点​​:可实现特征选择,简化模型结构,增强模型可解释性。
  • ​缺点​​:L1 正则化的损失函数在权重为 0 处不可导(绝对值函数的导数不连续),可能影响梯度下降的收敛速度;且当特征之间存在相关性时,L1 正则化可能会随机选择其中一个特征的权重变为 0,导致信息丢失。
6.2.2 L2 正则化(L2 Regularization)

L2 正则化(又称权重衰减,Weight Decay)通过在代价函数中加入所有权重参数的平方和作为正则化项,惩罚平方值过大的权重。其公式为:

J_reg (θ) = J (θ) + (λ/2) × Σ(所有 w)w²

其中,(λ/2) 是为了简化梯度计算(平方项的导数为 2w,与 1/2 相乘后可抵消),其他参数含义与 L1 正则化一致。

​作用原理​​:

L2 正则化不会使权重变为 0,而是使权重均匀减小,避免单个权重过大。因为当权重的平方值较大时,正则化项的惩罚会使权重向 0 靠近,从而实现权重的 "均衡分布",减少模型对单个特征的过度依赖,防止过拟合。例如,在文本分类任务中,L2 正则化会使高频但无关的词汇对应的权重减小,同时保留低频但关键的词汇对应的权重。

​特点​​:

  • ​优点​​:
    • 损失函数可导,梯度计算简单,不影响梯度下降的收敛稳定性。
    • 权重不会变为 0,不会丢失特征信息,对特征相关性较强的场景适应性更好。
  • ​缺点​​:无法实现特征选择,模型结构不会简化,可解释性不如 L1 正则化。
6.2.3 正则化强度参数 λ 的选择

λ 是正则化的关键参数,其取值直接影响正则化效果:

  • λ=0:无正则化,模型可能过拟合。
  • λ 过大:正则化惩罚过强,会使所有权重过度减小,导致模型欠拟合(无法学习到数据的真实规律,训练集和测试集性能均较差)。
  • λ 适中:在防止过拟合的同时,保证模型能够学习到数据的真实分布,需通过实验调整。

λ 的选择通常采用 "交叉验证" 方法:将训练集分为训练子集和验证子集,尝试多个 λ 值(如 0.001, 0.01, 0.1, 1, 10),在训练子集上训练模型,在验证子集上评估性能,选择验证子集性能最优的 λ 作为最终参数。

PPT 中对 L1 正则化的公式和作用进行了明确说明(此处插入 PPT 中 "L1 正则化公式与作用" 图,标注:图 17 L1 正则化的数学表达与核心作用),并强调 "正则化惩罚项的核心是促进权重均衡,利用所有输入特征",帮助我们理解正则化的本质目标。

七、梯度下降:神经网络的优化核心

梯度下降(Gradient Descent)是神经网络训练的核心优化算法,其本质是 "沿着损失函数的梯度方向调整参数,逐步减小损失值",最终找到使损失函数最小的参数组合。

7.1 梯度的数学定义

在讲解梯度下降前,需先明确 "偏导数" 和 "梯度" 的概念:

  • ​偏导数​​:对于多变量函数 f (w₀, w₁, ..., wₙ),偏导数∂f/∂w_i 表示在其他变量固定时,函数 f 对变量 w_i 的变化率。例如,对于函数 f (w₀, w₁) = w₀x₁² + w₁x₂(x₁, x₂为常量),其偏导数为∂f/∂w₀ = x₁²,∂f/∂w₁ = x₂。
  • ​梯度​​:梯度是多变量函数所有偏导数构成的向量,记为∇f (w) = [∂f/∂w₀, ∂f/∂w₁, ..., ∂f/∂wₙ]ᵀ。梯度向量的方向是函数值增长最快的方向,而其反方向则是函数值减小最快的方向 —— 这是梯度下降算法的核心理论依据。

PPT 中通过 "多变量函数偏导数计算示例" 展示了梯度的计算过程(此处插入 PPT 中 "偏导数与梯度计算示例" 图,标注:图 18 偏导数与梯度的计算过程),以 f (w₀, w₁) = w₀x₁²・w₁x₂为例,逐步推导了∂f/∂w₀和∂f/∂w₁的计算结果,帮助我们理解梯度的数学本质。

7.2 梯度下降算法的基本流程

梯度下降算法的核心是 "迭代更新参数",具体流程如下:

  1. ​参数初始化​​:随机初始化神经网络的所有参数(权重 w 和偏置 b),通常选择较小的随机数(如在 [-0.1, 0.1] 范围内),避免激活函数进入饱和区(如 sigmoid 函数在 | z | 较大时导数接近 0,导致梯度消失)。
  2. ​计算梯度​​:通过正向传播计算模型的预测值,结合真实标签计算损失函数 J (θ),再通过反向传播计算损失函数对所有参数的梯度∇J (θ)(即每个参数的偏导数)。
  3. ​更新参数​​:沿着梯度的反方向更新参数,公式为:
    θ_new = θ_old - α × ∇J (θ_old)
    其中,θ 表示任意参数(w 或 b),α 为学习率(步长,α>0),α 决定了每次参数更新的幅度。
  4. ​迭代终止​​:重复步骤 2-3,直到损失函数 J (θ) 小于预设阈值(如 1e-5),或达到预设的迭代次数(如 1000 轮),此时认为模型训练完成。

7.3 梯度下降的关键参数:学习率 α

学习率 α 是梯度下降算法的关键参数,直接影响训练的收敛速度和效果:

  • α 过小:参数更新幅度小,训练收敛速度慢,需要更多迭代次数才能达到最小损失,且可能陷入局部最小值(无法找到全局最小)。
  • α 过大:参数更新幅度大,可能导致损失函数在最小值附近震荡,甚至发散(损失值越来越大)。
  • α 适中:参数更新幅度合理,能够快速收敛到最小值附近,且不会出现震荡。

PPT 中通过 "损失函数收敛曲线" 展示了不同学习率的影响(此处插入 PPT 中 "学习率对收敛的影响" 图,标注:图 19 不同学习率下的损失函数收敛曲线):当 α=0.01 时,损失曲线平稳下降,收敛效果好;当 α=0.1 时,损失曲线在后期出现轻微震荡;当 α=1 时,损失曲线直接发散,无法收敛。这一示例直观体现了学习率选择的重要性。

学习率的选择通常采用 "试错法" 或 "自适应调整法":

  • ​试错法​​:初始选择较小的学习率(如 0.001, 0.01),观察损失曲线,若收敛过慢则适当增大 α,若出现震荡则减小 α。
  • ​自适应调整法​​:使用自适应学习率算法(如 Adam、RMSprop、Adagrad),根据训练过程中的梯度变化动态调整 α,无需人工干预,收敛效果更优。

7.4 梯度下降的常见变种

根据训练数据的使用方式,梯度下降可分为以下三种常见变种:

7.4.1 批量梯度下降(Batch Gradient Descent, BGD)

批量梯度下降每次使用全部训练样本计算梯度和更新参数,公式为:

θ_new = θ_old - α × (1/N) × Σ(从 i=1 到 N)∇J_i (θ_old)

其中,N 为训练样本总数,∇J_i (θ_old) 为第 i 个样本对参数的梯度。

​特点​​:

  • ​优点​​:梯度计算准确,损失曲线平稳下降,容易收敛到全局最小值。
  • ​缺点​​:当训练样本量过大(如百万级、亿级)时,每次迭代的计算量巨大,训练速度慢,且需要较大的内存存储全部样本。
7.4.2 随机梯度下降(Stochastic Gradient Descent, SGD)

随机梯度下降每次使用单个随机样本计算梯度和更新参数,公式为:

θ_new = θ_old - α × ∇J_i (θ_old)

其中,i 为随机选择的样本索引(1≤i≤N)。

​特点​​:

  • ​优点​​:每次迭代计算量小,训练速度快,适合大规模数据集;由于样本的随机性,可能跳出局部最小值,找到全局最小值。
  • ​缺点​​:梯度计算不准确,损失曲线波动较大,可能在最小值附近震荡,收敛稳定性差。
7.4.3 小批量梯度下降(Mini-Batch Gradient Descent, MBGD)

小批量梯度下降是批量梯度下降与随机梯度下降的折中方案,每次使用一小批随机样本(批量大小为 batch_size,通常取值为 32、64、128 等)计算梯度和更新参数,公式为:

θ_new = θ_old - α × (1/batch_size) × Σ(从 i=1 到 batch_size)∇J_i (θ_old)

​特点​​:

  • ​优点​​:
    • 梯度计算相对准确,损失曲线波动小于 SGD,收敛稳定性较好。
    • 可利用矩阵运算并行化处理小批量样本,训练速度快于 BGD,适合大规模数据集。
  • ​缺点​​:需要手动选择批量大小 batch_size,batch_size 过小时仍存在波动,过大时计算量接近 BGD。

PPT 中虽未直接展示三种梯度下降变种的对比,但在 "梯度下降法介绍" 中强调了 "步长(学习率)" 和 "全局最小问题"(此处插入 PPT 中 "梯度下降法核心要点" 图,标注:图 20 梯度下降法的关键注意事项),指出 "解决全局最小的问题可通过产生多个随机数在不同的位置分别求最小值",这一思路同样适用于三种梯度下降变种 —— 通过多组初始参数或学习率尝试,降低陷入局部最小的概率。

八、BP 神经网络:误差反向传播的实现

BP(Back-Propagation,反向传播)神经网络是多层感知器的核心训练算法,其本质是 "正向传播计算预测值与损失,反向传播计算梯度并更新参数" 的迭代过程,通过链式法则高效计算各层参数的梯度,解决了多层神经网络的训练难题。

8.1 BP 神经网络的基本原理

BP 神经网络的训练过程分为两个核心阶段:正向传播(Forward Propagation)和反向传播(Backward Propagation),具体流程如下:

  1. ​正向传播​​:从输入层到输出层,依次计算各层的线性输出 z^(l) 和激活输出 a^(l),最终得到模型的预测输出 a^(L)(L 为总层数),并结合真实标签计算损失函数 J (θ)。
  2. ​反向传播​​:从输出层到输入层,利用链式法则依次计算损失函数对各层参数(权重 W^(l) 和偏置 b^(l))的梯度∇J (W^(l)) 和∇J (b^(l)),将梯度传递给梯度下降算法用于参数更新。
  3. ​参数更新​​:根据反向传播得到的梯度,使用梯度下降法更新所有参数,减小损失函数。
  4. ​迭代训练​​:重复正向传播、反向传播和参数更新步骤,直到损失函数收敛或达到预设迭代次数。

PPT 中通过 "BP 神经网络步骤流程图" 清晰展示了这一过程(此处插入 PPT 中 "BP 神经网络训练流程" 图,标注:图 21 BP 神经网络的正向传播与反向传播流程),并强调 "BP 前向传播得到误差,反向传播调整误差,再前向传播,再反向传播一轮一轮得到最优解",直观体现了 BP 算法的迭代本质。

8.2 正向传播的数学推导

正向传播的核心是逐层计算各层的输出,假设神经网络有 L 层,输入层为第 1 层,输出层为第 L 层,第 l 层(2≤l≤L)的节点数为 n^(l),具体推导如下:

  1. ​输入层​​:输入层无计算,直接接收输入数据,即 a^(1) = x(x 为输入向量,维度为 n^(1)×1)。
  2. ​隐藏层 / 输出层​​:对于第 l 层,其输入为前一层的输出 a^(l-1)(维度为 n^(l-1)×1),权重矩阵 W^(l)(维度为 n^(l)×n^(l-1)),偏置向量 b^(l)(维度为 n^(l)×1),激活函数 g^(l)(・),则:
    • ​线性输出​​:z^(l) = W^(l) a^(l-1) + b^(l)(维度为 n^(l)×1)
    • ​激活输出​​:a^(l) = g^(l)(z^(l))(维度为 n^(l)×1)
  3. ​损失计算​​:根据输出层的激活输出 a^(L) 和真实标签 t,使用对应损失函数计算损失 J (θ)(如多分类交叉熵损失 J = -Σt_j log (a_j^(L)))。

以一个 "输入层 3 节点→隐藏层 2 节点→输出层 2 节点" 的 BP 网络为例(激活函数均为 sigmoid),正向传播过程如下:

  • ​输入层​​:a^(1) = [x₁, x₂, x₃]ᵀ
  • ​隐藏层(l=2)​​:
    z^(2) = W^(2) a^(1) + b^(2) = [[w₁₁^(2), w₁₂^(2), w₁₃^(2)], [w₂₁^(2), w₂₂^(2), w₂₃^(2)]] × [x₁, x₂, x₃]ᵀ + [b₁^(2), b₂^(2)]ᵀ
    a^(2) = g^(2)(z^(2)) = [1/(1+e^(-z₁^(2))), 1/(1+e^(-z₂^(2)))]ᵀ
  • ​输出层(l=3)​​:
    z^(3) = W^(3) a^(2) + b^(3) = [[w₁₁^(3), w₁₂^(3)], [w₂₁^(3), w₂₂^(3)]] × [a₁^(2), a₂^(2)]ᵀ + [b₁^(3), b₂^(3)]ᵀ
    a^(3) = g^(3)(z^(3)) = [1/(1+e^(-z₁^(3))), 1/(1+e^(-z₂^(3)))]ᵀ
  • ​损失计算(二分类交叉熵)​​:J = -[t₁log (a₁^(3)) + t₂log (a₂^(3))]

8.3 反向传播的数学推导(核心)

反向传播的核心是利用链式法则计算损失函数对各层参数的梯度,关键概念是 "误差项 δ^(l)"—— 定义为损失函数对第 l 层线性输出 z^(l) 的偏导数,即 δ^(l) = ∂J/∂z^(l)(维度为 n^(l)×1)。通过 δ^(l) 可进一步推导得到损失对权重 W^(l) 和偏置 b^(l) 的梯度。

8.3.1 输出层误差项 δ^(L) 的计算

输出层是反向传播的起点,误差项 δ^(L) 直接由损失函数和输出层激活函数的导数决定,以多分类交叉熵损失 + softmax 激活函数为例(最常用的组合):

  • ​多分类交叉熵损失​​:J = -Σ(j=1 到 K)t_j log (a_j^(L))(K 为输出层节点数,a_j^(L) 为输出层第 j 个节点的激活输出)
  • ​softmax 激活函数​​:a_j^(L) = exp (z_j^(L)) / Σ(k=1 到 K)exp (z_k^(L))

​推导过程​​:

根据链式法则,δ_j^(L) = ∂J/∂z_j^(L) = Σ(m=1 到 K)∂J/∂a_m^(L) × ∂a_m^(L)/∂z_j^(L)

  1. 计算∂J/∂a_m^(L):对损失函数 J 求 a_m^(L) 的偏导,得∂J/∂a_m^(L) = -t_m /a_m^(L)
  2. 计算∂a_m^(L)/∂z_j^(L):对 softmax 函数求 z_j^(L) 的偏导,根据 softmax 的性质,当 m=j 时,∂a_m^(L)/∂z_j^(L) = a_j^(L)(1 - a_j^(L));当 m≠j 时,∂a_m^(L)/∂z_j^(L) = -a_j^(L) a_m^(L)
  3. 合并结果:将两步结果代入链式法则公式,化简后可得 δ^(L) = a^(L) - t(向量形式)

这一结果非常简洁:输出层误差项等于输出层激活输出与真实标签的差值,极大简化了梯度计算。

8.3.2 隐藏层误差项 δ^(l) 的计算(l < L)

对于隐藏层(从输出层向输入层反向推导),第 l 层的误差项 δ^(l) 由第 l+1 层的误差项 δ^(l+1) 和第 l+1 层的权重矩阵 W^(l+1) 决定,公式为:

δ^(l) = (W^(l+1))ᵀ δ^(l+1) ⊙ g’^(l)(z^(l))

其中:

  • (W^(l+1))ᵀ:第 l+1 层权重矩阵的转置(维度为 n^(l)×n^(l+1)),用于将第 l+1 层的误差 "传递" 到第 l 层。
  • ⊙:哈达玛积(Hadamard Product),即两个向量对应元素相乘(维度保持一致)。
  • g’^(l)(z^(l)):第 l 层激活函数 g^(l)(・) 对 z^(l) 的导数(维度为 n^(l)×1),若使用 ReLU 激活函数,g’(z) = 1(z>0)或 0(z≤0);若使用 sigmoid 激活函数,g’(z) = g (z)(1 - g (z))。
8.3.3 损失对参数的梯度计算

得到各层误差项 δ^(l) 后,可直接推导损失函数对权重 W^(l) 和偏置 b^(l) 的梯度:

  1. ​权重梯度∂J/∂W^(l)​​:
    • 根据链式法则,∂J/∂W_ij^(l) = ∂J/∂z_i^(l) × ∂z_i^(l)/∂W_ij^(l) = δ_i^(l) × a_j^(l-1)(W_ij^(l) 表示第 l-1 层第 j 个节点到第 l 层第 i 个节点的权重)
    • 扩展为矩阵形式:∂J/∂W^(l) = δ^(l) (a^(l-1))ᵀ(维度为 n^(l)×n^(l-1))
  2. ​偏置梯度∂J/∂b^(l)​​:
    • 由于 z_i^(l) = Σ(j=1 到 n^(l-1))W_ij^(l) a_j^(l-1) + b_i^(l),因此∂z_i^(l)/∂b_i^(l) = 1,可得∂J/∂b_i^(l) = δ_i^(l) × 1 = δ_i^(l)
    • 扩展为向量形式:∂J/∂b^(l) = δ^(l)(维度为 n^(l)×1)

PPT 中通过 "多层隐函数求偏导" 的示意图展示了链式法则的应用(此处插入 PPT 中 "BP 算法链式法则示意图" 图,标注:图 22 BP 算法中链式法则的应用过程),并强调 "反向传播的核心是将输出层的误差逐层传递到输入层,通过偏导数计算各层参数的梯度",帮助我们理解梯度传递的逻辑。

8.4 BP 神经网络的参数更新

得到各层参数的梯度后,结合梯度下降法进行参数更新,公式如下:

  • ​权重更新​​:W^(l)_new = W^(l)_old - α × ∂J/∂W^(l)(α 为学习率)
  • ​偏置更新​​:b^(l)_new = b^(l)_old - α × ∂J/∂b^(l)

若引入正则化(如 L2 正则化),则参数更新公式需加入正则化项的梯度:

  • ​权重更新(L2 正则化)​​:W^(l)_new = W^(l)_old - α × (∂J/∂W^(l) + λ W^(l)_old)(λ 为正则化强度)
  • ​偏置更新​​:b^(l)_new = b^(l)_old - α × ∂J/∂b^(l)(偏置通常不进行正则化,因偏置仅影响输出的偏移,不会导致过拟合)

8.5 BP 神经网络的训练实例(简化版)

以 "二分类任务(输入 2 维特征,输出 1 维概率)" 为例,搭建 "输入层 2 节点→隐藏层 3 节点→输出层 1 节点" 的 BP 网络,激活函数:隐藏层用 ReLU,输出层用 sigmoid,损失函数用二分类交叉熵,学习率 α=0.01,迭代 1000 轮,具体步骤如下:

​步骤 1:初始化参数​

  • 隐藏层权重 W^(2):3×2 维矩阵,随机初始化(如 [-0.1, 0.1] 范围内),示例:W^(2) = [[0.05, 0.03], [0.02, 0.04], [-0.01, 0.01]]
  • 隐藏层偏置 b^(2):3×1 维向量,初始化为 0,示例:b^(2) = [0, 0, 0]ᵀ
  • 输出层权重 W^(3):1×3 维矩阵,随机初始化,示例:W^(3) = [[0.06, 0.02, 0.04]]
  • 输出层偏置 b^(3):1×1 维向量,初始化为 0,示例:b^(3) = [0]

​步骤 2:正向传播(单样本示例:x=[1,2]ᵀ,t=1)​

  • 隐藏层(l=2):
    z^(2) = W^(2) x + b^(2) = [[0.05×1+0.03×2], [0.02×1+0.04×2], [-0.01×1+0.01×2]] + [0,0,0]ᵀ = [0.11, 0.10, 0.01]ᵀ
    a^(2) = ReLU (z^(2)) = [0.11, 0.10, 0.01]ᵀ(ReLU 函数对正数直接输出,负数输出 0)
  • 输出层(l=3):
    z^(3) = W^(3) a^(2) + b^(3) = [0.06×0.11 + 0.02×0.10 + 0.04×0.01] + 0 = 0.0066 + 0.002 + 0.0004 = 0.009
    a^(3) = sigmoid (z^(3)) = 1/(1+e^(-0.009)) ≈ 0.5022(预测概率)
  • 损失计算:J = -[t log (a^(3)) + (1-t) log (1-a^(3))] = -[1×log (0.5022) + 0×log (0.4978)] ≈ 0.689

​步骤 3:反向传播​

  • 输出层误差项 δ^(3):
    二分类交叉熵 + sigmoid 激活的误差项公式:δ^(3) = a^(3) - t = 0.5022 - 1 = -0.4978
  • 隐藏层误差项 δ^(2):
    δ^(2) = (W^(3))ᵀ δ^(3) ⊙ ReLU’(z^(2))
    (W^(3))ᵀ = [[0.06], [0.02], [0.04]],ReLU’(z^(2)) = [1,1,1](因 z^(2) 均为正数)
    δ^(2) = [[0.06×(-0.4978)], [0.02×(-0.4978)], [0.04×(-0.4978)]] ⊙ [1,1,1] = [-0.0299, -0.00996, -0.0199]ᵀ
  • 梯度计算:
    • ∂J/∂W^(3) = δ^(3) (a^(2))ᵀ = [-0.4978] × [0.11, 0.10, 0.01] = [-0.0548, -0.0498, -0.0050]
    • ∂J/∂b^(3) = δ^(3) = -0.4978
    • ∂J/∂W^(2) = δ^(2) xᵀ = [[-0.0299×1, -0.0299×2], [-0.00996×1, -0.00996×2], [-0.0199×1, -0.0199×2]] = [[-0.0299, -0.0598], [-0.00996, -0.01992], [-0.0199, -0.0398]]
    • ∂J/∂b^(2) = δ^(2) = [-0.0299, -0.00996, -0.0199]ᵀ

​步骤 4:参数更新​

根据梯度下降公式(α=0.01):

  • 输出层权重更新:W^(3)_new = W^(3)_old - α×∂J/∂W^(3) = [0.06, 0.02, 0.04] - 0.01×[-0.0548, -0.0498, -0.0050] = [0.0605, 0.0205, 0.04005]
  • 输出层偏置更新:b^(3)_new = b^(3)_old - α×∂J/∂b^(3) = 0 - 0.01×(-0.4978) = 0.004978
  • 隐藏层权重更新:W^(2)_new = W^(2)_old - α×∂J/∂W^(2) = [[0.05, 0.03], [0.02, 0.04], [-0.01, 0.01]] - 0.01×[[-0.0299, -0.0598], [-0.00996, -0.01992], [-0.0199, -0.0398]] = [[0.0503, 0.0306], [0.0201, 0.0402], [-0.0098, 0.0104]]
  • 隐藏层偏置更新:b^(2)_new = b^(2)_old - α×∂J/∂b^(2) = [0, 0, 0] - 0.01×[-0.0299, -0.00996, -0.0199] = [0.0003, 0.0001, 0.0002]

​步骤 5:迭代训练​

重复步骤 2-4,对所有训练样本进行 1000 轮迭代。每轮迭代后,计算训练集的平均损失,观察损失值逐渐下降(如从初始的 0.689 降至 0.1 以下),同时验证集的准确率逐步提升,最终模型收敛,完成训练。

PPT 中虽未展示完整的实例计算,但通过 "BP 神经网络步骤总结" 强调了 "循环调整 w 的值,直到损失值小于允许的范围"(此处插入 PPT 中 "BP 神经网络训练终止条件" 图,标注:图 23 BP 神经网络的训练终止条件),与上述实例的迭代逻辑一致,帮助我们理解 BP 算法的工程实现思路。

九、深度神经网络的发展与规模

随着深度学习技术的演进,神经网络的 "深度" 和 "规模" 不断提升,从早期的浅层多层感知器(如含 1-2 个隐藏层)发展为现代的深度神经网络(如含数十甚至数百个隐藏层),参数规模也从数万增长到千亿级,这一变化极大地提升了模型的表达能力和任务性能。

9.1 深度神经网络的核心优势

相比浅层神经网络,深度神经网络的核心优势在于 "分层特征提取":

  • 浅层网络(如感知器、1 个隐藏层的 MLP)仅能提取数据的简单特征(如图像的边缘、纹理,文本的单个单词)。
  • 深度网络通过多层堆叠,可从浅层特征逐步构建深层抽象特征(如图像的物体部件、完整物体,文本的短语、句子语义),从而更精准地建模复杂数据的内在规律。

例如,在图像分类任务中:

  • 第 1 层隐藏层:学习边缘检测特征(如水平边缘、垂直边缘)。
  • 第 2-3 层隐藏层:学习纹理特征(如条纹、斑点)。
  • 第 4-5 层隐藏层:学习物体部件特征(如眼睛、鼻子、轮子)。
  • 高层隐藏层:学习完整物体特征(如猫、汽车、飞机)。

9.2 大规模参数的影响

参数规模是深度神经网络性能的关键因素之一,更大的参数规模意味着模型具有更强的 "记忆" 和 "拟合" 能力,能够学习到更复杂的模式,但同时也带来了训练难度的提升(如计算资源需求、过拟合风险)。

以 ChatGPT 为例(PPT 中提及的典型案例):

  • ​训练数据规模​​:基于 8000 亿个单词的语料库(约 45TB 文本数据),覆盖海量领域的文本信息,为模型提供了丰富的学习素材。
  • ​参数规模​​:包含 1750 亿个参数,这些参数分布在数十个隐藏层中,通过大规模并行计算(如使用 GPU/TPU 集群)完成训练,最终实现了强大的自然语言理解和生成能力。

PPT 中通过 "ChatGPT 参数规模说明" 展示了大规模模型的特点(此处插入 PPT 中 "ChatGPT 参数与数据规模" 图,标注:图 24 大规模深度神经网络的参数与数据规模案例),并指出 "超大参数规模是 ChatGPT 打败众多大模型的关键因素之一",直观体现了深度神经网络规模与性能的正相关关系。

9.3 深度神经网络的挑战与应对

大规模深度神经网络的训练和应用面临以下挑战,业界也提出了相应的应对方案:

10.2 学习建议

对于深度学习入门者,结合本文内容和 PPT,可按照以下步骤逐步深入学习:

深度学习是一门 "理论 + 实践" 结合的学科,只有通过不断学习理论、动手实验、总结经验,才能真正掌握其核心技术,为后续解决复杂实际问题奠定基础。

  1. ​计算资源需求高​​:千亿级参数模型的训练需要海量计算资源(如数千块 GPU、数月训练时间)。应对方案:开发高效并行计算框架(如 TensorFlow、PyTorch 的分布式训练)、设计模型压缩技术(如剪枝、量化)、使用专用 AI 芯片(如 TPU、GPU)。
  2. ​过拟合风险大​​:大规模参数模型容易拟合训练数据噪声。应对方案:增加训练数据量(如数据增强、合成数据)、强化正则化(如 Dropout、L2 正则化)、使用迁移学习(基于预训练模型微调)。
  3. ​训练不稳定​​:深层网络容易出现梯度消失 / 爆炸问题(反向传播时,梯度经过多层传递后逐渐趋近于 0 或无穷大)。应对方案:使用批量归一化(Batch Normalization)、选择合适的激活函数(如 ReLU 替代 sigmoid)、采用残差连接(Residual Connection)。

    十、总结与学习建议

    10.1 核心知识总结

    本文基于《第 1 章。深度学习入门》PPT,系统讲解了深度学习的基础概念与核心技术,关键知识点可归纳为以下几点:

  4. ​概念层级​​:深度学习是机器学习的子领域,以神经网络为核心载体,三者的关系为 "人工智能→机器学习→深度学习→神经网络"。
  5. ​神经网络构造​​:由输入层、隐藏层、输出层组成,核心组件包括神经元(输入、权重、偏置、激活函数)、连接权重和偏置节点,隐藏层是实现非线性分类的关键。
  6. ​关键模型​​:
    • ​感知器​​:2 层结构,仅能线性分类,是神经网络的基础。
    • ​多层感知器​​:增加隐藏层,可解决非线性问题,是深度神经网络的雏形。
    • ​BP 神经网络​​:通过正向传播计算损失、反向传播计算梯度,是多层感知器的核心训练算法。
  7. ​优化技术​​:
    • ​损失函数​​:衡量误差,分类任务用交叉熵,回归任务用 MSE/MAE。
    • ​正则化​​:防止过拟合,L1 实现特征选择,L2 实现权重衰减。
    • ​梯度下降​​:优化参数的核心算法,变种包括 BGD、SGD、MBGD,学习率是关键参数。
  8. ​规模发展​​:深度神经网络向 "更深、更大参数" 方向发展,如 ChatGPT 的 1750 亿参数,需依赖大规模数据和计算资源。
  9. ​夯实数学基础​​:重点掌握线性代数(矩阵运算、向量)、微积分(偏导数、梯度)、概率论(概率分布、交叉熵),这些是理解神经网络公式推导的关键。
  10. ​动手实现基础模型​​:从简单模型开始,用 Python(结合 NumPy)手动实现感知器、多层感知器和 BP 算法,通过代码理解正向传播、反向传播和参数更新的过程,避免 "只懂理论,不会实践"。
  11. ​学习框架工具​​:掌握主流深度学习框架(如 PyTorch、TensorFlow),利用框架快速搭建和训练模型,对比手动实现与框架实现的差异,提升工程能力。
  12. ​实践经典任务​​:选择经典数据集(如 MNIST 手写数字识别、Iris 分类),基于框架实现模型训练,观察损失曲线、准确率变化,理解超参数(学习率、批量大小、隐藏层节点数)对模型性能的影响。
  13. ​跟踪前沿动态​​:通过学术论文(如 arXiv)、技术博客(如 CSDN、Medium)关注深度学习的前沿进展(如大语言模型、扩散模型),结合预训练模型(如 ResNet、BERT)进行微调实践,逐步从入门走向进阶。
http://www.dtcms.com/a/364322.html

相关文章:

  • 2004-2023年各省生活垃圾无害化处理率数据(无缺失)
  • (11)用于无GPS导航的制图师SLAM(二)
  • 开源 C++ QT Widget 开发(十一)进程间通信--Windows 窗口通信
  • 远程的 develop 比你本地的 develop 更新,Git 拒绝直接覆盖
  • Python爬虫实战: 纵横中文网小说爬取方案与代码实现
  • NLP插曲番外 · 猫猫狐狐问答夜话
  • AI+教育:用BERT构建个性化错题推荐系统
  • Chapter1—设计模式基础
  • More Effective C++ 条款25:将构造函数和非成员函数虚拟化
  • 外网获取瀚高.NET驱动dll方法和使用案例
  • WSL + VSCode + Git + Node.js 开发环境配置文档
  • uni-app与Vue3,实现3D圆柱形旋转画廊效果
  • 人工智能学习:什么是RNN模型
  • VMware Workstation 磁盘空间不足扩容
  • 二、Scala流程控制:分支与循环
  • C题目训练【三连击】
  • 【正则表达式】 正则表达式有哪些语法?
  • Spring中stereotype注解
  • Shell-AWK详解
  • EasyMeeting-注册登录
  • FART 自动化脱壳框架优化实战:Bug 修复与代码改进记录
  • Linux使用-Linux系统管理
  • 物联网时序数据存储方案:Apache IoTDB 集群部署全流程 + TimechoDB 优势解读
  • Debezium系列之:Flink SQL消费Debezium数据,只消费新增数据,过滤掉更新、删除数据
  • 苍穹外卖项目笔记day03
  • 【ShiMetaPi M4-R1】上手:RK3568B2|开源鸿蒙(OpenHarmony) 应用开发快速上手
  • 开源检索增强生成(UltraRAG)框架
  • KafkaRocketMQ重平衡容灾机制
  • 腾讯开源混元多语言翻译模型—— Hunyuan-MT
  • 【算法--链表】142.环形链表中Ⅱ--通俗讲解如何找链表中环的起点