AI

RNNの仕組みと限界|時系列データとBPTT

AI

株価や売上のように「並び順そのものに意味がある」データは、これまでのモデルではうまく扱えません。時系列を学習するRNNの仕組みと、そこに残った限界を整理します。

こんにちは、zawato(@zawato7)です!

本記事はディープラーニング入門ロードマップの第20回です。画像を扱うCNNに続いて、時系列データを扱うネットワークを見ていきます。

この記事でわかること
  • 時系列データとは何か、なぜ専用の仕組みが要るのか
  • 回帰結合層とシンプルRNNの中身
  • BPTTで勾配消失・勾配爆発が起きる理由

 

 

時系列データは並び順に意味がある

時系列データとは、時間とともに変化し、値の並び順そのものが情報を持つデータです。店舗の来客数、株価、商品の売上、センサーの計測値などが代表例です。音声も時間に沿って変化する波なので時系列データですし、文章も単語1つを1時刻分のデータとみなせば時系列として扱えます。

数値も文章も音声も同じ枠組みで学習できるのが、この分野の面白いところです。予測の学習データは、たとえば過去12か月分の値と翌月の値をペアにして、そのペアを大量に用意する形で作ります。入力が1時点ではなく「並んだ複数時点」になるのが、これまでのモデルとの違いです。

 

 

回帰結合層が過去の情報を次の時刻へ渡す

RNNは、前の時刻の出力を次の時刻の入力に混ぜ込むことで、過去の履歴を引き継ぎます。RNNはリカレントニューラルネットワーク(再帰型ニューラルネットワーク)の略です。12か月の例で追うと、1か月目のデータを入れると、その内容を集約したベクトルが出てきます。2か月目では、2か月目のデータと1か月目までの集約ベクトルの両方を受け取り、新しい集約ベクトルを出します。

これを繰り返すと、12か月目の出力は12か月分すべてを集約したものになります。前の時刻の情報が次の時刻に影響を与えるわけです。この「出力を自分の入力に戻す」つながりを再帰構造といい、それを担う層を回帰結合層と呼びます。図では時刻ごとに横へ展開して描く場合と、ループ1本にまとめて描く場合がありますが、中身は同じものです。

 

 

シンプルRNNの中身は全結合の足し算

シンプルRNNは、今の時刻の入力と過去からの情報にそれぞれ全結合をかけ、足し合わせて活性化関数に通すだけの構造です。RNNという言葉には2つの意味があり、リカレントニューラルネットワーク全体を指す場合と、この最も基本的な構造だけを指す場合があります。混同を避けるため、後者はシンプルRNNと呼び分けます。

  • 今の時刻の入力に全結合をかける
  • 過去から渡ってきたベクトルにも全結合をかける
  • 2つを足し合わせて活性化関数に通し、出力を次の時刻へも渡す

活性化関数にはtanh(ハイパボリックタンジェント)がよく使われ、出力は-1から1の範囲に収まります。ReLUが使われることもあります。全体としては通常のニューラルネットワークの学習と同じ部品の組み合わせで、意外なほど単純です。

 

 

BPTTと勾配消失というRNNの限界

RNNの学習は時間をさかのぼって誤差を伝えるBPTTで行い、その過程で勾配消失や勾配爆発が起きます。BPTTは通時的誤差逆伝播(Backpropagation Through Time)のことです。誤差逆伝播法と同じく出力側から微分をかけ合わせていきますが、RNNでは時刻をさかのぼる方向にも伝わっていきます。

問題は、各時刻で同じ重みを使い回している点です。さかのぼるほど同じ重みが何度も掛け算され、次の2つの症状が現れます。

症状何が起きるか対策
勾配消失勾配が0に近づき、遠い過去の情報が学習に反映されない構造そのものの改良が必要
勾配爆発勾配が発散し、学習が不安定になる勾配クリッピングで上限を設ける

勾配爆発は勾配クリッピングで抑えられますが、勾配消失問題のほうは手強く、シンプルRNNが実用上さかのぼれる時刻数はあまり長くありません。何時刻まで扱えるかはデータ次第ですが、遠い過去ほど情報が届きにくいという性質は変わらず、これがシンプルRNN最大の限界です。

 

 

まとめ

  • 時系列データは並び順に意味があるデータ。株価や売上だけでなく、音声や文章も時系列として扱える
  • RNNは回帰結合層で過去の集約ベクトルを次の時刻へ渡す再帰構造を持つ。シンプルRNNの中身は全結合2つの足し算と活性化関数だけ
  • 学習はBPTT(通時的誤差逆伝播)で行う。同じ重みを繰り返し掛けるため勾配消失・勾配爆発が起き、長い時系列は扱いにくい

 

 

よくある質問

Q. RNNとシンプルRNNは何が違うのですか?
A. RNNは再帰構造を持つネットワーク全体を指す広い呼び方です。そのうち、入力と過去の情報にそれぞれ全結合をかけて足し、活性化関数に通すだけの最も基本的な構造をシンプルRNNと呼びます。

Q. BPTTは普通の誤差逆伝播法と何が違うのですか?
A. 考え方は同じで、出力側から微分をかけ合わせて重みの更新量を求めます。違いは、層をさかのぼるだけでなく時刻もさかのぼる点で、そのぶん掛け算の回数が増えます。

Q. 勾配消失と勾配爆発の対策は同じですか?
A. 違います。勾配爆発は勾配の大きさに上限を設ける勾配クリッピングで抑えられますが、勾配消失は値が小さくなりすぎる現象なので上限を設けても解決せず、構造の改良で対処します。

Q. RNNは数値データ以外にも使えますか?
A. 使えます。単語を1時刻分のデータとみなせば文章も時系列になり、音声も時間に沿って並ぶデータです。同じ枠組みでさまざまな種類のデータを扱えます。

 

 

コメント