DeepLearning | Broad Learning System 宽度学习系统 : 高效增量式浅层神经网络

article/2025/11/9 22:20:22

Broad Learning System (BLS,宽度学习系统)是澳门大学的陈俊龙教授在2017年TNNLS上基于随机向量函数链接神经网络(RVFLNN)和单层前馈神经网络(SLFN)提出的一种单层增量式神经网络。这个模型相比于传统的深层网络模型,它在保证一定精度的同时,具有快速、简洁,同时支持增量式的在线模型更新等比较好的性质。我在复现以后发现模型在一些数据集上的表现确实是不错的,在与陈教授做了关于一些模型细节讨论后,打算开这篇博客按照论文里的内容系统的介绍一下这个模型。在博客的最后会附上我写的 BLS模型 python 代码链接还有论文里公布的matlab代码链接,感兴趣的可以试一试效果

目录

  • 一、BLS简介 与 随机向量函数链接神经网络
    • 1.1 岭回归的伪逆算法
    • 1.2 函数链接神经网络的动态逐步更新算法
    • 1.3 稀疏自编码与SVD分解
  • 二、Broad Learning System
    • 2.1 Broad Learning Model
    • 2.2 BLS的增量形式:增强节点的增加
    • 2.3 BLS的增量形式:映射节点的增加
    • 2.4 BLS的增量形式:输入数据的增加
  • 三、实验结果
    • 3.1 Mnist数据集
    • 3.2 NORB 数据集
  • 四、代码链接
  • 五、更多资源下载

一、BLS简介 与 随机向量函数链接神经网络

