Demonstrações interativas da aula de overfitting, underfitting e regularização
Três visualizações que acompanham os slides: o efeito da capacidade do modelo e da penalidade L2 em regressão polinomial, o early stopping monitorando a loss de validação de um MLP treinado ao vivo, e o dropout amostrando sub-redes aleatórias. Notação dos slides: ℒ̃(θ) = ℒ(θ) + λ·Ω(θ), ΩL2 = ‖θ‖₂², máscara de dropout m ∼ Bernoulli(1−p).
Ajustamos um polinômio de grau d a 25 pontos de treino gerados por y = sin(2πx) + ε. O grau controla a capacidade: d baixo subajusta (viés alto), d alto sem regularização sobreajusta (variância alta), exatamente o trade-off da aula. A penalidade L2 entra na solução fechada de ridge, w = (XᵀX + λI)⁻¹Xᵀy, sem penalizar o termo de viés. Aumente λ com d alto e observe a curva suavizar e ‖w‖² despencar.
Treino (ciano), validação (laranja, vazado), função real (tracejado) e ajuste ridge (roxo)
MSE de treino e de validação vs grau d (escala log, λ atual)
💡 Com λ = 0, arraste d até 15 e veja o U clássico no gráfico da direita: o MSE de treino sempre cai, o de validação volta a subir. Depois fixe d = 15 e aumente λ: o melhor MSE de validação reaparece sem reduzir a capacidade, é o ponto do slide sobre o efeito de aumentar λ.
Um MLP superparametrizado (1 entrada → 24 unidades tanh → 1 saída) é treinado aqui no navegador com gradiente descendente sobre 14 pontos ruidosos. Como nos slides, monitoramos a loss em um conjunto de validação: a loss de treino cai monotonicamente, mas a de validação atinge um mínimo e volta a subir quando o modelo começa a se ajustar ao ruído. Parar cedo tem efeito análogo a L2, pois impede que os pesos cresçam indiscriminadamente. O botão de restaurar volta aos pesos da melhor época, que é o que o early stopping com patience faz na prática.
Treino (ciano), validação (laranja), função real (tracejado) e ajuste atual do MLP (roxo)
Loss de treino e de validação por época (escala log); marcador na melhor época
💡 Deixe treinar bastante até a curva roxa interpolar o ruído, depois clique em ⏮ e compare o ajuste restaurado com o sobreajustado. O patamar da loss de validação fica perto de σ², o componente irredutível de ruído da decomposição viés-variância da aula. A loss de treino cai abaixo dele justamente porque o modelo memoriza o ruído.
Durante o treinamento, unidades das camadas ocultas são desligadas aleatoriamente: equivale a multiplicar as ativações por uma máscara binária m ∼ Bernoulli(1−p). A cada forward, uma sub-rede diferente é ativada, efeito similar a treinar um ensemble implícito. Em inferência é preciso compensar a escala: multiplicar as ativações de teste por (1−p), ou equivalentemente dividi-las em treino por (1−p) (inverted dropout, padrão em PyTorch e Keras). Amostre máscaras na rede 2-6-6-1 abaixo e observe quantas conexões cada sub-rede mantém.
Rede 2-6-6-1: unidades desligadas pela máscara aparecem tracejadas, sem conexões
💡 Com p = 0.5, cada forward usa em média metade das unidades ocultas, e duas máscaras consecutivas quase nunca coincidem: nenhuma unidade pode depender de uma parceira específica para corrigir seus erros, o que reduz coadaptação. A animação dá a intuição do ensemble: o modelo final se comporta como uma média de muitas sub-redes.