ディープラーニング入門 (62) リカレント ニューラル ネットワーク - ディープリカレント ニューラル ネットワーク

序文

核心的な内容はブログリンク1ブログリンク2からです作者をたくさん応援していただければ幸いです
この記事は忘れないための記録用です

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

コースウェア

要約: リカレント ニューラル ネットワーク


隠れ状態の更新: ht = ϕ ( W hhht − 1 + W hxxt − 1 ) + bh h_t=\phi(W_{hh}h_{t-1}+W_{hx}x_{t-1})+b_hh=ϕ ( Wふーんht 1+Wh ×バツt 1)+b
输出: o t = ϕ ( W h o h t + b o ) o_t=\phi(W_{ho}h_t+b_o) ああ=ϕ ( Wほら_h+bああ)

非線形性をさらに高めるにはどうすればよいでしょうか?

PLANA:単位の非線形性

ここに画像の説明を挿入
ht = ϕ ( W hhht − 1 + W hxxt − 1 ) + bh h_t=\phi(W_{hh}h_{t-1}+W_{hx}x_{t-1})+b_hh=ϕ ( Wふーんht 1+Wh ×バツt 1)+b
ot = ϕ ( W hoht + bo ) o_t=\phi(W_{ho}h_t+b_o)ああ=ϕ ( Wほら_h+bああ)

ϕ \phiを置き換えますϕ

もっと深く

ここに画像の説明を挿入
ここに画像の説明を挿入

要約する

  • ディープリカレントニューラルネットワークは、非線形性を高めるために複数の隠れ層を使用します

コースウェア

これまで、1 つの単方向隠れ層を持つリカレント ニューラル ネットワークについてのみ説明してきました。隠れた変数と観測値が特定の関数形式と相互作用する方法は、まったく任意です。インタラクションタイプのモデル化に十分な柔軟性がある限り、これは大きな問題ではありません。ただし、これは単一レイヤーでは非常に困難な場合があります。以前の線形モデルでは、レイヤーを追加することでこの問題を解決していました。そして、リカレント ニューラル ネットワークでは、まずレイヤーを追加する方法と、追加の非線形性をどこに追加するかを理解する必要があるため、この問題は少し難しくなります。

実際、リカレント ニューラル ネットワークの複数の層を積み重ねることができ、その結果、いくつかの単純な層の構成を通じて柔軟なメカニズムが得られます。特に、データは異なる層のスタックに関連する場合があります。たとえば、金融市場の状況 (弱気または強気) に関するマクロ データを利用可能な状態に保ちたい一方で、ミクロ データは短期間の時間的ダイナミクスのみをキャプチャしたい場合があります。

以下の図は、N 個の隠れ層を持つディープリカレントニューラルネットワークを示しています。各隠れ状態は、現在の層の次のタイムステップと次の層の現在のタイムステップに連続的に渡されます。
ここに画像の説明を挿入

1 機能の依存関係

上の図のLLで説明されているように、ディープ アーキテクチャでの機能の依存関係を形式化できます。それはL 個の隠れ層で構成されます。以降の議論は古典的なリカレント ニューラル ネットワーク モデルに焦点を当てますが、これらの議論は他のシーケンス モデルにも適用できます。

タイムステップttで仮定しますt には小さなバッチの入力データX t ∈ R n × d \mathbf{X}_t \in \mathbb{R}^{n \times d} がありますバツRn × d (サンプル数:nnn、各サンプルの入力数:ddd )。同時に、lthl^\mathrm{th}番目の隠れ層 (l = 1 , … , L l=1,\ldots,L=1 L)隠れ状態はH t ( l ) ∈ R n × h \mathbf{H}_t^{(l)} \in \mathbb{R}^{n \times h} に設定されます。Ht( l )Rn × h (隠れユニット数:hh)h )、出力層変数はO t ∈ R n × q \mathbf{O}_t \in \mathbb{R}^{n \times q} にRn × q (出力数:qqq)。設定H t ( 0 ) = X t \mathbf{H}_t^{(0)} = \mathbf{X}_tHt( 0 )=バツ、第11 回l隠れ層の隠れ状態は活性化関数ϕ l \phi_lϕ,则:
H t ( l ) = ϕ l ( H t ( l − 1 ) W xh ( l ) + H t − 1 ( l ) W hh ( l ) + bh ( l ) ) , \mathbf{H}_t ^{(l)} = \phi_l(\mathbf{H}_t^{(l-1)} \mathbf{W}_{xh}^{(l)} + \mathbf{H}_{t-1 }^{(l)} \mathbf{W}_{hh}^{(l)} + \mathbf{b}_h^{(l)})、Ht( l )=ϕ( Ht( l 1 )W×時間( l )+Ht 1( l )Wふーん( l )+bh( l ))
ここで、重みW xh ( l ) ∈ R h × h \mathbf{W}_{xh}^{(l)} \in \mathbb{R}^{h \times h}W×時間( l )Rh × h ,W hh ( l ) ∈ R h × h \mathbf{W}_{hh}^{(l)} \in \mathbb{R}^{h \times h}Wふーん( l )Rh × hとバイアスbh ( l ) ∈ R 1 × h \mathbf{b}_h^{(l)} \in \mathbb{R}^{1 \times h}bh( l )R1 × hは13 番目ですl 個の隠れ層のモデル パラメーター。

