NeuroLógica
afiando o lápis…
Redes Neurais I — Universidade Estadual de Londrina
Pular para o conteúdo
NeuroLógica

Trabalho final · Redes Neurais I · UEL

Um neurônio aprende traçando uma reta.
O problema é quando uma reta não basta.

Esta página treina neurônios ao vivo nas sete portas lógicas. Você vê a fronteira de decisão se mexendo, a equação sendo reescrita a cada correção e o erro caindo — ou não caindo. A história tem três atos, e o segundo é uma derrota.

Ato 1

Com pesos ajustáveis, um neurônio resolve mais do que parece

Um neurônio recebe entradas, multiplica cada uma por um peso, soma tudo com um viés e decide: liga ou não liga. Geometricamente, isso é traçar uma reta e perguntar de que lado cada ponto caiu. Treinar é mover essa reta até que ela separe as classes.

A regra do Perceptron é quase grosseira na sua simplicidade: só mexe nos pesos quando erra. Acertou, não toca em nada. Por isso a reta anda aos trancos — fica parada enquanto tudo vai bem e dá um salto a cada tropeço.

O Adaline muda uma coisa só, e muda tudo: em vez de medir o erro depois da decisão, mede antes, na soma crua. Como esse número quase nunca bate exatamente com o alvo, há correção em praticamente toda iteração. A reta passa a deslizar, e o gráfico de erro troca a escada por uma curva. Troque a regra de treino no seletor e compare — é o mesmo ponto de partida.

O caso NAND, que quase ninguém conta

No neurônio original de McCulloch e Pitts, de 1943, os pesos eram fixos, escolhidos à mão. Nesse modelo o NAND exige dois neurônios encadeados: um faz AND, o outro inverte. Mas o NAND é linearmente separável — ou seja, uma reta dá conta dele. Com pesos aprendidos, um único neurônio resolve, como você pode conferir acima.

A diferença não estava na dificuldade do problema. Estava em poder ajustar os pesos. Foi exatamente esse o salto do Perceptron sobre o MCP.

Ato 2

O XOR, e o limite que nenhum treino resolve

Agora as duas classes ocupam diagonais opostas do quadrado. Tente separá-las com uma régua: não existe posição que funcione. E o que acontece quando um algoritmo persegue uma solução que não existe?

Rode o Perceptron primeiro. Ele nunca para: corrige um ponto, estraga outro, corrige de volta. O erro oscila para sempre e o treino só termina porque as épocas acabam.

Agora troque para o Adaline e repare em algo mais sutil — e mais interessante. Ele converge. O erro cai, estaciona, e a reta literalmente para de se mexer. O gradiente descendente fez tudo certo e encontrou o melhor ajuste possível. Acontece que o melhor ajuste possível é inútil.

O que o Adaline responde quando desiste

Medimos a saída da soma nos quatro pontos do XOR depois que ele estacionou:

z = [0,520   0,487   0,439   0,406]

Todos praticamente em cima de 0,5, que é justamente o limiar entre as duas classes. Não é coincidência. A melhor aproximação linear do XOR é a função constante 0,5: como nenhuma inclinação ajuda, o gradiente achata a reta e passa a responder “metade” para qualquer entrada. É o equivalente matemático de dar de ombros.

A conclusão que interessa: as duas regras de treino funcionaram como deveriam. O que falta não é treino, é arquitetura. Um neurônio traça uma reta, e o problema precisa de duas.

Ato 3

Duas retas, e o XOR deixa de ser um problema

A saída não é treinar mais, é mudar a forma da rede. Com uma camada oculta, cada neurônio traça a sua própria reta, e o neurônio de saída aprende a combinar os pedaços.

Três coisas mudam ao mesmo tempo, e elas dependem uma da outra:

  • A arquitetura. Dois neurônios ocultos, duas retas. A faixa entre elas recorta exatamente a diagonal onde moram os pontos de classe 1.
  • A função de ativação. O degrau tem derivada zero em toda parte, então não há gradiente para propagar. Sem trocar por algo diferenciável, o backpropagation nem existiria. Essa é a razão técnica de haver várias funções de ativação — não é gosto pessoal.
  • A regra de treino. Backpropagation é a regra da cadeia aplicada camada a camada: cada neurônio descobre quanto contribuiu para o erro final e repassa a responsabilidade para trás.

Mexa na arquitetura com os botões + e −. Cada neurônio mostra um mini-gráfico do que ele próprio aprendeu — toque em um deles para ampliar, e toque de novo para voltar.

Quando o treino trava — e por que isso é parte da aula

Com apenas dois neurônios ocultos, cerca de uma em cada cinco inicializações empaca: o erro trava e não sai mais do lugar. Medimos isso na fase de protótipos, testando dezenas de sementes diferentes. Não é bug — é um mínimo local.

O gradiente descendente é um método local: ele desce a encosta que está sob os pés, e nada garante que essa encosta leva ao fundo do vale. Quando isso acontece aqui, a rede detecta a estagnação e sorteia pesos novos — você vê o reinício acontecer no log. Poderíamos ter escondido o problema adicionando um terceiro neurônio, que leva a convergência a 100%. Preferimos mostrar.

Contexto

Trabalhos relacionados, e o que fizemos de diferente

TensorFlow Playground

A referência mais conhecida do gênero, do Google. É um sandbox aberto, com dados contínuos e ruidosos, sem narrativa fixa. Os pesos aparecem apenas como espessura das conexões: não há equação visível, nem pseudocódigo, nem distinção entre regras de treino.

Daqui veio a ideia dos mini-gráficos por neurônio e das conexões com espessura proporcional ao peso, que adaptamos à nossa paleta.

Perceptron Educational Lab

Do Virtual Labs, é bem mais próximo do nosso escopo: tem treino animado e até uma tela de convergência contra falha. Mas cobre só três portas (AND, OR e XOR), trata a ativação como um simples interruptor sem explicar o porquê, e pula direto do Perceptron para a rede multicamada.

A ponte que falta lá é justamente o Adaline — e é ela que torna o gradiente descendente compreensível antes do backpropagation.

O que este projeto acrescenta

  • As sete portas do curso, incluindo a nuance do NAND.
  • A progressão completa: MCP, Perceptron, Adaline e rede multicamada.
  • Equação, pesos e pseudocódigo visíveis a cada passo.
  • Uma narrativa fechada, em português, com um fracasso no meio.