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为了保证训练速度,设计成了一个单层的网络,直接由输入层经过一个 WWW 矩阵映射到了输出层。当然BLS还用到了很多其他的概念,比如动态逐步更新算法、岭回归的伪逆求解、稀疏自编吗以及SVD分解等。这一章节我们先简单认识了一下BLS的网络结构,接下来我会逐个介绍上面BLS用到的上面几种方法,再介绍BLS的基本模型和增量模型。
##二、相关方法

1.1 岭回归的伪逆算法

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

argminW:∣∣AW−Y∣∣vσ1+λ∣∣W∣∣uσ2arg min_{W}: ||AW-Y||^{\sigma_{1}}_{v}+\lambda ||W||^{\sigma_{2}}_{u}argminW​:∣∣AW−Y∣∣vσ1​​+λ∣∣W∣∣uσ2​​

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

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

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

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

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

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

动态逐步更新算法是一种用于函数链接神经网络增量更新网络权重的算法,BLS的网络更新主要用到的也是这一方法。我们先将Fig. 2中的 AAA 矩阵表示为 [X∣ξ(XWh+βh)][X|\xi(XW_{h}+\beta_{h}) ][X∣ξ(XWh​+βh​)] ,这里 AAA 是经过扩展后的输入矩阵。 AnA_{n}An​ 表示一个 nxmnxmnxm 的矩阵,则当新的节点增加如下图

我们用 An+1=[An∣a]A_{n+1}=[A_{n}|a]An+1​=[An​∣a] 表示上述输入矩阵,An+1A_{n+1}An+1​ 的伪逆可以计算如下

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

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

bT=[(c)+ifc≠0(1+dTd)−1dTAn+ifc=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−Andc = a-A_{n}dc=a−An​d

新的权重 WWW 更新如下

Wn+1=[Wn−dbTYnbTYn]W_{n+1}=\begin{bmatrix}W_{n}-db^{T}Y_{n}\\ b^{T}Y_{n}\end{bmatrix}Wn+1​=[Wn​−dbTYn​bTYn​​]

1.3 稀疏自编码与SVD分解

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

二、Broad Learning System

2.1 Broad Learning Model

我们不考虑增量,首先来了解一下BLS的基本模型。BLS的输入矩阵 AAA 是由两部分组成的:映射节点(mapped feature)和增强节点(enhenced feature),对于映射节点我们记为 ZZZ,它由原数据矩阵经过线性映射和激活函数变换得到

这里的 W,βW,\betaW,β 矩阵都是随机产生的,我们可以将 nnn 次映射变化得到的映射节点记为 Zn=[Z1,Z2,...,Zn]Z^{n}=[Z_{1},Z_{2},...,Z_{n}]Zn=[Z1​,Z2​,...,Zn​]。同样的,增强节点是由映射节点经过线性映射和激活函数变换得到的

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

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

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

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

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

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

BT=[(C)+ifC≠0(1+DTD)−1DTAn+ifC=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=ξ(ZnWhm+1+βhm+1)−AmDC = \xi (Z^{n}W_{h_{m+1}}+\beta_{h_{m+1}})-A^{m}DC=ξ(ZnWhm+1​​+βhm+1​​)−AmD

新的权重 WWW 更新如下

Wn+1=[Wn−DBTYnBTYn]W^{n+1}=\begin{bmatrix}W^{n}-DB^{T}Y_{n}\\ B^{T}Y_{n}\end{bmatrix}Wn+1=[Wn−DBTYn​BTYn​​]

根据上述 WWW 矩阵的更新迭代公式,我们可以得到BLS的增强节点增量算法

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

映射节点的增加相比于增强节点的增加要略显复杂一点,首先我们记增加的映射节点为 Zn+1=∅(XWen+1+βen+1)Z_{n+1} = \varnothing(XW_{e_{n+1}}+\beta_{e_{n+1}})Zn+1​=∅(XWen+1​​+βen+1​​), 对应增加的增强节点不再使用之前的 WWW, 而是重新生成


这里的 HexmH_{ex_{m}}Hexm​​是作为额外的节点增加到网络当中的,更新公式与上一小节的公式是相同的,这里不再重复,BLS的映射节点增量算法

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

输入数据的增加是BLS最重要的增量形式,我们记新增加的样本为 XaX_{a}Xa​ , AnmA^{m}_{n}Anm​ 表示 nnn 组映射节点 mmm 组增强节点的初始输入矩阵,那么对应于增加的数据的输入矩阵可以表示为

上式中的参数用的是初始网络中产生的参数,因此,我们可以将更新后的输入矩阵表示为

关于更新公式,原文的公式编辑的好像有点问题,我重新推了一遍,应该是下面的形式
记输入的伪逆为
(xAnm)−1=[(Anm)+−BDT,B](^{x}A^{m}_{n})^{-1} = [(A^{m}_{n})^{+}-BD^{T},B](xAnm​)−1=[(Anm​)+−BDT,B]
这里的 DT=AxTAnm+D^{T} = A_{x}^{T}A^{m+}_{n}DT=AxT​Anm+​
B={(CT)+ifC≠0(Anm)+D(I+DTD)−1ifC=0B = \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)−1​ifC​=0ifC=0​
同时, C=AxT−DTAnmC = A^{T}_{x}-D^{T}A^{m}_{n}C=AxT​−DTAnm​
网络权重 WWW 的更新公式为
xWnm=Wnm+B(YaT−AxTWnm)^{x}W^{m}_{n} = W^{m}_{n} + B(Y^{T}_{a}-A^{T}_{x}W^{m}_{n})xWnm​=Wnm​+B(YaT​−AxT​Wnm​)
基于更新公式,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.

五、更多资源下载

微信搜索“老和山算法指南”获取更多下载链接与技术交流群

有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。

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

  1. 深度学习笔记(4) 浅层神经网络

    深度学习笔记(4) 浅层神经网络 1. 神经网络概述 2. 激活函数 3. 激活函数的导数 4. 神经网络的梯度下降 5. 随机初始化 1. 神经网络概述 神经网络看起来是如下: 有输入特征x1.x2 ...

  2. 吴恩达深度学习笔记(二)——浅层神经网络

    一.选择激活函数的经验法则 课后题:tanh激活函数通常比隐藏层单元的sigmoid激活函数效果更好,因为其输出的平均值更接近于零,因此它将数据集中在下一层是更好的选择,使得下一层的学习变得更加简单. ...

  3. 基于图正则化的贝叶斯宽度学习系统

    摘要 作为一种前馈神经网络,宽度学习系统因其精度高.训练速度快且能有效代替深度学习方法而备受研究者的关注.然而,宽度学习系统存在对网络中的特征节点个数比较敏感且求伪逆方式易使模型出现过拟合等问题.为此 ...

  4. 吴恩达《神经网络与深度学习》精炼笔记(4)-- 浅层神经网络

    上节课我们主要介绍了向量化.矩阵计算的方法和python编程的相关技巧.并以逻辑回归为例,将其算法流程包括梯度下降转换为向量化的形式,从而大大提高了程序运算速度.本节课我们将从浅层神经网络入手,开始真 ...

  5. Coursera吴恩达《神经网络与深度学习》课程笔记(4)-- 浅层神经网络

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了向量化.矩阵计算的方法和python编程的相关技巧.并以逻辑回归为例,将其算法流程包括梯度下降转换为向量化的形式,从而大大提高 ...

  6. 温州大学《深度学习》课程课件(四、浅层神经网络)

    这学期我上的另一门课是本科生的<深度学习>,主要用的是吴恩达老师的<深度学习>视频课的内容. 本章内容见"授课计划"的标红部分 使用教材:吴恩达<深度 ...

  7. 温州大学《深度学习》课程课件(三、浅层神经网络)

    这学期我上的另一门课是本科生的<深度学习>,主要用的是吴恩达老师的<深度学习>视频课的内容. 使用教材:吴恩达<深度学习>课程笔记 课外参考书:<深度学习&g ...

  8. 1.3)深度学习笔记------浅层神经网络

    目录 1)Neural Network Overview 2)Neural Network Representation 3)Computing a Neural Network's Output(重 ...

  9. 01.神经网络和深度学习 W3.浅层神经网络

    文章目录 1. 神经网络概览 2. 神经网络的表示 3. 神经网络的输出 4. 多样本向量化 5. 激活函数 6. 为什么需要 非线性激活函数 7. 激活函数的导数 8. 随机初始化 作业 参考: 吴 ...

  10. 深度学习入门笔记(六):浅层神经网络

    专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分 ...

