GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

batzner

indrnn – 独立リカレントニューラルネットワークのTensorFlow実装

投稿日:

独立リカレントニューラルネットワークのTensorFlow実装 https://arxiv.org/abs/1803.04831

独立してリカレントニューラルネットワーク

独立リカレントニューラルネットワーク(IndRNN)の簡単なTensorFlow実装 Shuai Liらによるより長くより深いRNNの構築

概要

IndRNNでは、反復層のニューロンは互いに独立している。 基本RNNは、 h = act(W * input + U * state + b)隠れ状態hを計算する。 IndRNNsは、各ニューロンが最後の隠れ状態に接続された単一の反復重みを有することを意味する、要素ごとのベクトル乗算u * stateを使用する。

IndRNN

  • ReLUアクティベーション機能で効率的に使用することができます。グラジェントを飽和させることなく、複数の繰り返し層を簡単にスタックできます。
  • 同じ層のニューロンが互いに独立しているため、より良い解釈可能
  • 各ニューロンの反復的な体重を調節することによって、消滅し、爆発する勾配を防止する

使用法

ind_rnn_cell.pyをプロジェクトにコピーします。

from ind_rnn_cell import IndRNNCell

# Regulate each neuron's recurrent weight as recommended in the paper
recurrent_max = pow(2, 1 / TIME_STEPS)

cell = MultiRNNCell([IndRNNCell(128, recurrent_max_abs=recurrent_max),
                     IndRNNCell(128, recurrent_max_abs=recurrent_max)])
output, state = tf.nn.dynamic_rnn(cell, input_data, dtype=tf.float32)
...

論文の実験

論文から「問題を追加する」スクリプトを再現するスクリプトについては、 examples / addition_rnn.pyを参照してください。 以下は、 addition_rnn.pyコードで再現された結果です。

100、500、1000のタイムステップでは、動作は図2の場合と似ています。 5000回のタイムステップでは、IndRNNは収束しません。 これは、繰り返し、入力、およびsoftmaxの重みの初期値が異なるためです。 これらはこの論文で言及されておらず、大きな違い生むことが分かっています。

Sequential MNISTのようなより多くの実験は、次の日に続きます。

要件

  • Python 3.4以降
  • TensorFlow 1.5+







-batzner
-, , ,

執筆者: