9. 深度神经模型训练

9.1 梯度计算:反向传播

反向传播(Back Propagation,BP)是深度学习模型训练的核心—— 简单说就是 “先算预测误差,再把误差从输出层往输入层传,最后更新权重 / 偏置,让误差变小”。梯度可以理解为 “权重 / 偏置该往哪个方向、改多少才能让误差变小”。

9.1.1 DNN 的反向传播算法(全连接神经网络)

先明确 3 个核心支撑概念,再讲算法流程:

(1)核心概念拆解
  • 误差计算:衡量模型预测值和真实值的差距,最常用的是均方误差(MSE)(回归问题)和交叉熵损失(Cross Entropy)(分类问题)。
    • 例(二分类):真实值 y(0 或 1),预测值 y^​(0~1),交叉熵损失 L=−[ylny^​+(1−y)ln(1−y^​)],损失越大,预测越不准。
  • 梯度下降法:核心思想是 “沿着梯度的反方向调整参数(权重w、偏置b),让损失函数最小化”。
    • 类比:你站在山坡上想走到谷底,每次都往 “最陡的下坡方向” 走一小步,直到走到最低处。
    • 公式(单参数更新):wnew​=wold​−η⋅∂w∂L​(η是学习率,即 “每步走多远”;∂w∂L​是损失对权重的梯度)。
  • 链式求导法则:反向传播的数学基础,核心是 “复合函数的导数等于各层导数的乘积”。
    • 例:L=f(y^​),y^​=g(z),z=h(w),则 ∂w∂L​=∂y^​∂L​⋅∂z∂y^​​⋅∂w∂z​—— 这正是误差从输出层传到权重的过程。
(2)DNN 反向传播流程(简化版)

假设网络:输入层→隐藏层→输出层

  1. 前向计算:算输出层预测值 y^​,计算损失 L;
  2. 反向传误差
    • 输出层:算损失对输出层神经元的梯度(∂zo​∂L​,zo​是输出层线性和);
    • 隐藏层:用链式法则,把输出层的误差传到隐藏层,算损失对隐藏层神经元的梯度(∂zh​∂L​);
  3. 更新参数:用梯度下降法,更新隐藏层→输出层、输入层→隐藏层的所有权重和偏置;
  4. 重复上述步骤,直到损失足够小。
9.1.2 CNN 的反向传播算法

CNN 的反向传播和 DNN 核心逻辑一致(算梯度 + 更新参数),但因为有卷积、池化层,梯度计算更特殊,重点理解 “反向时怎么处理卷积 / 池化的梯度”:

(1)卷积层的反向传播(核心思路)

卷积层的参数是卷积核的权重,反向传播要算 “损失对卷积核权重的梯度”。

  • 直观理解:前向是 “卷积核滑过输入算特征图”,反向是 “把误差(损失对特征图的梯度)滑回输入,算卷积核的梯度”。
  • 简化计算过程:
    1. 先算损失对卷积层输出(特征图)的梯度 ∂out∂L​;
    2. 把这个梯度和前向的输入做 “互相关运算”(类似卷积,只是卷积核不翻转),得到损失对卷积核权重的梯度 ∂w∂L​;
    3. 用梯度下降更新卷积核权重。
(2)池化层的反向传播(核心思路)

池化层没有可训练的参数(只有窗口大小、步长),反向传播只需要把 “损失对池化输出的梯度” 传递回池化层的输入即可。

  • 以最大池化为例:前向时我们取了窗口内的最大值,反向时只把梯度 “分配” 给这个最大值的位置,其他位置梯度为 0。例:前向 2×2 最大池化取了右上角的 10,反向时只有这个位置的梯度等于损失对池化输出的梯度,其余 3 个位置梯度为 0。
9.2 激活函数(核心对比)

激活函数的核心作用是给神经网络引入非线性,没有它,再多层网络也等价于单层线性模型。下面是 3 个核心激活函数的对比:

