NIPS2017論文読みメモ: Tensorized LSTM(その3)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その2 / 次回:まだ
f:id:cookie-box:20180108144114p:plain:w60

RNN は、ステップ毎に「前回の特徴 + 今回の入力」を「今回の特徴」に変換することによって、ある系列の特徴を得ることを目指す。RNN層をスタックすれば特徴の特徴を得ることもできる。でも、層をスタックするほど実行時間も勾配消失(爆発)の危険も増大する。層を積み重ねずに深く特徴を抽出したいなら、ある層が抽出した特徴を次の層に渡すとき、次の時間ステップに渡すように歪めてしまう。つまり、「前回の浅い特徴 + 前回の深い特徴」を「今回の深い特徴」にする。これによって、前回の浅い特徴から今回の深い特徴まで架け橋ができる。時間ステップが経過する度、特徴は深くなる。さらに、後ろの層の特徴を参照してもいい。表現力も増す。

f:id:cookie-box:20180108144126p:plain:w60

前回はその Tensorized RNN まで用意できたよね。各層の隠れ状態を積み重ねたものを隠れテンソルとする。この隠れテンソルの更新をカーネルでの畳込みにより行うことでパラメータも節約できる。ただ、LSTM の機能をまだ実装できていない。LSTM は RNN に記憶セルとゲートを増設したものだから、記憶セルを設置して、各ゲート用のカーネルを用意するのじゃ駄目なのかな?

f:id:cookie-box:20180108144114p:plain:w60

歪みのない Stacked RNN だったらそれでも大丈夫…。記憶セルは、時が流れても拡大も縮小もされない特徴を確保するための仕組み。時を遡っても誤差が拡大も縮小もされないことを保証する。でも、Tensorized RNN 上の誤差逆伝播では前のステップの同じ層にだけじゃない、前の層にも後ろの層にも誤差を伝播さなければならない…。

f:id:cookie-box:20180108144126p:plain:w60

それはそうだけど…記憶セルのお陰で勾配消失(爆発)の懸念は払拭されたんじゃ…あ、伝播に支障をきたすのはもしかして重み係数のコンフリクトの方?

f:id:cookie-box:20180108144114p:plain:w60

うん。再帰構造を含むニューラルネットには、時間ステップ毎に受け取りたい入力がきたり受け取りたくない入力がくるから、重み係数のコンフリクトの心配が付きまとう。だから受け取りたいときだけ受け取れるように Input Gate で制御する。でも、Input Gate が制御しているのは「記憶にどのように加算するか」…加算だけでは制御できているとはいえない。次の時間ステップにかけて層をクロスした斜め方向にも情報は流れる。この斜めのフローも、ゲート開閉を制御したい?

f:id:cookie-box:20180108144126p:plain:w60

何となくわかった…でも、記憶セルの更新時に斜め方向への情報は移動しないよね。それこそ、テンソル更新時の畳込みにつかうカーネルを、時間ステップ毎に変えちゃうような対応が必要じゃない?

f:id:cookie-box:20180108144114p:plain:w60

うん。「変える」。ただし、変えるのはテンソル更新時のカーネルじゃない。斜め方向のフローを制御するために、記憶セルは同じカーネルサイズで「かき混ぜる(=畳込む)」。そしてこのかき混ぜるためのカーネルは、時間ステップ毎に  H_{t-1}^{cat} からつくる。「記憶セルをかき混ぜるためのカーネル」をつくるためのカーネルをも学習するのが Tensorized LSTM の完成形。

f:id:cookie-box:20180205234353p:plain:w390

(その4があれば)つづく

NIPS2017論文読みメモ: Tensorized LSTM(その2)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その1 / 次回:まだ
f:id:cookie-box:20180108144126p:plain:w60

えっと、LSTM がもてる記憶の複雑さ―つまり、同時にもてる情報量の大きさと特徴抽出の深さ―を上げるにはどうしようって話だったよね。単純に記憶の次元を増やすのじゃパラメータが激増するし、LSTM のスタックじゃせっかくの LSTM の利点である長期依存性の学習が台無しになっちゃうって言ってたよね。

f:id:cookie-box:20180108144114p:plain:w60

うん…それでどうしようという話だけど、一般のニューラルネットワークでパラメータ数を抑制しながら情報量を増やす有名な方法には、Tensor Factorization とパラメータの再利用があるって。前者の Tensor Factorization というのは、パラメータを、低ランクのテンソルの積で表せるようなテンソルにするみたい? 参考文献も読まなければ正しくはわからないけど…低ランクの積で表せるという制限を課すことでパラメータ数を抑えながら、高次元の特徴量を扱える? もう1つのパラメータの再利用は、CNN のように、小さなパラメータセットを繰り返し全体に適用するようなイメージ?

f:id:cookie-box:20180108144126p:plain:w60

じゃあそのどちらか、あるいは両方を採用するとか?

f:id:cookie-box:20180108144114p:plain:w60

それは…後者を。パラメータの再利用なら、特徴量ベクトルの次元数とは独立にパラメータ数を決められるし(CNNでいうと、画像の大きさとは関係なくカーネルサイズを決められる、かな…)、あと、情報をばらばらにして再帰ループさせることができるから、特徴抽出の深化に役立つって。これは、詳しくは後で? あと、それとは別に…RNNの隠れ状態ベクトル(特徴量ベクトル)をテンソルで表すって。あ、この論文では LSTM を拡張するけど、先に RNN で考える? テンソルで表すと、パラメータを共有する軸?をつくれるって。この軸と垂直な方向に隠れ状態テンソルを延ばしても、パラメータ数は増えない。これは、CNNでいう畳込み層のパラメータ数が、カーネルサイズが同じなら画像のサイズを大きくしても変わらないのと同じ。あと、高階のテンソルをつかうと、パラメータ数が同じなら、depth の割に高速にネットワークを wide にできるって。あの、「同時にもてる情報量の大きさ」と「特徴抽出の深さ」と言っていたのを、原文通りに width と depth とかくようにするね…正確ではない訳だと思うから。この、テンソルにする理由の後者はまだよくわからない。

f:id:cookie-box:20180108144126p:plain:w60

うん。その隠れ状態のテンソルは具体的にどんな風に計算されてつくられるものなのか…プログラムでもなければ、よくわからないかな。

f:id:cookie-box:20180108144114p:plain:w60

泉さんには、プログラムの方が読みやすい? でも、論文だから…数式。あ、RNNの隠れ状態ベクトルテンソルにするといったけど、最初は簡単のために2次元のテンソル、つまり行列で考える。まず、普通の Stacked RNN (sRNN) からスタートする。論文3ページの Figure 1 の (a) …下に、絵を描いた。破線の左側。sRNN はある時間ステップ内で多段階の特徴抽出をする。図の例だと、3段階? この特徴抽出を、ある時刻に一段階目、次の時刻に二段階目…としたい。RNN は既に時間方向に「深い」から、特徴抽出も、これに便乗? そのように特徴抽出を時刻ごとに一段階ずつにしたのが、破線の右側。Figure 1 の (b) …これは skewed sRNN といって、sRNN をゆがめただけで…既に過去に別の論文で提案されている…。

f:id:cookie-box:20180126225422p:plain:w500

f:id:cookie-box:20180108144126p:plain:w60

確かに、右側の絵では、データがどんどん次の時刻に流れて行っているね。出力される  h_{t-3}^{3} の上の添え字は何段目の RNN の隠れ状態ベクトルか、下の添え字はどの時刻の入力まで参照しているかという意味?

f:id:cookie-box:20180108144114p:plain:w60

合ってる。上の図を、時間方向に展開しない形で書くと、下図になる。下図の一番左が sRNN で、真ん中が skewed sRNN。skewed sRNN の一層目は、一つ前の時刻の入力データと、一つ前の時刻の一層目の出力を受け取る。でも、一つ前の時刻の二層目以降の出力を受け取ってもいい。二層目の出力も受け取ったのが、下図の一番右。そして、この一番右の図の、各層の隠れ状態ベクトルを束ねた行列を隠れ状態テンソルと見做したものが、Tensorized RNN (tRNN)。

f:id:cookie-box:20180126231548p:plain:w500
tRNN の隠れ状態テンソル H_t \in \mathbb{R}^{P \times M} とかく。 P が sRNN のスタック数に相当… テンソルサイズとよぶ。 M は各層の隠れ状態ベクトルの次元数に相当… M は画像でいうRGBチャネルのように、チャネル数とよぶ。さらに、 H_{t-1} の頭に次元が合うように変換した入力データをくっつけたものを  H_{t-1}^{cat} \in \mathbb{R}^{(P+1) \times M} とかく。 H_{t-1}^{cat} H_t に更新するときは、CNNの要領…カーネルサイズ  K ずつ、畳込み。その後、活性化。テンソルサイズ  P が大きくなっても、この畳込みのパラメータ数は増えない…。そして、例えば  K=3 なら、「一つ前の層のさっきの出力」「この層のさっきの出力」「一つ後の層のさっきの出力」を畳み込むことになる…層をまたいだ畳込み…だから、cross-layer convolution という。
f:id:cookie-box:20180126232714p:plain:w480

