Використання похідних для оновлення параметрів моделі

Вступ до Deep Learning з PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

Аналогія для похідних

$$

Похідна показує крутість кривої

$$

  • Круті схили (червоні стрілки):
    • Великі кроки, похідна велика
  • Пологі схили (зелені стрілки):
    • Малі кроки, похідна мала
  • Дно долини (синя стрілка):
    • Пласко, похідна дорівнює нулю

$$

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

Вступ до Deep Learning з PyTorch

Опуклі та неопуклі функції

Це опукла функція

приклад опуклої функції

Це неопукла функція

приклад неопуклої функції з позначеним глобальним мінімумом

Вступ до Deep Learning з PyTorch

Зв'язок похідних і навчання моделі

  • Обчисліть втрати у прямому проході під час навчання

$$ Обчислення втрат

Вступ до Deep Learning з PyTorch

Зв'язок похідних і навчання моделі

  • Градієнти допомагають мінімізувати втрати, налаштовувати ваги та зміщення шарів
  • Повторюйте, поки шари не будуть налаштовані

$$ Обчислення градієнтів

Вступ до Deep Learning з PyTorch

Поняття зворотного поширення

$$

  • Розгляньмо мережу з трьох шарів:

    • Почніть із градієнтів втрат для $L2$
    • Використайте $L2$ для обчислення градієнтів $L1$
    • Повторіть для всіх шарів ($L1$, $L0$)

Схема зворотного поширення

Вступ до Deep Learning з PyTorch

Зворотне поширення в PyTorch

# Запустіть прямий прохід 
model = nn.Sequential(nn.Linear(16, 8),
                      nn.Linear(8, 4),
                      nn.Linear(4, 2))
prediction = model(sample)


# Обчисліть втрати та градієнти criterion = CrossEntropyLoss() loss = criterion(prediction, target) loss.backward()
# Отримайте градієнти кожного шару
model[0].weight.grad
model[0].bias.grad
model[1].weight.grad
model[1].bias.grad
model[2].weight.grad
model[2].bias.grad
Вступ до Deep Learning з PyTorch

Ручне оновлення параметрів моделі

# Крок навчання зазвичай малий
lr = 0.001

# Оновіть ваги
weight = model[0].weight
weight_grad = model[0].weight.grad


weight = weight - lr * weight_grad
# Оновіть зміщення bias = model[0].bias bias_grad = model[0].bias.grad
bias = bias - lr * bias_grad

$$

  • Отримайте градієнт кожного шару
  • Помножте на крок навчання
  • Відніміть цей добуток від ваги
Вступ до Deep Learning з PyTorch

Градієнтний спуск

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

  • PyTorch спрощує це за допомогою оптимізаторів

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

# Створіть оптимізатор
optimizer = optim.SGD(model.parameters(), lr=0.001)

# Виконайте оновлення параметрів optimizer.step()
Вступ до Deep Learning з PyTorch

Давайте потренуємось!

Вступ до Deep Learning з PyTorch

Preparing Video For Download...