激活函数 表达式 核心优点 核心缺点
Sigmoid σ(z)=1+e−z1​ 1. 输出在 0~1 之间,可解释为概率;2. 连续可导,适合早期反向传播 1. 梯度消失:z 绝对值大时,导数接近 0,反向传播梯度传不下去;2. 输出不是以 0 为中心(均值≈0.5),导致权重更新偏向一个方向;3. 计算慢(有指数运算)
Tanh tanh(z)=ez+e−zez−e−z​ 1. 输出在 - 1~1 之间,以 0 为中心(解决 Sigmoid 的均值问题);2. 连续可导 仍存在梯度消失问题(z 绝对值大时导数接近 0);计算仍有指数运算,速度一般
ReLU ReLU(z)=max(0,z) 1. 计算极快(只有比较和取最大值);2. 缓解梯度消失(z>0 时导数 = 1,梯度能有效传递);3. 稀疏激活(z<0 时输出 0,减少参数冗余) 1. 部分神经元 “死亡”(z 始终 < 0 时,输出恒为 0,梯度为 0,参数不再更新);2. 输出仍不是以 0 为中心

补充:ReLU 是目前最常用的激活函数,衍生出的 Leaky ReLU(max(αz,z),α是小正数)能解决 “神经元死亡” 问题。

9.3 深度学习中的优化算法:梯度下降法的一些问题

梯度下降是优化的基础,但原始梯度下降有明显缺陷,先讲原始梯度下降的 3 类形式,再讲核心问题:

(1)梯度下降的 3 种基础形式
  • 批量梯度下降(BGD):用全部训练数据算梯度,更新一次参数。优点:梯度准确;缺点:数据量大时计算极慢,内存扛不住。
  • 随机梯度下降(SGD):用单个样本算梯度,更新一次参数。优点:计算快,能在线学习;缺点:梯度波动大,收敛不稳定。
  • 小批量梯度下降(Mini-batch SGD):用一小批样本(比如 32、64 个)算梯度,是 BGD 和 SGD 的折中,目前最常用。
(2)梯度下降的核心问题
  1. 学习率难调
    • 学习率太大:参数更新幅度过大,损失会震荡,甚至不收敛;
    • 学习率太小:收敛极慢,训练耗时久,还可能陷入局部最优。
  2. 所有参数共享学习率:不同参数的 “最优更新步长” 不同,但原始梯度下降用同一个学习率,无法适配不同参数的需求。
  3. 容易陷入局部最优 / 鞍点:损失函数的曲面不是 “单峰”,梯度下降可能卡在 “局部最低点”(不是全局最优)或 “鞍点”(梯度为 0,但不是最优)。
  4. 梯度消失 / 爆炸:深层网络中,反向传播时梯度要么趋近于 0(消失),要么趋近于无穷大(爆炸),导致参数无法有效更新(激活函数的缺陷会加剧这个问题)。

补充:后续的优化算法(Adam、RMSprop、Momentum)都是为了解决这些问题,比如 Momentum 加入 “动量” 模拟惯性,Adam 自适应调整每个参数的学习率。

10. 降维

降维的核心目的:减少数据的维度(比如从 100 个特征降到 10 个),同时保留数据的核心信息,解决 “维度灾难”(维度太多时,数据稀疏、计算量大、模型易过拟合)。

10.1 降维的核心分类与特点
(1)两种核心降维方式
方式 核心思想 主要方法
维度选择(特征选择) 从原始维度中挑选一部分重要的维度,抛弃不重要的,维度本身不变 1. 过滤法(比如方差选择、相关系数):先筛选特征再训练模型;2. 包裹法(比如递归特征消除):用模型性能评估特征重要性;3. 嵌入法(比如 L1 正则化):训练模型时自动筛选特征
维度抽取(特征提取) 不保留原始维度,而是通过数学变换生成新的低维特征,新特征是原始特征的组合 线性:PCA(主成分分析);非线性:LLE(局部线性嵌入)、t-SNE、核 PCA
(2)线性 / 非线性降维的优缺点
  • 线性降维(PCA)缺点:
    1. 只捕捉数据的线性关系,无法处理非线性结构(比如螺旋形数据);
    2. 对异常值敏感,异常值会严重影响主成分的方向;
    3. 新特征的可解释性差(是原始特征的线性组合,无法对应具体物理意义)。
  • 非线性降维(代表方法):
    1. t-SNE:适合高维数据可视化(比如把 100 维数据降到 2 维画图),能捕捉非线性结构;
    2. LLE:基于 “局部邻域线性拟合”,保留数据的局部结构;
    3. 核 PCA:用核函数把数据映射到高维,再做 PCA,间接捕捉非线性关系。
