発表します。機械に「耳」をどうやって与えるか
みなさん、お久しぶりです・・。
今日も張り切っていきましょう。
突然ですが、なぜ自分たちは会話をすることができると思いますか?
「言語を知っているから」
「言葉の意味を知っているから」など
色々考えることができますが、もっと大事なことがあります。
「相手が話したことを覚えているから」です。
会話は時間ともに進んでいきますね。
そこで先ほど相手が話したことや自分が話したことを記憶していないと会話は成立
しません。
このような過去のデータや時間経過とともに変化するデータを処理するのに適した
ニューラルネットワークがあります。それが
RNN(Recurrent neural network)なのです。
〜今日の内容と参考文献〜
参考文献・サイト
中間層がループ!?RNNの構造について
RNNは自然言語処理を行うことができるニューラルネットワークの1つです。
実は中間層のループによって時系列データの処理が可能となっています。
RNNの構造は簡単に表現するとこのような構造を取っています。
中間層の出力が次の中間層への入力となるのです。
これにより中間層が前の中間層の影響を受ける形になるのでデータが引き継がれます
したがってRNNは過去のデータを用いて処理することができるので
時系列のデータを必要とする自然言語処理を行うことができるのです。
次は実際に時間経過に伴うRNNの流れを見ていきましょう。
時間方向に展開したRNNと学習方法
RNNは中間層がループした構造を取っていて結果的に時系列データを扱うことが
できると先ほど説明しました。
では実際にどのようにRNNは時間経過に伴うデータの処理を行なっているのでしょうか
時間方向に展開したRNNの流れを見ていきましょう。
青矢印の示すように
1秒での中間層の出力が2秒での中間層に渡され
2秒での中間層の出力が3秒での中間層に渡されていますね。
何度も言いますが
図のように過去のデータが引き継がれる形を取ることができるので、
過去の記憶を用いる会話などの処理が可能になるのです。
2秒の時には1秒の時の中間層からもらったデータを利用して処理することができるのです。
RNNの学習方法はバックプロパゲーションなんですが・・
誤差は時系列に沿っていて誤差が遡ります。そのため
BackPropagation Through-Time(BPTT)と呼ばれています。
また通常のニューラルネットワークと誤差の計算方法が違います。
誤差は新しい方から古い方へ伝播していきます。この時
ある時刻tの誤差というのは・・
そのtの出力の誤差+(t+1)から遡ってきた誤差の和
となります。これすごい大事です。
その時刻だけでの誤差だけではなく、
遡ってきた時間分の誤差も考慮しないといけないということですね。
非の打ち所がないRNNに見えますが当然問題点はあります。
次はRNNにおける問題点を見ていきましょう。
RNNの問題点とは。
- RNNは最後の時刻Tまで処理しないと学習できない
RNNの学習法では誤差のは遡った時間分の誤差も考慮しないといけないので
最後まで処理を終えないと学習することができないのです。
最後の時刻、つまり最新のデータの誤差が必要とするということですね・・
- 長期的なデータ処理をするのが難しい
図からわかるようにRNNの構造は中間層の出力が引き継がれていくので
かなり複雑なネットワークを形成します。
何層にもわたる複雑な処理をすることが難しいのです。
短期的なデータの処理はできるのですが長期的なデータの処理をすることが
難しいのです。
せっかく自然言語を処理できるニューラルネットワークなのに・・・
- 勾配消失問題が起きやすい
RNNは中間層が回帰する構造を持っています。勾配消失問題が起きやすくなり
学習が進まなくなってしまうのです。
勾配消失問題の記事についてはこちらを参照してください。
RNNの最大の問題点である「長期記憶の保持」を克服した強者がいます。
LSTM
です。次回のお楽しみに。