ディープラーニングの実践 - リカレント ニューラル ネットワークの実践

一連の実験
深層学習の演習 - 畳み込みニューラル ネットワークの演習: クラック識別
深層学習の演習 - リカレント ニューラル ネットワークの演習
深層学習の演習 - モデル展開の最適化の演習
深層学習の演習 - モデル推論の最適化の演習

コードは次の場所にあります: https://download.csdn.net/download/weixin_51735061/88131380?spm=1001.2014.3001.5503

0 概要

**方法:** 実験は主に Python の pytorch 環境と d2l 環境を通じて実行され、コードは jupyter Notebook を使用して記述されます。RNN、GRU、および LSTM アーキテクチャの実装は、d2l によって提供されるチュートリアル コードに基づいており、データ セットの使用には d2l の「タイム マシン」データ セットが選択されます。基本的なアーキテクチャでは、より良い結果を得るために、隠れ層のエポック数、学習率、ニューロンの数を調整することにしました。基本的なリカレント ニューラル ネットワーク アーキテクチャの実装に加えて、seq2seq についても学習し、d2l チュートリアルに基づいて seq2seq の学習から推論までのプロセスを再現し、パラメーターを調整して変化を観察してみました。
ステップ:

  1. RNN アーキテクチャを構築し、パラメータを調整してより良い結果を達成する
  2. GRU アーキテクチャを構築し、パラメータを調整してより良い結果を達成する
  3. LSTM アーキテクチャを構築し、パラメータを調整してより良い結果を達成する
  4. seq2seq トレーニングと推論を実装する

1 アーキテクチャの実装

1.1 RNN アーキテクチャ

1.1.1 RNN アーキテクチャの構築

RNNアーキテクチャの実装には、教科書の指示に従い、d2lの「time machine(タイムマシン)」データを使用しました。このデータセットは、ミニバッチ トレーニングに使用できるタイム マシンに関する短い物語です。RNN のコード実装は、pytorch と d2l ライブラリを通じて実現されます。1 つ目は、d2l のデータ ロード モジュールを使用して、「タイム マシン」データをロードするためのバッチ番号とステップ サイズを提供することです。データを取得した後、pytorch で nn.RNN() を使用して RNN ニューラル層をインポートできます。ニューラル層をインポートした後、nn.Module を継承する RNNModel クラスを構築し、いくつかのトレーニング ルールとプロセスを設定します。最後に、RNNModel オブジェクトを定義し、RNN ニューラル層とデータを渡して、d2l のトレーニング関数でトレーニングします。コードは長いため、レポートには記載されていません。詳細なコードは、対応する .ipynb ファイルにあります。以下の図は、RNN アーキテクチャを構築する際のコード フロー チャートを示しています。
ここに画像の説明を挿入
初期トレーニングに使用されたパラメーター エポックの数は 500、学習率は 1、隠れ層の数は 256 です。トレーニングの結果は次のとおりです。
ここに画像の説明を挿入
上記の結果から、エポックが 500、学習率が 1 の場合、画像は 300 付近で収束し、最終的なパープレキシティは 1.3 であることがわかります。結果の出力から、そのセマンティクスは基本的に存在しないことがわかりますが、出力された単語のほぼ半分が正しいスペルを持っていることがわかります。これは、トレーニングには一定の効果があるものの、その効果はあまり良くないことを示しています。次に、より良い結果が得られるように、次のハイパーパラメータが調整されます。

1.1.2 RNN ハイパーパラメータの調整

1.1.1 のトレーニング パラメータを基本パラメータとして、エポック数 500、学習率 1、隠れ層数 256 を使用し、パラメータを上下に調整して比較します。
1 エポック数
ここでエポック数を比較対象に選んだ理由は、エポック数がモデル結果の収束性とパープレキシティに大きな影響を与えるためです。一般に、回数が多いほど勾配が下がり、学習結果が充実するほど効果は高くなりますが、回数が多いほど学習は過学習になります。また、回数が少ない場合はトレーニングが不十分なため、効果が非常に低い場合があります。次に、250回、750回、1000回を選択して検証・比較実験を行います。(詳細なコードは添付ファイルにあります。ここでは結果のみを示します)
ここに画像の説明を挿入
ここに画像の説明を挿入

「タイム・トラベラー」の予測:
(1) Epoch250: タイム・トラベラーはイフグリスタンドで帽子をかぶっているが、なぜワンワンしていた
(2) Epoch500: タイム・トラベラーは先に進んだ、どんな現実の体にも拡張情報がなければならない
(3) Epoch750: タイム・トラベラーが戻ってきてフィルビーseane Why the lyon at ingte
(4) Epoch1000: time travelerholding in whack and hareare redohat de sam e sugod
この結果から、エポックが小さい場合、モデルのトレーニングの結果への影響がより大きくなることがわかります。これによりトレーニング効果は悪化しますが、エポックが一定の数値に達すると、基本的にトレーニング結果は一定の範囲内に維持され、影響は小さくなります。

