成熟した Tensorflow および PyTorch フレームワークを使用して再帰ニューラル ネットワーク (RNN) を実装することで、このテクノロジを使用するハードルが大幅に下がりました。 しかし、初心者にとってはこれでは十分ではありません。事実を知るだけでは十分ではなく、その背後にある理由も知る必要があります。
低レベルの間違いを避けるために、しっかりとした理論的基礎を築き、RNN を使用してより実用的な問題を解決します。 そこで、考えるべき興味深い質問があります。 Tensorflow のようなフレームワークを使用せずに、Numpy のみを使用して RNN を構築するにはどうすればよいですか? わからなくても心配しないでください。ここにチュートリアルがあります: Numpy を使用して NLP 用の RNN をゼロから構築します。 RNN 構築プロセスを案内します。 初期化パラメータ 従来のニューラル ネットワークとは異なり、RNN には次の 3 つの重みパラメーターがあります。 入力重み、内部状態重み、出力重み まず、上記の 3 つのパラメータをランダムな値で初期化します。 その後、単語埋め込み次元(word_embedding dimension)と出力次元(output dimension)がそれぞれ 100 と 80 に初期化されます。 出力次元は、語彙内に存在する一意の単語ベクトルの合計数です。
変数 prev_memory は internal_state (前のシーケンスのメモリ) を参照します。 他のパラメータにも初期化値が与えられます。 input_weight 勾配、internal_state_weight 勾配、output_weight 勾配は、それぞれ dU、dW、dV と名付けられます。 変数 bptt_truncate は、バックプロパゲーション中にネットワークがバックトラックしなければならないタイムスタンプの数を表します。これは、勾配消失の問題を克服するために行われます。
前方伝播 出力ベクトルと入力ベクトル たとえば、「私は遊ぶのが好きです」という文があります。語彙が次のようになっているとします。 I はインデックス 2 にマップされ、同様にインデックス 45 に、はインデックス 10 に、** はインデックス 64 に、句読点 .** はインデックス 1 にマップされます。 入力から出力までに何が起こるかを示すために、まず各単語の単語埋め込みをランダムに初期化します。
入力が完了したので、出力を検討する必要があります。 このプロジェクトでは、RNN ユニットは入力を受け取った後、次に最も可能性の高い単語を出力します。 RNN をトレーニングするために使用され、t+1 番目の単語が出力として与えられたときに t 番目の単語を入力として受け取ります。たとえば、RNN ユニットが「like」という単語を出力する場合、与えられた入力単語は「I」です。 現在、入力は埋め込みベクトルの形式になっており、損失関数を計算するために必要な出力形式はワンホットエンコードされたベクトルです。 これは、ニューラル ネットワークが単一の例文からのみ学習し、初期入力がその文の最初の単語であるため、最初の単語を除く入力文字列内のすべての単語に対して実行されます。 RNNのブラックボックス計算 重みパラメータが決まり、入力と出力がわかったので、順方向伝播の計算を開始できます。 ニューラル ネットワークのトレーニングには、次の計算が必要です。 で: U は入力重み、W は内部状態重み、V は出力重みを表します。 入力重みはinput(x)で乗算され、内部状態の重みは前の層のアクティベーション(prev_memory)で乗算されます。 レイヤー間で使用される活性化関数は tanh です。
損失関数の計算 損失関数は、次の式で表わされるクロスエントロピー損失関数を使用します。
最も重要なのは、上記のコードの 5 行目を確認することです。 ご存知のとおり、ground_truth output(y) は [0, 0, …., 1, …0] の形式であり、predicted_output(y^hat) は [0.34, 0.03, …, 0.45] の形式であるため、そこから総損失を推測するには損失が単一の値である必要があります。 これを行うには、sum 関数を使用して、特定のタイムスタンプにおける y ベクトルと y^hat ベクトルの各値の誤差の合計を取得します。 total_loss はモデル全体の損失です (すべてのタイムスタンプを含む)。 バックプロパゲーション バックプロパゲーションの連鎖律: 上の図に示すように: コストは誤差を表し、y^hat から y までの差を表します。 Cost は関数の出力であるため、活性化 a によって反映される変化は dCost/da で表されます。 実際には、これはアクティブ化されたノードの観点からの変更(エラー)値を意味します。 同様に、a の z に対する変化は da/dz として表され、z の w に対する変化は dw/dz として表されます。 最終的に、私たちが気にするのは、重みの変化(誤差)がどれだけ大きいかということです。 重量とコストには直接的な関係がないため、期間中の相対的な変化値を直接乗算することができます(上記の式に示すように)。 RNNのバックプロパゲーション RNN には 3 つの重みがあるため、3 つの勾配が必要です。 input_weights(dLoss/dU)、internal_state_weights(dLoss/dW)、およびoutput_weights(dLoss/dV)の勾配。 これら 3 つのグラデーションの連鎖は次のように表すことができます。 dLoss/dy_unactivated コードは次のとおりです。
2 つの勾配関数を計算します。1 つは multiplication_backward、もう 1 つは additional_backward です。 multiplication_backward の場合、2 つのパラメータが返されます。1 つは重みに関する勾配 (dLoss/dV) であり、もう 1 つはチェーン勾配です。チェーン勾配は、別の重みの勾配を計算するためのチェーンの一部になります。 addition_backward の場合、導関数を計算するときに、加算関数 (ht_unactivated) 内の個々のコンポーネントの導関数は 1 になります。たとえば、dh_unactivated / dU_frd = 1 (h_unactivated = U_frd + W_frd) であり、dU_frd / dU_frd の導関数は 1 です。 したがって、勾配を計算するには、これら 2 つの関数だけが必要です。 multiplication_backward 関数はベクトルのドット積を含む方程式に使用され、addition_backward は 2 つのベクトルの加算を含む方程式に使用されます。
これまで、RNN のバックプロパゲーションを分析して理解してきました。現在、RNN は単一のタイムスタンプに機能を実装しており、これを使用してすべてのタイムスタンプの勾配を計算できます。 以下のコードに示すように、forward_params_t は特定の時間ステップにおけるネットワークのフォワードパラメータを含むリストです。 変数 ds は重要な部分です。このコード行は、バックプロパゲーション中に必要な情報を抽出するのに役立つ、以前のタイムスタンプでの隠し状態を考慮に入れます。
RNN の場合、勾配消失の問題のため、元のバックプロパゲーションの代わりに切り捨てられたバックプロパゲーションが使用されます。 この手法では、現在のセルは 1 つのタイムスタンプだけを参照するのではなく、k 個のタイムスタンプのみを参照します。ここで、k は参照する前のセルの数を表します。
体重更新 バックプロパゲーションを使用して勾配を計算したら、バッチ勾配降下法によって重みを更新することが必須です。
トレーニングシーケンス 上記の手順をすべて完了したら、ニューラル ネットワークのトレーニングを開始できます。 トレーニングに使用される学習率は静的ですが、ステップ減衰などの動的な方法を使用して学習率を変更することもできます。
おめでとう!これで、リカレント ニューラル ネットワークをゼロから構築できました。 次に、LSTM や GRU などの高度なアーキテクチャに移ります。 |
<<: ボストン・ダイナミクスのロボット犬はまもなく腕が生え、走って充電できるようになる
>>: 産業用 AI が将来、精製業界にどのような力を与えるか
中国の研究チームは、女性の外見だけに基づいてその性格特性を予測できる人工知能プログラムを立ち上げたと...
現地時間10月12日、テスラのCEO、イーロン・マスク氏はツイッターで「約束通り、完全自動運転機能(...
[[437809]]動的視覚推論、特にオブジェクト間の物理的な関係についての推論は、コンピューター ...
AIは現在ニュースでよく取り上げられています。現在、AIは医療診断、新しい化学物質の合成、群衆の中に...
[[373822]] 2020年が終わりを迎えました。今年、人工知能(AI)分野は浮き沈みに富み、常...
「トランスフォーマーの挑戦者」MambaがMacBookで実行できるようになりました!誰かが Git...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
「メタバース」という概念は昨年、海外で爆発的に広まりました。国内の専門家も、我が国の関連技術の開発...
テクノロジーによりシステム効率が大幅に向上し、ビジネス運営のコスト効率と時間効率が向上しました。テク...
[51CTO.comからのオリジナル記事] 5G+AIoTを中核とするさまざまなインテリジェント技術...