f:id:cookie-box:20180108144126p:plain:w60

なるほど。これなら、 P を大きくしてもパラメータは増えないし、時の流れに便乗して特徴抽出の深化が進む…cross-layer convolution で層間でデータを相互作用させることで、複雑な学習もできる…後はこれを LSTM よろしく、記憶とゲートを増設するだけって感じかな?

f:id:cookie-box:20180108144114p:plain:w60

基本的には…。でも、記憶とゲートを増設するだけでは、上手くいかないことが…。単純に記憶とゲートを増設すると以下。これは、Figure 1 の (d) に相当。ただこれだと、記憶は時間方向にしかスムーズに逆伝播しない。いま、cross-layer convolution しているから、層をまたぐ方向にも記憶は伝播しないといけない…。

f:id:cookie-box:20180126235221p:plain:w320

(その3があれば)つづく

NIPS2017読み会@PFN: 参加メモ

以下の勉強会に参加してきました。connpass.com


以下、思ったことのメモです。いい加減なことしか書いてなく、文字数と興味は比例しません。
NIPSについて NIPS会議への参加はプラチナチケットなのですね…。
GANのテーマトーク 半教師有りですごいというのやってみたいです。ラベル貼るの大変ですので。
Inverse Reward Design
https://arxiv.org/abs/1711.02827
自分の発表でした…お聞き苦しくすみませんでした…。この日記上で志希ちゃん(自分)とまかべー(自分)が論文読みをしてくれましたが、発表資料を作成すると後から結構間違いに気付きました…それもすみませんでした…。
A Unified Approach to Interpreting Model Predictions
https://arxiv.org/abs/1705.07874
モデルの解釈性の話。この話とは関係ないですが、以前読もうとしていた教材を、全然読んでいません…。
https://christophm.github.io/interpretable-ml-book/
Deep Sets
https://arxiv.org/abs/1703.06114
(順序のない)集合を扱う話でした。PointNet と関係あるのでしょうか…。関係ないですが、この論文タイトルは検索しづらいですね…。
Interpolated Policy Gradient: Merging On-Policy and Off-Policy Gradient Estimation for Deep Reinforcement Learning
https://arxiv.org/abs/1706.00387
ご本人の発表でした。方策オンと方策オフを混ぜた手法。強化学習問題で、囲碁などは Simulation。データがいくらでも取れる。自動運転などは Real-world。データは限られる。なので向いている手法の違いなども出てくるのですね。
分散深層学習のテーマトーク 大規模データの処理はお金でGPUを積めば解決するのではないのですよというお話でした。学習率とバッチサイズのスケジューリングだけでなく、大規模なりの勾配降下法など。
階層的強化学習のテーマトーク 11月の強化学習アーキクチャ勉強会でこの方のお話を一度お聴きしたので聴きやすかったです。ワークショップとなるほどの分野になのですね。これも昨年からやってみたいと思っていてやっていないです…。LSTM論文を読んでいたので、「記憶改竄」と聞いて LSTM の Forget Gate を思い出してしまいました。LSTM でいうなれば、入力データのモードの違いを読み取って、Forget ではなく以前もっていた記憶を Remember ということができそうですね。どなたかやっているのでしょうか。
モデルに基づく強化学習のテーマトーク 現実世界の強化学習は難しいという話が今日よく出てきますね。現実世界の情報の引き出しにくさに加え、安全性(解釈性)が求められるのは、深層学習モデルではなかなか届かないですね。AIの判定が誰かの不利益になるとき(説得するのに)、失敗が致命的な事故となるとき(自動運転)、安全性(解釈性)が要りますね。
Estimating Mutual Information for Discrete-Continuous Mixtures
https://arxiv.org/abs/1709.06212
情弱なので相互情報量がわからないです。
→ このテーブルの下で考えました。
Predicting Organic Reaction Outcomes with Weisfeiler-Lehman Network
https://arxiv.org/abs/1709.04555
グラフを畳込むということが言われればできますね(但しノードことに近傍が異なる)。こういう、高度に専門的なドメイン知識(この発表では化学反応)が搭載された機械学習というの、将来できたらいいなあと思う方向性です。
音のテーマトーク 音、会話、音楽とあるのですね。会話認識で音素がモデル化されているというの、前回の記事でエリー(自分)が言っていたのと関連しています。音声合成というのは、ボイスロイドという認識でよいのでしょうか…。マルチモーダル学習もやってみたいです。
分子と材料のテーマトーク 今日一日通して、機械学習とモデルの協力というテーマがよく出てきますね…。VAE は分子もつくってくれるのですね…(合成できる保証がないって面白いですが)。というか VAE と GAN で対比したときの VAE の役割って何だったっけ…。以下をみると GAN と違って尤度が測れるのか…。
https://www.slideshare.net/masa_s/gan-83975514
相互情報量って何かを以下の記事っぽい雰囲気で考えようと思いますが、2変数必要ですね。
雑記: 交差エントロピーって何 - クッキーの日記
上の記事には2国間の天気の同時分布などないので、以下のようにイメージしておきます。

  •  P(A国が晴, B国が晴)=0.25
  •  P(A国が曇, B国が晴)=0.25
  •  P(A国が雨, B国が曇)=0.25
  •  P(A国が雪, B国が雨)=0.125
  •  P(A国が雪, B国が雪)=0.125

