基于深度森林(Deep Forest)的级联结构、多粒度扫描与级联森林构建过程
字数 3244 2025-12-24 01:25:42

基于深度森林(Deep Forest)的级联结构、多粒度扫描与级联森林构建过程

题目描述

基于深度森林(Deep Forest,又称gcForest)的算法,是周志华教授团队在2017年提出的一种深度模型替代方案。与深度神经网络(DNN)通过多层非线性变换来学习特征表示不同,深度森林旨在利用“模型集成+层级结构”来构建“深度”模型。其核心思想是通过一个级联的、由多种树集成模型组成的结构,逐层处理特征,并将每一层的输出(即预测概率分布)作为新的特征,输入到下一层,以此来实现表征学习。本题将详细讲解其核心设计:级联结构多粒度扫描,以及模型整体的训练/构建过程

解题过程循序渐进讲解

第一步:理解核心动机与设计理念

传统的深度神经网络(DNN)的成功很大程度上依赖于多层非线性堆叠带来的强大表征学习能力,但DNN也存在可解释性差、对超参数敏感、需要大量数据等问题。深度森林的动机是探索一种不依赖于梯度反向传播的、基于决策树集成的深度模型。

其基本设计理念是:

  1. 用集成学习(森林)替代神经元:每一层不是由神经元组成,而是由一个或多个“森林”(如随机森林、完全随机森林)构成。
  2. 用特征变换替代激活函数:每一层的输出(模型对各类别的预测概率)被连接(拼接)到原始输入特征上,形成新的、增强的特征向量,作为下一层的输入。这种概率输出可以被看作是对原始特征的一种高层、非线性变换。
  3. 用级联结构实现深度:通过不断堆叠这样的“森林层”,模型的“深度”得以增加,表征能力逐步增强。

第二步:剖析核心组件一:多粒度扫描(Multi-Grained Scanning)

多粒度扫描是可选的,主要用于处理具有空间或序列结构的数据(如图像、序列),其目的是在输入级联森林之前,提取多尺度的特征。

  1. 滑动窗口扫描

    • 对于输入数据(例如,一个n维特征向量,或重塑后的序列/图像),我们定义不同大小的滑动窗口。例如,对于一个长度为L的一维序列,我们可以使用大小为k的窗口(k是超参数,如k=100k=200)。
    • 窗口在序列上以步长s滑动,每次截取一个长度为k的特征子向量。对于图像,则使用二维窗口在二维空间滑动。
  2. 局部特征学习

    • 每一个窗口截取出的特征子向量,被送入一个“森林”中进行训练和预测。这个“森林”通常是一个完全随机森林,其每棵树随机选择特征和分裂点,不进行剪枝,以增加多样性。
    • 这个森林的目标是学习从局部特征块到样本标签的映射。训练完成后,对于每个样本的每个窗口,森林会输出一个C维的概率向量(C是类别数)。
  3. 生成转换特征

    • 对于一个样本,经过大小为k的窗口扫描后,会产生M个窗口(M取决于序列长度L、窗口大小k和步长s)。每个窗口经过森林,都会产生一个C维概率向量。
    • 然后,我们对这MC维向量进行池化操作(通常是均值池化或最大池化),将它们聚合成一个C维向量。这个向量代表了在尺度k下,模型对整个样本的、基于局部信息聚合得到的判别性特征。
    • 这个过程用不同大小的窗口(例如k1=100, k2=200)重复进行。每个尺度最终都会产生一个C维的特征向量。
  4. 最终输出

    • 将所有不同尺度生成的C维特征向量拼接(concatenate)起来。假设有S个不同的扫描尺度,最终生成的特征向量维度就是S * C
    • 这个拼接后的特征向量,将与原始特征向量一起,作为级联森林的初始输入。多粒度扫描可以看作是模型“看”数据的多种不同“焦距”。

第三步:剖析核心组件二:级联森林结构(Cascade Forest Structure)

