Broad Learning System (BLS,宽度学习系统)是澳门大学的陈俊龙教授在2017年TNNLS上基于随机向量函数链接神经网络(RVFLNN)和单层前馈神经网络(SLFN)提出的一种单层增量式神经网络。这个模型相比于传统的深层网络模型,它在保证一定精度的同时,具有快速、简洁,同时支持增量式的在线模型更新等比较好的性质。我在复现以后发现模型在一些数据集上的表现确实是不错的,在与陈教授做了关于一些模型细节讨论后,打算开这篇博客按照论文里的内容系统的介绍一下这个模型。在博客的最后会附上我写的 BLS模型 python 代码链接还有论文里公布的matlab代码链接,感兴趣的可以试一试效果
深层结构神经网络在许多领域得到应用,并在大规模数据处理上取得了突破性的成功。目前,最受欢迎的深度网络是深度信任网络(Deep Belief Networks,DBN),深度玻尔兹曼机器(Deep Boltzmann Machines,DBM)和卷积神经网络(Convolutional neural Networks,CNN)等。虽然深度结构网络非常强大,但大多数网络都被极度耗时的训练过程所困扰。其中最主要的原因是,上述深度网络都结构复杂并且涉及到大量的超参数,这种复杂性使得在理论上分析深层结构变得极其困难。另一方面,为了在应用中获得更高的精度,深度模型不得不持续地增加网络层数或者调整参数个数。
宽度学习系统提供了一种深度学习网络的替代方法,同时,如果网络需要扩展,BLS模型可以通过增量学习高效重建,避免了大规模耗时的网络训练。BLS从模型上来看,可以看做是随机向量函数链接神经网络的一个变种和推演算法。我们先来看看 RVFLNN模型

RVFLNN模型是 Yoh-Han Pao教授在1992年提出来的一个浅层网络模型,其基本思路就是将原始的输入数据做一个简单的映射之后,作为另一组输入,与原先的输入数据一起作为输入训练得到输出。BLS利用的也是这种浅层模型,将其变化成如下形式

BLS的基本结构就类似于Fig. 2 ,我们看出BLS为了保证训练速度,设计成了一个单层的网络,直接由输入层经过一个 矩阵映射到了输出层。当然BLS还用到了很多其他的概念,比如动态逐步更新算法、岭回归的伪逆求解、稀疏自编吗以及SVD分解等。这一章节我们先简单认识了一下BLS的网络结构,接下来我会逐个介绍上面BLS用到的上面几种方法,再介绍BLS的基本模型和增量模型。
伪逆是BLS用于求解网络权重 的方法,伪逆的岭回归求解模型形式如下
这里的 表示的是一种范数正则化,当 时,上式其实就是一个岭回归模型。BLS的网络参数 就是根据上式求解出来的。我们可以从岭回归得到下式
一个矩阵的二范数伪逆如下
这个公式就是我们后续需要用到的伪逆求解方法
动态逐步更新算法是一种用于函数链接神经网络增量更新网络权重的算法,BLS的网络更新主要用到的也是这一方法。我们先将Fig. 2中的 矩阵表示为 ,这里 是经过扩展后的输入矩阵。 表示一个 的矩阵,则当新的节点增加如下图

我们用 表示上述输入矩阵, 的伪逆可以计算如下
这里
新的权重 更新如下
除了上面两种方法,BLS里面还会用到稀疏自编码和SVD分解,这两个方法是大家熟知和广泛运用的,在BLS中稀疏自编码主要用于产生映射节点和特征节点时的权重更新,SVD用于网络模型的结构简化。这两部分对于BLS模型来说不是必须的,在与陈教授的交流中他提到使用稀疏自编码会使结果好一些,但我个人认为稀疏自编码的训练会使得BLS的训练速度下降,所以我在后面的python代码中并没有使用这一方法。SVD分解在BLS的中实际上是PCA方法应用,去除了一些无用的纬度信息。我有一篇博客专门介绍了SVD之类的矩阵分解方法,想要了解的话可以去看一下,在这里就不再赘述了
3.1 Broad Learning Model
我们不考虑增量,首先来了解一下BLS的基本模型。BLS的输入矩阵 是由两部分组成的:映射节点(mapped feature)和增强节点(enhenced feature),对于映射节点我们记为 ,它由原数据矩阵经过线性映射和激活函数变换得到

这里的 矩阵都是随机产生的,我们可以将 次映射变化得到的映射节点记为 。同样的,增强节点是由映射节点经过线性映射和激活函数变换得到的

因此,宽度学习的模型可以表示为如下线性形式

下图展示了BLS的两种形式,在论文中,陈教授证明了这两种形式本质上是相同的,之后的讲解都会以第一种形式为例进行讲解

对于一些情况,BLS直接训练后可能无法达到理想的性能,这时候就可以考虑增加增加节点的个数,比如,我们增加 个增强节点 ,分别记