Użycie pochodnych do aktualizacji parametrów modelu

Wprowadzenie do uczenia głębokiego z PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Analogia do pochodnych

$$

Pochodna reprezentuje nachylenie krzywej

$$

  • Strome nachylenia (czerwone strzałki):
    • Duże kroki, pochodna jest wysoka
  • Łagodniejsze nachylenia (zielone strzałki):
    • Małe kroki, pochodna jest niska
  • Dno doliny (niebieska strzałka):
    • Płasko, pochodna wynosi zero

$$

obraz doliny

Wprowadzenie do uczenia głębokiego z PyTorch

Funkcje wypukłe i niewypukłe

To jest funkcja wypukła

przykład funkcji wypukłej

To jest funkcja niewypukła

przykład funkcji niewypukłej z zaznaczonym globalnym minimum

Wprowadzenie do uczenia głębokiego z PyTorch

Połączenie pochodnych z trenowaniem modelu

  • Oblicz stratę w przejściu w przód podczas trenowania

$$ Obliczanie straty

Wprowadzenie do uczenia głębokiego z PyTorch

Połączenie pochodnych z trenowaniem modelu

  • Gradienty minimalizują stratę i dostrajają wagi oraz obciążenia warstw
  • Powtarzaj aż warstwy będą dostrojone

$$ Obliczanie gradientów

Wprowadzenie do uczenia głębokiego z PyTorch

Koncepcja propagacji wstecznej

$$

  • Sieć złożona z trzech warstw:

    • Zacznij od gradientów straty dla $L2$
    • Użyj $L2$ do obliczenia gradientów $L1$
    • Powtórz dla wszystkich warstw ($L1$, $L0$)

Diagram propagacji wstecznej

Wprowadzenie do uczenia głębokiego z PyTorch

Propagacja wsteczna w 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
Wprowadzenie do uczenia głębokiego z PyTorch

Ręczna aktualizacja parametrów 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

$$

  • Odczytaj gradient każdej warstwy
  • Pomnóż przez współczynnik uczenia
  • Odejmij iloczyn od wagi
Wprowadzenie do uczenia głębokiego z PyTorch

Gradient descent

  • Dla funkcji niewypukłych stosuje się gradient descent

  • PyTorch upraszcza to za pomocą optymalizatorów

    • Stochastyczny gradient descent (SGD)
import torch.optim as optim

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

# Perform parameter updates optimizer.step()
Wprowadzenie do uczenia głębokiego z PyTorch

Czas na ćwiczenia!

Wprowadzenie do uczenia głębokiego z PyTorch

Preparing Video For Download...