Como uma rede neural aprende sem ninguém ensinar? Abri uma que joga sozinha

Cada neurônio é só uma conta, o botão apertado é a saída com o maior valor e, na evolução, ninguém corrige o cérebro: os clones que vão mais longe têm filhos com mutações aleatórias, como medi num jogo em outubro de 2026.

João Thaira

João Thaira

7 min de leitura · 26 de outubro de 2026Lido por 1 IA: Meta

Como uma rede neural aprende sem ninguém ensinar?

Eu escrevo aqui sobre treinar e ajustar modelos de linguagem. Mas eu queria entender, com número, o que acontece no nível mais baixo de todos: um neurônio. Então montei, com o Claude Code, um jogo de plataforma no estilo Mario em que uma rede neural pequena aprende sozinha a chegar à bandeira, e em que cada peso aparece na tela. Depois pausei o jogo em momentos específicos e li os números. O código está aberto e o jogo roda no navegador, então dá para repetir tudo: os links estão nas fontes, no fim.

150 clones correndo juntos na geração 224, cada um com o próprio cérebro
150 clones correndo juntos na geração 224, cada um com o próprio cérebro

O que a IA vê?

A IA não vê a tela. Ela recebe 26 números, recalculados 15 vezes por segundo. 24 vêm de uma grade de 6 blocos à frente por 4 linhas em volta dos pés, em que 1 é sólido, −1 é perigo (espinho ou inimigo) e 0 é vazio. Os outros 2 são a velocidade vertical e se ela está pisando no chão.

A grade "o que a IA vê" diante de uma parede de 2 tijolos
A grade "o que a IA vê" diante de uma parede de 2 tijolos

Na maior parte do tempo, mais de 20 desses números valem 0. Isso importa, porque 0 vezes qualquer peso dá 0: essas entradas simplesmente não contam. E há uma limitação que só percebi lendo os números: a linha do chão olha só o bloco logo abaixo dos pés, então um degrau e um buraco aparecem iguais.

O que um neurônio faz, de verdade?

Uma conta. Cada neurônio multiplica cada entrada pelo seu peso, soma tudo, soma um valor fixo chamado viés e passa o resultado pela tanh, uma função que espreme qualquer número para o intervalo de −1 a 1:

saída = tanh(viés + peso₁ × entrada₁ + … + peso₂₆ × entrada₂₆)

Todos os neurônios usam a mesma fórmula. O que diferencia um do outro são os pesos e o viés. Um exemplo com uma entrada só, "tem chão 2 blocos à frente" (1 ou 0), com peso −3 e viés +2: com chão, tanh(2 − 3) = −0,76; com buraco, tanh(2) = +0,96. Acabou de nascer um detector de buraco.

Os pesos começam sorteados perto de zero, e o viés começa em zero. A rede do jogo tem 26 entradas, 12 neurônios ocultos e 4 saídas, 376 números ao todo. Aprender é só achar bons valores para eles.

Como a rede escolhe o botão?

As 4 saídas (esperar, correr, pular e voltar) também são neurônios: fazem a mesma conta sobre os 12 neurônios ocultos, só que sem a tanh. O maior valor ganha e vira o botão apertado.

Um neurônio oculto não dispara uma ação. Ele vota em todos os botões ao mesmo tempo, com um peso para cada um. Ativação negativa vezes peso positivo é voto contra, então ficar "desligado" também é um voto. A decisão sai da soma dos 12 votos mais o viés de cada botão.

O que aconteceu dentro dela num pulo de verdade?

Pausei o campeão da geração 218 descendo em cima de um bloco de tijolo. Ele decidiu correr. O neurônio mais ativo, o 9, tem peso −2,66 na entrada "chão embaixo de mim": a soma deu −3,12 e a saída, −1,00. Ele funciona como um sinal de "tenho chão firme", e o voto dele em pular foi −0,96, contra.

O personagem em cima do bloco de tijolo, com a grade de sensores
O personagem em cima do bloco de tijolo, com a grade de sensores
O passo 3 do tour do jogo: a conta do neurônio 9 com os valores daquele instante
O passo 3 do tour do jogo: a conta do neurônio 9 com os valores daquele instante

