宽度学习(Broad Learning System)

article/2025/11/9 22:50:10

在这里插入图片描述

一、宽度学习的前世今生

宽度学习系统(BLS) 一词的提出源于澳门大学科技学院院长陈俊龙和其学生于2018年1月发表在IEEE TRANSACTIONS ON NEURAL NETWORKS AND LEARNING SYSTEMS,VOL. 29, NO. 1 的一篇文章,题目叫《Broad Learning System: An Effective and Efficient Incremental Learning System Without the Need for Deep Architecture 》。文章的主旨十分明显,就是提出了一种可以和深度学习媲美的宽度学习框架。

为什么要提出宽度学习? 众所周知,深度学习中最让人头疼之处在于其数量庞大的待优化参数,通常需要耗费大量的时间和机器资源来进行优化。

宽度学习的前身实际上是已经被人们研究了很久的随机向量函数链神经网络 random vector functional-link neural network (RVFLNN),如图所示:
在这里插入图片描述
咋一看这网络结构没有什么奇特之处,其实也对,就是在单层前馈网络(SLFN)中增加了从输入层到输出层的直接连接。网络的第一层也叫输入层,第二层改名了,叫做增强层,第三层是输出层。具体来看,网络中有三种连接,分别是

  • (输入层 => 增强层)加权后有非线性变换
  • (增强层 => 输出层)只有线性变换
  • (输入层 => 输出层)只有线性变换

所以在RVFLNN中只有增强层 是真正意义上的神经网络单元,因为只有它带了激活函数,网络的其他部分均是线性的。下面我们将这个网络结构扭一扭:
在这里插入图片描述
当我们把增强层和输入层排成一行时,将它们视为一体,那网络就成了由 A(输入层+增强层)到 Y 的线性变换了!线性变换对应的权重矩阵 W 就是 输入层加增强层输出层 之间的线性连接!!

这时你可能要问:那输入层到增强层之间的连接怎么处理/优化?我们的回答是:不管它!!! 我们给这些连接随机初始化,固定不变!

如果我们固定输入层到增强层之间的权重,那么对整个网络的训练就是求出 A 到 Y 之间的变换 W,而 W 的确定非常简单: W = A − 1 Y W = A^{-1}Y W=A1Y
输入 X 已知,就可以求出增强层 A;训练数据的标签已知,就知道了 Y。接下来的学习就是一步到位的事情了。

为什么可以这样做?
深度学习费了老劲把网络层数一加再加,就是为了增加模型的复杂度,能更好地逼近我们希望学习到的非线性函数,但是不是非线性层数越多越好呢?理论早就证明单层前馈网络(SLFN)已经可以作为函数近似器了,可见增加层数并不是必要的。RVFLNN也被证明可以用来逼近紧集上的任何连续函数,其非线性近似能力就体现在增强层的非线性激活函数上,只要增强层单元数量足够多,要多非线性有多非线性!

二、宽度学习系统(BLS)

在这里插入图片描述
之前介绍的是RVFLNN,现在来看BLS,它对输入层做了一点改进,就是不直接用原始数据作为输入层,而是先对数据做了一些变换,相当于特征提取,将变化后的特征作为原RVFLNN的输入层,这样做的意义不是很大,只不过想告诉你:宽度学习可以利用别的模型提取到的特征来训练,即可以可别的机器学习算法组装。现在我们不把第一层叫做输入层,而是叫它特征层

当给定了特征 Z,直接计算增强层 H,将特征层和增强层合并成 A=[Z|H],竖线表示合并成一行。由于训练数据的标签 Y 已知,计算权重 W = A − 1 Y W = A^{-1}Y W=A1Y 即可。实际计算时,使用岭回归 来求解权值矩阵,即通过下面的优化问题来解W(其中 σ 1 = σ 2 = v = u = 2 \sigma_1=\sigma_2=v=u=2 σ1=σ2=v=u=2):
在这里插入图片描述
解得
在这里插入图片描述
以上过程是一步到位,即当数据固定,模型结构固定,可以直接找到最优的参数 W

然而在大数据时代,数据固定是不可能的,数据会源源不断地来。模型固定也是不现实的,因为时不时需要调整数据的维数,比如增加新的特征。这样一来,就有了针对以上网络的增量学习算法。注意,宽度学习的核心在其增量学习算法,因为当数据量上亿时,相当于矩阵 ZX 有上亿行,每次更新权重都对一个上一行的矩阵求伪逆 是不现实的!