A国の天気とB国の天気の相互情報量というものを考えることができるはず。
 I(A国の天気, B国の天気 \displaystyle)= \sum_{y \in Y} \sum_{x \in X} p(x, y) \log \frac{p(x,y)}{p(x)p(y)}
A国の天気がこれでB国の天気がこれだという情報を、「A国の天気とB国の天気が独立だと考えたときのエンコーディング」から「正しいエンコーディング」を引いたものの平均になっている。独立だと考えたときの方が確率は同じか小さくなるから、相互情報量は0か正になる。相互情報量が0なら、 X Y は独立になる。というか、「実際の同時分布」と「独立な場合の同時分布」のカルバック・ライブラー情報量だ。「独立な場合の同時分布」までの距離だ。

NIPS2017論文読みメモ: Tensorized LSTM(その1)

以下の論文を読みます。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
前回:その0 / 次回:まだ
f:id:cookie-box:20180108144114p:plain:w60

前回この論文を読もうとしたけど、RNN や LSTM の話をして、全く論文に入らなかった…。

f:id:cookie-box:20180108144126p:plain:w60

ごめん…今回は論文の内容に入るね。でも、前回は LSTM は図を出しただけで、LSTM ってどんなものか全然話してなかったから、その話だけ先にしておきたいかな。LSTM の原論文は以下だよ。

Sepp Hochreiter; Jürgen Schmidhuber. Long short-term memory. Neural Computation, 9 (8): 1735–1780, 1997. http://www.bioinf.jku.at/publications/older/2604.pdf
前回の絵も再掲しておくね。あ、絵の黄色い箇所は上の論文にはなくて、わかるLSTM ~ 最近の動向と共に - Qiita を参考に描き足したものだよ。該当する論文はそちらの記事を見てね。
f:id:cookie-box:20180117205719p:plain:w600

f:id:cookie-box:20180108144114p:plain:w60

前回と違って、一部線が太くなってる?

f:id:cookie-box:20180108144126p:plain:w60

太い線の箇所だけみるとシンプルなRNN(シンプルな RNN のことを、Tensorized LSTM の論文では vanilla RNN と呼んでいるね)なんだ。LSTM は vanilla RNN にどんなパーツを付け加えたものかわかるようにしてみたよ。

f:id:cookie-box:20180108144114p:plain:w60

バニラ…シンプルな味で、おいしそう。じゃなかった、vanilla RNN の周りに結構ごてごてパーツが付いてるんだ…わたしのPCみたい…でも、どうしてこんなに色々なパーツが?

f:id:cookie-box:20180108144126p:plain:w60

