RNNとは何か?

最初にRNNとは、どのような形のニューラル・ネットワークなのかを説明しておこう。

入力層・隠れ層・出力層の三層からなる単純な、フル・コネクトのネットワークを考えよう(図右上)。これをユニットとして組み合わせて複雑なネットワークを構成することを考える。

一つの方法は、これを縦に並べることである(図左)。

一つ上に積み上げるごとに、上のユニットの入力層のノードの数を、すぐ下のユニットの出力層のノードの数とを同じにして、重ね合わせれば、どんどん縦に積み重ねることができる。しかも、出来上がったグラフは、自然にフル・コネクトのネットワークになる。
これがDNNである。(正式には、Full ConnectのFeed Forward Network である。)

もう一つの方法は、ユニットを横に並べることである。

ただ、横に並べただけでは、一つのネットワークにはならない。そこで、隣り合うユニットの隠れ層のノード同士を、フル・コネクトでつなぐこととする(図右下)。


これがRNNである。

と言いたいところだが、RNNには、ユニットを横につなげる時に、大きな条件が課せられている。それは、横につながるユニットは、同じ形のユニット(それぞれの入力層・隠れ層・出力層のノード数が同じ)でなければならないという条件である。

要するに、RNNとは、同じ形のユニットが、横に「繰り返される」形のネットワークなのである。

ただ、それだけではない。RNNには、もっと強い条件がある。横に繰り返されるのは、「同じ形」のユニットではなく、全く「同じ」ユニット(各ノードの重み、バイアスといったパラメーターも同一)であるという条件である。

このことは、先の図だけでは、少しわかりにくいかもしれない。全く「同じ」ユニットだと言いながら、先の図では、横ならびに「別々」に描かれているから。

そのことは、RNNが、"Recurrent" Neural Network であることと関係している。それについては、別のポストで。

コメント

このブログの人気の投稿

TensorFlow Foldについて

TPU論文の翻訳(1)

可微分ニューラルコンピュータとは何か(1) 概論