Что такое backpropagation (обратное распространение ошибки)?

«Что такое backpropagation (обратное распространение ошибки)?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Backpropagation (обратное распространение ошибки) — это ключевой алгоритм обучения нейронных сетей, основанный на методе градиентного спуска. Он эффективно вычисляет градиент функции потерь по всем весам сети, распространяя ошибку от выходного слоя назад к входному, используя цепное правило дифференцирования (chain rule).

Основные шаги алгоритма:

  1. Прямой проход (forward pass): Входные данные проходят через сеть, на каждом слое вычисляется взвешенная сумма и применяется функция активации. В конце получается предсказание модели.
  2. Вычисление ошибки: Рассчитывается значение функции потерь (loss function), сравнивающей предсказание с истинным значением.
  3. Обратный проход (backward pass): Вычисляются частные производные функции потерь по каждому весу сети, начиная с выходного слоя и двигаясь назад. Это и есть backpropagation.
  4. Обновление весов: Полученные градиенты используются оптимизатором (например, SGD, Adam) для обновления весов в направлении, уменьшающем ошибку.

Пример на PyTorch:

import torch
import torch.nn as nn

# Простая модель: один полносвязный слой
model = nn.Linear(in_features=2, out_features=1)
# Функция потерь и оптимизатор
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# Данные
X = torch.tensor([[1.0, 2.0]])
y_true = torch.tensor([[3.0]])

# 1. Прямой проход
optimizer.zero_grad()  # Обнуляем градиенты с предыдущего шага
y_pred = model(X)

# 2. Вычисление ошибки
loss = criterion(y_pred, y_true)
print(f'Loss: {loss.item()}')

# 3. Обратный проход (backpropagation)
loss.backward()  # Автоматически вычисляет градиенты для всех параметров с requires_grad=True

# 4. Обновление весов
optimizer.step()

Практические проблемы и решения:

  • Исчезающий/взрывающийся градиент (Vanishing/Exploding Gradient): Решается использованием специфичных функций активации (ReLU), методов инициализации весов (Xavier, He) и архитектурных решений (остаточные связи в ResNet).
  • Переобучение: Борются с помощью регуляризации (L1/L2), Dropout и увеличения обучающей выборки.