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

PyTorchによる中級ディープラーニング

Michal Oleszak

Machine Learning Engineer

リカレントニューロン

  • フィードフォワードネットワーク
  • RNN: 逆向きの接続を持つ
  • リカレントニューロン:
    • 入力 x
    • 出力 y
    • 隠れ状態 h
  • PyTorchでは: nn.RNN()

単純なRNNニューロンのスキーマ:重みと活性化関数を適用するニューロンが入力xを受け取り、出力yとhを生成し、hは自身にフィードバックされる。

PyTorchによる中級ディープラーニング

時間方向へのリカレントニューロンの展開

リカレントニューロンのスキーマ。タイムステップ0でh0とx0を入力として受け取り、y0とh1を出力する。

PyTorchによる中級ディープラーニング

時間方向へのリカレントニューロンの展開

リカレントニューロンのスキーマ。タイムステップ1でh1とx1を入力として受け取り、y1を出力する。

PyTorchによる中級ディープラーニング

時間方向へのリカレントニューロンの展開

リカレントニューロンのスキーマ。タイムステップ2でh2とx2を入力として受け取り、y2とh3を出力する。

PyTorchによる中級ディープラーニング

ディープRNN

2つのリカレントニューロンで構成される層のスキーマ。各タイムステップで出力yが次のニューロンに渡される。

PyTorchによる中級ディープラーニング

Sequence-to-sequenceアーキテクチャ

  • シーケンスを入力し、出力シーケンス全体を使用する
  • : リアルタイム音声認識

アーキテクチャのスキーマ:各タイムステップで新しい入力があり、各タイムステップで生成された全出力yが緑でマーク。

PyTorchによる中級ディープラーニング

Sequence-to-vectorアーキテクチャ

  • シーケンスを入力し、最後の出力のみを使用する
  • : テキストのトピック分類

アーキテクチャのスキーマ:各タイムステップで新しい入力があり、最後のタイムステップの出力yのみが緑でマーク。

PyTorchによる中級ディープラーニング

Vector-to-sequenceアーキテクチャ

  • 単一の入力を渡し、出力シーケンス全体を使用する
  • : テキスト生成

アーキテクチャのスキーマ:最初のタイムステップにのみ入力があり、各タイムステップで生成された全出力yが緑でマーク。

PyTorchによる中級ディープラーニング

エンコーダ・デコーダアーキテクチャ

  • 入力シーケンス全体を渡してから出力シーケンスを使用する
  • : 機械翻訳

アーキテクチャのスキーマ:エンコーダ部では各タイムステップで入力を受け取るが出力は無視され、デコーダ部では入力を受け取らず各タイムステップの出力を全て使用する。

PyTorchによる中級ディープラーニング

PyTorchでのRNN

class Net(nn.Module):
    def __init__(self):
        super().__init__()

self.rnn = nn.RNN( input_size=1, hidden_size=32, num_layers=2, batch_first=True, )
self.fc = nn.Linear(32, 1)
def forward(self, x): h0 = torch.zeros(2, x.size(0), 32)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :]) return out
  • __init__メソッドでモデルクラスを定義する
  • リカレント層 self.rnn を定義する
  • 線形層 fc を定義する
  • forward()で最初の隠れ状態をゼロで初期化する
  • 入力と最初の隠れ状態をRNN層に通す
  • RNNの最後の出力を選択し、線形層に通す
PyTorchによる中級ディープラーニング

さあ、練習しましょう!

PyTorchによる中級ディープラーニング

Preparing Video For Download...