2017年2月16日木曜日

LSTM -- Gateを持つRNN

RNNは、基本的には、単純な三層構造を持つネットワークをユニットとして、その隣り合う隠れ層同士をフルコネクトで横につなげたものだ。ただし、Feed ForwardのDNNのように、実際に、ユニットを積み重ねるのではなく、隠れ層を結合する重みのパラメーターを共有し、再帰的にシステムを記述する。

RNNの発展系LSTMも、こうしたRNNの基本的なアイデアを踏襲している。ただ、組み合わせの基本となるユニットが少し複雑な構成をしている。LSTMのユニット(Cellと呼ばれる)に導入された新しいアイデアの中心にあるのが、今回、取り上げるGateである。

LSTMの働きを理解するのに、Gateの働きの理解は必須であるのだが、同時に、それは、LSTMの働きを理解する、最も早い近道でもある。

今回は、RNNやLSTMの文脈を離れて、その意味では、天下り的であるが、ニューラル・ネットワーク上のGate回路について見てみようと思う。

次の図の左側が、Gateの構成をグラフで示したものである。
Gateは、入力( In )を出力( Out )に渡すのだが、その流れをGateに与えられる第三の情報( X )でコントロールするのだ。


Gateを構成しているのは、二つの回路だ。(図の右)

一つの回路(図右下)は、Gateに与えられる情報 Xを、Gateを直接コントロールする情報 Controlに変える。もう一つの回路は、Control 情報の元で、入力 In を出力 Out に変える。

Gate内部で、XからControlを生成する回路(図右下)は、Sigmoid関数を活性化関数とする一層のフルコネクトのニューラル・ネットワークである。図中の四角の中に書かれたσは、この層の活性化関数がSigmoidであることを表している。ただし、この層の重み W やバイアス b は、この図では省略されている。

ContorolとInから、Outを生成する回路(図右上)が行なっているのは、簡単な演算である。二つの量を掛け合わせるだけ。ただし、掛け合わせは、ベクトルの要素ごとに行われる。これは、Hadamard積と呼ばれるものだ。Hadamard積については、次の図を参考にされたい。


こうして、Gateが行なっている働きは、次の二つの式で表すことができる。

$$Out = Control \cdot In$$
$$Control = \sigma ( W \cdot X + b)$$

ただし、前者の積(・)は要素ごとのHadamard積、後者の積(・)は、行列とベクトルの積である。


Control信号を生成するのに、Sigmoid関数σが使われているのには理由がある。σ(x)は、0と1の間の値をとるのだが、xが正の時には、ほとんどのxについてσ(x)は、ほぼ 1となり、xが負の時には、ほとんどのxについてσ(x)は、ほぼ 0となる。


こうして、σから出力された Controlが 0の時、Gateの出力は、\( Out = Control \cdot In = 0 \cdot In = 0 \) となり、情報は流れず、Controlが 1の時、Gateの出力は、\( Out = Control \cdot In = 1 \cdot In = In \)となり、情報はそのまま流れることになる。






0 件のコメント:

コメントを投稿