絵理さん、PC自作だもんね。じゃなかった、vanilla RNN には以下の欠点があって、この前者を解決するのが上図の「記憶」のライン(原論文の constant error carrousel)、後者を解決するのが上図の Input Gate / Output Gate というように対応付いているよ。

  • 勾配や発散や消滅することにより学習が不安定になる: これは前回も話したけど、誤差を時間ステップをさかのぼらせて伝播させる毎に各時間ステップの誤差が掛け合わさることで発散や消滅の恐れがある問題だね。これは RNN の再帰構造に起因する問題ではなくて、再帰しない多層ネットワークでも層をさかのぼる度に誤差が掛け合わさるんだけど、RNN では時間ステップの長いデータを処理したいときさかのぼる回数が多くなるのと、再帰ゆえに同じ重みを何度も通るパスが存在することから特にクリティカルになっているね。
  • 重み係数のコンフリクトにより表現力が制限される: こちらは再帰構造ならではの悩みだね。ある入力パターンを受け取ったらその特徴を何ステップも保持したいとする。このとき、ある入力パターンから特徴を受け取るように学習しなければならないのはもちろんだけど、そうやって得た特徴がその後の入力によってかき消されないようにもしないといけない。あるときには受け取りたいけどあるときには受け取りたくない、これが Input 側のコンフリクト。他方、特徴があるパターンのときにだけ何か信号を出力したいとして、別のパターンのときにはそのような信号を出力しないようにしたいこともある。あるときには読み出したいけどあるときには読み出したくない、これが Output 側のコンフリクト。
前者を解決するには、再帰させる特徴ベクトルに重み係数を掛けることも活性化することも許されない(正確には原論文を見てね)。誤差を安定的に過去に伝播させるには、言い換えると、過去から今まで続く系列の特徴を学ぶには、そのような特徴には毎ステップ何か加算するくらいしかできない。このような「記憶」という特徴を再帰させる。後は、記憶を毎ステップ加算して読み出せばいい。LSTM では記憶にどのように加算するかをこそ学ぶ。でも、それだけだと重み係数のコンフリクトから逃れられない。だから、受け取りたいときだけ受け取れるように、読み出したいときだけ読み出せるように、制御するゲートを付けてしまってこのゲートの開閉も学べばいい。これが LSTM。

f:id:cookie-box:20180108144114p:plain:w60

パーツパーツに意味があるんだ。

f:id:cookie-box:20180108144126p:plain:w60

前回話しそびれたのはここまでだよ。

f:id:cookie-box:20180108144114p:plain:w60

ありがとう泉さん。いまの話で読みやすくなった…今回読む論文のイントロダクションでも「LSTM によって記憶の保持期間の長期化と、ゲートによる情報フローの制御ができるようになった」とある…それで次の課題は…どうやって LSTM のキャパシティを大きくする?

f:id:cookie-box:20180108144126p:plain:w60

LSTM のキャパシティ?

f:id:cookie-box:20180108144114p:plain:w60

うん…いくら記憶をずっと保持することができても…複雑な記憶をもつことができなければ LSTM の適用場面は限られる。LSTM のキャパシティを広げる1つの方向は、単に記憶の次元を増やす…これは、一度にもてる情報量を増やす。もう1つは…特徴抽出の深化(という表現はわたしが勝手にあてているけど…)。LSTM をいくつも積み重ねる(Stacked LSTM が既に提案されている)ことで、より高レベルな特徴を抽出できるようになる…深層学習がなぜ深層なのかという話でよく挙げられるように…ピクセルからエッジを、エッジから顔のパーツを、顔のパーツから人の顔を…。時系列なら音素、言葉、会話文とか…?Stacked LSTM の原論文は読んでない…ごめん…。

f:id:cookie-box:20180108144126p:plain:w60

その2つの方向が、論文タイトルの Wider と Deeper ということかな?

f:id:cookie-box:20180108144114p:plain:w60

うん。もちろん、記憶の次元を増やせば Wider になるし、LSTM をいくつもスタックすれば Deeper にはなる…。でも…前者は追加的なパラメータを…後者は実行時間を要する…。

f:id:cookie-box:20180108144126p:plain:w60

そりゃあパラメータは必要になるでしょ…記憶の次元を  d だけ大きくするなら、必要な追加パラメータは…あ、2乗で効くんだね。

f:id:cookie-box:20180108144114p:plain:w60

そう。もう一方の Stacked LSTM は実行時間もかかるし、それに、多層化によって LSTM が払拭したはずの勾配の発散や消滅の懸念がまた首をもたげてくる…。

f:id:cookie-box:20180108144126p:plain:w60

それは確かに問題って感じがするね。

f:id:cookie-box:20180108144114p:plain:w60

