随机向量函数链神经网络(RVFLNN)简介——附测试代码
目录
- 随机向量函数链神经网络(RVFLNN)
- 结构分析
- 共轭梯度(Conjugate Gradient)训练
- 测试
随机向量函数链神经网络(RVFLNN)
函数链神经网络(Functional-link neural network,简称FLNN)的结构如下图。
和深度神经网络结构不同的是,FLNN相当于把隐层放到了输入层中,作为增强结点(Enhancement nodes)。也可以理解成FLNN在输入层就对输入向量进行了非线性变换。作为简洁的扁平网络结构,RVFLNN在监督学习时训练时更快,并且能够在已知有限训练次数内收敛于最优解。
结构分析
假设一个RVFLNN结构有NNN个原输入节点和JJJ个增强节点。
其中各个节点的权重为W=[β1,β2,⋯,βN,βN+1,⋯,βN+J]\mathbf{W}=[\beta_1,\beta_2,\cdots,\beta_N,\beta_{N+1},\cdots,\beta_{N+J}]W=[β1,β2,⋯,βN,βN+1,⋯,βN+J]。
原输入节点经过线性组合加上偏置项作为第iii个增强节点的输入值θi=AiXT+bi\theta_i=\mathbf{A_iX^\mathsf{T}}+b_iθi=AiXT+bi;Ai,bi\mathbf{A_i},b_iAi,bi是以随机方式生成,原则上需要避免激活后的值落在激活函数的饱和区间。
原输入节点和经过激活(非线性变换)的增强节点构成了输入层d=[δ1,δ2,⋯,δN,δN+1,⋯,δN+J]\mathbf{d}=[\delta_1,\delta_2,\cdots,\delta_N,\delta_{N+1},\cdots,\delta_{N+J}]d=[δ1,δ2,⋯,δN,δN+1,⋯,δN+J]。
在输出为一个标量时,o=WdTo=\mathbf{Wd^\mathsf{T}}o=WdT。(输出为多个标量时同理)
共轭梯度(Conjugate Gradient)训练
训练过程可以定义为让误差最小化:E=12P∑p=1P(tp−WdTp)2E=\frac{1}{2P}\sum_{p=1}^P (t_p-\mathbf{W}\mathbf{d^\mathsf{T}}_p)^2E=2P1p=1∑P(tp−WdTp)2其中ppp是训练样本编号,tpt_ptp是第ppp个训练样本目标值。
将多个训练样本写成矩阵形式,目标值向量t=[t1,t2,⋯,tP]\mathbf{t}=[t_1,t_2,\cdots,t_P]t=[t1,t2,⋯,tP],输入向量组成了输入矩阵D=[d1,d2,⋯,dP]\mathbf{D}=[\mathbf{d}_1,\mathbf{d}_2,\cdots,\mathbf{d}_P]D=[d1,d2,⋯,dP],上述式子也可以写成E=12P(t−WDT)(t−WDT)TE=\frac{1}{2P}(\mathbf{t}-\mathbf{WD^\mathsf{T}})(\mathbf{t}-\mathbf{WD^\mathsf{T}})^\mathsf{T}E=2P1(t−WDT)(t−WDT)T。
通过求导得到
r=∂E∂W=−1p(t−WD)DT\mathbf{r}=\frac{\partial E}{\partial \mathbf{W}}=-\frac{1}{p}(\mathbf{t}-\mathbf{WD})\mathbf{D}^\mathsf{T}r=∂W∂E=−p1(t−WD)DT
求解最优解可以使用共轭梯度法避免Zig-Zag问题带来的时间浪费:
Wλ+1=Wλ+ηsλsλ=−rλ+∣∣rλ∣∣2∣∣rλ−1∣∣2sλ−1\mathbf{W}_{\lambda+1}=\mathbf{W}_{\lambda}+\eta \mathbf{s}_\lambda\\\mathbf{s}_\lambda=-\mathbf{r}_\lambda+\frac{||\mathbf{r}_\lambda||^2}{||\mathbf{r}_{\lambda-1}||^2}\mathbf{s}_{\lambda-1}Wλ+1=Wλ+ηsλsλ=−rλ+∣∣rλ−1∣∣2∣∣rλ∣∣2sλ−1其中s0=r0\mathbf{s}_0=\mathbf{r}_0s0=r0。
当λ=K≤N+J\lambda=K\leq N+Jλ=K≤N+J时,可以得到最优权重矩阵W\mathbf{W}W。
测试
对正弦函数y=sin(x)y=\sin(x)y=sin(x)随机采样
def sin_generation(size=10):X = np.random.uniform(low=-6.28,high=6.28,size=size)Y = np.sin(X)return X,Y
训练结果:
Enhancement Nodes = 300
Epoch=12300
MAError=0.09811056069650284
Time=0:00:00.434139 (用笔记本的CPU训练的,确实很快)
代码:
https://github.com/t170815518/BroadLearningSystemFrame/tree/master/RVFLNN
参考资料
Learning and generalization characteristics of the random vector Functional-link net (1994), Yoh-Han Pao, Gwang-HoonPark and Dejan J. Sobajic
随机向量函数链神经网络(RVFLNN)简介——附测试代码相关推荐
- 【Python】python初学者应该知道与其他语言差异化的高效编程技巧(附测试代码+详细注释)
目录 1. 交换变量 2. 集合去重 3. 列表推导.集合推导和字典推导 4. 统计字符串中各个字符出现的次数 5.优雅地打印JSON数据 6.行内的if语句 6. 符合正常逻辑的数值比较 7. 田忌 ...
- 三种方式获取大疆照片的EXIF/XMP信息(附测试代码)
目录 软件方式 在线方式 Python方式 第一种:pyexiv2 第二种:pyexif 测试代码:三种方式获取大疆照片的EXIF/XMP信息(附测试代码) - 小锋学长生活大爆炸 (xfxuezha ...
- 沃拼图游戏软件测试,超完整的手机拼图游戏附测试代码本科毕业论文.doc
超完整的手机拼图游戏附测试代码本科毕业论文 本 科 毕 业 设 计 设 计 题 目 基于J2ME手机拼图游戏的关键技术研究与实现 姓名(学号) 系 别 专 业 通信工程 导 师 姓 名 二○一二 年 ...
- 【BP分类】基于鸟群算法优化BP神经网络实现数据分类附matlab代码
1 简介 BSA 算法优化 BP 神经网络的基本思想是: 利 用 BSA 算法的全局搜索能力, 优化 BP 神经网络初始的权值和阈值, 也就是决策变量, 其中每一组决策变量均包含在鸟群个体所处的空间 ...
- 机器学习随机森林实战:声纳信号分类(附python代码保姆级解析)
随机森林是一种很常用的机器学习算法,"随机"表示每棵树的训练样本随机以及训练时的特征随机. 训练形成的多棵决策树形成了"森林",计算时我们把每棵 ...
- Windows/Linux TCP Socket网络编程简介及测试代码
典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字(socket)读出和写入数据在彼此 ...
- FFmpeg中libswresample库简介及测试代码
libswresample库功能主要包括高度优化的音频重采样.rematrixing和样本格式转换操作. 以下是测试代码(test_ffmpeg_libswresample.cpp),对音频了解较少, ...
- FFmpeg中libswscale库简介及测试代码
libswscale库功能主要包括高度优化的图像缩放.颜色空间和像素格式转换操作. 以下是测试代码(test_ffmpeg_libswscale.cpp): #include "funset ...
- FFmpeg中libavutil库简介及测试代码
libavutil是一个实用库,用于辅助多媒体编程.此库包含安全的可移植字符串函数.随机数生成器.数据结构.附加数学函数.加密和多媒体相关功能(如像素和样本格式的枚举).libavcodec和liba ...
- Go语学习笔记 - websocket gorilla(附测试代码) | 从零开始Go语言
目录 项目结构 消息结构 服务端代码 定义客户端行为 服务启动 测试代码 总结 学习笔记,写到哪是哪. websocket也是常用的协议了,在上一篇中主要测试使用了一下grpc. 下面我会把代码贴出来 ...
最新文章
- hdu2371 矩阵乘法(求序列位置改变m次后的序列)
- 点(Dot)与像素(Pixel)的区别
- Java 13,最新最全新特性解读
- Python 程序 可以一直输入 quit_从零开始学Python - 第002课:第一个Python程序
- mysqldump备份数据不锁表的加参数方法及原理分析
- 【海报设计灵感】潮翻天的波普艺术海报设计
- eclipse上新建Maven项目报错及解决
- linux下查看文件inode,Linux下如何寻找相同文件?
- 安卓rom制作教程_【教程】一加5/5T刷入第三方ROM教程
- jabber服务器_最近JavaScript Jabber播客-Microsoft(而非Microsoft)和Web
- 两个音轨合并_技能!如何合并两个音频文件?
- Wavefront公司的.obj文件格式及.mtl文件格式
- Oracle基础包之DBMS_RLS(八)
- EFR32 xG1x的bootloader被擦除
- Linux下安装RTX腾讯通
- 英文歌曲初恋《heartbeats》 心跳
- 《javascript语言精粹》读书笔记——函数
- 现在的年轻人怎么了?
- 云网融合个人浅析(二)
- 什么是嵌入式编程?如何入门和提高?