これまで見てきたニューラルネットワークは、基本的には、その瞬間に入ってきた情報をもとに判断するしくみでした。
たとえば、1枚の画像を見て「これは猫です」と判断する。
そこでは、今見えている情報が中心になります。
でも、世の中には今この瞬間だけでは意味が決まらないデータ もたくさんあります。
たとえば文章です。
「今日はとても___。」
このあとに入る言葉は、前にどんな言葉が来ていたかによって変わりますよね。
・今日はとても 暑い
・今日はとても 楽しい
・今日はとても 静かだ
今見ている単語だけではなく、それまでの流れ が意味を決めています。
こうした「前の情報が大事な世界」を扱うために生まれたのが、回帰結合層です。
物語を読んでいる場面を想像してみてください。
たとえば、こんな一文があります。
少女は鍵を見つけた。
そのあと、彼女は扉の前に立った。
このとき、「彼女」が誰かは、前の文を読んでいれば自然にわかります。
でも、もし2文目だけ突然読んだら、「彼女って誰だろう?」と思ってしまうかもしれません。
私たちは文章を読むとき、一文ごとに全部忘れているわけではありません。少し前に読んだことを頭の中に残しながら、次の言葉を理解しています。
回帰結合層も、これと似ています。
入力が来るたびに、その場の情報だけを見るのではなく、ひとつ前までに見ていた情報を、少し持ったまま次を考えるのです。
ふつうのネットワークでは、情報は前から後ろへ一方向に流れていきます。
入力
↓
隠れ層
↓
出力
という形です。
でも回帰結合層では、ある時刻の出力や状態が、次の時刻の自分自身へ戻ってくるようなつながりを持ちます。
これが「回帰結合」です。
言い換えると、今の自分が、少し前の自分から情報を受け取る仕組みです。
だから回帰結合層は、ただ今だけを見ているのではなく、過去を引きずりながら考える層 とも言えます。
リカレントニューラルネットワーク(RNN)
この回帰結合層を使ったネットワークが、リカレントニューラルネットワーク(RNN: Recurrent Neural Network)です。
“recurrent” には「くり返す」「戻ってくる」といった意味があります。
つまりRNNとは、情報をくり返し引き継ぎながら処理するネットワークのことです。
文章、音声、株価、気温の変化など、時間の流れや順番が大切なデータでは、前の情報を持っていることがとても重要になります。
RNNは、そのための基本的な仕組みです。
RNNでは、ある時刻で受け取った入力を処理するとき、その入力だけを見るのではなく、
・今入ってきた情報
・一つ前までに持っていた状態
を合わせて考えます。
たとえば物語なら、
・今読んでいる文
・その前までのストーリーの流れ
を一緒に使って意味を理解する感じです。
だからRNNは、一語ずつ、一音ずつ、一時刻ずつデータを受け取りながら、流れの中で意味を組み立てるのが得意です。
エルマンネットワークとジョルダンネットワーク
回帰結合を持つネットワークには、代表的な形として
・エルマンネットワーク
・ジョルダンネットワーク
があります。
どちらも、「過去の情報を次へ渡す」という考え方を持っていますが、何を引き継ぐかが少し違います。
エルマンネットワークは、前の時刻の隠れ層の状態を次へ引き継ぎます。
つまり、「自分の中で考えていた途中経過」を覚えておくような形です。
一方、ジョルダンネットワークは、前の時刻の出力を次へ引き継ぎます。
つまり、「前に自分が出した答え」を覚えておくような形です。
どちらも、その場かぎりで忘れてしまうのではなく、少し前の情報を持ちながら次へ進むという点では共通しています。
回帰結合層が必要になる理由
なぜこんな仕組みが必要なのでしょうか。
それは、時間の流れを持つデータでは、意味が「今この瞬間」だけでは決まらないからです。
たとえば、
・文章では前の単語
・音声では直前の音
・時系列データでは少し前の値
が、今の意味に影響します。
もし毎回すべてを忘れてしまったら、ネットワークは一つひとつをバラバラにしか見られません。
でも回帰結合層があれば、前の情報を少し覚えたまま次を読める。
つまり、流れを流れとして理解できるようになるのです。
もちろん、RNNの記憶は人間の記憶のように豊かなものではありません。
でも少なくとも、今だけではなく、少し前を引きずるという性質を持っています。
だから回帰結合層は、ディープラーニングにおける、記憶の入り口のような存在だと言えます。
画像のように一枚で意味がわかるものではなく、文章や音声のように連続の中で意味が生まれるもの。
そうした世界では、この「少し覚えている」という仕組みがとても大事になります。
まとめ
回帰結合層→ 前の時刻の情報を、次の時刻へ引き継ぐ層
RNN→ 回帰結合層を持ち、過去の情報を使いながら処理するネットワーク
エルマンネットワーク→ 前の隠れ層の状態を引き継ぐ
ジョルダンネットワーク→ 前の出力を引き継ぐ
next ▶ RNNが得意なデータ