10.2 主成分分析(PCA)
(1)主要思想

PCA 是最经典的线性降维方法,核心是:

  1. 找一组正交的新维度(主成分),这些主成分是原始特征的线性组合;
  2. 第一个主成分能解释数据的最大方差(包含最多信息),第二个主成分解释剩余方差中最大的部分,且和第一个正交(无重叠信息);
  3. 选择前 k 个主成分,抛弃其余维度,实现降维。
  • 直观类比:把三维空间的点投影到二维平面,选择 “点分布最分散” 的平面(方差最大),这样投影后丢失的信息最少。
(2)PCA 算法步骤(算法 10-1,简化版)
  1. 数据预处理:对原始数据标准化(每个特征均值为 0,方差为 1),避免量纲影响(比如 “身高(厘米)” 和 “体重(公斤)” 量级不同);
  2. 计算协方差矩阵:协方差衡量两个特征的线性相关性,协方差矩阵能反映所有特征间的相关性;
  3. 计算协方差矩阵的特征值和特征向量
    • 特征值:代表对应主成分的方差大小(特征值越大,主成分越重要);
    • 特征向量:代表主成分的方向;
  4. 选择主成分:把特征值从大到小排序,选前 k 个特征值对应的特征向量,组成 “投影矩阵”;
  5. 数据降维:把原始数据乘以投影矩阵,得到 k 维的新数据(降维完成)。

11. 聚类

聚类是无监督学习的核心(没有标签,只靠数据本身的相似性分组),目标是 “让同一簇内的数据尽可能相似,不同簇尽可能不同”。

11.1 聚类算法的性能指标与相似性度量
(1)DBI 指标(戴维斯 - 布尔丁指数)

DBI 是评估聚类效果的常用指标,核心是 “越小越好”:

  • 计算公式(简化):DBI=k1​∑i=1k​maxj=i​(dij​avgi​+avgj​​)
    • avgi​:第 i 簇内数据的平均距离(簇内紧凑度);
    • dij​:第 i 簇和第 j 簇中心的距离(簇间分离度);
  • 含义:DBI 越小,说明 “簇内越紧凑,簇间越分离”,聚类效果越好。
(2)相似性度量(核心是 “距离越小,越相似”)
  • 闵可夫斯基距离:是一类距离的统称,常见特例:
    1. 曼哈顿距离(L1):d=∑i=1n​∣xi​−yi​∣(比如从 A 到 B 走直角街道的距离);
    2. 欧氏距离(L2):d=∑i=1n​(xi​−yi​)2​(直线距离,最常用);
    3. 切比雪夫距离(L∞):d=max(∣x1​−y1​∣,∣x2​−y2​∣,...,∣xn​−yn​∣)(比如棋盘上国王走一步的最大距离)。
  • 夹角余弦:衡量两个向量的 “方向相似性”,公式:cosθ=∑i=1n​xi2​​∑i=1n​yi2​​∑i=1n​xi​yi​​,值越接近 1,方向越一致(比如文本相似度常用)。
  • 相关系数:衡量两个变量的线性相关性,公式:r=σX​σY​cov(X,Y)​,值在 - 1~1 之间,绝对值越大,线性相关性越强。
11.2 K 均值聚类(K-Means)
(1)核心思想

预先指定簇的数量 k,通过 “迭代调整簇中心 + 分配数据”,让每个簇内的数据到簇中心的距离之和最小。

  • 直观类比:把全班同学分成 k 组,先随便选 k 个组长,然后每个人选离自己最近的组长组队;组队后重新选每组的 “新组长”(簇中心),重复直到组长位置不再变化。
(2)算法步骤
  1. 初始化:随机选 k 个数据点作为初始簇中心;
  2. 分配数据:计算每个数据点到 k 个簇中心的距离,把数据点分配到距离最近的簇;
  3. 更新簇中心:对每个簇,计算所有数据点的均值,作为新的簇中心;
  4. 迭代:重复步骤 2-3,直到簇中心的变化小于阈值,或达到最大迭代次数;
  5. 输出:最终的 k 个簇。

缺点:对初始簇中心敏感(可能陷入局部最优);需要预先指定 k;对异常值敏感。

11.3 高斯混合聚类(GMM)
(1)核心思想

