Fundamentos

Inicialização, normalização e residuais

Um residual stream carrega o hidden state intocado por todas as 64 camadas enquanto a RMSNorm entrega a cada subcamada uma cópia reescalada — o arranjo que torna a profundidade treinável no Qwen3.8-27B.

Atualizada em

01 · Conceito

Conceito

Aqui vai uma pergunta com resposta alarmante. O Qwen3.8-27B empilha 64 camadas, cada uma carregando um hidden state de 5120 dimensões por token (Qwen3.8-27B Model Card, 2026). Suponha que cada camada, em média, multiplique por 1,1 a escala do que passa por ela — uma amplificação de dez por cento, que soa inofensiva. Depois de 64 camadas o sinal foi multiplicado por 1.1644461.1^{64}\approx446. Agora suponha que o fator seja 0,9: 0.9640.00120.9^{64}\approx0.0012, e o sinal sumiu. Profundidade compõe. Uma rede não perdoa pequenos erros de escala; ela os eleva à potência da própria profundidade, no forward pass e de novo no backward pass, onde os mesmos produtos governam se um gradiente chega à camada um.

Três mecanismos administram isso, cada um atacando uma parte diferente do problema: a inicialização define a escala inicial, a normalização controla a escala em evolução, e conexões residuais encurtam o caminho.

A inicialização primeiro, porque ela precisa fazer duas coisas ao mesmo tempo. Ela tem de quebrar simetria — se toda unidade de uma camada começa idêntica, elas recebem gradientes idênticos e permanecem duplicatas para sempre — e tem de controlar variância. Esquemas conscientes de variância escalam pesos aleatórios pelo fan-in, o número de conexões que chegam, e às vezes pelo fan-out: Xavier/Glorot para ativações simétricas, escalonamento no estilo He para compensar o fato de a ReLU descartar cerca de metade do sinal. Essas são premissas de partida, não garantias, porque gating, profundidade residual e precisão perturbam todos a propagação. Biases costumam ser zero, já que a aleatoriedade nos pesos já quebra a simetria.

Agora a ideia estrutural que tornou possível a profundidade de verdade. Uma conexão residual computa

y=x+F(x)y=x+F(x)

quando os shapes batem. Leia isso como uma afirmação sobre responsabilidade: o trabalho do bloco é computar uma correção a ser somada ao que já existe, e não reconstruir a representação do zero. Se FF não contribui com nada útil, a informação ainda flui intocada pelo caminho identidade. No backward, a derivada de yy em relação a xx contém um termo identidade aditivo, então o gradiente alcança camadas anteriores sem ter de sobreviver ao produto de toda jacobiana intermediária.

Isso cria o que os praticantes chamam de residual stream: um vetor de 5120 de largura por token que entra no embedding, viaja a profundidade inteira do modelo, e é escrito por toda subcamada no caminho. Cada bloco de attention ou feed-forward lê dele, computa alguma coisa e soma o resultado de volta. Nada o sobrescreve. O stream é a memória de trabalho do modelo, e as 64 camadas são 128 contribuições sucessivas a ele.

O que levanta a questão de escala de novo, numa forma mais aguda. Se um bloco recém-iniciado soma ao stream uma contribuição de magnitude comparável a cada passo e as contribuições são aproximadamente independentes, a variância do stream se acumula aditivamente — ou seja, sua magnitude RMS cresce como profundidade\sqrt{\text{profundidade}}, de modo que na camada 64 ela está cerca de oito vezes o que era na camada um. Subcamadas fundo na pilha receberiam entradas uma ordem de magnitude maiores que subcamadas perto da entrada, e toda matriz de pesos teria de lidar com escalas de operação muito diferentes dependendo de onde ela por acaso estivesse.

A normalização é a resposta, e a colocação dela é o design inteiro. Um bloco pre-norm computa

y=x+F(Norm(x)),y=x+F(\operatorname{Norm}(x)),

que é o que o Qwen3.8-27B usa (Qwen3.8-27B Model Card, 2026). A normalização fica no ramo, não no stream. Cada subcamada recebe uma cópia reescalada do hidden state — sempre numa magnitude familiar, esteja ela na camada 3 ou na camada 61 — enquanto o stream em si segue pelo caminho identidade sem operação alguma aplicada a ele.

O normalizador específico é o RMSNorm. Para um vetor oculto xx com dd entradas ele computa

RMSNorm(x)=x1di=1dxi2+εg,\operatorname{RMSNorm}(x)=\frac{x}{\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^{2}+\varepsilon}}\odot g,

com um ganho aprendido por feature gg e um estabilizador pequeno ε\varepsilon, convencionalmente em torno de 10610^{-6}. Passe um vetor por ele. Digamos que o hidden state de um token na camada 40 tenha valor RMS de 12,0 ao longo das suas 5120 entradas. O denominador é 144+106=12.0\sqrt{144+10^{-6}}=12.0 em qualquer precisão que importe, então toda entrada é dividida por 12 e a subcamada vê um vetor de RMS unitário. Agora considere uma posição quase morta cujas entradas estão todas em torno de 10510^{-5}: a média dos quadrados é 101010^{-10}, dez mil vezes menor que ε\varepsilon, então o epsilon domina a raiz quadrada e a saída é escalada para baixo rumo a zero em vez de explodir por uma divisão por quase nada. É precisamente esse o trabalho do epsilon — ele não é um remendo de arredondamento, é a guarda que mantém a operação definida no fundo da faixa.