2 学習率
学習率はトレーニング結果に一定の影響を与えます 学習率が高すぎると、回数が増えるごとに結果の混乱が毎回大きく異なります 非常に混乱し、決して良い結果は得られません。また、学習率が低すぎると、同じ回数でも収束速度が遅くなります。学習率 0.01、0.1、および 10 は実験比較のために以下に選択されており、実行結果は次のとおりです。(詳細なコードは添付ファイルにあり、ここでは結果のみを示します)
ここに画像の説明を挿入
ここに画像の説明を挿入
「タイムトラベラー」の予測:
(1) lr0.01: タイムトラベラーは、ザ ザ ザ ザ ザ t
(2) lr0.1 : タイムトラベラーは次元を厚くします al merice time al sicherenre thi
(3) lr1: タイムトラベラーは任意に進みました 実体には拡張子 ingfot が必要です
( 4) lr10: タイムトラベラーohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc

この結果から、学習率が小さい場合、モデルの収束速度が遅くなることがわかります。また、予測結果に が繰り返し現れることから、結果が非​​常に悪いことがわかります。 0.1、繰り返しの単語はありませんが、基本的に単語のスペルはすべて間違っています。学習率が非常に大きい場合、混乱も非常に大きくなり、意味的な意味を持たない単語が繰り返されます。テスト途中の学習率は1が最適で、学習率が小さいとトレーニングの学習に支障をきたし、学習率が大きすぎると学習が一定値を超えて学習できないループに陥ってしまいます。より良い方法を見つけてください。

3 隠れ層のニューロンの数
一般に、隠れ層のニューロンが多いほどフィッティング効果は良くなり、隠れ層のニューロンの数が少ないほど結果は悪くなります。したがって、隠れ層のニューロンの数は非常に重要であるため、比較のために隠れ層のニューロンの数を 128、512、および 1024 に選択します。(詳細なコードは添付ファイルにあります。ここでは結果のみを示します)
ここに画像の説明を挿入
ここに画像の説明を挿入
「タイムトラベラー」の予測:
(1) 128: time travellerit s Againsttirad and the time travellerit s all ha
(2) 256: time traveller続いて、実際の体には拡張子が必要です ingfot
(3) 512: タイムトラベラーは、引数によって黒が白であることを示すことができます フィルビー
(4) 1024: タイムトラベラーのため、彼のことを話すのが便利です
結果からわかるようになりますニューロンの数が増加すると、最終的な複雑さは減少します。収束曲線にも多少の変化があり、急激に減少する部分もあるでしょう。予測結果では、ニューロンの数は 512 個と 1024 個です。一定の意味論があり、スペルも正しいことがわかります。その理由は、ニューロンの数がフィッティング効果に関係していると個人的に考えているからです。一般に、ニューロンの数とパラメータが多いほど、フィッティング効果は高くなります。

上記のパラメーター調整に基づいて、最良のグループは 512 個と 1024 個のニューロンの組み合わせであり、他のトレーニング効果は基本パラメーターよりも悪いことがわかります。

1.2 GRU アーキテクチャ

1.2.1 GRU アーキテクチャの構築

GRUアーキテクチャの実装には、d2lの「time machine(タイムマシン)」データも使用されます。GRU は、重要なコンテンツを保存するときに回路が一部のコンテンツの入力を制限するのと同じように、RNN にいくつかの制御ユニットを追加します。アーキテクチャ実装のコードは主に d2l を参照しており、そのコードは基本的に RNN のコードと同じですが、違いはニューラル層が変更されている点です。同じ層が pytorch API を通じて呼び出されます。つまり、RNN 構築との違いは、層が nn.RNN() から nn.GRU() に変わることです。以下にフローチャートを構築します。(詳細なコードは .ipynb ファイルにあります)
ここに画像の説明を挿入
初期トレーニングに使用されるパラメーター エポックの数は 500、学習率は 1、隠れ層の数は 256 です。トレーニングの結果は次のとおりです。
ここに画像の説明を挿入
上記の結果から、エポックが 500、学習率が 1 の場合、画像は 250 に近づくと収束し、最終的なパープレキシティは 1 になることがわかります。結果の出力から、スペルは基本的に正しく、特定のセマンティクスを備えていることがわかります。これは、トレーニングには一定の効果があり、その効果は RNN よりも優れていることを示しています。