假设数据是由多个高斯分布(正态分布)混合生成的,每个高斯分布对应一个簇。GMM 不是 “硬分配”(数据只属于一个簇),而是 “软分配”(数据属于每个簇的概率)。

  • 直观类比:每个簇是一个 “高斯云”,数据点可能同时属于多个云,只是概率不同(比如某点有 80% 概率属于簇 1,20% 属于簇 2)。
(2)算法步骤(EM 算法)
  1. 初始化:指定簇数 k,初始化每个高斯分布的参数(均值、方差、权重);
  2. E 步(期望步):计算每个数据点属于每个簇的概率(后验概率);
  3. M 步(最大化步):根据 E 步的概率,更新每个高斯分布的均值、方差、权重,让数据的似然度最大;
  4. 迭代:重复 E 步 - M 步,直到参数稳定;
  5. 输出:每个数据点的簇概率,或按最大概率分配簇。

优点:能处理非球形簇、软分配;缺点:计算复杂,对初始参数敏感。

11.4 层次聚类
(1)核心思想

不需要预先指定簇数 k,而是通过 “层层合并 / 拆分” 构建聚类树(谱系图),最后根据需求截取树的某一层得到簇。

  • 两类方式:
    1. 凝聚式(自底向上):每个数据点先自成一簇,然后不断合并最相似的簇,直到所有数据成一个簇;
    2. 分裂式(自顶向下):所有数据先成一个簇,然后不断拆分最不相似的簇,直到每个数据自成一簇。
(2)算法步骤(凝聚式,最常用)
  1. 初始化:每个数据点为一个独立的簇;
  2. 计算簇间距离:比如 “单链接”(两簇最近点的距离)、“全链接”(两簇最远点的距离)、“平均链接”(两簇所有点的平均距离);
  3. 合并簇:找到距离最近的两个簇,合并成一个新簇;
  4. 迭代:重复步骤 2-3,直到所有数据合并为一个簇;
  5. 截取结果:根据聚类树,选择合适的层数,得到最终的 k 个簇。

优点:无需指定 k,能可视化聚类过程;缺点:计算复杂度高,不适合大数据。

11.5 DBSCAN
(1)核心思想

基于 “密度” 聚类:把 “密度足够高” 的区域划为一个簇,能自动发现任意形状的簇,还能识别 “噪声点”(不属于任何簇的异常点)。

  • 核心概念:
    1. ε(邻域半径):以某点为中心,半径 ε 内的区域;
    2. 最小点数(MinPts):ε 邻域内至少有 MinPts 个点,该点才是 “核心点”;
    3. 核心点:ε 邻域内点数≥MinPts;
    4. 边界点:在核心点的 ε 邻域内,但自身不是核心点;
    5. 噪声点:既不是核心点,也不是边界点。
(2)算法步骤
  1. 初始化:设置 ε 和 MinPts,标记所有点为 “未访问”;
  2. 遍历点:选一个未访问的点 p,标记为已访问;
  3. 找核心点:计算 p 的 ε 邻域内的点数,若≥MinPts,p 是核心点,开始扩展簇;
  4. 扩展簇:把 p 邻域内的所有点加入当前簇,然后遍历这些点的邻域,把核心点的邻域点也加入簇,直到没有新点可加;
  5. 标记噪声:若 p 不是核心点,标记为噪声点;
  6. 迭代:重复步骤 2-5,直到所有点都被访问;
  7. 输出:所有簇和噪声点。

优点:无需指定 k,能识别噪声,处理任意形状簇;缺点:对 ε 和 MinPts 敏感,高维数据效果差。


总结

  1. 深度模型训练:反向传播是核心(链式求导传误差 + 梯度下降更参数),CNN 反向传播需适配卷积 / 池化的梯度特性;激活函数中 ReLU 解决了 Sigmoid/Tanh 的梯度消失问题,是主流选择;梯度下降的核心问题是学习率难调、易陷局部最优等。
  2. 降维:分维度选择(选重要原始特征)和维度抽取(生成新特征);PCA 是线性降维核心,靠主成分保留最大方差,缺点是无法处理非线性数据。
  3. 聚类:DBI 越小聚类效果越好;K-Means 简单高效但需指定 k,GMM 支持软分配,层次聚类无需指定 k,DBSCAN 基于密度能识别噪声和任意形状簇。
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