リカレント ニューラル ネットワーク (RNN) とは何ですか? どのように機能しますか? どこで使用できますか? この記事では、これらの質問に答えるとともに、ニーズに合わせて拡張できる RNN 実装のデモも紹介します。 リカレントニューラルネットワークアーキテクチャ 基礎知識。 Python と CNN の知識は必須です。 CNN を理解する目的は、CNN と RNN を比較し、なぜ RNN が CNN よりも優れているのか、またどの点が優れているのかを理解することです。 まずは「Recurrent」という言葉から始めましょう。なぜループと呼ばれるのでしょうか? ループとは次のことを意味します。
このタイプのニューラル ネットワークは、一連の連続した入力に対して同じ操作を繰り返し実行するため、リカレント ニューラル ネットワークと呼ばれます。この操作の重要性については、この記事の後半で説明します。 1. RNN が必要な理由 おそらくあなたは今、非常に優れたパフォーマンスを発揮する畳み込みネットワークのようなネットワークがすでにあるのに、なぜ他の種類のネットワークが必要なのかと考えているかもしれません。RNN が必要な特別なケースがあります。 RNN を説明するには、まずシーケンスに関する知識を理解する必要があります。まずはシーケンスについてお話ししましょう。 シーケンスは、時系列データ、情報文字列、会話などの相互依存する(有限または無限の)データのストリームです。会話では、一文の意味は一つであっても、会話全体としてはまったく異なる意味を持つことがあります。株式市場データなどの時系列データでも同じことが言えます。単一のデータ ポイントは現在の価格を表しますが、1 日を通してデータはさまざまな変化を示し、購入または売却の決定を促します。 入力データに依存関係と連続パターンがある場合、CNN は通常、うまく機能しません。 CNN への前の入力と次の入力の間には相関関係はありません。したがって、すべての出力は独立しています。 CNN は入力を受け取り、トレーニングされたモデルに基づいて出力を生成します。 100 個の異なる入力で実行した場合、それらの出力はいずれも以前の出力の影響を受けません。しかし、テキスト生成やテキスト翻訳について考えてみましょう。生成されたすべての単語は、以前に生成された単語とは独立しています (場合によっては、後続の単語とも独立していますが、これについてはここでは説明しません)。したがって、以前の出力に基づいて、ある程度のバイアスを持つ必要があります。ここで RNN が登場します。 RNN は、データ シーケンス内で以前に何が起こったかについての記憶を保持しています。これにより、システムはコンテキストを取得できるようになります。理論上、RNN には無限のメモリがあり、つまり無限に遡る能力があるということです。確認することで、以前の入力内容をすべて理解できます。しかし、実際には数歩しか遡ることができません。 この記事は人類全般に関連することのみを目的としており、いかなる決定も行うものではありません。この記事は、プロジェクトに関するこれまでの知識に基づいた私自身の判断にすぎません (私はまだ人間の脳の 0.1% も理解していません)。 2. RNN はいつ使用すればよいですか? RNN はさまざまな場所で使用できます。以下は、RNN が最もよく使用される領域です。 1. 言語モデルとテキスト生成 一連の単語が与えられた場合、次の単語の可能性を予測してみてください。これは、最も可能性の低い単語を含む文が最も可能性の高い文となるため、翻訳タスクに役立ちます。 2. 機械翻訳 ある言語から別の言語にテキストを翻訳するには、1 つ以上の形式の RNN を使用します。日常生活で使用されるすべての実用的なシステムは、RNN の高度なバージョンを使用しています。 3. 音声認識 入力された音波に基づいて音声セグメントを予測し、単語を決定します。 4. 画像の説明を生成する RNN の非常に一般的な用途は、画像内で何が起こっているかを理解し、それについて合理的な説明を行うことです。これはCNNとRNNを組み合わせた効果です。 CNN は画像のセグメンテーションを実行し、RNN はセグメント化されたデータを使用して説明を再構築します。このアプリケーションは基本的なものですが、可能性は無限です。 5. ビデオのタグ付け ビデオをフレームごとにマークすることでビデオ検索を実行できます。 3. より深く掘り下げる この記事は以下のトピックに従って構成されています。各セクションは前のセクションに基づいて構築されているため、飛ばさないでください。
1. フィードフォワードネットワークの紹介 フィードフォワード ネットワークは、ネットワーク内の各ノードで実行される一連の操作を通じて情報を渡します。フィードフォワード ネットワークは、情報を各レイヤーに 1 つずつ直接渡します。これは他のリカレントニューラルネットワークとは異なります。一般的に言えば、フィードフォワード ネットワークは入力を受け取り、それに基づいて出力を生成します。これは、ほとんどの教師あり学習のステップでもあります。出力結果は分類結果である場合があります。その動作はCNNと似ています。出力は、猫や犬などのラベルが付いたカテゴリになります。 フィードフォワード ネットワークは、事前にラベル付けされたデータのセットに基づいてトレーニングされます。トレーニング フェーズの目的は、フィードフォワード ネットワークによるカテゴリの推測におけるエラーを減らすことです。トレーニングが完了したら、トレーニングされた重みを使用して新しいデータ バッチを分類できます。 典型的なフィードフォワードネットワークアーキテクチャ もう一つ注意すべき点があります。フィードフォワード ネットワークでは、テスト フェーズ中に分類器に表示される画像によって重みが変更されることはなく、したがって 2 番目の決定には影響しません。これは、フィードフォワード ネットワークとリカレント ネットワークの非常に大きな違いです。 再帰型ネットワークとは異なり、フィードフォワード ネットワークはテスト時に以前の入力データを記憶しません。それらは常に時間に依存します。トレーニングフェーズ中の履歴入力データのみを記憶します。 2. 再帰ネットワーク つまり、再帰型ネットワークは、現在の入力サンプルだけでなく、以前に認識したものも入力として受け取ります。 多層パーセプトロンを構築しようとしました。簡単に言えば、入力層、特定の活性化関数を持つ隠し層、そして最後に出力層があります。 多層パーセプトロンアーキテクチャの例 上記の例で層の数を増やすと、入力層も入力を受け取ります。最初の隠し層は、アクティベーションを次の隠し層に渡し、これを繰り返します。 ***出力層に到着します。各隠し層には独自の重みとバイアスがあります。ここで疑問になるのは、隠れ層に入力できるかどうかです。 各レイヤーには独自の重み (W)、バイアス項 (B)、および活性化関数 (F) があります。これらのレイヤーは動作が異なり、それらをマージするのは技術的に困難です。これらを組み合わせるには、すべてのレイヤーの重みとバイアスを同じ値に置き換えます。次の図に示すように: これで、すべてのレイヤーを結合することができます。すべての隠し層を単一の再帰層に組み合わせることができます。つまり次のようになります: 各ステップで隠し層に入力を提供します。ここで、再帰型ニューロンは以前のすべてのステップからの入力を保存し、この情報を現在のステップからの入力と組み合わせます。したがって、現在のデータ ステップと前のステップ間の依存関係情報も取得します。ステップ t-1 で行われた決定は、ステップ t で行われた決定に影響します。これは人間が人生で決断を下す方法とよく似ています。私たちは現在のデータと最近のデータを組み合わせて、目の前の特定の問題に対処します。この例は単純ですが、原理的には人間の意思決定能力と一致しています。これを見ると、私たち人間は本当に知能があるのだろうか、あるいは非常に高度なニューラル ネットワーク モデルを持っているのだろうかと非常に疑問に思います。私たちが下す決断は、単に私たちが生活の中で収集したデータに基づいて行われます。では、合理的な期間内にデータを保存し計算できる高度なモデルとシステムがあれば、脳をデジタル化することは可能でしょうか? では、脳よりも優れ、より高速なモデル (数百万人のデータでトレーニングされたもの) があればどうなるでしょうか? 別の記事からの興味深い点: 人々は常に自分自身の行動に悩まされています。 上記の説明を、一連の文字の後に続く文字を予測する例で説明してみましょう。 8文字の「namaskar」という単語を想像してください。
ネットワークに 7 文字を入力した後、8 番目の文字を見つけようとするとどうなるでしょうか? 隠し層は 8 回反復処理を実行します。ネットワークを拡張すると、各層が文字に対応する 8 層のネットワークになります。したがって、通常のニューラル ネットワークが何度も繰り返されることを想像できます。拡張の回数は、データをどれだけ過去にさかのぼって記憶しているかに直接関係します。 リカレントニューラルネットワークの仕組み 3. 再帰ニューロン ここでは、意思決定を担う実際のニューロンを詳しく見ていきます。先ほど述べたナマスカールの例で言えば、最初の 7 文字を与えた後、8 番目の文字を見つけてみてください。入力データの完全な語彙は {n,a,m,s,k,r} です。現実の世界では、単語や文章ははるかに複雑です。物事を単純化するために、次の簡単な語彙を使用します。 上の図では、隠し層または RNN ブロックが現在の入力と前の状態に数式を適用します。この場合、ナマステの文字「n」の前には何も付きません。したがって、現在の情報を使用して推測し、次の文字 a に進みます。文字 a を推論するプロセスでは、隠れ層は上記の式を適用して、現在の推論 a の情報と以前の推論 n の情報を組み合わせます。入力がネットワークを通過する各状態はタイム ステップまたは 1 つのステップであるため、タイム ステップ t での入力は a であり、タイム ステップ t-1 での入力は n です。式を n と a の両方に適用すると、新しい状態が得られます。 現在の状態の式は次のとおりです。 h_t は新しい状態であり、h_t-1 は前の状態です。 x_t は時刻 t における入力です。同じ式を前のタイムステップに適用すると、前の入力がすでに認識されます。各ステップで同じ重みと関数を持つ 7 つの入力を調べます。 ここで、 f() を簡単な方法で定義してみます。 tanh 活性化関数を使用します。重みは行列 W_hh によって定義され、入力は行列 W_xh によって定義されます。式は次のとおりです。 上記の例では、最後のステップのみがメモリとして使用されるため、最後のステップのデータとのみマージされます。ネットワークのメモリ容量を向上させ、より長いシーケンスをメモリ内に保持するには、h_t-2、h_t-3 などの状態を方程式に追加する必要があります。 ***出力はテストフェーズと同じ方法で計算できます。 ここで、y_t は出力です。出力を実際の出力と比較し、エラー値を計算します。ネットワークは、エラーを逆伝播して重みを更新することで学習します。バックプロパゲーションについては、この記事の後半で説明します。 4. 時間経過によるバックプロパゲーション(BPTT) このセクションでは、バックプロパゲーションの概念をすでに理解していることを前提としています。バックプロパゲーションについてさらに深く理解する必要がある場合は、次のリンクを参照してください: http://cs231n.github.io/optimization-2/。 RNN が実際にどのように動作するかはわかりましたが、実際に RNN をトレーニングするにはどうすればよいでしょうか。各接続の重みをどのように決定するのでしょうか。これらの隠れユニットの重みをどのように初期化するのでしょうか。リカレント ネットワークの目的は、連続する入力を正確に分類することです。これは、エラー値のバックプロパゲーションと勾配降下法によって実現されます。ただし、フィードフォワード ネットワークで使用される標準的なバックプロパゲーションはここでは適用できません。 有向非巡回フィードフォワード ネットワークとは異なり、RNN は巡回グラフであり、これも問題です。フィードフォワード ネットワークでは、前の層の誤差導関数を計算できます。しかし、RNN の層配置はフィードフォワード ネットワークの層配置とは異なります。 答えは、私たちが以前に議論したことの中にあります。ネットワークを広げる必要があります。ネットワークを展開して、フィードフォワード ネットワークのように見えるようにするだけで十分です。 RNNの拡張 各タイムステップで、RNN の隠れユニットが取り出され、複製されます。タイムステップ内の各レプリケーションは、フィードフォワード ネットワーク内のレイヤーのようなものです。各タイムステップ t レイヤーは、タイムステップ t+1 内のすべての可能なレイヤーに接続されます。そこで、重みをランダムに初期化し、ネットワークを展開し、隠れ層でのバックプロパゲーションによって重みを最適化します。 *** レイヤーにパラメータを渡すことで初期化が完了します。これらのパラメータもバックプロパゲーションの一部として最適化されます。 ネットワークを展開した結果、各レイヤーの重みが異なり、異なる程度に最適化されることになります。重みに基づいて計算された誤差が等しいという保証はありません。したがって、各実行の終了時に各レイヤーの重みは異なります。これは私たちが絶対に見たくないものです。最も簡単な解決策は、すべてのレイヤーからのエラーを何らかの方法で組み合わせることです。エラー値は平均化または合計することができます。このようにして、すべてのタイムステップにわたって 1 つのレイヤーを使用して同じ重みを維持できます。 5. RNNの実装 この記事では、Keras モデルを使用して RNN を実装します。与えられたテキストから次のシーケンスを予測しようとします。 コードアドレス: https://gist.github.com/09aefc5231972618d2c13ccedb0e22cc.git このモデルはYash Katariya氏によって製作されました。この記事の要件に合わせて、モデルにいくつかの小さな変更を加えました。 [この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: ライトスピードコンピューティングが画期的な進歩を達成、AIトレーニングコストの問題が解決される可能性
>>: AIは教育分野で大きな可能性を秘めています。どのように活用できるでしょうか?
近年、モバイルラーニングと人工知能は、人々が機械と連携する方法に大きな影響を与えており、個々の顧客に...
[[422275]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...
何の前触れもなく、テスラのヒューマノイドロボット「オプティマス」の第2世代が登場しました。 12月1...
ほとんどの人がサプライチェーン技術について考えるとき、パッケージングはおそらく最初に思い浮かぶも...
今日のデジタル時代において、データ センターは、私たちのつながった世界を動かし続けるための膨大な情報...
バイデン政権は木曜日、国家人工知能研究リソース(NAIRR)作業部会の設立を発表した。ワーキンググル...
[[418355]]調査会社Research And Marketsの最新レポートによると、人工知能...
[[408223]] 6月30日のニュース 6月24日、マイクロソフトは一連の新たな改良を加えたWi...
2019年7月26日、人工知能企業Daguan Dataは北京で「大道知建」をテーマにした製品発表...
最近、中国人工知能学会、中国言語知能研究センターなどの主催による第3回中国知能教育会議が西安で開催さ...
人工知能 (AI) は、自然科学のさまざまな分野を網羅しており、主に特定の種類の知的な人間の活動をモ...