这是深度森林的主体部分。它是一个多层的、前馈的级联结构。

  1. 基本单元:森林层

    • 每一层包含多个不同类型的森林。标准的gcForest包含两种森林:
      • 完全随机森林:每棵树随机选择特征进行分裂,直到节点纯净或样本数小于阈值。强调随机性,方差大,偏差低。
      • 随机森林:使用Bagging和特征子采样,并进行分裂优化(如基尼指数)。是更经典的集成方法,偏差和方差较均衡。
    • 为了增加多样性,每一层通常包含多个(例如2个)完全随机森林和多个(例如2个)随机森林。
  2. 特征增强与传递

    • 假设输入到第t层的特征向量是F_t
    • t层的每个森林都会独立地对F_t进行处理,并输出一个C维的类别概率向量。
    • 将第t所有森林输出的C维概率向量拼接起来。如果有K个森林,就会得到一个K * C维的向量。
    • 然后,将这个拼接后的概率向量,与原始输入特征F_t再次拼接,形成新的特征向量F_{t+1},作为第t+1层的输入。
    • 即:F_{t+1} = [F_t, P_1, P_2, ..., P_K],其中P_i是第i个森林的输出概率向量。
  3. 级联的增长

    • 这个过程一层一层地堆叠。随着层数增加,特征向量的维度会越来越大(因为每一层都会新增K * C维特征)。这些新增的概率向量,是前一层所有森林的“集体决策”,它们编码了从当前特征表示中提炼出的、对分类任务有价值的高层信息。

第四步:模型的完整训练与构建过程

深度森林的训练是逐层贪婪生成的,而不是像DNN一样端到端反向传播。

  1. 初始化

    • 如果有预处理步骤(如多粒度扫描),先执行它。将生成的特征与原始特征拼接,形成初始特征向量F_1
    • 如果没有,F_1就是原始特征。
  2. 逐层训练与验证

    • 训练第1层:使用全部训练数据(X_train, y_train),特征为F_1,训练第一层的所有森林(例如2个完全随机森林+2个随机森林)。
    • 生成第2层输入:用训练好的第1层森林,对训练数据进行预测,得到每个森林的概率输出,拼接后与F_1拼接,生成F_2
    • 训练第2层:使用训练数据(X_train, y_train),特征为F_2,训练第2层的所有森林。
    • 评估与决定是否增长
      • 这是关键一步。在训练每一层之后,需要使用一个验证集来评估当前整个级联结构的性能。
      • 用验证集数据X_val,从第一层开始,依次通过所有已训练好的层,最终得到顶层森林的预测结果(通常是取顶层所有森林输出概率的平均值),计算在验证集上的准确率。
      • 终止条件:如果增加新的一层后,整个模型在验证集上的性能没有显著提升(或达到预设的最大层数),则停止增加新层。这意味着继续加深模型不会带来泛化性能的增益,从而自动决定了模型的“深度”。这是深度森林的一个关键优势,其深度可以在训练中自适应确定。
    • 如果性能有提升,则用同样的方法生成F_3,训练第3层,并再次评估,如此循环。
  3. 最终预测

    • 对于一个新的测试样本,将其特征(经过相同的多粒度扫描处理)作为F_1,输入到训练好的整个级联结构中。
    • 让数据依次通过每一层的每一个森林,最终到达最顶层。
    • 最顶层所有森林输出的类别概率向量取平均,得到最终的预测概率分布。取概率最大的类别作为最终预测结果。

总结与回顾

深度森林通过以下步骤构建了一个深度模型:

  1. 多粒度扫描(可选):通过不同大小的滑动窗口和森林,从结构化数据中提取多尺度的局部特征表示,形成初始的增强特征。
  2. 级联森林结构:构建多层森林,每层包含多种树模型以增强多样性。
  3. 逐层特征变换:每一层的输出(类别概率)被拼接到当前特征中,作为下一层新的、更丰富的特征输入。这实现了非线性的特征转换。
  4. 贪婪逐层训练与验证:模型一层一层地训练,并在每一层后通过验证集性能决定是否继续加深,从而自适应地确定模型复杂度。

深度森林的优势在于其对超参数相对不敏感、模型复杂度自适应确定、可解释性相对较好(因为基于决策树),为深度学习提供了一种基于树模型集成的、无需梯度下降的、新颖的架构思路。

