〽️

Echo State Network (ESN) ですって【基礎編】

に公開

概要

以前投稿した記事に対し, 勉強会のなかで「Transformer系の時系列モデルはオンライン学習できるのか?」という質問がでてきた.
そのときに「Echo State Network (ESN)」というRNNの一種を知った. どうやらRNNをかなり高速に学習できるようにしたものらしい. オンライン学習にも適用できそうで, いわゆる「データ同化」的なリアルタイムセンシング+予測のような使い方ができそうだ.
ググってみたらいくつか記事はあるものの, その更新も2022年以前でとまっている. 
「いまあいつ(ESN)どうしているんだろう🧐」な感じで, ESNを調査しつつ,今後の展望を個人的にまとめたい.

まず【基礎編】では, ESNの生まれた背景や基本構成について説明しESNの特徴をまとめる.

主に以下のレビュー論文を参考にする. 読破メモはすでに他者から公開されているので必要であれば参考にしてほしい.

https://arxiv.org/abs/2012.02974
https://leck-tech.com/machine-learning/a-review-of-designs-and-applications-of-echo-state-networks

忙しい人向け

  • Echo State Network (ESN) はRNNの一種で, 高速が学習ができる
  • ESNには, 入力層, リザーバー層, リードアウト層(出力層)を基本としている
    • そして, リードアウト層(出力層)の重みだけを学習対象としている
    • 入力層, リザーバー層の初期状態はランダムで,学習過程で更新されない
  • リザーバー層は, 入力となる時系列データの性質をしっかりと捉えつつ, そしてリードアウト層から見て識別しやすいような情報を保存している, とみなせる.
  • Echo State Property(ESP)により, リザーバー層自体の初期状態の影響は極力抑えられているのが特徴

RNNの課題

まずは Echo State Network (ESN) が必要となった背景をみていこう.
ここで, 深層学習の時系列モデルとして代表的なRNNをもちだす.
以下に代表的な RNN の構造である. (こちらの資料から引用)

RNNでは, 時点nのときの入力 u(n)c(n)を結合し, 中間層x(n)へと伝播する. そして, 中間層x(n)から時点nでの出力 y(n)へとさらに伝播する.
このときの, 各層でのつながり(重み)を学習することで時系列を予測する.
また, c(n) = x(n-1)となっていることから, c(n)は時点n-1以前の情報を集約したものとなっている.

ここで注目してほしいのは, 各層が全結合であり, すべてが学習の対象となっていることである.
この分岐の多さ(bifurcations)により, 学習が収束しづらく, 計算コストが高く, そして, 局所解に陥る可能性がある.

NN系特有の誤差逆伝播(BP)を行うと, RNNの場合は勾配消失の問題により長期予測に弱いことはみなさんご存知だろう.

この"勾配消失の問題により長期予測できない"問題を解消したのが LSTM (Long Short-Memory)である.

以下にLSTMのアーキテクチャをのせておく(こちらのサイトから引用)

LSTMはその構造によりRNNの欠点を補うことができたが, 他方でLSTMの各層には 4つの全結合層が含まれており, LSTM自体が巨大化すればもれなく計算コストが膨大となる. さらに, パラメータが増えるほど過学習の危険性が高まる.

さて, RNN/LSTMの問題としては, この「全結合層」というのがあるらしい. これを素直に学習しようすると, 計算コストが高くなるだけでなく, 精度が悪化する可能性すらある.

Echo State Network (ESN)は RNNのこの構造的な問題を解消することで, より効率的に学習できるようにしたのだ.

Echo State Network (ESN)

リザーバーコンピューティング(Reservior Computing; RC)は, RNNの勾配降下法(gradient decent methods)の代替手段として研究がすすられてきた. Echo State Network (ESN)も, そのRCの一種である.

以下の記事などを参考にしつつ説明していく
https://qiita.com/rikugamesion/items/bf5f60e05973030ab913

ESNの基本構造

その一般的な構造は以下の図のとおりである.

RC系モデルは, 入力層(input), リザーバー層(Reservoir), そして, リードアウト層/出力層(Readout/output)から構成される.

