Použití derivací k aktualizaci parametrů modelu

Introduction to Deep Learning with PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Analogie pro derivace

$$

Derivace představuje sklon křivky

$$

  • Strmé svahy (červené šipky):
    • Velké kroky, derivace je vysoká
  • Mírnější svahy (zelené šipky):
    • Malé kroky, derivace je nízká
  • Dno údolí (modrá šipka):
    • Rovné, derivace je nulová

$$

obrázek údolí

Introduction to Deep Learning with PyTorch

Konvexní a nekonvexní funkce

Toto je konvexní funkce

příklad konvexní funkce

Toto je nekonvexní funkce

příklad nekonvexní funkce se zvýrazněným globálním minimem

Introduction to Deep Learning with PyTorch

Propojení derivací a trénování modelu

  • Výpočet ztráty při dopředném průchodu během trénování

$$ Výpočet ztráty

Introduction to Deep Learning with PyTorch

Propojení derivací a trénování modelu

  • Gradienty pomáhají minimalizovat ztrátu, ladit váhy a bias vrstev
  • Opakujeme, dokud vrstvy nejsou vyladěné

$$ Výpočet gradientů

Introduction to Deep Learning with PyTorch

Koncepty zpětného šíření

$$

  • Uvažujme síť se třemi vrstvami:

    • Začneme s gradienty ztrát pro $L2$
    • Pomocí $L2$ vypočítáme gradienty $L1$
    • Opakujeme pro všechny vrstvy ($L1$, $L0$)

Diagram zpětného šíření

Introduction to Deep Learning with PyTorch

Zpětné šíření v PyTorchi

# 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
Introduction to Deep Learning with PyTorch

Ruční aktualizace parametrů modelu

# 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

$$

  • Přístup ke gradientu každé vrstvy
  • Násobení rychlostí učení
  • Odečtení tohoto součinu od váhy
Introduction to Deep Learning with PyTorch

Gradientní sestup

  • Pro nekonvexní funkce se používá gradientní sestup

  • PyTorch to zjednodušuje pomocí optimalizátorů

    • Stochastický gradientní sestup (SGD)
import torch.optim as optim

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

# Perform parameter updates optimizer.step()
Introduction to Deep Learning with PyTorch

Pojďme procvičovat!

Introduction to Deep Learning with PyTorch

Preparing Video For Download...