Ответ
Backpropagation (обратное распространение ошибки) — это ключевой алгоритм обучения нейронных сетей, основанный на методе градиентного спуска. Он эффективно вычисляет градиент функции потерь по всем весам сети, распространяя ошибку от выходного слоя назад к входному, используя цепное правило дифференцирования (chain rule).
Основные шаги алгоритма:
- Прямой проход (forward pass): Входные данные проходят через сеть, на каждом слое вычисляется взвешенная сумма и применяется функция активации. В конце получается предсказание модели.
- Вычисление ошибки: Рассчитывается значение функции потерь (loss function), сравнивающей предсказание с истинным значением.
- Обратный проход (backward pass): Вычисляются частные производные функции потерь по каждому весу сети, начиная с выходного слоя и двигаясь назад. Это и есть backpropagation.
- Обновление весов: Полученные градиенты используются оптимизатором (например, 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 и увеличения обучающей выборки.