山东大学实训 Day1
经过昨晚的讨论,我们暂时做了简单的分工,我负责算法部分。
这次的项目实训,我们计划做一个成绩预测系统。目前我们只拿到了学生的慕课学习记录数据集,上面记录了学生使用慕课上课的一些情况,比如提交作业数,上课次数,发言等,最后有学生在该课程的成绩。
今天读了周志华教授关于深度森林的论文[1]。
1 Introduction
深度神经网络尽管非常强大,但仍存在一些明显的缺陷。一是训练需要大量的数据,使得模型很难应用到小规模的数据上;二是其复杂的结构需要庞大的计算资源支持;三是太多的超参数,而模型性能的好坏严重取决于调整他们。同样是使用CNN,因为许多不同的选择而导致世纪使用的模型并不相同,这让DNN的训练变得非常的棘手,更像是一门艺术而不是科学/工程,而且因为无限制的配置组合的干扰因素太多,理论分析也变得非常困难。对于DNN,表示学习的能力是非常重要的,为了能利用大量数据,学习模型的容量必须要大,这也一定程度上解释了为什么DNN要如此复杂。论文推想若将这些性质赋给其他一些合适的学习模型,也许可以在更少的缺陷上可以取得能与DNN匹敌的表现。
gcForest(multi-Grained Cascade Forest多粒度级联森林)是一种新的决策树集成方法。该方法采用级联结构集成深度森林,其表征学习可以在之后被多粒度扫描增强。可以自适应地确定级联级别的数量,从而可以自动设置模型的复杂性,从而使gcForest即使在小规模数据上也能表现出色。用户可以根据计算资源控制训练成本。该模型较DNN有着极少的超参数,对于超参数调整也表现出很好的鲁棒性,这样在大多数情景下,即使是不同领域的不同的数据,使用默认的设置也能取得出色的表现。
2 The Proposed Approach
2.1 级联森林结构
受DNN对原始特征的逐层处理启发,gcForest采取了级联结构,如下图所示,每一层都接收上一层处理过的特征信息,然后输出其处理后的结果给下一层。
每一层都是决策树森林的集成,也就是集成的集成。这里采用了不同类型的森林以支持多样性,由于在集成结构中多样性是非常重要的。为了简便,这里假设用两种森林。黑色表示随机森林,蓝色表示完全随机森林。每个完全随机树森林包含500个完全随机树,通过随机选择要在树的每个节点处分割的特征生成,直到每个节点只包含一类实例为止。同样,每个随机森林包括500个树,通过随机选择数量的特征作为候选(d代表输入特征的数量)然后选择带有最高基尼指数的特征作为分割点。每个森林的树的数量是超参数。
每一个森林通过计算相关实例所在的叶节点上不同类别的训练示例的百分比来产生一个对类分布的估计,然后在同一个森林上计算所有树的平均值。如下图所示:
估计的类分布组成了类向量,之后将其与原始特征连接起来作为下一层的输入。假设这里是三分类任务,那么四个森林的每一个都会产生一个三维类向量,那么下一级将会接收3x4维的向量。
为了减少过拟合的风险,每一个森林产生的类向量都要通过k折交叉验证生成。细节上讲,每一个实例都要被训练k-1次,之后取平均来产生最终的类向量作为下一层的特征。扩展到新的级别之后,将在验证集上评估整个级联的性能,并且如果没有显着的性能提升,则训练过程将终止。因此级联层级是自动决定的。gcForest通过在适时终止训练来自适应地确定其模型复杂性。这使其可以适用于不同规模的训练数据,而不仅限于大规模的训练数据。
2.2 多粒度扫描
如下图所示,滑动窗口被用于扫描原始特征。假设这里有400维原始特征,在这里使用100维大小的窗口。对于序列数据,每滑动一个特征就会产生一个100维的特征向量,总共产生301个向量。如果原始特征具有空间关系,比如,20x20大小的像素面板,那么一个10x10大小的窗口会产生121个向量。从相同大小的窗口提取出的实例将会用了训练一个完全随机森林和一个随机森林,然后生成一个类向量并将其连接作为转换后的特征。这里依旧假设是三分类,窗口大小是100维,这样,每个森林都会产生301个三维向量,使得每一层都会产生1806维的变换特征向量。因为变换后的特征向量过大,由于完全随机森林不依赖于特征分枝选择,而随机森林对不准确的特征分枝选择非常不敏感,这里可以采用特征采样比如下采样。
2.3 完整过程和超参数
gcForest的完整过程如下图所示:
对于m个400维的训练样本,一个100维大小的窗口将会产生301 x m个100维的训练实例,用来训练完全随机森林和随机森林,每个包含500颗树,在三分类任务中,将生成1806维的向量,变换后的训练集将用于接下来第一层的级联森林的训练。在与上一级产生的类向量增加后,变换的特征向量将用于接下来第二层以及第三层的级联森林,直到验证性能收敛。
参考文献:
[1] Zhihua Zhou and Ji Feng, Deep Forest: Towards An Alternative to Deep Neural Networks, IJCAI, 2017, https://arxiv.org/abs/1702.08835v2 (V2)