1.2.2 GRU ハイパーパラメータの調整


GRU ハイパーパラメータの調整は基本的に RNN と同様であり、パラメータ選択の理由も同様であり、以下は1 エポック回のパラメータ調整結果と「タイムトラベラー」の予測です
ここに画像の説明を挿入
ここに画像の説明を挿入
:
(1) Epoch250: 時間traveleris cofr mensthe 4 次元 do net goout the l
(2) Epoch500: タイムトラベラーのため、彼について話すのは便利です
(3) Epoch750: ほんの少し陽気さが加わったタイムトラベラー、本当に thi
(4) Epoch1000: 時間ほんの少し陽気な旅人、本当にこれ

その法則は基本的に RNN の法則と一致していますが、その開始点の効果は RNN より優れていることがわかります。

2 学習率
ここに画像の説明を挿入
ここに画像の説明を挿入
「タイムトラベラー」の予測の場合:
(1) lr0.01: タイムトラベラー teeteeteeteeteet
(2) lr0.1: time travelerre the the the the the the the the the the the the
(3) lr1: travelleryou can show black is white by argument Said filby
(4) lr10: time travelerohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc ohc oh
この結果は基本的に RNN と一致しますが、違いはパープレキシティのサイズにあります。
3 隠れ層のニューロンの数
ここに画像の説明を挿入
ここに画像の説明を挿入
「タイム トラベラー」の予測の場合:
(1) 128: タイム トラベラー、理由に反して、言われたフィルビー、そこにあるものは
(2) 256: トラベラー、引数で黒が白であることを示すことができます、言われたフィルビー
(3) 512: タイムトラベラーだから彼のことを話すと便利です
(4) 1024: ほんの少し明るさが加わったタイムトラベラー、本当にこれ

この結果から、結果は基本的に同じであることがわかりますが、128 と 512 の混乱度は他の 2 つよりも低く、128 は過小適合による可能性があり、512 は過適合である可能性があります。
上記の調整パラメーターに基づいて、最適なグループは 512 個のニューロンの組み合わせであることがわかります。

1.3 LSTM アーキテクチャ

1.3.1 LSTMアーキテクチャの構築

LSTMアーキテクチャの実装には、d2lの「time machine(タイムマシン)」データも使用されます。LSTMは長短期記憶ネットワークとも呼ばれ、特定の記憶機能を持っています。GRU と比較して、LSTM はより複雑で、より多くのゲート システムを備えているため、同じパラメータ データの下で LSTM のトレーニング時間は GRU よりも長くなる可能性がありますが、それに対応するトレーニング効果はより優れている可能性があります。次に、d2l の LSTM モジュールを使用して、LSTM アーキテクチャをすばやく構築します。(詳細なコードは .ipynb ファイルにあります)
ここに画像の説明を挿入
初期トレーニングに使用されるパラメーター エポックの数は 500、学習率は 1、隠れ層の数は 256 です。トレーニングの結果は次のとおりです。
ここに画像の説明を挿入
上記の結果から、エポックが 500、学習率が 1 の場合、画像は 250 に近づくと収束し、最終的なパープレキシティは 1 になることがわかります。結果の出力から、スペルは基本的に正しく、特定のセマンティクスを備えていることがわかります。このことから、訓練には一定の効果があり、その効果は RNN よりも優れており、基本的には GRU と同様の効果があることがわかります。

1.3.2 LSTM ハイパーパラメータの調整

LSTM のハイパーパラメータの調整は基本的に RNN と同様であり、パラメータの選択理由も同様であるため、パラメータの調整結果を以下に示します。
1 エポック
ここに画像の説明を挿入
ここに画像の説明を挿入
「タイムトラベラー」の予測:
(1) エポック 250: タイムトラベラーは、バータルでそれをイングス ドゥー ダウスト ヒックのように鳴らします
(2) エポック 500: タイムトラベラーは、フィルビーと議論することで黒が白であることを示すことができます
(3) エポック 750: 時間traveler fich wi har hive Tree yyinn waid the peos co vepr
(4) Epoch1000: タイムトラベラーは議論によって黒が白であることを示すことができます フィルビーは
基本的に減少する形を示していることがわかりますが、750 になると困惑度が高くなりますどちらも非常に良いですが、これは偶然と関係がある可能性があり、それを証明するにはさらに多くの実験が必要です。
2 学習率
ここに画像の説明を挿入
ここに画像の説明を挿入
「タイムトラベラー」の予測の場合:
(1) lr0.01: タイムトラベラー teeteeteeteeteet
(2) lr0.1: time travelerre the the the the the the the the the the the the
(3) lr1: travelleryou canフィルビーが言った議論によって黒が白であることを示す
(4) lr10: time traveler for so it will be easy to talk about hiswas e
GRU や RNN とは異なり、LSTM アーキテクチャの学習率は学習率の増加とともに学習効果が増加することがわかります。 rate 効果が大きいほど良いですが、他の 2 つは範囲内です。または、アーキテクチャの内部ネットワーク層に関連している可能性があります。

