回声状态网络(ESN)基础教程
http://jlearning.cn/2017/05/29/ESN-basic-tutorial/
最近在看回声状态网络(Echo State Network)的内容,注意到中文搜索引擎搜不到关于有关Echo State Network通俗的讲解,打算写一下关于ESN的一个基本教程。本文先用一小段简单介绍ESN是什么,然后用公式来表示这种网络,并说明他的优缺点,最后用一个可执行的简单例子来演示一下ESN的效果。
由于本人能力有限,如在阅读过程中有任何疑问或者发现错误请在评论中指出。
ESN是RNN的一种,也是由输入层,隐藏层,输出层组成,并且在隐藏层到隐藏层之间有一个连接,用来保留前面时刻留下的信息。不同于RNN,ESN的输入层到隐藏层、隐藏层到隐藏层的连接权值是随机初始化,并且固定不变。在训练的过程中,我们只需要去训练隐藏层到输出层的连接权值。这就变成了一个线性回归问题,所以ESN训练起来非常快。

ESN的神经网络如图所示,储备池就是常规神经网络中的隐藏层。输入层到储备池的连接为Win,储备池到下一个时刻储备池状态的连接为W,储备池到输出层的连接为Wout。另外还有一个前一时刻的输出层到下一个时刻的储备池的连接Wback,这个连接不是必须的(图中用虚线表示),由于这是一个入门级的基础教程,所以在后面的公式和例子代码中都不会涉及这一个连接。
图中所示,tt时刻的输入为u(t)u(t),一共K个节点,储备池状态为x(t)x(t),N个节点,输出为y(t)y(t),L个节点。
每一个时刻输入u(t)u(t),储备池都会更新状态,储备池的状态更新方式为:
这个式子里,WinWin和WW都是在最初建立网络的时候随机初始化的,并且固定不变。u(t+1)u(t+1)是这个时刻的输入,x(t)x(t)是上一个时刻的储备池状态,在t=0时刻可以用0初始化。ff是一个激活函数,通常使用tanhtanh。
在建模的时候,和一般的神经网络一样,会在连接矩阵上加上一个偏置量,所以输入的uu是一个长度为1+K的向量,WinWin是一个[1+k,N]的矩阵,xx是一个长度为N的向量,WW是一个[N,N]的矩阵。
回声状态网络的输出方式为:
有了储备池状态,再确定了ESN的输出方式之后,就可以根据目标输出ytargetytarget来确定WoutWout来让y(t)y(t)和ytarget(t)ytarget(t)的差距尽可能的小。这是一个简单的线性回归问题,计算的方法有很多种,不再赘述。

到这里,我们就完成了ESN的训练工作。整个网络只需要训练WoutWout,所以它的训练过程非常快,这是ESN的优点之一。另外,对于一维时序数列的处理和预测,ESN有很好的优势。但对于高维的时序数列,比如说视频帧处理,ESN就不太能胜任了。
为了让这个网络能够正常的运转,还有一些地方是需要注意的:
- 之所以叫回声状态网络,是因为前面时刻输入的信息会通过WW回回荡在储备池中,就像回声一样。为了避免储备池状态爆炸,WW的特征值必须要小于等于1。这也就引入了ESN中
谱半径的概念:WW的最大特征值。 - 由于网络中只有WoutWout是可变的,为了尽可能多的表示不同的数据规律,WW必须要设置的非常大,才能从中找出各种不同的特征进行输出。另一方面,WW的稀疏性也很重要,Hinton在多伦多大学的公开课里解释是:
建立一个松散的连接,这样某一信息可以在网络中的一小部分回荡,而不会迅速的传播到其他部分。
我不是特别的理解。希望有人解释一下。
最后引用一个例子来彻底理解最基本的ESN。
在页面中下载python源码和数据集,在python2.7环境中运行。
数据就是一维的,代码中每次输入长度为1,预测数据中后一位的值,当然长度也是1。
回声状态网络(ESN)基础教程的更多相关文章
- 回声状态网络ESN(Echo State Networks)
1.1 网络结构 ESN通过随机地部署大规模系数链接的神经元构成网络隐层,一般称为"储备池".ESN网络具有的特点如下: (1)包含数目相对较多的神经元: (2)神经元之间的连接关 ...
- Alamofire网络库基础教程
原文 Beginning Alamofire Tutorial 原文作者 Essan Parto译者 星夜暮晨(QQ:412027805) http://www.jianshu.com/p/f1208 ...
- Alamofire网络库进阶教程
本章节由CocoaChina翻译组成员星夜暮晨(博客)翻译自raywenderlich:Intermediate Alamofire Tutorial,敬请勘误. 欢迎回到我们的 Alamofire ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- 【RL-TCPnet网络教程】第2章 嵌入式网络协议栈基础知识
第2章 嵌入式网络协议栈基础知识 本章教程为大家介绍嵌入式网络协议栈基础知识,本章先让大家有一个全面的认识,后面章节中会为大家逐一讲解用到的协议. 基础知识整理自百度百科,wiki百科等 ...
- Python 基础教程 —— 网络爬虫入门篇
前言 Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言,它由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年.自面世以后,Pytho ...
- (转)Windows驱动编程基础教程
版权声明 本书是免费电子书. 作者保留一切权利.但在保证本书完整性(包括版权声明.前言.正文内容.后记.以及作者的信息),并不增删.改变其中任何文字内容的前提下,欢迎任何读者 以任何形式(包括 ...
- HTML入门基础教程相关知识
HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...
- React-Native基础教程
React-Native牛刀小试仿京东砍啊砍砍到你手软 React-Native基础教程 *React-Native基础篇作者git *React-Native官方文档 *Demo 几个月前faceb ...
随机推荐
- js日常
JS中变量后面有个问号是什么意思? return n?n*arguments.callee(n-1):1;JS中变量后面有个问号是什么意思?然后 后面一个:1又是什么意思? 问号与冒号要连在一 ...
- 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker
Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...
- 【PyQt5-Qt Designer】PyQt5+pyecharts 实现GUI界面的数据可视化展示
先用纯Python代码写一个简单的小案例: from PyQt5.QtCore import QUrl from PyQt5.QtWidgets import QApplication,QWidget ...
- expect 自动完成交互式程序神器
expect 安装 yum -y install expect # Centossudo apt-get install expect # Ubuntu 作用:自动填写交互式程序的值. 原理:通过读取 ...
- linux 内核启动流程分析,移植
分析 linux-2.6.22.6 内核启动流程 移植 linux-3.4.2 到 JZ2440 开发板 Linux内核源码百度云链接: https://pan.baidu.com/s/1m1ymGl ...
- linux网络设置和虚拟机克隆转移之后网卡找不到
linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决 ...
- svn 部署 配置
创建目录并配置 建立版本库目录 创建一个项目名叫wy 在/data/svndata/wy mkdir -p /data/svndata/wy 建立项目版本库 创建一个新的Subversion项目wy, ...
- python安装提示错误Could not find a version that satisfies the requirement dateutil
今天ytkah在安装python3组件时提示如下错误,这个是缺少依赖的问题,就试着用pip3 install dateutil,但还是提示同样的错误,怎么处理呢? Could not find a v ...
- centos 安装 pcre
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/37054235 #rpm -qa | ...
- 20180426 Linq to excel
PM> Install-Package LinqToExcel 引用好像可以直接把excel 导入得到实体对象, var excelfile = new ExcelQueryFactory(& ...