Обратное распространение ошибки (backpropagation) — это базовый алгоритм обучения нейронных сетей с учителем. Сеть получает входные данные, выдаёт предсказание, сравнивает его с правильным ответом и вычисляет ошибку. Затем эта ошибка передаётся от выходного слоя к входному, и на каждом слое веса корректируются так, чтобы в следующий раз ошибка была меньше.
Как это работает
Процесс состоит из двух фаз. В прямом проходе сигнал идёт от входа к выходу: каждый нейрон умножает входы на свои веса, суммирует их и применяет функцию активации. На выходе получается предсказание, которое сравнивается с целевым значением через функцию потерь — например, среднеквадратичную ошибку.
В обратном проходе вычисляется градиент функции потерь по каждому весу с помощью правила цепочки. Ошибка «распространяется» назад: сначала корректируются веса выходного слоя, затем — скрытых слоёв, вплоть до первого. Каждый вес обновляется в направлении, противоположном градиенту, с шагом, заданным скоростью обучения (learning rate).
Зачем это нужно
Без обратного распространения многослойные сети не могли бы обучаться: не было бы способа понять, какой именно вес внёс вклад в ошибку. Алгоритм сделал возможным обучение глубоких сетей — от распознавания рукописных цифр до языковых моделей GPT. Именно backpropagation лежит в основе практически всех современных нейросетей, включая трансформеры и свёрточные архитектуры.
Примеры
- Распознавание цифр MNIST. Сеть из двух скрытых слоёв после нескольких эпох обратного распространения достигает точности выше 98% на тестовой выборке.
- Языковая модель. GPT обучается на огромном корпусе текстов: ошибка предсказания следующего токена распространяется назад через десятки слоёв, корректируя миллиарды параметров.
- Свёрточная сеть для изображений. В ResNet-50 градиенты проходят через skip-connection, что смягчает проблему затухания градиента при обратном распространении.
Формула или метрика
Обновление веса по правилу градиентного спуска:
w_new = w_old − η · ∂L/∂w
где η — скорость обучения, L — функция потерь, ∂L/∂w — градиент, вычисленный обратным распространением.
Типичные ошибки
- Слишком высокая скорость обучения. Веса «перескакивают» минимум, и ошибка не уменьшается, а колеблется или растёт.
- Игнорирование затухания градиента. В глубоких сетях без нормализации градиенты становятся близки к нулю, и нижние слои почти не обучаются.
- Отсутствие валидации. Сеть запоминает обучающую выборку (переобучение), а на новых данных показывает плохой результат.
- Неправильная инициализация весов. Если веса инициализированы нулями или слишком большими числами, обратное распространение работает неэффективно.
Как улучшить
- Используйте адаптивные оптимизаторы (Adam, RMSProp), которые автоматически подбирают скорость обучения для каждого параметра.
- Применяйте нормализацию (BatchNorm, LayerNorm) между слоями — это стабилизирует градиенты.
- Добавляйте dropout для борьбы с переобучением.
- Экспериментируйте с архитектурой: residual-связи помогают градиенту проходить через глубокие сети.
- Мониторьте кривые обучения: если ошибка на валидации растёт, а на обучении падает — это сигнал о переобучении.