Uma RNN, ou rede neural recorrente, é uma rede neural feita para sequências como texto, fala ou séries temporais. Em cada passo, ela combina a entrada atual com um estado oculto do passo anterior, de modo que a saída possa depender do que veio antes.

Essa é a ideia principal: uma RNN tem uma memória em andamento. Uma LSTM é um tipo de RNN com portas que gerencia essa memória com mais cuidado quando informações importantes precisam sobreviver por muitos passos.

O que uma RNN faz em cada passo de tempo

No passo de tempo tt, uma RNN simples atualiza seu estado oculto com uma regra como

ht=tanh(Wxxt+Whht1+b).h_t = \tanh(W_x x_t + W_h h_{t-1} + b).

Aqui, xtx_t é a entrada atual, ht1h_{t-1} é o estado oculto anterior e hth_t é o novo estado oculto. As matrizes WxW_x e WhW_h e o viés bb são aprendidos durante o treinamento.

Se o modelo também produz uma saída em cada passo, uma forma comum é

yt=Wyht+c.y_t = W_y h_t + c.

A regra exata da saída depende da tarefa. Alguns problemas precisam de uma saída por passo, enquanto outros usam apenas o estado oculto final.

Por que o estado oculto importa

Uma rede feedforward vê uma entrada e segue em frente. Uma RNN reutiliza parte do seu cálculo anterior. É essa reutilização que a torna útil para texto, fala, séries temporais e outros dados ordenados.

Você pode pensar no estado oculto como uma anotação compacta que o modelo escreve para si mesmo após cada passo. O passo seguinte lê essa anotação, a atualiza e passa a versão revisada adiante.

Se você mudar a ordem das mesmas entradas, os estados ocultos geralmente também mudam. A ordem da sequência importa.

Exemplo resolvido de RNN

RNNs reais normalmente usam vetores e ativações não lineares. Para manter as contas fáceis de ler, use um estado de brinquedo com um único número:

ht=0.5ht1+xt,h0=0.h_t = 0.5 h_{t-1} + x_t, \quad h_0 = 0.

Agora processe a sequência x1=2x_1 = 2, x2=1x_2 = -1, x3=3x_3 = 3.

Primeiro passo:

h1=0.5(0)+2=2.h_1 = 0.5(0) + 2 = 2.

Segundo passo:

h2=0.5(2)+(1)=0.h_2 = 0.5(2) + (-1) = 0.

Terceiro passo:

h3=0.5(0)+3=3.h_3 = 0.5(0) + 3 = 3.

O que importa aqui não é a fórmula exata. É a dependência do estado anterior. No passo 2, a atualização não usa apenas x2x_2; ela também usa o que foi carregado do passo 1. Essa é a ideia central de uma RNN.

Se você trocar a ordem e usar x1=1x_1 = -1, x2=2x_2 = 2, x3=3x_3 = 3, então

h1=1,h2=0.5(1)+2=1.5,h3=0.5(1.5)+3=3.75.h_1 = -1, \quad h_2 = 0.5(-1) + 2 = 1.5, \quad h_3 = 0.5(1.5) + 3 = 3.75.

O estado final é diferente, mesmo com os mesmos números aparecendo. É exatamente por isso que RNNs são modelos de sequência, e não modelos do tipo bag-of-inputs.

Por que RNNs básicas têm dificuldade com sequências longas

Em uma RNN básica, informações antigas precisam sobreviver a muitas atualizações repetidas. Se a sequência for longa, isso pode ser difícil. Sinais úteis podem desaparecer e, durante o treinamento, os gradientes também podem encolher ou explodir ao longo de muitos passos.

É por isso que RNNs simples costumam ter dificuldade quando a tarefa depende de informações de muito antes na sequência. O problema não é que a recorrência esteja errada. O problema é que memória de longo alcance é difícil de manter com uma atualização simples do estado oculto.

Como a LSTM melhora a memória da RNN

Uma LSTM, sigla para long short-term memory, é uma RNN com portas. Ela introduz um caminho de memória mais estruturado, geralmente chamado de estado da célula, além de portas que controlam quais informações são esquecidas, quais novas informações são escritas e qual parte é exposta como saída.

Você não precisa das equações completas das portas para entender a ideia. O projeto dá ao modelo mais controle sobre a memória. Se um detalhe precisa sobreviver por muitos passos, uma LSTM está mais preparada para mantê-lo do que uma RNN simples.

Isso não significa que uma LSTM se lembre de tudo para sempre. Significa que a arquitetura é melhor em aprender quando preservar informações e quando descartá-las.

RNN vs. LSTM em linguagem simples

Uma RNN básica tem um único estado em andamento e o atualiza repetidamente. Uma LSTM adiciona um mecanismo de memória mais forte em torno dessa ideia.

Se a sequência for curta e a dependência for local, uma RNN simples pode ser suficiente. Se a tarefa depender de informações de muito antes na sequência, uma LSTM costuma ser a escolha mais segura.

Erros comuns sobre RNN e LSTM

Achar que uma RNN vê a sequência inteira de uma vez

Geralmente não. A visão padrão é de processamento passo a passo, com o estado sendo carregado adiante.

Supor que a LSTM resolve a memória perfeitamente

Ela ajuda com dependências de longo alcance, mas ainda é um modelo treinado com capacidade finita e limites práticos.

Ignorar a ordem da sequência

RNNs são feitas para dados ordenados. Embaralhar os elementos da sequência muda o cálculo.

Tratar o estado oculto como uma memória legível por humanos

O estado oculto é uma representação numérica aprendida, não um resumo limpo em forma de frase.

Quando RNNs e LSTMs são usadas

Elas são usadas em problemas de sequência como modelagem de linguagem, fala, escrita à mão, fluxos de sensores e previsão de séries temporais. Hoje, muitas tarefas de linguagem usam transformers no lugar delas, mas RNNs e LSTMs ainda importam porque ensinam memória de sequência com clareza e ainda podem ser úteis em contextos menores ou especializados.

Tente sua própria versão

Escreva uma sequência de quatro passos e aplique a regra de brinquedo ht=0.5ht1+xth_t = 0.5 h_{t-1} + x_t. Depois troque a ordem de duas entradas e compare o estado final. Esse pequeno experimento deixa o papel da recorrência muito mais claro do que a sigla sozinha.

Se quiser explorar outro caso, compare esta página com uma explicação sobre transformer ou cadeia de Markov e observe o que cada modelo faz com informações passadas.

Precisa de ajuda com um problema?

Envie sua pergunta e receba uma solução verificada, passo a passo, em segundos.

Abrir GPAI Solver →