注目すべきは, リザーバー層内のニューロン(ノード)間の接続である. 図をみれば, 別のノードへの接続(一方向、双方向), 自己ループ, エッジなし, といったさまざまな接続があることがわかる.
RNNと比べると, リザーバー層はいわば中間層であるが, RNNの中間層が内部のニューロン間で接続関係がないのに対し, ESNのリザーバー層内でニューロン同士が自由に接続している.

さて, もうひとつESNの大きな特徴として, 学習する重みはESNの出力側, つまり, リードアウト層へのつながりのみである. これが, ESNの計算効率がとても良好である理由となっている.

つまり,

  1. RNNの構造が, 各層で全結合であったこと, そして, すべての結合の重みを学習していたことに対し,
  2. ESNでは, リザーバー層のニューロンのつながりが比較的スパースであること, そして, 学習の対象がリードアウト層へのつながりのみであるため, 学習コストがとても低い

ESNの式

実はESNはとても簡単な式で記述することができる.

まずは記号を載せておこう.

データ

  • 入力データ: u(t) \in R^{D \times 1}, tは時点
  • リザーバー層のニューロン群: X(t) \in R^{N \times N}, tは時点
  • リザーバー層内の各ニューロンの状態 : x_{i}(t) \in R^{N \times 1}
    • つまり, X(t) = (x_{1}(t), x_{2}(t) \cdots x_{N}(t))
  • 出力データ: y(t) \in R^{M \times 1}, tは時点

重み

  • 入力層重み: W_{in} \in R^{N \times D}
  • リザーバー層重み: W_{res} \in R^{N \times N}
  • リードアウト層重み: W_{out} \in R^{M \times N}
    • この重みのみが学習対象!!
  • 出力からのフィードバック重み: W_{backout} \in R^{N \times M}

活性化間数

  • リザーバー層の活性化関数: f(x)
    • 一般的にtanh, sigmoid
  • 出力層の活性化関数: g(x)
    • 一般的に恒等関数、sigmoid

状態の更新式

さて, もっともベーシックなESNは以下の更新式となる.

\begin{align} X(t) &= f(W_{in}u(t) + W_{res}X(t-1)) \\ y(t) &= W_{out}X(t) \end{align}

簡単に説明すると, 時点tでのリザーバー層(中間層)では, 時点tでの入力データu(t)と, 時点t-1でのリザーバー層のニューロンの状態を線形結合し, 間数fで非線形変換することで求めている.

学習時には, 予測誤差を以下の二乗誤差で計算する.

\min_{W_{out}} \parallel W_{out}X - Y \parallel_{2}^{2}

つまり, この式を最小化する重みW_{out}は次で求まる.

W_{out} = Y \cdot X^{-1}

先述した通り, ESNで学習するのは, W_{out}のみ, つまり, リザーバー層からリードアウト層への接続部分のみである.

その他の重み(W_{in}, W_{res})については基本的にランダムに初期化され, そのまま使用される. (訓練中には更新されない.)

リザーバー層に目を向けると, 層内のニューロンたちはランダムな接続を持ち, 適切に初期化されている.

全体の学習プロセスをみると, リザーバー層を通してESNは静的な部分での情報をキャプチャし, タスク別の予測などの動的な部分はリードアウト層のみで調整が行われている, といえる.

ハイパーパラメータ

学習するのはW_{out}のみであるが, その他にも適切に設定された値をもつ重みやパラメータが必要である. これらはハイパーパラメータとして, 設計者が設定することができる(しなければいけない).

  • w^{in}: 入力層の重みW_{in}の各要素の値をスケーリングするもので, [-w^{in}, w^{in}]の範囲で一様分布で初期化される(のが一般的)
  • \alpha: W_{res}スパース性に関するもの. つまり, リザーバー層でのニューロン間の接続数に関するもの
  • \rho (W_{re}): W_{res}のスペクトル半径(spectral radius).
    • \rho (W_{re}) < 1となるように設定. いわゆる, 記憶の保持期間に関係し, これがESNのとても重要な機能を提供する(後述)

\rho (W_{re})を用いたW_{res}の設計の方法としては以下が紹介されている.

  1. まず同サイズの行列Wを, 各要素が[-1,1]の一様分布でランダムに初期化
  2. Wの固有値\lambda_{max}(W)を求め, \rho (W_{re})と一緒に,W_{res}を初期化
