回声状态网络(ESN)教程

深度探索:机器学习中的回声状态网络(Echo State Networks, ESN)原理及其应用 回声状态网络ESN)作为一种特殊的循环神经网络模型,凭借其独特的设计、高效的训练机制和强大的动态建模能力,在非线性、非平稳时间序列预测、动态系统建模等领域展现了显著优势。相较于传统RNN、LSTM/GRU等深度学习模型以及ARIMA/SARIMA等统计模型,ESN在训练效率、泛化性能、复杂动态建模等方面具有特色,为处理复杂时间序列问题提供了新的思路和有效工具。 展望: 1. 理论研究深化:进一步探索ESN的理论基础,如吸引子分布、记忆容量、动态稳定性的严格数学描述,以指导更精细的模型设计和参数调整。 阅读详情

回声状态网络(ESN)教程

基础概念

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

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

数学定义

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

sigmoid(左)和tanh(右)

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

数学推导

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

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

(3)minWXY22+λW22

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

(4)W=YXT(XXT+λ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)maxP(X|W,Y)P(W)

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

(7)maxi=1LP(Xi|Wi,Y)P(Wi)

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

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。

回声状态网络ESN(含python、MATLAB代码数据) 时间序列预测:把获得的数据按时间顺序排序,分析其变化方向和程度,用来预测未来若干时期可能达到的水平。 非线性自回归时间序列:特性是连续的观测数据比较长时间间隔的观测数据更具有相关性 e.g :Mackey-Glass(MG)时间序列,其表达式如下: 回声状态网络ESN:Echo State Network 可用于时间序列预测 由输入层、储备、输出层构成 用一个储备模式... 阅读详情

相关推荐

ESN代码实现:探索回声状态网络

本文还有配套的精品资源,点击获取 简介:回声状态网络ESN)是一种递归神经网络,特别适用于时间序列的预测、建模和信号处理等任务。它通过模仿大脑中的神经元动态交互和保留过去输入信息的“回声状态”特性,处理复杂的时间相关数据。本资源提供了ESN的编程代码,包括网络结构、权重初始化、状态更新和输出计算等,以供学习者深入理解和实践ESN的工作原理。通过分析和修改代码,用户可以掌握...

weixin_36277197的博客 1782

回声状态网络ESN)_python_附详细说明

回声状态网络python源码,基于python3,并附详细代码说明. 依赖包:numpy、matplotlib、scipy 数据集:MackeyGlass_t17.txt

回声状态网络ESN)原理与预测实战详解

本章系统地介绍了回声状态层的设计与实现方法,包括储备的构造、状态更新机制、参数优化策略以及稀疏性对记忆能力的影响。通过合理的矩阵构造、非线性激活函数的选择和谱半径控制,可以构建出稳定且具有强动态特性的储备,为后续输出层的训练和预测提供高质量的状态表示。

weixin_42376614的博客 1419

回声状态网络(echo state network,ESN)概述

一、提出 递归神经网络(Recurrent Neural Networks,RNNs)的训练是通过权值直接优化来实现的,这种方式容易产生两个问题:收敛速度慢和易陷入局部最优。回声状态网络( echo state networkESN) 由 Jaeger于2001年提出,在模型构建与学习算法方面较 传统的递归神经网络有较大差别,其相应的学习算法为递归神经网络的研究开启了新纪元。 回声状态网络又称储备计算,采用由随机稀疏连接的神经元组成的储备作为隐层,用以输入进行高维、非线性的表示。ESN将神经网络的

weixin_42629045的博客 2万+

Deep Learning之带你详细了解回声状态网络ESN

不仅仅是对RNNs,ESN的一次知识分享,更是总结了许多经验,无论是在deep learning 亦或是生活学习都会有所帮助

Tomorrow_bitter的博客 1万+

回声状态网络(ESN)原理详解(附源码实现)