基于深度森林(Deep Forest)的级联结构、多粒度扫描与级联森林构建过程 题目描述 基于深度森林(Deep Forest,又称gcForest)的算法,是周志华教授团队在2017年提出的一种深度模型替代方案。与深度神经网络(DNN)通过多层非线性变换来学习特征表示不同,深度森林旨在利用“模型集成+层级结构”来构建“深度”模型。其核心思想是通过一个级联的、由多种树集成模型组成的结构,逐层处理特征,并将每一层的输出(即预测概率分布)作为新的特征,输入到下一层,以此来实现表征学习。本题将详细讲解其核心设计: 级联结构 、 多粒度扫描 ,以及模型整体的 训练/构建过程 。 解题过程循序渐进讲解 第一步:理解核心动机与设计理念 传统的深度神经网络(DNN)的成功很大程度上依赖于多层非线性堆叠带来的强大表征学习能力,但DNN也存在可解释性差、对超参数敏感、需要大量数据等问题。深度森林的动机是探索一种不依赖于梯度反向传播的、基于决策树集成的深度模型。 其基本设计理念是: 用集成学习(森林)替代神经元 :每一层不是由神经元组成,而是由一个或多个“森林”(如随机森林、完全随机森林)构成。 用特征变换替代激活函数 :每一层的输出(模型对各类别的预测概率)被连接(拼接)到原始输入特征上,形成新的、增强的特征向量,作为下一层的输入。这种概率输出可以被看作是对原始特征的一种高层、非线性变换。 用级联结构实现深度 :通过不断堆叠这样的“森林层”,模型的“深度”得以增加,表征能力逐步增强。 第二步:剖析核心组件一:多粒度扫描(Multi-Grained Scanning) 多粒度扫描是可选的,主要用于处理具有空间或序列结构的数据(如图像、序列),其目的是在输入级联森林之前,提取多尺度的特征。 滑动窗口扫描 : 对于输入数据(例如,一个 n 维特征向量,或重塑后的序列/图像),我们定义不同大小的滑动窗口。例如,对于一个长度为 L 的一维序列,我们可以使用大小为 k 的窗口( k 是超参数,如 k=100 或 k=200 )。 窗口在序列上以步长 s 滑动,每次截取一个长度为 k 的特征子向量。对于图像,则使用二维窗口在二维空间滑动。 局部特征学习 : 每一个窗口截取出的特征子向量,被送入一个“森林”中进行训练和预测。这个“森林”通常是一个 完全随机森林 ,其每棵树随机选择特征和分裂点,不进行剪枝,以增加多样性。 这个森林的目标是学习从 局部特征块 到样本标签的映射。训练完成后,对于每个样本的每个窗口,森林会输出一个 C 维的概率向量( C 是类别数)。 生成转换特征 : 对于一个样本,经过大小为 k 的窗口扫描后,会产生 M 个窗口( M 取决于序列长度 L 、窗口大小 k 和步长 s )。每个窗口经过森林,都会产生一个 C 维概率向量。 然后,我们对这 M 个 C 维向量进行 池化 操作(通常是均值池化或最大池化),将它们聚合成一个 C 维向量。这个向量代表了在尺度 k 下,模型对整个样本的、基于局部信息聚合得到的判别性特征。 这个过程用 不同大小 的窗口(例如 k1=100 , k2=200 )重复进行。每个尺度最终都会产生一个 C 维的特征向量。 最终输出 : 将所有不同尺度生成的 C 维特征向量 拼接 (concatenate)起来。假设有 S 个不同的扫描尺度,最终生成的特征向量维度就是 S * C 。 这个拼接后的特征向量,将与原始特征向量一起,作为 级联森林 的初始输入。多粒度扫描可以看作是模型“看”数据的多种不同“焦距”。 第三步:剖析核心组件二:级联森林结构(Cascade Forest Structure) 这是深度森林的主体部分。它是一个多层的、前馈的级联结构。 基本单元:森林层 : 每一层包含多个不同类型的森林。标准的gcForest包含两种森林: 完全随机森林 :每棵树随机选择特征进行分裂,直到节点纯净或样本数小于阈值。强调随机性,方差大,偏差低。 随机森林 :使用Bagging和特征子采样,并进行分裂优化(如基尼指数)。是更经典的集成方法,偏差和方差较均衡。 为了增加多样性,每一层通常包含多个(例如2个)完全随机森林和多个(例如2个)随机森林。 特征增强与传递 : 假设输入到第 t 层的特征向量是 F_t 。 第 t 层的 每个森林 都会独立地对 F_t 进行处理,并输出一个 C 维的类别概率向量。 将第 t 层 所有森林 输出的 C 维概率向量 拼接 起来。如果有 K 个森林,就会得到一个 K * C 维的向量。 然后,将这个拼接后的概率向量,与原始输入特征 F_t 再次拼接 ,形成新的特征向量 F_{t+1} ,作为第 t+1 层的输入。 即: F_{t+1} = [F_t, P_1, P_2, ..., P_K] ,其中 P_i 是第 i 个森林的输出概率向量。 级联的增长 : 这个过程一层一层地堆叠。随着层数增加,特征向量的维度会越来越大(因为每一层都会新增 K * C 维特征)。这些新增的概率向量,是前一层所有森林的“集体决策”,它们编码了从当前特征表示中提炼出的、对分类任务有价值的高层信息。 第四步:模型的完整训练与构建过程 深度森林的训练是 逐层贪婪生成 的,而不是像DNN一样端到端反向传播。 初始化 : 如果有预处理步骤(如多粒度扫描),先执行它。将生成的特征与原始特征拼接,形成初始特征向量 F_1 。 如果没有, F_1 就是原始特征。 逐层训练与验证 : 训练第1层 :使用全部训练数据 (X_train, y_train) ,特征为 F_1 ,训练第一层的所有森林(例如2个完全随机森林+2个随机森林)。 生成第2层输入 :用训练好的第1层森林,对 训练数据 进行预测,得到每个森林的概率输出,拼接后与 F_1 拼接,生成 F_2 。 训练第2层 :使用训练数据 (X_train, y_train) ,特征为 F_2 ,训练第2层的所有森林。 评估与决定是否增长 : 这是关键一步。在训练每一层之后,需要使用一个 验证集 来评估当前整个级联结构的性能。 用验证集数据 X_val ,从第一层开始,依次通过所有已训练好的层,最终得到顶层森林的预测结果(通常是取顶层所有森林输出概率的平均值),计算在验证集上的准确率。 终止条件 :如果增加新的一层后,整个模型在验证集上的性能 没有显著提升 (或达到预设的最大层数),则停止增加新层。这意味着继续加深模型不会带来泛化性能的增益,从而自动决定了模型的“深度”。这是深度森林的一个 关键优势 ,其深度可以在训练中自适应确定。 如果性能有提升,则用同样的方法生成 F_3 ,训练第3层,并再次评估,如此循环。 最终预测 : 对于一个新的测试样本,将其特征(经过相同的多粒度扫描处理)作为 F_1 ,输入到训练好的整个级联结构中。 让数据依次通过每一层的每一个森林,最终到达最顶层。 将 最顶层所有森林 输出的类别概率向量 取平均 ,得到最终的预测概率分布。取概率最大的类别作为最终预测结果。 总结与回顾 深度森林通过以下步骤构建了一个深度模型: 多粒度扫描(可选) :通过不同大小的滑动窗口和森林,从结构化数据中提取多尺度的局部特征表示,形成初始的增强特征。 级联森林结构 :构建多层森林,每层包含多种树模型以增强多样性。 逐层特征变换 :每一层的输出(类别概率)被拼接到当前特征中,作为下一层新的、更丰富的特征输入。这实现了非线性的特征转换。 贪婪逐层训练与验证 :模型一层一层地训练,并在每一层后通过验证集性能决定是否继续加深,从而自适应地确定模型复杂度。 深度森林的优势在于其 对超参数相对不敏感、模型复杂度自适应确定、可解释性相对较好 (因为基于决策树),为深度学习提供了一种基于树模型集成的、无需梯度下降的、新颖的架构思路。