增量学习的核心就是,利用上一次的计算结果,和新加入的数据,只需少量计算就能得进而得到更新的权重。
在这里插入图片描述
例如:当我们发现初始设计的模型拟合能力不够,需要增加增强节点数量来减小损失函数。这时,我们给矩阵 A 增加一列 a,表示新增的增强节点,得到[A|a],这时要计算新的权值矩阵,就需要求 [ A ∣ a ] − 1 [A|a]^{-1} [Aa]1,于是问题就转化成分块矩阵的广义逆问题,得到了 [ A ∣ a ] − 1 [A|a]^{-1} [Aa]1,则更新的权重为 W n e w = [ A ∣ a ] − 1 Y W_{new} = [A|a]^{-1}Y Wnew=[Aa]1Y,具体解形式如下,可以看到, W n + 1 W_{n+1} Wn+1中用到了更新之前的权值矩阵 W n W_{n} Wn,因而有效地减少了更新权重的计算量。
在这里插入图片描述
第一次计算权值是用的是 岭回归 算法,因为有迭代过程,可能计算时间稍长。但是第二次、三次……计算时都只涉及矩阵的乘法,所以权值矩阵的更新是非常迅速。相比深度学习的反复训练,时常陷入局部最优无法自拔,宽度学习的优势非常明显。

在这里插入图片描述


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

相关文章

宽度学习(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.…

Linux设备驱动模型

目录 一、linux设备驱动模型简介1、什么是设备驱动模型2、为什么需要设备驱动模型3、驱动开发的2个点 二、设备驱动模型的底层架构1、kobject2、kobj_type3、kset 三、总线式设备驱动组织方式1、总线2、设备3、驱动4、类5、总结 四、platform平台总线工作原理1、何为平台总线2、…

【linux内核分析与应用-陈莉君】字符设备驱动

目录 1.什么是字符设备 2.如何来描述字符设备 3 struct cdev与const struct file_operations之间的关系 4.struct file_operations源码 5.字符设备驱动框架 6.编写字符设备驱动的步骤 7.字符设备结构 8.字符设备驱动程序的注册 9.从系统调用到驱动程序 10.用户空间与内…

微信小程序云数据库使用讲解

第一步:注册开通 单击云开发 第二步:创建数据库 选择数据库,并点击号创建一个集合 输入名字 创建完毕后点击添加记录即可添加数据 数据库获取: 查询: 查询指令:

微信小程序云开发入门-数据库插入数据(包含批量)

一、前言 文章将介绍如何在微信小程序云开发中向云开发数据库插入数据(单条或批量)。 写法有好几种,文章将会一一进行对比,看看每种写法之间有何优缺点,如何让代码看起来更优雅。 为了更加贴合实际的开发逻辑&#xf…

【微信小程序】如何获取微信小程序云开发数据库的数据并渲染到页面?

前言 上一篇博客我把微信小程序云开发数据库操作(增删改查)的实现方法都已经分享出来啦,可以戳链接进去阅读哦 【微信小程序】小程序云开发实现数据库增删改查(小白速度Get起来!!一步步教你如何实现) 基于微信小程序…

开发一个可以查询并显示数据库内容的微信小程序

使用微信开发者工具可以创建云数据库,并通过代码可以查询并在客户端显示数据库的内容。 附:小程序一个功能页面有wxml(客户端呈现),js(功能函数),json,wxss(个性化处理),这些是局部的文件。还有全局的文件如…

微信小程序开发---连接云开发数据库,实现数据获取

之前几篇博客里面都详细交代了如何配置云函数,现在就讲一下关于云函数中数据库的使用,主要是讲如何从云开发平台的数据库中调取数据 我们直接来到需要调用数据库数据的页面的js文件,直接设置全局变量,来便于后续调用数据库 const …

微信小程序查询数据库

微信小程序云开发的官方例子: const db wx.cloud.database() //获取数据库的引用 const _ db.command //获取数据库查询及更新指令 db.collection("china") //获取集合china的引用.where({ //查询的条件指令wheregdp: _.gt(3000) …