Använda derivator för att uppdatera modellparametrar

Introduktion till djupinlärning med PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

En analogi för derivator

$$

Derivatan representerar kurvans lutning

$$

  • Branta lutningar (röda pilar):
    • Stora steg, derivatan är hög
  • Flackare lutningar (gröna pilar):
    • Små steg, derivatan är låg
  • Dalbotten (blå pil):
    • Plant, derivatan är noll

$$

en bild av en dal

Introduktion till djupinlärning med PyTorch

Konvexa och icke-konvexa funktioner

Det här är en konvex funktion

exempel på en konvex funktion

Det här är en icke-konvex funktion

exempel på en icke-konvex funktion med globalt minimum markerat

Introduktion till djupinlärning med PyTorch

Kopplingen mellan derivator och modellträning

  • Beräkna förlusten i det framåtgående passet under träning

$$ Beräkning av förlust

Introduktion till djupinlärning med PyTorch

Kopplingen mellan derivator och modellträning

  • Gradienter minimerar förlusten och justerar lagrets vikter och bias
  • Upprepa tills lagren är finjusterade

$$ Beräkning av gradienter

Introduktion till djupinlärning med PyTorch

Koncept inom backpropagation

$$

  • Tänk dig ett nätverk med tre lager:

    • Börja med förlustgradienter för $L2$
    • Använd $L2$ för att beräkna $L1$-gradienter
    • Upprepa för alla lager ($L1$, $L0$)

Diagram över backpropagation

Introduktion till djupinlärning med PyTorch

Backpropagation i 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
Introduktion till djupinlärning med PyTorch

Uppdatera modellparametrar manuellt

# 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

$$

  • Hämta gradienten för varje lager
  • Multiplicera med inlärningshastigheten
  • Subtrahera produkten från vikten
Introduktion till djupinlärning med PyTorch

Gradientnedstigning

  • För icke-konvexa funktioner används gradientnedstigning

  • PyTorch förenklar detta med optimerare

    • Stokastisk gradientnedstigning (SGD)
import torch.optim as optim

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

# Perform parameter updates optimizer.step()
Introduktion till djupinlärning med PyTorch

Nu kör vi en övning!

Introduktion till djupinlärning med PyTorch

Preparing Video For Download...