最近在看回声状态网络(Echo State Network)的内容,因为很少搜到关于Echo State Network的快速入门讲解,所以打算写一下ESN的基本原理。 1、概念 回声状态网络作为一种新型的递归神经网络(如上图),也由输入层、隐藏层(储备)、输出层组成。其将隐藏层设计成一个具有很多神经元组成的稀疏网络,通过调整网络内部权值的特性达到记忆数据的功能,其内部的动态储备(...

zwqsir的博客 4万+

一个简单文本处理问题的多种解法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34244102的博客 72

‌一个简单实用的网页版文本处理工具

‌逆序功能‌用户可以在第一个输入框中输入字符串,点击“逆序”按钮后,第二个输入框会显示逆序后的字符串。实现原理:通过JavaScript将字符串转换为字符数组,然后反转数组,最后再将数组转换回字符串。‌相等功能‌用户可以在两个输入框中分别输入字符串,点击“相等”按钮后,会弹出一个对话框提示两个字符串是否相等。实现原理:直接比较两个字符串的值。‌包含功能‌用户可以在两个输入框中分别输入字符串,点击“包含”按钮后,会弹出一个对话框提示第一个字符串是否包含第二个字符串。

weixin_56334307的博客 320

POJ NOI0113-6 最长单词2【文本处理】

问题链接:POJ NOI0113-6 最长单词2。 总时间限制: 1000ms内存限制: 65536kB 描述 一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。 输入一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式。输出该句子中最长的单词。如果多

海岛Blog 2632

python文本处理之ftfy

它专注于修复不正确的或损坏的文本数据,以确保文本能够正确解析和显示,尤其是当文本包含不明字符或不兼容的编码时。是一个非常有用的工具,尤其在处理来自不同来源和编码的文本数据时。它可以帮助你自动修复文本中的问题,以确保文本正确解析和显示。这在数据清洗、文本分析和处理文本数据的应用中特别有用。还提供了 Unicode 规范化的功能,以确保文本中的字符使用一致的 Unicode 标准表示。有助于处理各种文本编码和字符集问题,确保文本在处理和显示时正确无误。这将尝试修复损坏的文本,使其正确显示。

qq_43611733的博客 534

快马AI助力:用substring()轻松打造高效文本处理工具

通过substring()方法,我们可以轻松实现字符串的提取和处理功能。结合InsCode(快马)平台,从开发到部署的整个过程变得更加高效。无论是个人学习还是实际项目开发,这种快速落地的体验都能帮你节省大量时间。如果你对字符串处理或其他前端技术感兴趣,不妨试试这个平台,相信会有意想不到的收获!

ThunderstormLynx23的博客 550

回声状态网络(Echo State Networks,ESN)详细原理讲解及Python代码实现

回声状态网络是一种循环神经网络。ESN 训练方式与传统 RNN 不同。网络结构如下图:(1)储层(Reservoir):中文翻译有叫储备、储层、储蓄等等各种名称。ESN 中的储层是互连神经元的集合,其中连接及其权重是随机初始化和固定的。该储层充当动态储层,其目的是将输入数据转换到更高维的空间,它充当动态存储器,捕获输入数据中的时间依赖性。储层中的神经元可以表现出复杂的动力学,包括振荡和混沌,这可以帮助捕获输入数据中的时间模式。(2)输出层:经过储层后,转换后的数据仅用于训练输出层。

BetterBench的博客 5096

机器学习:回声状态网络(Echo State Networks)

回声状态网络(Echo State Networks) 1. 回声状态网络结构与算法推导 1.1 网络结构 ESN通过随机地部署大规模系数链接的神经元构成网络隐层,一般称为”储备”。ESN网络具有的特点如下: (1)包含数目相对较多的神经元; (2)神经元之间的连接关系随机产生; (3)神经元之间的链接具有稀疏性; 网络结构: 可以看出...

竹石破岩 3万+

第二十九课.回声状态网络ESN

目录Echo State Network Echo State Network 回声状态网络(Echo State Network)又称为库计算,即Reservoir Computing,被视为是一种神经网络的扩展。 Reservoir Computing 多用于处理时间序列的预测问题,比如下图: 给定一个信号序列:u(0),u(1),...,u(Nt−1)\textbf{u}(0),\textbf{u}(1),...,\textbf{u}(N_{t}-1)u(0),u(1),...,u(Nt​−1)给定

白景屹的博客 3421

【博士每天一篇论文-技术综述】Machine Learning With Echo State Networks 一篇系统讲解ESN知识的五星文章

年份:2020作者:徐元超,曼尼托巴大学期刊: 无引用量:无。这篇文章是一篇技术报告,从递归神经网络(RNNs)引入到回声状态网络ESNs)。说明了RNNs的局限性,并引入了储层计算和ESN的概念。非常系统详细的介绍了ESN的数学模型、属性(echo state property)、意义、训练方法、深度ESN的以、ESN的应用和局限性、以及未来的研究方向。

BetterBench的博客 1776

储备、神经网络、回声状态网络ESN)和液态机(LSM)

储备的简要概括。前馈神经网络(Feedforward neural networks,FNN)和递归神经网络(Recurrent neural networks,RNN)。回声状态网络ESN)和液态机(LSM)的共同点和区别。

用来自己学习,复习 5961

回声状态网络(Echo State Network

回升状态网络,重建混沌吸引子

颹蕭蕭 5478
上一篇: 基于BoF算法的图像分类
下一篇: Multi-channel Pose-aware Convolution Neural Networks for Multi-view Facial Expression Recognition
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值