Conceitos de IA em Python

Gradiente descendente e retropropagação em Python

Treinar é ajustar os pesos para reduzir a perda. O gradiente mostra a direção em que a perda cresce, então o gradiente descendente dá pequenos passos na direção oposta. A retropropagação usa a regra da cadeia para calcular esse gradiente para cada peso.

O conceito em palavras simples

Treinar é ajustar os pesos para reduzir a perda. O gradiente mostra a direção em que a perda cresce, então o gradiente descendente dá pequenos passos na direção oposta. A retropropagação usa a regra da cadeia para calcular esse gradiente para cada peso.

Treine um neurônio com gradiente descendente: use a regra da cadeia para descobrir como cada peso afeta a perda e desça a encosta.

Ideias principais

  • O gradiente é a inclinação da perda em relação a cada peso.
  • A taxa de aprendizado define o tamanho do passo: grande demais passa do ponto, pequena demais é lenta.
  • A retropropagação aplica a regra da cadeia da saída até a primeira camada.
  • Uma época é uma passagem por todos os dados de treinamento.

Quando usar?

  • Entender o que acontece dentro das redes neurais e das bibliotecas de IA.
  • Aprender a ideia antes de implementá-la nos desafios correspondentes.
  • Se preparar para cursos de aprendizado de máquina, entrevistas e projetos.

Veja na prática

Clique em Executar para treinar. A reta se aproxima dos pontos enquanto o caminho laranja desce o relevo da perda até o ponto mais baixo.

Código de exemplo

Executar código →
main.py
# Train one neuron y = w * x + b to fit points on the line y = 2x + 1.
data = [(0, 1), (1, 3), (2, 5), (3, 7)]
w, b = 0.0, 0.0
learning_rate = 0.05

for epoch in range(1, 201):
    grad_w = grad_b = 0.0
    for x, y in data:
        error = (w * x + b) - y          # prediction minus target
        # Chain rule: d(error²)/dw = 2 * error * x, d(error²)/db = 2 * error
        grad_w += 2 * error * x
        grad_b += 2 * error
    # Step against the gradient to make the loss smaller.
    w -= learning_rate * grad_w / len(data)
    b -= learning_rate * grad_b / len(data)
    if epoch in (1, 10, 50, 200):
        loss = sum(((w * x + b) - y) ** 2 for x, y in data) / len(data)
        print(f"epoch {epoch:>3}: w={w:.3f} b={b:.3f} loss={loss:.4f}")

Saída esperada

epoch   1: w=0.850 b=0.400 loss=7.0587
epoch  10: w=2.009 b=0.958 loss=0.0009
epoch  50: w=2.005 b=0.989 loss=0.0000
epoch 200: w=2.000 b=1.000 loss=0.0000

Como funciona

Para cada ponto, o erro é a previsão menos o alvo. A regra da cadeia dá o gradiente do erro quadrático, 2·error·x para w e 2·error para b. Tirando a média sobre os dados e andando contra o gradiente, w e b se aproximam de 2 e 1, e a perda cai quase a 0.

Altere os valores e execute o programa no compilador Python online CodeUtility sem instalar Python.

Exercícios práticos

Altere as entradas e teste casos de borda antes de usar conjuntos de dados maiores.

  1. Mude as entradas ou os pesos e preveja a saída antes de executar.
  2. Imprima os valores intermediários para acompanhar cada passo do cálculo.
  3. Resolva os desafios indicados abaixo para implementar a ideia você mesmo.
Executar no IDE Python →

Pratique com um desafio

Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.

Todos os desafios