5-5-4 RNNの課題と発展

RNNは、文章や音声のように、順番や時間の流れが大切なデータを扱える、とても重要なネットワークです。
前の情報を少し覚えながら次を考える。
その発想はとても自然で、「流れの中で意味を読む」という課題によく合っています。
けれど、実際にRNNを学習させてみると、うまくいかないこともありました。

特に問題になったのが、長い系列になると、昔の情報をうまく保てない、学習の途中で勾配が極端に小さくなったり、大きくなったりするという点です。
RNNの発展は、こうした課題をどう乗り越えるかの歴史でもありました。

勾配消失問題

RNNでは、BPTTによって、誤差を時間方向にさかのぼって伝えていきます。
でも系列が長くなると、この誤差の信号は途中でどんどん弱くなってしまうことがあります。
これは勾配消失問題です。
たとえば、長い物語を最後まで読んだあとで、「この結末の原因は、最初の章のあの一文にあった」と気づいたとしても、あまりにも物語が長いと、その最初の一文まで影響をたどるのが難しくなりますよね。
RNNでも同じで、最後の誤差を昔の時点まで伝えようとしても、途中で信号が弱くなりすぎてしまい、遠い過去の情報をうまく学び直せないことがあります
その結果、すぐ前の情報は扱える、でも、かなり前の情報は忘れやすいという問題が起こります。

勾配爆発問題

逆に、誤差が小さくなりすぎるだけでなく、大きくなりすぎることもあります。
これが勾配爆発問題です。
長い系列をさかのぼる中で、誤差の値が極端に大きくなってしまうと、「ここを少し修正しよう」というはずの更新が、大きく行きすぎてしまうことがあります
これは、長い物語を読み返して「たぶん最初から全部解釈が違っていた!」と急に考えすぎてしまい、細かな修正ではなく、全体をひっくり返すような見直しになってしまう感じに少し似ています。
RNNではこの勾配爆発問題のために、学習が不安定になることがあります。

ゲート機構

こうした問題を乗り越えるために、研究者たちは考えました。
RNNは、前の情報をただ引き継ぐだけでは不十分なのではないか。
何を残し、何を忘れ、何を通すかを、もっと上手に決める必要があるのではないか。

そこで登場したのがゲート機構です。
「ゲート」は、扉や門のこと。
つまりゲート機構とは、情報をそのまま通すか、少しだけ通すか、あるいは閉じるかを調整する仕組みです。

たとえば物語を読むときにも、

・この出来事は大事だから覚えておこう
・これは細かい描写だから忘れてもよさそう
・この伏線は後で効きそうだから残そう

というふうに、頭の中で情報を選別していますよね。
ゲート機構は、RNNにそうした「記憶の選別」をさせる工夫なのです。

LSTM

■ LSTM
ゲート機構を使った代表的なモデルが、LSTM(Long Short-Term Memory)です。

LSTMでは、情報を管理するために主に3つのゲートが使われます。

入力ゲート→ 新しい情報をどれくらい入れるか決める

忘却ゲート→ 今までの記憶のうち、どれを忘れるか決める

出力ゲート→ 今持っている記憶のうち、どれを外に出すか決める

たとえば長い物語を読んでいるとき、

・新しい登場人物の情報は入れておこう
・もう関係のなくなった細かな描写は忘れよう
・今この場面で必要な情報だけを表に出そう

と考えるようなものです。

LSTMは、この3つの扉を使い分けることで、遠い過去の大事な情報を残しやすくする工夫を持っています。
だから、普通のRNNよりも、長い系列を扱うのが得意です。

GRU

一方、GRU(Gated Recurrent Unit) は、LSTMをもう少しシンプルにしたようなモデルです。

GRUで中心になるのは、主に2つのゲートです。

更新ゲート→ これまでの情報をどれくらい残し、新しい情報をどれくらい取り入れるか決める

リセットゲート→ 過去の情報をどれくらい忘れて、今の入力を重視するか決める

たとえば物語を読んでいて、
・この前の流れはかなり大事だから残しておこう
・ここでは前の情報をいったん薄めて、今の展開を強く見よう
と調整する感じです。

LSTMが「入れる・忘れる・出す」を細かく管理するタイプだとすれば、GRUは、もう少し少ない扉で、軽やかに記憶を調整するタイプだと言えます。
そのためGRUは、構造が比較的シンプルで、計算も軽くしやすい一方、多くの場面でLSTMに近い性能を出すことがあります。

Attention

それでも、RNN系のモデルには限界がありました。
長い文章や長い系列を扱うとき、最初から最後まで順番に読んでいく方法だけでは、どうしても苦しい場面が出てきます。
そこで重要になっていったのが、Attentionという考え方です。

Attentionでは、すべての過去を同じように抱えておくのではなく、今必要な部分に重点的に注目することを考えます
たとえば長い文章を読んでいて、今の一語を理解するために本当に必要なのは、ずっと前の全部ではなく、その中のある一部分かもしれません。
私たちも本を読むとき、必要な場面に視線を戻して意味を確かめることがありますよね。
Attentionは、そうした「必要な場所に注目する」考え方をモデルに取り入れたものです。
この考え方はその後、RNNの限界を越えて、より大きな発展へつながっていきました。
ここではまず、RNNの苦しさを越えるために生まれた大切な発想として捉えておくとよいでしょう。

まとめ

勾配消失問題→ 長い系列になると、昔の情報まで誤差が届きにくい

勾配爆発問題→ 誤差が大きくなりすぎて、学習が不安定になる

ゲート機構→ 情報を「残す・忘れる・通す」を調整する仕組み

LSTM→ 入力ゲート・忘却ゲート・出力ゲートを使って、記憶を細かく管理するモデル

GRU→ 更新ゲート・リセットゲートを使って、よりシンプルに記憶を管理するモデル

Attention→ 必要な場所に注目することで、RNNの限界を越える流れにつながった考え方

next ▶ スキップ結合とは何か