Duas decisões depois, na beirada, ele pulou. Três entradas tinham mudado: o chão à frente sumiu, a velocidade foi a zero e ele passou a pisar no chão. O neurônio 6, que tem peso +1,49 em "chão à frente" e −2,20 em "pisando no chão", foi de +0,98 para −0,91. O 8 fez quase o mesmo. Como os dois têm pesos grandes ligados a correr, a nota de correr caiu de 7,58 para 1,31, e pular venceu com 4,76.

O curioso: o viés de pular nesse cérebro é +4,57, o maior dos quatro. Ele quer pular por padrão, e são os neurônios que seguram essa vontade quando a situação é segura. E esse pulo nem era necessário: era um degrau, não um buraco. Os olhos dele não sabem a diferença.

Cada neurônio vira especialista em alguma coisa?

Um pouco, e por acaso. Desliguei os 12 neurônios do campeão, um de cada vez, e com qualquer um desligado ele morre: metade das vezes no primeiro buraco, no bloco 11. O conhecimento fica espalhado pelo time.

Depois treinei 4 cérebros do zero e, em cada um, mostrei a mesma parede de 2 tijolos para ver qual neurônio mais empurrava o pulo:

TreinoQuem fez o trabalho
1neurônios 11 (51%) e 4 (46%)
2neurônio 10 (69%)
3neurônios 4 (47%) e 12 (39%)
4neurônios 2 (40%) e 8 (34%)

Cada vez é um neurônio diferente, às vezes dois dividindo o papel. Todos estão ligados a todos os botões desde o nascimento; o que muda é a força de cada ligação, e fica com o papel quem teve sorte primeiro.

Se ninguém corrige o erro, como ela melhora?

O clone que cai no buraco nunca fica sabendo. Durante a vida os pesos ficam congelados, e no fim da geração cada clone recebe só uma nota: os blocos que percorreu, mais um bônus se chegou à bandeira. A nota não diz onde errou nem qual peso culpar.

A nota decide quem vira pai. Os 5 melhores passam iguais para a geração seguinte. Os outros 145 filhos têm pais escolhidos por torneio (o melhor de 3 sorteados), metade mistura os pesos de dois pais, e cerca de 10% dos pesos de cada filho levam um empurrão aleatório. A mutação é cega; o aprendizado está no filtro.

Parece ingênuo, mas funciona em escala. Em 2017, pesquisadores da Uber AI Labs fizeram isso com redes profundas:

"we evolve the weights of a DNN with a simple, gradient-free, population-based genetic algorithm (GA) and it performs well on hard deep RL problems, including Atari and humanoid locomotion."
— Such et al., Deep Neuroevolution (2017)

Em português: eles evoluíram os pesos de uma rede profunda com um algoritmo genético simples, sem gradiente e baseado em população, e ele foi bem em problemas difíceis de aprendizado por reforço, como jogos de Atari e a locomoção de um humanoide. As redes deles passavam de 4 milhões de parâmetros; a minha tem 376.

O jogo também tem o outro caminho, o DQN, em que o agente recebe −5 no instante em que morre e a retropropagação calcula quanto cada peso teve de culpa. Foi esse método que, em 2013, superou um jogador humano especialista em 3 de 7 jogos de Atari (Mnih et al.).

Quantos neurônios uma rede dessas precisa?

Menos do que eu imaginava. Em outubro de 2026, treinei 4 vezes cada tamanho de camada oculta e anotei em que geração um clone chegou à bandeira pela primeira vez:

Neurônios ocultosPesos e viesesFase fácilFase com espinhos e inimigos
1351, 1, 1, 216, 17, 27, 48
41282, 6, 8, 820, 32, 80, e um não chegou em 120
123766, 7, 7, 727, 40, 54, 58
481.4924, 6, 6, 635, 46, 64, 107

Com 1 neurônio a rede aprendeu mais rápido. Essas fases pedem uma regra simples, e mais neurônios só dão mais pesos para a evolução acertar no escuro. Não medi fases novas, em que mais neurônios provavelmente ajudam a generalizar.

Um neurônio só, porém, tem um limite clássico: ele separa as situações com uma linha reta, então não resolve o XOR, que é ligar quando só uma de duas entradas vale 1. Esse limite está no centro do livro Perceptrons, de Minsky e Papert, de 1969. Com 2 neurônios ocultos e 1 de saída, o XOR sai. É para isso que existem as camadas.

redes neuraisneuroevoluçãoaprendizado por reforçoDQNalgoritmo genético
João Thaira

Escrito por

João Thaira

Mais deste blog