第6章 リカレント・ニューラル・ネットワーク リカレント・ニューラル・ネットワーク
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、データのシーケンスを処理するためのニューラルネットワークアーキテクチャの一種であるリカレントニューラルネットワーク(RNN)を取り上げる。これまで見てきたニューラルネットワークは、受け取ったデータの各バッチを独立した観測データのセットとして扱っていた。第4章で見た完全接続ニューラルネットワークにも、第5章で見た畳み込みニューラルネットワークにも、MNISTの数字が他の数字の前後に到着するという概念はなかった。しかし、多くの種類のデータは、産業や金融の文脈で扱われるような時系列データであれ、文字、単語、文などが順序付けられている言語データであれ、本質的に順序付けられている。リカレント・ニューラル・ネットワークは、そのようなデータのシーケンスを取り込み、出力として正しい予測を返す方法を学習するように設計されている。その正しい予測とは、翌日の金融資産の価格であれ、文中の次の単語であれ、である。
順序データを扱うには、最初の数章で見た完全接続ニューラルネットワークから3種類の変更が必要になる。第一に、ニューラルネットワークに与えるndarrayに「新しい次元を加える」ことである。以前は、ニューラルネットワークに与えるデータは本質的に2次元であった。ndarray はそれぞれ、1つの次元がオブザベーションの数を表し、もう1つの次元が特徴の数を表していた;1別の考え方をすれば、各観測は1次元のベクトルだったということだ。リカレントニューラルネットワークでは、各入力は依然としてオブザベーションの数を表す次元を持つが、各オブザベーションは2次元ndarray :1つの次元はデータのシーケンスの長さを表し、2番目の次元は各シーケンス要素に存在する特徴の数を表す。したがって、RNNへの全体的な入力は、[batch_size, sequence_length, num_features]形状の3次元ndarray - シーケンスのバッチとなる。
第二に、もちろん、この新しい3次元入力を扱うためには、新しい種類のニューラルネットワークアーキテクチャを使わなければならない。しかし、3つ目の変化は、この章で議論を始めるところから始まる。この新しい形のデータを扱うためには、抽象化された全く異なるフレームワークを使わなければならない。なぜか?完全連結ニューラルネットワークと畳み込みニューラルネットワークの場合、それぞれの「演算子」は、たとえそれが実際には(行列の乗算や畳み込みの場合のように)多くの個々の加算や乗算を表していたとしても、フォワードパスとバックワードパスの両方で、入力として1つのndarray 、出力として1つのndarray (場合によっては、これらの演算の一部として演算子のパラメータを表す別のndarray )を生成する、1つの「ミニファクトリー」と表現することができる。結局のところ、リカレント・ニューラル・ネットワークはこの方法では実装できない。その理由を発見するためにさらに読み進める前に、少し時間をとって考えてみよう。ニューラルネットワークアーキテクチャのどのような特徴が、これまで構築してきたフレームワークを崩壊させるのだろうか?答えは明快であるが、完全な解決策には実装の詳細に踏み込んだ概念が含まれ、本書の範囲を超えている。2これを解き明かすために、これまで使ってきたフレームワークの重要な限界を明らかにしよう。 ...