深层结构神经网络在许多领域得到应用,并在大规模数据处理上取得了突破性的成功。目前,最受欢迎的深度网络是深度信任网络(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为了保证训练速度,设计成了一个单层的网络,直接由输入层经过一个 W W W 矩阵映射到了输出层。当然BLS还用到了很多其他的概念,比如动态逐步更新算法、岭回归的伪逆求解、稀疏自编吗以及SVD分解等。这一章节我们先简单认识了一下BLS的网络结构,接下来我会逐个介绍上面BLS用到的上面几种方法,再介绍BLS的基本模型和增量模型。
##二、相关方法

1.1 岭回归的伪逆算法

伪逆是BLS用于求解网络权重 W W W 的方法,伪逆的岭回归求解模型形式如下

a r g m i n W : ∣ ∣ A W − Y ∣ ∣ v σ 1 + λ ∣ ∣ W ∣ ∣ u σ 2 arg min_{W}: ||AW-Y||^{\sigma_{1}}_{v}+\lambda ||W||^{\sigma_{2}}_{u} argminW:AWYvσ1+λWuσ2

这里的 u , v u,v u,v 表示的是一种范数正则化,当 σ 1 = σ 2 = u = v = 2 \sigma_{1} = \sigma_{2} = u =v =2 σ1=σ2=u=v=2 时,上式其实就是一个岭回归模型。BLS的网络参数 W W W 就是根据上式求解出来的。我们可以从岭回归得到下式

W = ( λ I + A A T ) − 1 A T Y W = (\lambda I+AA^{T})^{-1}A^{T}Y W=(λI+AAT)1ATY

一个矩阵的二范数伪逆如下

A + = l i m λ − > 0 ( λ I + A A T ) − 1 A T A^{+} = lim_{\lambda -> 0}(\lambda I+AA^{T})^{-1}A^{T} A+=limλ>0(λI+AAT)1AT

这个公式就是我们后续需要用到的伪逆求解方法

1.2 函数链接神经网络的动态逐步更新算法

动态逐步更新算法是一种用于函数链接神经网络增量更新网络权重的算法,BLS的网络更新主要用到的也是这一方法。我们先将Fig. 2中的 A A A 矩阵表示为 [ X ∣ ξ ( X W h + β h ) ] [X|\xi(XW_{h}+\beta_{h}) ] [Xξ(XWh+βh)] ,这里 A A A 是经过扩展后的输入矩阵。 A n A_{n} An 表示一个 n x m nxm nxm 的矩阵,则当新的节点增加如下图
这里写图片描述
我们用 A n + 1 = [ A n ∣ a ] A_{n+1}=[A_{n}|a] An+1=[Ana] 表示上述输入矩阵, A n + 1 A_{n+1} An+1 的伪逆可以计算如下

[ A n + − d b T b T ] \begin{bmatrix}A^{+}_{n}-db^{T}\\ b^{T}\end{bmatrix} [An+dbTbT]

这里 d = A n + a d = A^{+}_{n}a d=An+a

b T = [ ( c ) + i f c ≠ 0 ( 1 + d T d ) − 1 d T A n + i f c = 0 ] b^{T}=\begin{bmatrix}(c)^{+} & if c\neq 0 \\ (1+d^{T}d)^{-1}d^{T}A^{+}_{n} & if c = 0\end{bmatrix} bT=[(c)+(1+dTd)1dTAn+ifc=0ifc=0]

c = a − A n d c = a-A_{n}d c=aAnd

新的权重 W W W 更新如下

W n + 1 = [ W n − d b T Y n b T Y n ] W_{n+1}=\begin{bmatrix}W_{n}-db^{T}Y_{n}\\ b^{T}Y_{n}\end{bmatrix} Wn+1=[WndbTYnbTYn]

1.3 稀疏自编码与SVD分解

除了上面两种方法,BLS里面还会用到稀疏自编码和SVD分解,这两个方法是大家熟知和广泛运用的,在BLS中稀疏自编码主要用于产生映射节点和特征节点时的权重更新,SVD用于网络模型的结构简化。这两部分对于BLS模型来说不是必须的,在与陈教授的交流中他提到使用稀疏自编码会使结果好一些,但我个人认为稀疏自编码的训练会使得BLS的训练速度下降,所以我在后面的python代码中并没有使用这一方法。SVD分解在BLS的中实际上是PCA方法应用,去除了一些无用的纬度信息。我有一篇博客专门介绍了SVD之类的矩阵分解方法,想要了解的话可以去看一下,在这里就不再赘述了

二、Broad Learning System

2.1 Broad Learning Model

我们不考虑增量,首先来了解一下BLS的基本模型。BLS的输入矩阵 A A A 是由两部分组成的:映射节点(mapped feature)和增强节点(enhenced feature),对于映射节点我们记为 Z Z Z,它由原数据矩阵经过线性映射和激活函数变换得到
这里写图片描述
这里的 W , β W,\beta W,β 矩阵都是随机产生的,我们可以将 n n n 次映射变化得到的映射节点记为 Z n = [ Z 1 , Z 2 , . . . , Z n ] Z^{n}=[Z_{1},Z_{2},...,Z_{n}] Zn=[Z1,Z2,...,Zn]。同样的,增强节点是由映射节点经过线性映射和激活函数变换得到的
这里写图片描述
因此,宽度学习的模型可以表示为如下线性形式
这里写图片描述
下图展示了BLS的两种形式,在论文中,陈教授证明了这两种形式本质上是相同的,之后的讲解都会以第一种形式为例进行讲解
这里写图片描述

2.2 BLS的增量形式:增强节点的增加

对于一些情况,BLS直接训练后可能无法达到理想的性能,这时候就可以考虑增加增加节点的个数,比如,我们增加 p p p 个增强节点 ,分别记 A m = [ Z n ∣ H m ] A^{m}= [Z^{n}|H^{m}] Am=[ZnHm] A m + 1 = [ A m ∣ ξ ( Z n W h m + 1 + β h m + 1 ) ] A^{m+1}=[A^{m}|\xi (Z^{n}W_{h_{m+1}}+\beta_{h_{m+1}})] Am+1=[Amξ(ZnWhm+1+βhm+1)],根据我们之前提到的动态逐步更新算法,我们可以有

( A m + 1 ) + = [ ( A m ) + − D B T B T ] (A^{m+1})^{+}=\begin{bmatrix}(A^{m})^{+}-DB^{T}\\ B^{T}\end{bmatrix} (Am+1)+=[(Am)+DBTBT]

这里 D = ( A m ) + ξ ( Z n W h m + 1 + β h m + 1 ) D = (A^{m})^{+}\xi(Z^{n}W_{h_{m+1}}+\beta_{h_{m+1}}) D=(Am)+ξ(ZnWhm+1+βhm+1)

B T = [ ( C ) + i f C ≠ 0 ( 1 + D T D ) − 1 D T A n + i f C = 0 ] B^{T}=\begin{bmatrix}(C)^{+} & if C\neq 0 \\ (1+D^{T}D)^{-1}D^{T}A^{+}_{n} & if C = 0\end{bmatrix} BT=[(C)+(1+DTD)1DTAn+ifC=0ifC=0]

C = ξ ( Z n W h m + 1 + β h m + 1 ) − A m D C = \xi (Z^{n}W_{h_{m+1}}+\beta_{h_{m+1}})-A^{m}D C=ξ(ZnWhm+1+βhm+1)AmD

新的权重 W W W 更新如下

W n + 1 = [ W n − D B T Y n B T Y n ] W^{n+1}=\begin{bmatrix}W^{n}-DB^{T}Y_{n}\\ B^{T}Y_{n}\end{bmatrix} Wn+1=[WnDBTYnBTYn]

根据上述 W W W 矩阵的更新迭代公式,我们可以得到BLS的增强节点增量算法
这里写图片描述

2.3 BLS的增量形式:映射节点的增加

映射节点的增加相比于增强节点的增加要略显复杂一点,首先我们记增加的映射节点为 Z n + 1 = ∅ ( X W e n + 1 + β e n + 1 ) Z_{n+1} = \varnothing(XW_{e_{n+1}}+\beta_{e_{n+1}}) Zn+1=(XWen+1+βen+1), 对应增加的增强节点不再使用之前的 W W W, 而是重新生成
这里写图片描述
这里写图片描述
这里的 H e x m H_{ex_{m}} Hexm是作为额外的节点增加到网络当中的,更新公式与上一小节的公式是相同的,这里不再重复,BLS的映射节点增量算法
这里写图片描述

2.4 BLS的增量形式:输入数据的增加

输入数据的增加是BLS最重要的增量形式,我们记新增加的样本为 X a X_{a} Xa , A n m A^{m}_{n} Anm 表示 n n n 组映射节点 m m m 组增强节点的初始输入矩阵,那么对应于增加的数据的输入矩阵可以表示为
这里写图片描述
上式中的参数用的是初始网络中产生的参数,因此,我们可以将更新后的输入矩阵表示为
这里写图片描述

这里写图片描述

关于更新公式,原文的公式编辑的好像有点问题,我重新推了一遍,应该是下面的形式
记输入的伪逆为
( x A n m ) − 1 = [ ( A n m ) + − B D T , B ] (^{x}A^{m}_{n})^{-1} = [(A^{m}_{n})^{+}-BD^{T},B] (xAnm)1=[(Anm)+BDT,B]
这里的 D T = A x T A n m + D^{T} = A_{x}^{T}A^{m+}_{n} DT=AxTAnm+
B = { ( C T ) + i f C ≠ 0 ( A n m ) + D ( I + D T D ) − 1 i f C = 0 B = \left\{\begin{matrix}(CT)^{+} & if C \neq 0 \\ (A^{m}_{n})^{+}D(I+D^{T}D)^{-1} & if C = 0 \end{matrix}\right. B={(CT)+(Anm)+D(I+DTD)1ifC=0ifC=0
同时, C = A x T − D T A n m C = A^{T}_{x}-D^{T}A^{m}_{n} C=AxTDTAnm
网络权重 W W W 的更新公式为
x W n m = W n m + B ( Y a T − A x T W n m ) ^{x}W^{m}_{n} = W^{m}_{n} + B(Y^{T}_{a}-A^{T}_{x}W^{m}_{n}) xWnm=Wnm+B(YaTAxTWnm)
基于更新公式,BLS输入增量的算法如下
这里写图片描述
到这里为止,其实BLS的基本模型包括增量部分就已经全部讲完了,在论文中还有一些关于PCA简化输入矩阵结构的内容,感兴趣的可以去论文中具体研究。

三、实验结果

这里展示一些论文中的实验结果

3.1 Mnist数据集

这里写图片描述
这里写图片描述

3.2 NORB 数据集

这里写图片描述这里写图片描述

四、代码链接

Matlab : http://www.fst.umac.mo/en/staff/pchen.html
python : https://github.com/LiangjunFeng/Broad-Learning-System
##参考文献
[1] Chen C, Liu Z. Broad Learning System: An Effective and Efficient Incremental Learning System Without the Need for Deep Architecture.[J]. IEEE Transactions on Neural Networks & Learning Systems, 2017, 29(1):10-24.
[2] Pao Y H, Park G H, Sobajic D J. Learning and generalization characteristics of the random vector functional-link net[J]. Neurocomputing, 1994, 6(2):163-180.
[3]Igelnik B, Pao Y H. Stochastic choice of basis functions in adaptive function approximation and the functional-link net[J]. IEEE Trans Neural Netw, 1995, 6(6):1320-1329.

五、更多资源下载

微信搜索“老和山算法指南”获取更多下载链接与技术交流群
在这里插入图片描述
有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。


http://chatgpt.dhexx.cn/article/f1A9C6F4.shtml

相关文章

宽度学习系统(BLS)的原理、变体形式及当前应用(随时更新......)

ABSTRACT 近年来深度学习迅猛在各个研究领域发展发展,新的模型结构不断涌现,且有层数逐渐加深的趋势。然而深度模型往往有数量过于庞大的待优化参数,通常需要耗费大量的时间和机器资源来进行优化,而且不能根据需求及输入的变化进行…

为什么要做深度学习而不是宽度学习?

点击此处返回总目录 前面在深度学习介绍的最后有留下一个疑问。我们为什么要deep learning。 我们说,变深了,参数增多,model变复杂,performance变好,是很正常的。 所以,真…

宽度学习学习笔记

宽度学习笔记 随机向量函数链接网络(RVFLNN)增强节点权值计算Greville 定理 宽度学习系统(Broad Learning System)数据处理简单BLS增强节点的增量学习特征节点的增量学习输入的增量学习SVD 参考论文: Broad Learning …

宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统

Motivation 深度学习: 1,时间长:由于涉及到大量的超参数和复杂的结构,大多数神经网络的训练过程非常耗时。 2,重新训练:如果要更改神经网络的结构,或者增加样本,深度学习系统将遇到一个完整的重新训练过程。 宽度学习: 1,消除了训练过程长的缺点,并且提供了很好的…

第三十七课.宽度学习

目录 前置内容宽度学习的基本结构:RVFLNN宽度学习系统岭回归 前置内容 深度学习计算量过大,成本过高,因此提出宽度学习(BLS,Broad Learning System)。我们首先要知道,BLS的网络结构不是固定的&…

宽度学习详解(Broad Learning System)

宽度学习(Broad Learning System) 1:Introduction1.1:级联相关网络(本节来自周志华《机器学习》)1.2:随机向量函数连接网络(RVFLNN) 2:宽度学习系统(Broad Learning Syst…

七、宽度学习系统Broad Learning System

七、宽度学习系统Broad Learning System 1、宽度学习的发展2、宽度学习系统(BLS)3、 BLS的增量形式1、宽度学习的发展 宽度学习系统(BLS) 的提出最早源于澳门大学科技学院院长陈俊龙和其学生于2018年1月发表在IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS,…

宽度学习(Broad Learning System)

一、宽度学习的前世今生 宽度学习系统(BLS) 一词的提出源于澳门大学科技学院院长陈俊龙和其学生于2018年1月发表在IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS,VOL. 29, NO. 1 的一篇文章,题目叫《Broad Learnin…

宽度学习(BLS)实战——python复刻MNIST数据集的数据预处理及训练过程

目录 1.宽度学习(Broad Learning System) 2.MNIST数据集 3.复刻MNIST数据集的预处理及训练过程 1.宽度学习(Broad Learning System) 对宽度学习的理解可见于这篇博客宽度学习(Broad Learning System)_颹蕭蕭的博客-CSDN博客_宽度学习 这里不再做详细…

《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)进展同步更新

本博实时更新《Linux设备驱动开发详解(第3版)》的最新进展。 目前已经完成稿件。 2015年8月9日,china-pub开始上线预售: http://product.china-pub.com/4733972 2015年8月20日,各路朋友报喜说已经拿到了书。 本书已经rebase到开发中的Linu…

linux_设备驱动_设备树

一.什么是DTS?为什么要引入DTS? DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。 在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/ma…

Linux设备驱动模型(一)

一、sysfs文件系统 sysfs是一个虚拟文件系统,将内核总的设备对象的链接关系,以文件目录的方式表示出来,并提对设备提供读写接口。 二、kobject kobject是内核中对象表示的基类,可以认为所有的内核对象都是一个kobject kobject单…

Linux设备驱动基础03:Linux字符设备驱动

1 Linux文件系统与设备驱动 1.1 文件系统与设备驱动之间的关系 Linux中文件系统与设备驱动程序之间的关系如下图所示, 应用程序和VFS之间的接口是系统调用;VFS和文件系统以及设备文件之间的接口是file_operations结构体中的成员函数,该结构体…

Linux 设备驱动程序(二)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序(一) Linux 设备驱动程序(二) Linux 设备驱动程序(三) Linux 设备驱动程序(四) Linux设备驱动开发详解 …

Linux驱动——字符设备驱动

目录 一、代码编译环境 二、Linux驱动开发分类 三、字符设备驱动开发流程 1.编译驱动模块代码(Makefile) 2.驱动模块的加载与卸载 四、字符设备驱动编写 1.驱动模块 2. 字符设备驱动编写步骤 2.1 设备号的注册与注销 2.2 设备节点的注册与注销 …

【Linux设备驱动】设备驱动分类

Linux设备驱动分类 驱动分为有操作系统设备驱动和误操作系统的设备驱动。 有无操作系统设备驱动 无操作系统设备驱动 不是所有的计算机系统都一定要有操作系统,在许多情况下,操作系统都是不必存在的。对于功能比较单一、控制不复杂的系统&#xff0c…

Linux-设备驱动概述

文章目录 Linux设备驱动概述1. 设备驱动的作用2. 无操作系统的设备驱动3. 有操作系统时的设备驱动4. Linux设备驱动4.1 设备的分类及特点4.2 Linux设备驱动与整个软硬件系统的关系4.3 Linux设备驱动的重难点 5. 源代码阅读6. 设备驱动:LED驱动6.1 无操作系统的LED驱…

Linux设备驱动和设备匹配过程

Linux设备驱动和设备匹配过程 1. 设备驱动匹配简述2. 重点结构体介绍2.1 struct device2.2 struct platform_device2.3 struct platform_driver2.4 struct device_driver 3. device端发起匹配:3.1 流程图3.2 start_kernel时候解析设备树3.2.1 start_kernel3.2.2 set…

Linux设备驱动之字符设备驱动

一、linux系统将设备分为3类:字符设备、块设备、网络设备。 应用程序调用的流程框图: 三种设备的定义分别如下, 字符设备:只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需…

Linux设备驱动基础01:Linux设备驱动概述

目录 1. 设备驱动的作用 2. 有无操作系统时的设备驱动 2.1 无操作系统 2.1.1 硬件、驱动和应用程序的关系 2.1.2 单任务软件典型架构 2.2 有操作系统 2.2.1 硬件、驱动、操作系统和应用软件的关系 3. Linux设备分类 3.1 常规分类法 3.1.1 字符设备 3.1.2 块设备 3.…