Использование производных для обновления параметров модели

Введение в глубокое обучение с PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Аналогия для понимания производных

$$

Производная — это наклон кривой

$$

  • Крутые склоны (красные стрелки):
    • Большие шаги, производная велика
  • Пологие склоны (зелёные стрелки):
    • Малые шаги, производная мала
  • Дно долины (синяя стрелка):
    • Плоско, производная равна нулю

$$

изображение долины

Введение в глубокое обучение с PyTorch

Выпуклые и невыпуклые функции

Это выпуклая функция

пример выпуклой функции

Это невыпуклая функция

пример невыпуклой функции с выделенным глобальным минимумом

Введение в глубокое обучение с PyTorch

Связь производных с обучением модели

  • Вычислите потери при прямом проходе во время обучения

$$ Вычисление потерь

Введение в глубокое обучение с PyTorch

Связь производных с обучением модели

  • Градиенты помогают минимизировать потери, настраивать веса и смещения слоёв
  • Повторяйте до тех пор, пока слои не будут настроены

$$ Вычисление градиентов

Введение в глубокое обучение с PyTorch

Основы обратного распространения ошибки

$$

  • Рассмотрим сеть из трёх слоёв:

    • Начните с градиентов потерь для $L2$
    • Используйте $L2$ для вычисления градиентов $L1$
    • Повторите для всех слоёв ($L1$, $L0$)

Схема обратного распространения ошибки

Введение в глубокое обучение с PyTorch

Обратное распространение ошибки в 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
Введение в глубокое обучение с PyTorch

Обновление параметров модели вручную

# 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

$$

  • Получите градиент каждого слоя
  • Умножьте на скорость обучения
  • Вычтите результат из веса
Введение в глубокое обучение с PyTorch

Градиентный спуск

  • Для невыпуклых функций применяется градиентный спуск

  • PyTorch упрощает этот процесс с помощью оптимизаторов

    • Стохастический градиентный спуск (SGD)
import torch.optim as optim

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

# Perform parameter updates optimizer.step()
Введение в глубокое обучение с PyTorch

Давайте потренируемся!

Введение в глубокое обучение с PyTorch

Preparing Video For Download...