最新文章

  1. Ubuntu 14.04上安装WineTMQQ2013麒麟版
  2. 三篇ISME讨论‘1%的微生物可培养’
  3. Linux环境高级编程函数,Linux环境高级编程--出错处理(CLStatus)
  4. UE4学习-新建C++组件、编码遇到问题
  5. matlab eval 不显示,matlab中 eval(command); 运算符无效的问题
  6. 关于无法加载已创建的布局文件的问题的解决方案以及已布局在对应的R文件中未生成相应ID的问题的解决
  7. nova8pro能升级鸿蒙吗,华为将有48款产品可以升级到鸿蒙 2.0系统
  8. 【英语学习】【WOTD】 putsch 释义/词源/示例
  9. 电子商务概论_走进经管优质线上课堂(二)之电子商务概论
  10. Python获取文件夹下的所有文件名
  11. 第二周作业求最大值和最小下标
  12. 按钮灭了_劣质灭火器整瓶都灭不掉一盆火 教你几招辨别消防产品真假
  13. 将梯度下降运用到线性回归
  14. Eplan 各版本 软件 百度网盘 永久链接
  15. PLSQL Developer 64位 安装方法
  16. 移动加权平均法下成本核算的会计处理
  17. 神经网络计算棒怎么用,英特尔神经计算棒拆解
  18. Python数据获取——图片数据提取
  19. 深耕教学 常研常新——海门市高二历史教研活动掠影
  20. Qt之动态属性unpolish()和polish()

热门文章

  1. excel怎么启用宏_利用Excel连接Power BI,实现PPT报告自动输出
  2. 雷蛇鼠标垫真假区分_您真的需要鼠标垫吗?
  3. STM32F103实现CMSIS-DAP
  4. 无线条码仓库管理系统
  5. 工业条形码扫描枪:如何为您的应用选择合适的扫描枪
  6. linux 添加udp端口映射,iptables下udp端口转发
  7. 【JVM】JVM基础
  8. 解决mac系统压缩文件.zip,在win解压后,出现乱码
  9. Node.js中zlib模块的压缩/解压详解
  10. Excel 数据随机分组