Redes neurais recorrentes

Aprendizagem profunda intermediária com PyTorch

Michal Oleszak

Machine Learning Engineer

Neurônio recorrente

  • Redes feed-forward
  • RNNs: têm conexões que apontam de volta
  • Neurônio recorrente:
    • Entrada x
    • Saída y
    • Estado oculto h
  • No PyTorch: nn.RNN()

Esquema de um neurônio RNN simples: o neurônio aplica pesos e ativação, recebe x e produz y e h; h é retroalimentado nele mesmo.

Aprendizagem profunda intermediária com PyTorch

Desenrolando o neurônio no tempo

Esquema do neurônio recorrente. No passo de tempo 0, recebe h0 e x0 e produz y0 e h1.

Aprendizagem profunda intermediária com PyTorch

Desenrolando o neurônio no tempo

Esquema do neurônio recorrente. No passo de tempo 1, recebe h1 e x1 e produz y1.

Aprendizagem profunda intermediária com PyTorch

Desenrolando o neurônio no tempo

Esquema do neurônio recorrente. No passo de tempo 2, recebe h2 e x2 e produz y2 e h3.

Aprendizagem profunda intermediária com PyTorch

RNNs profundas

Esquema de dois neurônios recorrentes formando uma camada. A cada passo de tempo, as saídas y são passadas a outro neurônio.

Aprendizagem profunda intermediária com PyTorch

Arquitetura sequência-para-sequência

  • Passa sequência como entrada e usa toda a sequência de saída
  • Exemplo: reconhecimento de fala em tempo real

Esquema da arquitetura: a cada passo há uma nova entrada; todas as saídas y em cada passo estão em verde como usadas.

Aprendizagem profunda intermediária com PyTorch

Arquitetura sequência-para-vetor

  • Passa sequência como entrada e usa só a última saída
  • Exemplo: classificação de tópico de texto

Esquema da arquitetura: a cada passo há uma nova entrada; só a última saída y do último passo está em verde como usada.

Aprendizagem profunda intermediária com PyTorch

Arquitetura vetor-para-sequência

  • Passa uma única entrada e usa toda a sequência de saída
  • Exemplo: geração de texto

Esquema da arquitetura: há apenas uma entrada no primeiro passo; todas as saídas y de cada passo estão em verde como usadas.

Aprendizagem profunda intermediária com PyTorch

Arquitetura encoder-decoder

  • Passa toda a sequência de entrada e só então usa a sequência de saída
  • Exemplo: tradução automática

Esquema da arquitetura: na primeira parte (encoder), entradas chegam a cada passo mas as saídas são ignoradas; na segunda (decoder), não há mais entradas e todas as saídas de cada passo são usadas.

Aprendizagem profunda intermediária com PyTorch

RNN no 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
  • Defina a classe do modelo com __init__
  • Defina a camada recorrente, self.rnn
  • Defina a camada linear, fc
  • Em forward(), inicialize o primeiro estado oculto com zeros
  • Passe entrada e estado inicial pela camada RNN
  • Selecione a última saída da RNN e passe pela linear
Aprendizagem profunda intermediária com PyTorch

Vamos praticar!

Aprendizagem profunda intermediária com PyTorch

Preparing Video For Download...