Derivadas para atualizar parâmetros do modelo

Introdução ao Aprendizado Profundo com o PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Uma analogia para derivadas

$$

A derivada representa a inclinação da curva

$$

  • Inclinações íngremes (setas vermelhas):
    • Etapas grandes, a derivada é alta
  • Inclinações suaves (setas verdes):
    • Etapas pequenas, a derivada é baixa
  • Base do vale (seta azul):
    • Plano, derivada é zero

$$

uma imagem de um vale

Introdução ao Aprendizado Profundo com o PyTorch

Funções convexas e não convexas

Essa é uma função convexa

um exemplo de função convexa

Essa é uma função não convexa

um exemplo de função não convexa com mínimo global destacado

Introdução ao Aprendizado Profundo com o PyTorch

Conexão de derivativos e treinamento de modelos

  • Calcula a perda na passagem direta durante o treinamento

$$ Calculando a perda

Introdução ao Aprendizado Profundo com o PyTorch

Conexão de derivativos e treinamento de modelos

  • Gradientes minimizam a perda, ajustam pesos de camadas e vieses
  • Repita até as camadas estarem ajustadas

$$ Calcular gradientes

Introdução ao Aprendizado Profundo com o PyTorch

Conceitos de retropropagação

$$

  • Considere uma rede de três camadas:

    • Comece com gradientes de perda para $L2$
    • Use $L2$ para calcular gradientes de $L1$
    • Repita para todas camadas ($L1$, $L0$)

Diagrama de retropropagação

Introdução ao Aprendizado Profundo com o PyTorch

Retropropagação no PyTorch

# Run a forward pass 
model = nn.Sequential(nn.Linear(16, 8),
                      nn.Linear(8, 4),
                      nn.Linear(4, 2))
prediction = model(sample)


# Calculate the loss and gradients criterion = CrossEntropyLoss() loss = criterion(prediction, target) loss.backward()
# Access each layer's gradients
model[0].weight.grad
model[0].bias.grad
model[1].weight.grad
model[1].bias.grad
model[2].weight.grad
model[2].bias.grad
Introdução ao Aprendizado Profundo com o PyTorch

Atualização manual dos parâmetros do modelo

# Learning rate is typically small
lr = 0.001

# Update the weights
weight = model[0].weight
weight_grad = model[0].weight.grad


weight = weight - lr * weight_grad
# Update the biases bias = model[0].bias bias_grad = model[0].bias.grad
bias = bias - lr * bias_grad

$$

  • Acesse o gradiente de cada camada
  • Multiplique pela taxa de aprendizado
  • Subtraia esse produto do peso
Introdução ao Aprendizado Profundo com o PyTorch

Descida do gradiente

  • Para funções não convexas, usamos a descida do gradiente

  • O PyTorch simplifica isso com otimizadores

    • Descida do gradiente estocástico (SGD)
import torch.optim as optim

# Create the optimizer
optimizer = optim.SGD(model.parameters(), lr=0.001)

# Perform parameter updates optimizer.step()
Introdução ao Aprendizado Profundo com o PyTorch

Vamos praticar!

Introdução ao Aprendizado Profundo com o PyTorch

Preparing Video For Download...