3 「タイムトラベラー」に関する隐藏层神经元の数
ここに画像の説明を挿入
ここに画像の説明を挿入
:
(1)128: タイムトラベラーライスは私に沿って彼のフェクリンディフェイスの痕跡を追跡し
ます (2)256: トラベラーあなたは議論によって黒が白であることを証明できます フィルビー
(3)512: タイムトラベラーあなたフィルビー
(4)1024: タイムトラベラーにとって、彼について話すのは便利でしょう。

1.4 3 つのアーキテクチャの比較

上記のパラメータ調整実験からわかるように、RNN は GRU や LSTM よりも明らかに劣っています。GRU と LSTM は収束能力と効果が優れており、予測の有効性も優れています。GRU と LSTM の比較は上記の実験では明らかではありませんが、より複雑なデータセットで 2 つのグループの長所と短所をテストすることは可能かもしれません。ただし、パラメータ調整実験では、学習率の調整に関して GRU と LSTM の間に明らかな違いがあり、GRU では、最良の学習率は 1、最悪の学習率は 10 ですが、LSTM は 1 と 10 で同じ効果があります。これは、2 つのネットワーク層の違いによるものである可能性があります。

2 系列間学習

シーケンス間モデルは、出力シーケンスと入力シーケンスの間の不一致を解決するために使用できるエンコーダーとデコーダーに基づくモデルであり、一般に翻訳に使用されます。sequence-to-sequence モデルの構築とトレーニングについては、d2l チュートリアルで行いましたが、チュートリアルのコードでは、まず入力と出力を処理するためのエンコーダーとデコーダーを定義する必要があります。次に、損失関数にマスキング関数を備えたクロスエントロピー関数を設定し、トレーニング関数に組み込みます。最後に、トレーニングが実行され、予測中の予測効果を定量化するために BLEU スコアリング関数が定義されます。コード構築の流れを以下の図に示します。(.ipynb ファイル内の具体的なコードを参照してください)
ここに画像の説明を挿入
以下は、隠れ層の数が 2、ニューロンの数が 256、学習率が 0.005、エポックが 300 の結果です。
ここに画像の説明を挿入
以下は予測結果です.
ここに画像の説明を挿入
bleu が大きいほど予測効果が高いことがわかります. 最初の 2 つの値は 1 で、予測効果が非常に優れていることを示しますが、後の 2 つの値は正しい翻訳を確認したところ、出力されたフランス語の翻訳効果が良くないことがわかりました。理由を注意深く観察すると、後の 2 つの単語が前の 2 つの単語よりわずかに長いため、後者の効果が低いことが原因である可能性があり、この seq2seq モデルには最適化の余地があることがわかります。

3 実験結果

この実験では、「タイム マシン」データ セットをトレーニングするために RNN、GRU、および LSTM アーキテクチャが構築されました。トレーニング プロセス中、より良い結果が得られるように、エポック、学習率、ニューロンの数の 3 つのパラメータが継続的に調整されました。異なるパラメータの比較に加えて、異なるアーキテクチャ間の比較も実行されます。3 つの古典的なサイクリック ニューラル ネットワーク モデルの構築に加えて、エンコーダーとデコーダーを含むモデルである seq2seq も学習し、対応する結果を得るためにトレーニングと推論を実行しました。
最終的な結果では、少数のエポックは実験結果に悪影響を及ぼしますが、エポックが一定のサイズに達すると、その影響は徐々に減少するか、無関係になることがわかりました。RNN と GRU の場合、学習率の最適値は約 1 ですが、LSTM の場合、学習率が 10 の場合でも LSTM は良好な結果を得ることができますが、他の 2 つは学習率が 10 の場合に最良の結果が得られることがわかります。は10です。悪いです。ニューロンの数が結果に及ぼす影響については、上記の実験内容からその効果が最も大きいことがわかりますが、一般的にニューロンの数が多いほど効果は高くなりますが、これもまた可能性があります。ニューロンが多いほど、よりよく適合するためです。seq2seq の学習については、最終的なトレーニング予測結果から、このモデルは短い文に対しては優れた予測効果を持っていますが、長い文に対しては非常に効果が低いことがわかり、このモデルには改善の余地があることがわかります。 。

おすすめ

転載: blog.csdn.net/weixin_51735061/article/details/132010502