それでこの論文では、上図の「記憶」を、テンソル―多次元配列の意味だと思う―で表現する手法で、LSTM を、パラメータの追加なしに Wider に、ほとんど実行時間の増加なしに安定的に Deeper にする…以下の順序でそれを実現していく…。

  • まず RNN の出力をテンソルにすることで、パラメータを共有しながら一度にもてる情報量を増やす。
  • 次に上の Tensorized RNN で特徴抽出の深化を時間ごとの再帰ループにマージさせていく。
  • Tensorized RNN を Tensorized LSTM に拡張する。

(その2があれば)つづく

NIPS2017論文読みメモ: Tensorized LSTM(その0)

以下の論文を読む準備をします。論文の内容に入っていないのでその0です。

Zhen He, Shaobing Gao, Liang Xiao, Daxue Liu, Hangen He and David Barber. Wider and Deeper, Cheaper and Faster: Tensorized LSTMs for Sequence Learning. arXiv: 1711.01577, 2017. https://arxiv.org/abs/1711.01577
※ 以下、キャラクターが会話します。それぞれの原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
次回:まだ
f:id:cookie-box:20180108144114p:plain:w60

今日読むのはこの論文…。タイトルは…テンソル化したLSTM? LSTMというのは…Long Short-Term Memory…ロングでショート?

f:id:cookie-box:20180108144126p:plain:w60

「長く(long)保持できる短期記憶(Short-Term Memory)」だよ。最初のLSTMの論文は以下だね。

Sepp Hochreiter; Jürgen Schmidhuber. Long short-term memory. Neural Computation, 9 (8): 1735–1780, 1997. http://www.bioinf.jku.at/publications/older/2604.pdf
この論文のイントロダクションに、それまでの再帰ニューラルネットワークを短期記憶と表現して、入出力にタイムラグがあると全然学習できなかったりするって書いてあるよ。そうだね、まずRNN、再帰ニューラルネットワークの復習をしようか。RNNは  x_{1:n} を受け取って  y_n を返す箱だね。 x_n は文章の  n 文字目だったり、時刻 n の株価だったり、順番に観測されるデータであることが多いよね。その場合、 y_nn 文字目までの文章がポジティブな文章かネガティブな文章かの確率とか、時刻 n の株価まで観測した結果次の株価が上昇するか下落するかの確率なんかになるかもしれないね。

f:id:cookie-box:20180108144114p:plain:w60

RNN、聞いたことがある。出力したものを、次の入力へ…それが再帰。だから…順番に考えると…RNNはまず x_1 を受け取って  y_1 を出す。次に  x_2 を受け取るけど、このときさっき出力した  y_1 も受け取って、どっちのデータもつかって、 y_2 を出す。次は x_3y_2 を受け取って y_3 を出す。…これを繰り返すと、最後に  y_n が出てくる。 x_{1:n} を受け取って  y_n を出すことは、再帰のないニューラルネットワークでもできるけど…RNNは、各 i 番目のデータまでで、「ひとまずその時点での出力  y_i」をして、それを次に引き継いでいる。こうすると、どの時点でも出力が取り出せる…言い換えると、入力データの長さが変わってもいい。それに…順番に観測されるデータを受け取る度に情報が積み重なっていくのが上手く表現できるのかも…。

f:id:cookie-box:20180108144126p:plain:w60

でも、問題があるんだ。特に入力データ列が長いと、学習が不安定になったりできなくなったりすることがある。絵理さんがいま言ったように、RNNは再帰のないニューラルネットワークでもできる学習を、ネットワーク構造に制約を加えて、パラメータどうしを共有させて学習しようとするものだよね。例えば100ステップのある入力データ x_{1:100} でネットワーク学習するとするよ。ネットワークの重み  w_{ij} をどの方向に更新すべきかについて、100個のデータが全部注文をつけてくるんだ。それも、RNNの誤差逆伝播法では後ろのステップに伝播する度に掛け合わさる。だから、誤差の絶対値の組合せによっては、誤差が x_1 に伝播する頃には、発散するか、消滅しちゃう。

f:id:cookie-box:20180108144114p:plain:w60

じゃあ…どうすれば…。

f:id:cookie-box:20180108144126p:plain:w60

そこでLSTMが提案されたんだ。LSTMは下図のような構造をしているよ。あ、LSTMの原理については わかるLSTM ~ 最近の動向と共に - Qiita を参考にしているけど、下図が間違っていたらプロデューサーのせいだからね。
※ Output Gate と Input Gate のテキストが逆になっていたのを修正しました(2017-01-17)。

f:id:cookie-box:20180117204331p:plain:w600

(その1があれば)つづく