回声状态网络(ESN)教程

回声状态网络(ESN)教程回声状态网络 ESN 教程基础概念回声状态网络 EchoStateNet 提出于 2001 年 曾经是研究的热点 但近年来随着 RNN LSTM 与其它一些变种的网络的出现 现在研究比较少了 但是其在时间序列预测上还有着很不错的应用 传统的 MLP 网络的隐层是一层层的全连接的神经元 而 ESN 引入了一个储备池计算模式来替代原始的隐层 这个储备池是什么呢 先来看下下图 网络结构依

回声状态网络(ESN)教程

基础概念

网络结构依次是输入层,储备池和输出层,所谓的储备池就是中间的部分。这个储备池的特点是: (1)储备池中神经元的连接状态是随机的,即神经元之间是否建立连接并不是我们人工确定的;(2)储备池中的连接权重是固定的,不像传统的MLP网络使用梯度下降进行权重的更新。这样做的好处是:(1)大大降低了训练的计算量;(2)一定程度上避免了梯度下降的优化算法中出现的局部极小情况;(3)此外,在很多问题上确实有着不错的建模能力。ESN的基本思想就是由储备池生成一个随输入不断变化的复杂动态空间,当这个状态空间足够复杂时,就可以利用这些内部状态, 线性地组合处所需要的对应输出~(实际上就是传统的MLP拟合的能力)。那么,到底是如何训练这个网络的呢?不要着急,我们先来对ESN 做一些数学符号的定义。

数学定义

假设这个回声状态网络有 N N 个中间节点,即储备池中的神经元个数为 N “> N ,输入层和输出层神经元个数都为 D D 。用 u ( t ) R D , x ( t ) R N , f ( t ) R D “> u ( t ) R D , x ( t ) R N , f ( t ) R D 分别表示t时刻的输入,网络状态(储备池的状态)和输出; VRN×D,RRN×N,WRD×N V ∈ R N × D , R ∈ R N × N , W ∈ R D × N 分别表示输入权重、中间权值及输出权重矩阵, tanh() t a n h ( ⋅ ) 为激活函数。注意,有些文献会把 V V 定义为 W i n “> W i n W W
定义为 W o u t “> W o u t R R 定义为 W “> W
则储备池的状态更新方式以及网络的输出为:




x(t)=tanh(Rx(t1)+Vu(t))(1) (1) x ( t ) = t a n h ( R x ( t − 1 ) + V u ( t ) )



f(t)=Wx(t)(2) (2) f ( t ) = W x ( t )

构造过程

首先我们来看下ESN的构造过程:初始化,训练以及使用(测试),如下图所示。

回声状态网络的构造过程。

首先进行初始化操作,在这步里,我们先确定储备池的大小,即神经元的个数。与传统的MLP相同,节点数越多,拟合能力越强。由于ESN仅仅通过调整输出权值(即图1中的 W W ,我们最终就是利用储备池的状态信息来确定这个 W “> W )来线性拟合输出结果,所以一般ESN需要远大于一般神经网络的节点规模。
接下来是随机生成连接矩阵,这个矩阵表示了哪些神经元之间是有连接的,以及连接的方向和权值,实际上就是有向图的矩阵表示~(即图1中的 R R )。接下来的缩放矩阵实际上就是归一化的操作,有些时候我们会直接使用一个缩放因子,使用该缩放因子乘以原始的随机生成的矩阵,相比于使用特征值来缩放更加快速,但是很大程度上也丧失了精度。为什么要进行这个操作呢?原因和我们在初始化一些神经网络的权值时是类似的,对于这些神经网络,我们通常会将权重初始化为0-1之间(或着-1至1),有两个原因:~(1)受激活函数的影响,比如图3所示的 s i g m o i d “> s i g m o i d tanh t a n h 激活函数,在0与1之间区分度比较大,但是大于1之后,激活值变化不大;~(2)我们对激活函数求导,可以看出在大于1时,图像比较平坦,其导数接近于0,由此在计算梯度时会导致梯度过小,无法顺利实现权重的更新。对于ESN我们不使用梯度来更新权值,主要是第一点的问题。最后随机生成输入权值 V V 和输出权值 W “> W
这些参数会影响到网络短期记忆时间的长短。输入权值越小而内部矩阵的谱半径越接近1,网络短期记忆时间越长。但是,增强记忆能力的同时,这种操作也造成了网络对“快速变化”系统的建模能力下降。




sigmoid(左)和tanh(右)

第二步进行训练。值得注意的是这个“空转”过程,实际上就是初始化储备池的状态。为什么要进行这个操作呢?因为储备池的内部连接是随机的,最开始的输入序列得到储备池状态的噪声会比较大,所以会先使用一些数据来初始化储备池的状态,从而降低噪声的影响。对于使用线性回归确定输出权值,在下一部分我们来一起进行推导。

