9

Reservoir Computing 简介

 3 years ago
source link: http://idle.systems/posts/reservoir_computing.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Reservoir Computing 简介

Reservoir Computing 简介

Feb 25, 2018


Reservoir Computing, 也叫Echo state network, 被视为是神经网络(Neural Network)的一种拓展框架。一个reservoir computer由以下三个部分组成:

  • 输入层(input layer): 可以由一个或多个node组成, 属于前馈神经网络(feed-forward Neural network)的一种.
  • 中间层(middle layer): 由多个node组成, 属于递归神经网络(recurrent Neural network)的一种.
  • 输出层(output layer): 带有权重的加法器(weighted summer).

reservoir_components

前馈神经网络与递归神经网络的差别在于前者只允许信号从输入层向前传到输出层,信号的传递是单向的,它也不存在任何的回路,也就是说任何一层的输出都无法影响这层本身的数据,一般用于模式识别;后者通过引入循环的方法允许信号双向传递。

reservoir_components

目前已知reservoir有以下三个关键特性:

  • 通常reservoir有很多节点,且节点的连接是稀疏的,故该矩阵是稀疏矩阵
  • 因为节点之间会形成很多循环,故reservoir中的nodes形成的是递归神经网络
  • 各节点会在学习阶段使用一种高效递归的架构使节点的权重不断更新

Reservoir computing的一个神奇之处在于,中间层的reservoir矩阵是随机生成的且生成后就保持不变,真正需要训练的只有输出层,这也使它比传统的方法快很多。

1. 运行过程


下面提出一种reservoir computing的示例,该reservoir的输入层有M个节点,中间层有N个节点,输出层有P个节点,reservoir dynamics被定义为:
r(t+Δt)=(1−α)r(t)+αtanh(Ar(t)+Winu(t)+ξ1)r(t+Δt)=(1−α)r(t)+αtanh(Ar(t)+Winu(t)+ξ1)

其中各变量意义如下:

  • αα: leakage rate,主要用来控制reservoir中各节点权重更新的速度
  • r: reservoir state vector,记录了reservoir中每个节点的权重信息
  • A: reservoir的权重邻接矩阵(weighted adjacency matrix),通常是一个稀疏矩阵,这里用Erdős–Rényi来生成
  • WinWin: N行M列的矩阵,主要是用来将M维的输入信号转换为reservoir可接受的形式
  • u(t): 输入信号,维度为M
  • ξξ: bias,即偏置

reservoir_weight

1.1 训练

前期主要分为两个阶段,初始阶段(Initial period)和训练阶段(Training period)。在初始阶段,一般认为所有信号都是已知的,此时无需记录reservoir中节点的状态。当初始阶段结束训练阶段开始时,需要将每一次计算得到的reservoir状态记录到一个矩阵中。

收集到这些状态以后,就可以训练输出层了,这里使用ridge regression来训练。
W∗out=SRT(RRT+βI)−1Wout∗=SRT(RRT+βI)−1

1.2 测试

训练得到WoutWout之后,就可以使用公式^s=Woutr(t)s^=Woutr(t)来测试reservoir了。

1.3 评估

只需比较reservoir生成的结果与真实的数据即可,一般用RMS(root mean square) error来衡量。

该reservoir有两种用法,模拟信号与预测信号。


2.1 模拟

这里使用以下JSON来配置这个reservoir,从而模拟Lorenz System:

我们将Lorenz System的三个信号作为input signal,并在训练完成之后移除该signal,而将该reservoir产生的值作为input signal再输入reservoir。从图中可以看到,该reservoir良好地模拟了Lorenz System。

lorenz_simulation

2.2 预测

这里使用以下JSON来配置这个reservoir,从而预测Lorenz System:

以x作为input signal, y & z作为teacher signal来训练,训练后便可以使用x来预测y & z

Lorenz_x2yz.png

以y作为input signal, x & z作为teacher signal来训练,训练后便可以使用y来预测x & z

Lorenz_y2xz.png

以z作为input signal, x & y作为teacher signal来训练,训练后无法使用y来预测x & z。原因在于在只知道z的情况下,我们无法得知x与y的符号,从而造成了non-observability。

Lorenz_z2xy.png

注: 本文代码可以在此处下载

(The End)

[Return to the homepage]

This page has been viewed for 6768 times


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK