Sequence to Sequence
ここでは、RNNがなぜ "Sequence to Sequence" のNeural Network と呼ばれるのかを説明しようと思う。
まず、RNNのグラフを見やすく表現し、以下の議論を分かりやすくするために、グラフの表記を少し変えてみよう。
入力層・隠れ層・出力層の三層からなる単純なネットワークを考えよう(次の図の上)。
これを、TensorFlowのグラフで書けば次のようになる(次の図の中)。ここでは、ニューラル・ネットワークの基本的な計算式 φ( WX + b ) が、明示的に図示されている。
新しい表記は、このグラフの細部を省略したものだ(次の図の下)。
重みのパラメーターのU, Vのみを残して、二つのバイアスbも二つの活性化関数φも表記上からは消えている。ただ、入力ベクトルxが、パラメーターUの作用を受けて隠れ層のベクトルhを形成し、隠れ層ベクトルhが、パラメーターVの作用を受けて、出力ベクトルoに変換されることは、きちんと表現されている。
こうした表記(ただし、今度は、入力層を下に、出力層を上にしている(次の図の左))を用いると、単純な三層のニューラル・ネットワークを横に並べ、隣り合う隠れ層のノードをフル・コネクトで結んだネットワーク(次の図の右上)は、次の図の右下のように表されることになる。
この図では、パラメーターのU1, U2, U3 も、V1, V2, V3 も、W1, W2 も、それぞれ異なっていることに注意しよう。これは、横につなげられたニューラル・ネットワークが、それぞれ異なったパラメーターを持つ、異なったネットワークであることを表している。
ところで、単純なニューラルネットを横につなげたものがRNNではないのだ。
次の図の右の方を見て欲しい。そこには、パラメーターは、U, V, W の三つしかない。
左の図の U1=U2=U3=U, V1=V2=V3=V, W1=W2=W としたものが、右のグラフである。これが、RNNのグラフになる。
RNNは、同じパラメーターを持つ、同じニューラル・ネットワークを横につなげたものだ。この図では、三つのニューラルネットが横につながっているように表記されているが、この三つのニューラルネットは、同じパラメーターを共有している同一のネットワークである。
見方を変えよう。
もしも、先の図で、入力層からの三つの入力が「同時」に与えられることがなく、「別々」に与えられるなら、この三つのネットワークは、一つのネットワークの別々の場合の状態を表していると考えることができる。
次の図の左を見て欲しい。これが、RNNの一つの表示である。一つのネットワークだ。
注目して欲しいのは、隠れ層hの出力は二つに分かれていて、出力層oに向かうものと、隠れ層h自身に向かうものがあるということ。ループがあるのだ。Full ConnectのFeed Forwardのネットワークには、ループは存在しなかった。このことは、RNNの大きな特徴の一つである。(Back Propargationは、Feed Back Loopと考えていいのだが。)
この一つのネットワークに「別々」に、というか、次々と入力が与えられると、この一つのネットワークの状態は、次々に変化していく。こうした状態の変化を、入力ごとに表現したものが、今まで見てきた右側の図だと考えればいい。これらは、基本的に、同じものを表現している。
確かに、右の表示でも、隠れ層hの出力は二つに分かれていて、出力層oに向かうものと、隠れ層h(ただし、隣の)に向かうものがある。もちろん、それは、RNNを、隣り合うネットワークの隠れ層同士を結ぶものとして導入してきたので、当然なのだが。ただ、そのイメージは、RNNの実装を考える時には、捨てたほうがいい。一方で、RNNの動作をイメージするには、こうした展開形が、ずっとわかりやすい。
(先にも触れたが、左の表示と右の表示が、同じものになるためには、右側の表示の入力が、「同時」には与えられないことが、前提である。)
入力と状態の変化が、時間上で起きると考えるのは自然である。先の図でも、添え字に用いられている (t-1) -> (t) -> (t+1) は、時間の変化に対応していると考えることもできる。ただ、本当に重要なことは、この変化が、あとさきの「順序」を持って継起することである。時間は、順序を持つ継起の一つの身近な例にすぎない。
こうして、RNNは、順番を持つ入力 x1, x2, x3, .... を、出力 o1, o2, o3, ... に変換するのだが、この出力 o1, o2, o3, ... も、当然、順番を持ち、順番を保つ。Sequence x1, x2, x3, .... は、Sequence o1, o2, o3, ... に変換されることになる。
コメント
コメントを投稿