IHDR:增量式分层判别回归

    前面已经介绍了翁巨扬教授两个心智发育框架(IHDR+WWN)的核心算法CCIPCA和CCILCA,下面就IHDR这个框架来做一下详细的介绍,主要参考资料为IHDR原始论文,以及实验室师兄们前期的工作成果。后面再说一下where-what-network系列(先立个flag,希望不是在作死)。

    一、如何衡量一个数据集的纯度?

    定义一下什么纯度?一个数据集如果包含多个类别的样本,包含类别数越多,就认为这个数据集越不纯,反之,越纯,这里的纯指的是纯粹,单一。类别数越单一,表明数据集越纯(pure)。

    假设存在两个数据集A=\left \{ a_{1},a_{2},...,a_{m},b_{1},b_{2},...,b_{n} \right \},B=\left \{ b_{1},b_{2},...,b_{n} \right \},B为A的子集,其中\left \{ a_{1},a_{2},...,a_{m} \right \}表示小明的人脸数据,\left \{ b_{1},b_{2},...,b_{n} \right \}表示小红的人脸数据。那么,从主观上来讲,数据集A的方差要大于数据集B的方差,因而,一般而言,类间方差大于类内方差(LDA),因此,如果一个样本集方差越小,这个样本集越纯的可能性越大。

    二、如何将一个不纯的数据集分割成多个纯的子数据集?

    一个最常见的办法就是聚类,按照某种相似性评定准则,将样本集中相似的样本归为一个类别,但是常规的聚类方式又存在以下几个问题:

   1、设置聚类中心数目比较困难:数目过多,计算量过大,实时性难以满足要求,数目过少,又无法得到满意的聚类结果;

   2、聚类过程过于耗时:聚类的过程中,反复不停地进行迭代求解,迭代过程十分耗时,同时,如果数据维度过大,那么聚类过程的计算量就更加爆炸;

    3、聚类要求样本数据集中所有样本数据已知,也即是,聚类是对一个已知样本集进行操作。

    因此,对于一个在线学习系统,常规的聚类方式是不可取的。

    三、分类和回归

    分类问题,即建立输入数据data到输出标签label之间的映射关系;回归问题,即建立输入数据data到输出动作向量motor之间映射关系。二者之间最大的不同点在于输出部分,classification对应于label(标签),regression对应于vector(向量),如果将label转换成一个数字(虚拟标签),那么一个分类问题就可以划分为一个回归问题。

    四、IHDR

    IHDR翻译过来就是增量式分层判别回归(实验室师兄们这么翻译的),其基本思想就是:我们能否通过某种方法,将一个不纯数据集划分为N个较纯的子样本集,然后,当输入一个样本数据时,先判断他属于哪一个子样本集,然后,再判断当前样本与哪一个子样本集中的样本最接近,即得到当前样本对应输出动作向量。

    4.1 如何快速有效的对当前样本集进行划分? 

    IHDR采用的双聚类的方式,什么意思?通常,我们获取到的样本数据对应于一个标签(指示类别)或一个向量(指示动作),输入和输出之间应该满足一一对应关系,而且,相较于输入数据(X-Space)而言,输出指示(Y-Space)维度要小的多,因此,可以先在Y-Space上进行聚类,然后在X-Space上进行验证,这样就能快速有效的对已有样本数据进行划分。那么,问题又来了,到底要将当前样本划分为多少个子空间?

    4.2 将当前样本空间划分为多少个子空间?

    实际上,一次性划分是不现实的,因为在实际场景中,我们只能获取到当前时刻t对应数据,对于t+1,t+2,....时刻数据是不可达的,因此,考虑将划分过程视为一个动态过程,如果当前节点对应样本数大于设定阈值n_{s},就将当前节点对应数据集划分为q个子数据集,当继续向IHDR树里面添加样本时,样本会被自动划分到子数据集中,如果子数据集中样本数大于设定阈值n_{s},就将子数据集划分为q个子子数据集,...............,这样,就可以增量式将数据集划分为M个子样本集,过程如图1所示。

IHDR:增量式分层判别回归_第1张图片

                                                               图1 IHDR树构建过程(摘自文献[2])   

      那么,问题来了,我们怎么样决策,当前样本属于哪一个子样本集?

     4.3 如何决定当前样本应该划分到哪一个子集?

     我们先看一下样本分布示意,如图2所示。

     IHDR:增量式分层判别回归_第2张图片

                                                                         图2 样本分布示意图(摘自文献[1])

     图2中,黑点代表当前子样本集的中心,不难发现,如果一个样本属于某一个子样本集,那么,当前样本就与该子样本集的中心更加贴近,因此,我只需要判断当前样本距离那个子样本集的中心最近,就可以判断该样本属于那个子样本集了。

     这里又出现了一个问题,如果每个节点都对应一个样本集,也即是每个节点都保存其对应样本集,这样就会出现大量重复保存,实际上也不需要这样子,IHDR树中,仅仅是叶子节点中保存样本,中间节点只是保存其样本对应的统计模型(样本均值,样本方差,聚类子均值)。

     4.4  快速检索

     实际上,不管是聚类过程(样本与聚类子中心之间的比对),还是决策过程(在叶子节点对应样本集中进行的样本比对),其性能与样本数据的维度息息相关,因此,考虑将样本投影到最判别的特征空间之中,然后在特征空间中进行比对,这里,得到特征空间的方法,即前面提到的CCIPCA算法。通过CCIPCA算法,即可增量式的评估出当前样本空间对应最判别的特征空间,将样本投影到特征空间之后,为进一步提升决策效率,对应于普通节点,每一个节点建立一个NLL(负对数似然)模型,计算当前样本属于每个聚类子中心的概率。

     因此,对于一颗构建好的IHDR树而言,普通节点对应于一个统计模型,叶子节点对应于一个子样本集。

     最后,展示一个结果,数据没有经过处理的数据,直接使用IHDR来对其进行分类,可以得到83.19%的识别率:

     IHDR:增量式分层判别回归_第3张图片

  测试代码已上传到github:MirrorYuChen/Developmental-Networks: Some Research C++ Codes on DN, following the works of Juyang Weng professor (github.com) 

  然后,基于IHDR+QT,跟师妹一起做了一个人脸识别跟踪系统:

       https://v.youku.com/v_show/id_XMzc4MTk0NTE3Ng==.html?spm=a2hzp.8244740.0.0

    未完待续~~~~~~~

参考文献:

[1] Weng J, Hwang W S. Incremental Hierarchical Discriminant Regression[J]. IEEE Transactions on Neural Networks, 2007, 18(2):397-415.

[2] 李威凌. 基于脑心智发育网络模型的移动机器人场景认知研究[D]. 武汉科技大学, 2016.

[3] 吴怀宇, 李威凌, 钟锐,等. 基于IHDR自主学习框架的轮式移动机器人导航方法:, CN 104850120 A[P]. 2015.

[4] 吴怀宇,钟锐,程果,等.基于压缩跟踪与IHDR增量学习的视频人脸在线识别方法:,CN201611042357.1 

你可能感兴趣的:(Machine,learning,incremental,hierarchical,discr,IHDR,Weng,juyang)