数学推导

我们来对前面所说的输出权值进行求解。问题如下:这里假定对输出权重 W W 做了2范数正则,正则化系数为 λ “> λ 。记网络状态矩阵为 X X ,输出序列矩阵
Y “> Y ,请写出输出权重 W W 的计算公式。

首先我们要优化的目标是:

(3) m i n W X Y 2 2 + λ W 2 2 “> (3) m i n W X Y 2 2 + λ W 2 2


求解非常简单,只需要对其求导,令其导数为0,解出 W W 即可,实际上就是最小二乘法求解,可得:

(4) W = Y X T ( X X T + λ I ) 1 “> (4) W = Y X T ( X X T + λ I ) 1


进一步说,就是岭回归(带2范数惩罚项的最小二乘回归)。

考虑一个等价的问题:考虑概率情况, y(t)=f(t)+ε y ( t ) = f ( t ) + ε ,其中 εN(0,β1I) ε ∼ N ( 0 , β − 1 I )
且对于 Wi W i 的分布有 WiN(0,α1I) W i ∼ N ( 0 , α − 1 I ) 。证明最大化后验 p(Wi|X,Yi) p ( W i | X , Y i ) 得到的输出权重与第1问中最小二乘法得到的输出权重等价。

最大化后验,即:

maxP(W|X,Y)=maxP(W,X,Y)P(X,Y)=maxP(X|W,Y)P(W)P(X,Y)(5) (5) m a x P ( W | X , Y ) = m a x P ( W , X , Y ) P ( X , Y ) = m a x P ( X | W , Y ) P ( W ) P ( X , Y )


由于分母与 W W 无关,所以可以省略,由此上式等价于:

(6) m a x P ( X | W , Y ) P ( W ) “> (6) m a x P ( X | W , Y ) P ( W )


假设训练样本数为 L L ,则上式等价于:

(7) m a x i = 1 L P ( X i | W i , Y ) P ( W i ) “> (7) m a x i = 1 L P ( X i | W i , Y ) P ( W i )


加上对数处理后,上式可变为:

maxi=1L(logP(Xi|Wi,Yi)+logP(Wi))(8) (8) m a x ∑ i = 1 L ( l o g P ( X i | W i , Y i ) + l o g P ( W i ) )


由题目中的条件可知: YiWiXiN(0,β1I) Y i − W i X i ∼ N ( 0 , β − 1 I ) ,所以上式
可写作:

maxi=1L(log12πβ1Iexp((YiWiXi)22β1I)+log12πα1Iexp(W2i2α1I))(9) (9) m a x ∑ i = 1 L ( l o g 1 2 π β − 1 I e x p ( − ( Y i − W i X i ) 2 2 β − 1 I ) + l o g 1 2 π α − 1 I e x p ( − W i 2 2 α − 1 I ) )


展开上式,即等价于:

maxi=1L((YiWiXi)22β1IW2i2α1I)(10) (10) m a x ∑ i = 1 L ( − ( Y i − W i X i ) 2 2 β − 1 I − W i 2 2 α − 1 I )


将负号去掉,则上式变为:

min(i=1L(YiWiXi)22β1I+i=1LW2i2α1I)(11) (11) m i n ( ∑ i = 1 L ( Y i − W i X i ) 2 2 β − 1 I + ∑ i = 1 L W i 2 2 α − 1 I )


使用矩阵的形式来表示,可得:

minWXY222β1I+W222α1I(12) (12) m i n ‖ W X − Y ‖ 2 2 2 β − 1 I + ‖ W ‖ 2 2 2 α − 1 I


进一步地等价于:

minWXY22+αβW22(13) (13) m i n ‖ W X − Y ‖ 2 2 + α β ‖ W ‖ 2 2


我们令 λ=αβ λ = α β ,即可得到最终的式子:

minWXY22+λW22(14) (14) m i n ‖ W X − Y ‖ 2 2 + λ ‖ W ‖ 2 2


哈,可以看到与公式1是相同的,由此得证。

Matlab代码实现

这里给出Matlab代码的实现,代码来源于http://minds.jacobs-university.de/mantas:

% A minimalistic Echo State Networks demo with Mackey-Glass (delay 17) data  % in "plain" Matlab. % by Mantas Lukosevicius 2012 % http://minds.jacobs-university.de/mantas % load the data trainLen = 3000; testLen = 1000; initLen = 100; data = load('MackeyGlass-t17.txt'); % plot some of it % figure(10); % plot(data(1:1000)); % title('A sample of data'); % generate the ESN reservoir inSize = 1; outSize = 1; resSize = 1000; a = 0.3; % leaking rate %rand( 'seed', 42 ); Win = (rand(resSize,1+inSize)-0.5) .* 1; W = rand(resSize,resSize)-0.5; % Option 1 - direct scaling (quick&dirty, reservoir-specific): % W = W .* 0.13; % Option 2 - normalizing and setting spectral radius (correct, slower): disp 'Computing spectral radius...'; opt.disp = 0; rhoW = abs(eigs(W,1,'LM',opt)); disp 'done.' W = W .* ( 1.25 /rhoW); % allocated memory for the design (collected states) matrix X = zeros(1+inSize+resSize,trainLen-initLen); % set the corresponding target matrix directly Yt = data(initLen+2:trainLen+1)'; % run the reservoir with the data and collect X x = zeros(resSize,1); for t = 1:trainLen u = data(t); x = (1-a)*x + a*tanh( Win*[1;u] + W*x ); if t > initLen X(:,t-initLen) = [1;u;x]; end end % train the output reg = 1e-8; % regularization coefficient X_T = X'; % Wout = Yt*X_T * inv(X*X_T + reg*eye(1+inSize+resSize)); Wout = Yt*X_T / (X*X_T + reg*eye(1+inSize+resSize)); % Wout = Yt*pinv(X); % run the trained ESN in a generative mode. no need to initialize here, % because x is initialized with training data and we continue from there. Y = zeros(outSize,testLen); u = data(trainLen+1); for t = 1:testLen x = (1-a)*x + a*tanh( Win*[1;u] + W*x ); y = Wout*[1;u;x]; Y(:,t) = y; % generative mode: u = y; % this would be a predictive mode: %u = data(trainLen+t+1); end errorLen = 1000; mse = sum((data(trainLen+2:trainLen+errorLen+1)'-Y(1,1:errorLen)).^2)./errorLen; disp( ['MSE = ', num2str( mse )] ); % plot some signals figure(1); plot( data(trainLen+2:trainLen+testLen+1), 'color', [0,0.75,0] ); hold on; plot( Y', 'b' ); hold off; axis tight; title('Target and generated signals y(n) starting at n=0'); legend('Target signal', 'Free-running predicted signal'); figure(2); plot( X(1:20,1:200)' ); title('Some reservoir activations x(n)'); figure(3); bar( Wout' ) title('Output weights W^{out}'); 

后记

确定性跳跃循环状态网络(CRJ)是ESN的一个变种,如图所示:

确定性跳跃循环状态网络

在下一节我们会基于前面的ESN的代码一起来实现一个CRJ。




























版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176466.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:52
下一篇 2026年3月26日 下午9:52


相关推荐

  • mysql练习题及答案_mysql练习题及答案.doc

    mysql练习题及答案_mysql练习题及答案.docmysql练习题及答案mysql练习题及答案mysql查询语句练习题Sutdent表的定义字段名字段描述数据类型主键外键非空唯一自增Id学号INT10是否是是是Name姓名VARCHAR20否否是否否Sex性别VARCHAR4否否否否否Birth出生年份YEAR否…

    2026年1月17日
    6
  • linux 进程抓包命令,linux抓包命令之tcpdump详解[通俗易懂]

    linux 进程抓包命令,linux抓包命令之tcpdump详解[通俗易懂]顾名思义,tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息,tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具.实用命令实例:(1).默认启动#普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包.[[…

    2022年6月17日
    73
  • 利用MATLAB求分段函数f(x)

    利用MATLAB求分段函数f(x)利用MATLAB求分段函数F(X)方法一建立M文件:function[y]=ch3_1(x)n=length(x);fori=1:nifx(i)>1y(i)=x(i)^2;elseifx(i)>-1y(i)=1;elsey(i)=3+2*x(i);en…

    2022年5月15日
    63
  • JSONPath 表达式

    JSONPath 表达式JSONPath是参照,xpath表达式来解析xml文档的方式,json数据结构通常是匿名的并且不一定需要有根元素。JSONPaht用一个抽象的名字$来表示最外层对象。JOSNPath表达式可以使用. 符号如下:$.store.book[0].title或者使用[]符号$[‘store’][‘book’][0][‘title’]从输入路径来看。内部或者输出的路径都会转化成-符号。JSON…

    2022年6月16日
    34
  • Java冒泡排序代码实现

    Java冒泡排序代码实现Java冒泡排序代码实现原理:比较两个相邻的元素,将值大的元素交换至右端。思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。举例说明:要排序数组:int[] arr={6,3,8,2,9,1};…

    2022年6月29日
    29
  • HDU 5046 Airport(DLX反复覆盖)

    HDU 5046 Airport(DLX反复覆盖)

    2022年1月24日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号