最後に、出力層の計算はll 番目の層のみに基づいて行われます。l 個の隠れ層の最終的な隠れ状態
: O t = H t ( L ) W hq + bq , \mathbf{O}_t = \mathbf{H}_t^{(L)} \mathbf{W}_{hq} + \mathbf{b}_q,=Ht( L )Wああ_+bq,
ここで、重みW hq ∈ R h × q \mathbf{W}_{hq} \in \mathbb{R}^{h \times q}Wああ_Rh × qとバイアスbq ∈ R 1 × q \mathbf{b}_q \in \mathbb{R}^{1 \times q}bqR1 × qは出力層のモデルパラメータです。

多層パーセプトロンと同様に、隠れ層の数LLLと隠れユニットの数hhhはハイパーパラメータです。つまり、当社で調整することが可能です。また、H t ( l ) = ϕ l ( H t ( l − 1 ) W xh ( l ) + H t − 1 ( l ) W hh ( l ) + bh ( l ) ) 、 \mathbf{H}_t を置き換えます。 ^{(l)} = \phi_l(\mathbf{H}_t^{(l-1)} \mathbf{W}_{xh}^{( l)} + \mathbf{H}_{t-1 }^{(l)} \mathbf{W}_{hh}^{(l)} + \mathbf{b}_h^{(l)}) 、Ht( l )=ϕ( Ht( l 1 )W×時間( l )+Ht 1( l )Wふーん( l )+bh( l )) の隠れ状態は、ディープゲートリカレントニューラルネットワークまたはディープ長期短期記憶ニューラルネットワークを簡単に取得できます。

2 簡潔な実装

多層リカレント ニューラル ネットワークの実装に必要な論理詳細の多くは、高レベル API ですぐに利用できます。簡単にするために、このような組み込み関数を使用した実装のみを示します。LSTM ネットワーク モデルを例にとると、このコードは LSTM セクションで前に使用したコードと非常によく似ていますが、実際の唯一の違いは、単一レイヤーのデフォルト値を使用する代わりにレイヤーの数を指定していることです。いつものように、データセットをロードすることから始めます。

import torch
from torch import nn
from d2l import torch as d2l

batch_size, num_steps = 32, 35
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)

ハイパーパラメータの選択などのアーキテクチャ上の決定も、LSTM セクションの決定と非常に似ています。異なるトークンがあるため、入力と出力の両方に同じ番号が選択されます。つまり、 ですvocab_size隠しユニットの数は256のままです。唯一の違いは、num_layers隠れ層の数を設定する値を渡すようになった点です。

vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = d2l.try_gpu()
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)

3 トレーニングと予測

LSTM ネットワーク モデルは 2 つのレイヤーのインスタンス化に使用されるため、トレーニング速度が大幅に低下します。

num_epochs, lr = 500, 2
d2l.train_ch8(model, train_iter, vocab, lr*1.0, num_epochs, device)

出力:

perplexity 1.0, 224250.2 tokens/sec on cuda:0
time travelleryou can show black is white by argument said filby
travelleryou can show black is white by argument said filby

4 まとめ

  • ディープリカレントニューラルネットワークでは、隠れ状態の情報が現在の層の次のタイムステップと次の層の現在のタイムステップに渡されます。

  • ディープリカレントニューラルネットワークには、長期短期記憶ネットワーク、ゲートリカレントユニット、古典的リカレントニューラルネットワークなど、さまざまな種類があります。これらのモデルは、深層学習フレームワークの高レベル API でカバーされています。

  • 全体として、ディープリカレントニューラルネットワークでは、適切な収束を確保するためにパラメータ(学習率や枝刈りなど)を広範囲に調整する必要があり、モデルの初期化にも注意が必要です。

おすすめ

転載: blog.csdn.net/qq_52358603/article/details/128376643
おすすめ