Redes Neurais

Segunda playlist com o Dr. Francisco Boldt (a primeira foi Reconhecimento de Padrões), agora na disciplina de Redes Neurais. Mesmo estilo de sempre: código na mão, ao vivo, na aula, sem slide de fórmula pronta. Se você já leu a playlist anterior, sabe exatamente o que esperar.

O livro de referência muda: aqui eu uso Neural Networks and Deep Learning: A Textbook, do Charu Aggarwal (2018), pra fazer o papel que o Bishop fazia na playlist passada, encher de fundamento o que o notebook só mostra em código. Boa parte do assunto também conecta direto com o que eu já vi antes: regra delta e regressão linear já apareceram lá no Reconhecimento de Padrões, e funções de custo já apareceram na especialização do Andrew Ng, então sempre que der eu vou puxar esses fios em vez de reensinar do zero.

Os notebooks vêm do repositório da matéria, pablobelmiro/aulasann, um fork do repositório original do próprio Dr. Boldt, fboldt/aulasann, onde ele publica o código de cada aula. Mesma convenção da playlist anterior: quem "faz" o código é sempre ele, o professor; a explicação de fundamento é minha.

Um detalhe importante dessa vez: essa disciplina está sendo dada agora, ao vivo, e o repositório só tem o começo do curso até este momento (perceptron, Adaline, funções de custo, multiclasse, o limite do XOR, o MLP que finalmente resolve esse limite (primeiro com pesos escondidos escolhidos na mão, depois sorteados via ELM), e por fim a camada escondida aprendendo de verdade via backpropagation, generalizada pra qualquer profundidade). Diferente da playlist de Reconhecimento de Padrões, que eu comecei só depois que a matéria inteira já tinha acabado, essa aqui é uma playlist viva: cresce toda vez que o professor publica uma aula nova, e eu volto pra continuar. Começamos pelo começo de tudo: o neurônio mais simples que existe.

Playlists · 11 posts

  1. Perceptron: o Primeiro Neurônio que Aprende Sozinho

    Aula 1a: o professor implementa o Perceptron Learning Algorithm do zero, sem bias. Eu conto a história de dois papers que vêm antes dele e encontro um bug real escondido na condição de parada do algoritmo.

  2. Bias e Vetorização: Destravando o Perceptron

    Aula 2a e 2b: o professor adiciona bias ao perceptron (resolvendo exatamente o limite que fechou a aula passada) e depois vetoriza a atualização de peso inteira, trocando o laço ponto a ponto por uma única conta em cima de todo o dataset.

  3. Da Classificação pra Regressão, e a Solução em Uma Linha

    Aula 2c e 2d: o professor troca o sinal binário pela reta contínua (regressão linear) e depois substitui gradiente descendente inteiro por uma única conta fechada, a equação normal via pseudo-inversa.

  4. Adaline: Treinar na Reta, Classificar no Sinal

    Aula 2e e 2f: o professor treina o Adaline ajustando uma reta contínua nos rótulos ±1 (em vez de ajustar direto no sinal), e eu conecto isso com a regra delta que já apareceu na outra playlist. No fim, um dataset artificialmente enviesado revela que o problema nunca foi o algoritmo de treino.

  5. Trocando a Função de Custo Como Quem Troca de Roupa

    Aula 3a e 3b: o professor generaliza o treino pra aceitar qualquer função de custo plugável, e cada escolha (Widrow-Hoff, critério do perceptron, log-verossimilhança, hinge) recupera um algoritmo diferente dessa playlist. No meio do caminho, achei uma incompatibilidade real entre função de ativação e codificação de rótulo.

  6. Multiclasse: Quando um Peso Vira uma Matriz

    Aula 3c: reusar o classificador binário direto num problema de 4 classes trava exatamente na acurácia de chute aleatório, 25%. A correção é generalizar peso de vetor pra matriz, um conjunto de pesos por classe, e trocar sign() por argmax.

  7. XOR: Onde um Neurônio Só Bate a Cabeça na Parede

    Aula 3d: o mesmo perceptron que aprende OR e AND sem esforço trava em XOR, preso em 50% de acurácia, pesos praticamente zerados. Fecho essa leva da playlist exatamente no limiar antes do MLP, o gancho que o próximo post já resolve.

  8. A Sigmoide Foi Consertada, a Hinge Perdeu a Margem

    Aula 4a: o professor volta e conserta exatamente a incompatibilidade entre sigmoide e rótulo ±1 que eu achei na aula passada. Só que, conferindo linha por linha, a correção da hinge loss escondeu um problema novo: ela virou, sem querer, o critério do perceptron de novo.

  9. Duas Retas Escondidas Resolvem o XOR (e Nem Precisam Ser Treinadas)

    Aula 4c, 4d e 4e: o gancho que fechei lá no post do XOR finalmente se paga. Um MLP de verdade resolve o problema, primeiro com pesos escondidos escolhidos na mão, depois com pesos escondidos sorteados (ELM), a camada de saída sempre resolvida pela mesma equação normal do post 3.

  10. A Camada Escondida Também Aprende (o Pulo do Gato do Backprop)

    Aula 5a e 5b: depois de ver a camada escondida sorteada (ELM) ou escolhida na mão, chega a vez dela aprender de verdade, o erro final é repartido entre os neurônios escondidos e volta pra ajustar cada um deles. É esse mecanismo que o próprio professor batiza, no código, de pulo do gato.

  11. Generalizando pra Qualquer Profundidade: o Mesmo Loop Resolve Tudo

    Aula 5c: o pulo do gato do post passado resolvia só uma camada escondida. Aqui ele vira um laço que funciona pra zero, uma, duas ou qualquer número de camadas, e um dataset bem mais difícil mostra por que, às vezes, uma camada só não é suficiente.