W_{res} = \rho (W_{res}) \cdot \frac{W}{\lambda_{max}(W)}

Echo State Property (ESP)

さて, 読者のみなさんは次の疑問をもったのではないだろうか.
「なぜリードアウト層W_{out}の学習のみで, 時系列予測ができてしまうのか?」

その違和感の原因として, W_{in}W_{res}が(ほぼ)ランダムな値で初期化され, 更新されていないことに起因する(と個人的に思う).

そう考えると, 動的に更新されるリードアウト層の重みW_{out}に対し, リザーバー層内のニューロンの状態X(t)や, 重みW_{res}はとても重要である.
なぜなら, 時系列の入力データuによって, コロコロニューロンの状態X(t)や,重みW_{res}が変動していたら安定した学習ができなくなる.

この時系列入力データuに対し, 一定の再現性(安定性)を保つために必要な性質を Echo State Property (ESP) とよぶ.

すなわち, 異なる初期状態のリザーバー層x(0), \tilde{x}(0)に対し, 同じ時系列入力データを受けた時, 最終的に同じ状態に収束していることが望ましい(すなわち, $x(t) = \tilde{x}(t))

条件さえ整えば, リザーバー層の状態は漸近的に(asymptotically)入力データの履歴にのみ依存するようになる.
これゆえ, リザーバー層の状態は, 時系列入力データのEchoとなる.

そして, どんな初期状態から学習をスタートしてもこのEchoな状態に到達するには, 初期状態の影響が徐々になくなる仕組みが必要である.
これが, ハイパーパラメータで設定した, \rho (W_{re}) < 1となるものだ. この条件を満たすと, \lim_{t \rightarrow \infty} W_{res}^{n} = 0となる.

ここで本記事の式(1)に戻ってほしい. 時点tでのリザーバー層の状態x(t)は,
時点t-1の状態x(t-1)と重みW_{res}の積が加算されている. この式を再帰的に求めると, 状態x(t)は時点0からはx(0) \cdot W_{res}^{t-1}分の影響を受けている.

つまり, \rho (W_{re}) < 1であれば, 時点tでのリザーバー層の状態x(t)は過去からの影響を次第にうけなくなっていく.

特に, x(0)は初期状態なので, 長い期間をみればその影響が消えてくれることはESNの学習の安定性に寄与する ということだ.

ここらへんの説明は Jaeger先生の以下の論文や, スライドを参考にするとよい
https://proceedings.neurips.cc/paper_files/paper/2002/file/426f990b332ef8193a61cc90516c1245-Paper.pdf
https://didawiki.di.unipi.it/lib/exe/fetch.php/magistraleinformatica/aa2/rnn4-esn.pdf

結局何をしている?

ESNの性質は説明したが, 結局のところ何をしているのか?ということを説明しておこう.

注目すべきはやはりリザーバー層. リザーバー層は, 時系列入力データの写し(Echo)となっており, 学習したい時系列データに関する情報を保存するように設計されている.

ここで, 入力層 -> リザーバー層では, より高次元へと写像させている. これにより, 高次元空間では元のデータが持つ複雑な関係性がより明確に表現され, 線形分離が可能となる. いわばカーネル法(カーネルトリック)に似たことをしている.

https://www.issoh.co.jp/tech/details/3689/#i-8

リザーバー層は, 入力となる時系列データの性質をしっかりと捉えつつ, そしてリードアウト層から見て識別しやすいような情報を保存している, とみなせる.
そして, ESPにあるように, リザーバー層自体の初期状態の影響は極力抑えられているのが特徴だ.

もしアルゴリズムの設計・実装に興味があれば以下の記事が参考にできる.
https://deus-ex-machina-ism.com/?p=57460

https://igi-web.tugraz.at/PDF/174.pdf
https://qiita.com/kazoo04/items/71b659ced9dc0342a2b0#fn-lsm_esn

まとめ

今回の記事では, ESNの生まれた背景や基本構成について説明しESNの特徴をまとめた.
次回は, レビュー論文を参考に, ESNのデザインの問題や現状どうなっているの?みたいな部分をまとめていきたい.

Discussion