Essencial
RNNs, estado de tamanho fixo e o vanishing gradient
Uma rede recorrente é a resposta de estado fixo da lição 3.1 — o projeto que perdeu para attention na treinabilidade e que o Qwen3.8-27B hoje roda em 48 das suas 64 camadas.
Atualizada em
01 · Conceito
Conceito
A lição 3.1 formulou a pergunta do estado e esboçou duas respostas extremas. Esta lição leva a sério a resposta de tamanho fixo, descobre exatamente por que ela perdeu a discussão de 2017 e então reporta algo surpreendente: o projeto que perdeu roda hoje em três quartos das camadas do modelo deste curso.
Uma rede neural recorrente é a implementação mínima de um estado carregado e limitado:
Uma transição, reutilizada em toda posição. Leia isso como um misturador de sequência: informação da posição 12 só chega à posição 40.000 tendo sobrevivido dentro de por 39.988 aplicações da mesma função. A memória é constante, o trabalho por token é constante, e nada é armazenado por posição. A aritmética da lição 3.1 já disse o preço — o canal limitado — então esta lição trata do segundo preço, que acabou sendo pior.
Desenrole as equações e algo importante fica visível: uma RNN sobre uma sequência de comprimento é uma rede de profundidade cujas camadas compartilham parâmetros. Tempo de sequência e profundidade de rede são o mesmo eixo. Tudo o que a lição 2.8 disse sobre efeitos que se compõem ao longo de 64 camadas vale aqui ao longo de 40.000 passos.
Para aprender que um token inicial causou um erro tardio, o treino usa backpropagation through time: desenrolar o grafo, diferenciar e acumular as contribuições de gradiente de cada uso das matrizes compartilhadas. A derivada do estado de volta até o estado contém uma jacobiana por passo intermediário, todas multiplicadas.
Ponha números nisso, no cenário mais simples possível. Tome uma recorrência escalar . Cada passo contribui com um fator , e como é no máximo um, o fator é no máximo . Faça e olhe ao longo de 50 passos: o produto é no máximo . Esse valor continua representável em bf16, cuja faixa de expoentes coincide com a do float32, mas é um sinal de aprendizagem relativo extremamente pequeno e pode ser encoberto quando acumulado com contribuições muito maiores. O estado inicial recebe pouquíssima informação utilizável sobre como deveria mudar para reduzir uma loss cinquenta passos adiante — é o problema do vanishing gradient. Agora faça . O produto chega a , então uma atualização pode ficar grande o bastante para desestabilizar o treino: exploding gradients. Entre os dois há uma faixa estreita, e o a estreita ainda mais, porque uma unidade saturada contribui com derivada perto de zero e puxa o produto para baixo mesmo com um bem escolhido.
Repare com cuidado no que falhou e no que não falhou. O estado para a frente ainda pode carregar informação utilizável sobre o passado distante. O que quebra é a atribuição de crédito: o treino não consegue descobrir qual computação inicial mudar. É por isso que o problema é invisível num diagrama de forward pass e fatal na prática.
Aqui vem o desvio clássico, e ele é quase universal entre quem encontra essas duas falhas pela primeira vez. O treino explode, você adiciona gradient clipping, o treino estabiliza, e você conclui que a patologia do gradiente está resolvida. Não está. Gradient clipping reescala um gradiente cuja norma passa de um limiar — ele age depois da diferenciação, sobre a magnitude. No clipping de norma padrão, o fator de escala é limitado a um: gradientes grandes encolhem, enquanto gradientes pequenos permanecem inalterados. Isso controla a explosão e é prática padrão por bons motivos, mas não faz nada pelo vanishing porque não consegue reconstruir informação já atenuada pelo produto longo de jacobianas. O diagnóstico que separa os dois casos: rode uma tarefa sintética com um único marcador relevante posicionado a distâncias crescentes da previsão, e trace tanto a acurácia quanto a norma do gradiente no marcador contra a distância. Se a curva desaba na direção do acaso com clipping ligado, o crédito distante nunca foi restaurado, e nenhum ajuste de limiar de clipping vai mudar isso.
As mitigações que de fato atacam o vanishing atacam o produto em si, não a saída dele. Inicialização ortogonal mantém a jacobiana recorrente perto de preservar norma no começo. Backpropagation truncado encurta a janela desenrolada, o que poupa memória e computação enquanto limita explicitamente até onde o crédito pode viajar — uma limitação real, que pertence ao modelo reportado e não é uma otimização de graça. Caminhos aditivos de estado, que a lição 3.3 constrói com gates, deixam um componente atravessar passos sem passar por uma transformação não linear completa a cada vez. E attention, que chega na lição 3.5, contorna a cadeia inteira criando uma aresta direta entre posições distantes.
Attention venceu, e venceu por dois motivos ao mesmo tempo: removeu o produto longo do caminho do gradiente e tornou o treino paralelo entre posições, já que a representação de cada posição pode ser calculada simultaneamente em vez de esperar pela anterior. A execução sequencial foi possivelmente a derrota mais decisiva — um projeto que não consegue saturar um acelerador moderno durante o treino perde independentemente dos seus outros méritos.
A aritmética que torna o reparo valioso é a da lição 3.1. Um estado de tamanho fixo custa o mesmo no token um e no token 262.144; no Qwen3.8-27B as camadas recorrentes somam cerca de 144 MiB de estado float32 de referência no total, constante no comprimento da sequência, enquanto as keys e values armazenadas das camadas de attention chegam a 16 GiB no contexto completo, como a lição 7.2 deriva. Esse abismo é a razão pela qual alguém se deu ao trabalho de consertar a RNN, e vale levá-lo para as próximas quatro lições.
02 · Analogia
Analogia
Um recado atravessa cinquenta pessoas numa corrente de sussurros. Cada uma aplica o mesmo hábito: suaviza as palavras fortes, enfatiza as familiares e passa adiante um resumo encurtado. Se cada repasse retém oitenta por cento de um detalhe, depois de muitos passos ele praticamente desaparece; se cada repasse o amplifica, o recado explode. O sinal que volta pela rede numa RNN atravessa transformações repetidas do mesmo jeito, então a atribuição de crédito a longa distância depende de um produto de sensibilidades locais.
03 · Explique de volta
Explique de volta
Descreva a RNN como resposta à pergunta do estado, mostre por que backpropagation through time produz um produto de jacobianas, e distinga o que o clipping conserta do que ele não consegue consertar.
Comparar com uma resposta-modelo
Uma RNN calcula h_t = φ(W_hh h_{t−1} + W_xh x_t + b) com uma única transição compartilhada, então o estado que ela carrega é um vetor de tamanho fixo e o custo por token é constante no comprimento. Aprender que um token inicial causou um erro tardio exige backpropagation through time, cuja derivada de um estado tardio até um estado inicial é um produto de uma jacobiana por passo intermediário. Se os fatores relevantes ficam abaixo de um, o produto decai geometricamente até zero e o crédito distante desaparece; acima de um, ele cresce e o treino desestabiliza. Gradient clipping limita a magnitude depois da diferenciação, então controla a explosão mas não recria um sinal já atenuado na direção de zero — as duas falhas precisam de correções diferentes, e é por isso que gates e caminhos aditivos de estado vieram em seguida.
04 · Teste seu entendimento
Teste seu entendimento
Conclua o teach-back e acerte o quiz para finalizar a aula.
◎ · Marcador de evidência
Fontes
- Yoshua Bengio, Patrice Simard e Paolo Frasconi (1994). Learning long-term dependencies with gradient descent is difficult.
- Qwen Team (2026). Qwen3.8-27B Model Card.
- Google Cloud (2026). bfloat16 floating-point format.
- PyTorch (2026). torch.nn.utils.clip_grads_with_norm_.