Note o que a RMSNorm não faz: ela nunca subtrai a média. A LayerNorm centraliza o vetor de features antes de escalar; a RMSNorm apenas reescala.

O erro clássico aqui é de colocação. O Transformer original usava post-norm, y=Norm(x+F(x))y=\operatorname{Norm}(x+F(x)), que põe uma operação de normalização no próprio stream. Funciona, e em profundidade moderada funciona bem. Mas destrói o caminho identidade limpo: o gradiente fluindo para trás agora precisa atravessar uma normalização em cada um dos 64 passos, e as pilhas profundas resultantes são notoriamente frágeis de treinar, exigindo warmup cuidadoso e às vezes falhando de vez. Mover a norm para o ramo — a mudança de uma linha do post-norm para o pre-norm — restaura a rodovia aditiva desobstruída, e é por isso que pre-norm é o padrão em essencialmente todo modelo grande lançado desde então.

Esses mecanismos são infraestrutura, e importa que você os leia como tal. Nenhum deles decide o que o modelo aprende. Eles tornam a composição profunda numericamente sobrevivível para que os blocos de attention e feed-forward da track 4 possam gastar o orçamento de otimização aprendendo transformações úteis em vez de lutar contra o colapso. A lição 4.10 volta a esse arranjo com o bloco transformer completo à vista.

Uma checagem empírica é barata e vale construir cedo. Antes do treinamento, empurre entradas representativas pelo modelo e registre médias de ativação por camada, valores RMS e normas de gradiente após uma loss. Procure colapso monotônico, crescimento explosivo, ramos mortos e descontinuidades nas somas residuais — e rode isso na precisão em que você de fato vai treinar, já que o arredondamento em bf16 faz parte do sistema que você está testando.

02 · Analogia

Analogia

Um revezamento de cem pessoas fracassa se cada corredor amplifica ou enfraquece a passagem do bastão de forma imprevisível. A inicialização escolhe uma força inicial sensata. A normalização recalibra os níveis de features de cada passagem. Um caminho residual mantém uma pista desobstruída na qual o bastão viaja inalterado enquanto um corredor acrescenta uma correção. Juntos, eles não decidem para onde a corrida vai; eles impedem que a mensagem e o sinal de treino desapareçam ou explodam ao longo da equipe.

03 · Explique de volta

Explique de volta

Explique por que empilhar 64 transformações é numericamente perigoso, como um residual stream pre-norm resolve isso, e o que a RMSNorm computa, incluindo o papel do seu epsilon.

Mínimo: 80 caracteres e 15 palavras. Seu texto fica somente neste navegador.

Aguardando sua explicação.

Comparar com uma resposta-modelo

Compor muitas transformações multiplica seus fatores de escala, então ativações e gradientes encolhem ou explodem geometricamente com a profundidade. Um bloco residual computa x + F(Norm(x)): o hidden state viaja por um caminho aditivo desobstruído, e cada subcamada recebe uma cópia reescalada em vez do stream bruto. A RMSNorm divide o vetor de features de um token pela raiz da média dos quadrados das suas próprias entradas, com um epsilon pequeno dentro da raiz — 1e-6 no Qwen3.8-27B — para manter a divisão finita quando o vetor está perto de zero, e depois aplica uma escala aprendida por feature. Diferente da LayerNorm, ela não subtrai a média, então é uma operação diferente, e não meramente mais barata.

04 · Teste seu entendimento

Teste seu entendimento

01A lição 2.7 mencionou que parâmetros de escala de normalização geralmente vão para um grupo sem weight decay no otimizador. Por que isso faz sentido?
Resposta e explicação

Eles definem a escala de operação do sinal normalizado em vez de atuarem como pesos de features, então encolhê-los rumo a zero suprime sistematicamente a saída da camada — O decay serve para desencorajar pesos de features grandes; aplicado a um parâmetro de ganho, ele reescala silenciosamente a camada inteira, o que é uma intervenção diferente.

02Num bloco residual pre-norm, o que a normalização de fato normaliza?
Resposta e explicação

A cópia do hidden state entregue à subcamada — o residual stream em si segue sem normalização — O stream segue acumulando contribuições e tipicamente cresce com a profundidade; só o que cada subcamada lê é reescalado, e é por isso que existe uma norm final antes do output head.

03O que uma conexão residual acrescenta?
Resposta e explicação

Um atalho identidade em torno de uma transformação aprendida, dando caminho direto tanto ao sinal quanto ao gradiente — O bloco aprende uma correção ao stream em vez de reconstruir a representação inteira do zero.

Conclua o teach-back e acerte o quiz para finalizar a aula.

◎ · Marcador de evidência

Fontes

  1. Jimmy Lei Ba, Jamie Ryan Kiros e Geoffrey E. Hinton (2016). Layer Normalization.
  2. Biao Zhang e Rico Sennrich (2019). Root Mean Square Layer Normalization.
  3. Kaiming He, Xiangyu Zhang, Shaoqing Ren e Jian Sun (2015). Deep Residual Learning for Image Recognition.
  4. Qwen Team (2026). Qwen3.8-27B Model Card.