Rețele neuronale recurente

Deep Learning intermediar cu PyTorch

Michal Oleszak

Machine Learning Engineer

Neuron recurent

  • Rețele feed-forward
  • RNN-uri: au conexiuni înapoi
  • Neuron recurent:
    • Intrare x
    • Ieșire y
    • Stare ascunsă h
  • În PyTorch: nn.RNN()

Schema unui neuron RNN simplu: neuronul aplică ponderi și activare, primește intrarea x și produce ieșirile y și h, unde h este retrimis înapoi în el însuși.

Deep Learning intermediar cu PyTorch

Desfășurarea neuronului recurent în timp

Schema neuronului recurent. La pasul de timp 0, primește intrările h0 și x0 și produce ieșirile y0 și h1.

Deep Learning intermediar cu PyTorch

Desfășurarea neuronului recurent în timp

Schema neuronului recurent. La pasul de timp 1, primește intrările h1 și x1 și produce ieșirea y1.

Deep Learning intermediar cu PyTorch

Desfășurarea neuronului recurent în timp

Schema neuronului recurent. La pasul de timp 2, primește intrările h2 și x2 și produce ieșirile y2 și h3.

Deep Learning intermediar cu PyTorch

RNN profunde

Schema a două neuroni recurenți care formează un strat. La fiecare pas de timp, ieșirile y sunt transmise unui alt neuron.

Deep Learning intermediar cu PyTorch

Arhitectură secvență-la-secvență

  • Se introduce o secvență la intrare, se utilizează întreaga secvență de ieșire
  • Exemplu: Recunoașterea vocii în timp real

Schema arhitecturii: la fiecare pas de timp există o nouă intrare, iar toate ieșirile y produse la fiecare pas sunt marcate cu verde ca utilizate.

Deep Learning intermediar cu PyTorch

Arhitectură secvență-la-vector

  • Se introduce o secvență la intrare, se utilizează doar ultima ieșire
  • Exemplu: Clasificarea temelor din text

Schema arhitecturii: la fiecare pas de timp există o nouă intrare, iar doar ultima ieșire y de la ultimul pas este marcată cu verde ca utilizată.

Deep Learning intermediar cu PyTorch

Arhitectură vector-la-secvență

  • Se introduce o singură intrare, se utilizează întreaga secvență de ieșire
  • Exemplu: Generare de text

Schema arhitecturii: există o singură intrare, la primul pas de timp, iar toate ieșirile y produse la fiecare pas sunt marcate cu verde ca utilizate.

Deep Learning intermediar cu PyTorch

Arhitectură encoder-decoder

  • Se introduce întreaga secvență de intrare, apoi se utilizează secvența de ieșire
  • Exemplu: Traducere automată

Schema arhitecturii: în prima parte (encoder), intrările sunt primite la fiecare pas, dar ieșirile sunt ignorate; în a doua parte (decoder), nu mai există intrări, dar toate ieșirile de la fiecare pas sunt utilizate.

Deep Learning intermediar cu PyTorch

RNN în PyTorch

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
  • Definirea clasei modelului cu metoda __init__
  • Definirea stratului recurent, self.rnn
  • Definirea stratului liniar, fc
  • În forward(), inițializarea primei stări ascunse cu zerouri
  • Transmiterea intrării și primei stări ascunse prin stratul RNN
  • Selectarea ultimei ieșiri RNN și transmiterea prin stratul liniar
Deep Learning intermediar cu PyTorch

Să exersăm!

Deep Learning intermediar cu PyTorch

Preparing Video For Download...