Открыть сервис

Алгоритм обратного распространения ошибки

Алгоритм обратного распространения ошибки (англ. backpropagation, backprop) — это итеративный метод обучения многослойных искусственных нейронных сетей, основанный на вычислении градиента функции ошибки (функции потерь) по всем весам сети с последующей корректировкой этих весов в направлении, противоположном градиенту. Является одним из фундаментальных алгоритмов в области машинного обучения и глубокого обучения, позволяя эффективно обучать сети с произвольным числом скрытых слоёв.

История

Основные математические принципы, лежащие в основе обратного распространения, были независимо разработаны несколькими исследователями в 1960–1970-х годах. В 1960 году Генри Келли и Артур Брайсон в контексте теории оптимального управления применили метод динамического программирования для обучения многослойных систем. В 1969 году А. И. Галушкин в СССР опубликовал работу, в которой описал метод, аналогичный обратному распространению, для обучения персептронов.

Однако ключевой прорыв произошёл в 1986 году, когда Дэвид Румельхарт, Джеффри Хинтон и Рональд Уильямс опубликовали статью «Learning representations by back-propagating errors». В ней они чётко сформулировали алгоритм и продемонстрировали его эффективность для решения задачи XOR (исключающее ИЛИ), которая ранее считалась неразрешимой для однослойных персептронов. Эта работа вызвала «вторую волну» интереса к нейросетевым технологиям. В 2018 году Джеффри Хинтон и Йошуа Бенжио (вместе с Яном Лекуном) получили Премию Тьюринга за вклад в развитие глубокого обучения, в основе которого лежит обратное распространение.

Математическая основа

Функция потерь

Цель обучения сети — минимизация функции потерь (или ошибки) \(E\), которая количественно оценивает разницу между выходными значениями сети и целевыми (эталонными) значениями из обучающей выборки. Для задач регрессии часто используется среднеквадратичная ошибка (MSE), для задач классификации — кросс-энтропия.

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

Алгоритм обратного распространения реализует метод градиентного спуска. Веса сети \(w_{ij}\) обновляются по правилу:

\[ w_{ij}^{(new)} = w_{ij}^{(old)} - \eta \frac{\partial E}{\partial w_{ij}} \]

где \(\eta\) — скорость обучения (learning rate), а \(\frac{\partial E}{\partial w_{ij}}\) — частная производная ошибки по данному весу. Знак «минус» указывает на движение в сторону уменьшения ошибки.

Цепное правило (Chain Rule)

Ключевая идея алгоритма — применение цепного правила дифференцирования. Ошибка на выходе сети зависит от весов через последовательность нелинейных преобразований в каждом нейроне. Для вычисления градиента по весам скрытых слоёв необходимо последовательно применять цепное правило, начиная с выходного слоя и двигаясь к входному.

Принцип работы

Алгоритм состоит из двух основных фаз: прямого и обратного проходов.

Прямой проход (Forward Pass)

  1. На вход сети подаётся вектор признаков из обучающей выборки.
  2. Сигнал последовательно распространяется через все слои: каждый нейрон вычисляет взвешенную сумму входов, добавляет смещение (bias) и пропускает результат через функцию активации (например, сигмоиду, гиперболический тангенс, ReLU).
  3. На выходном слое формируется вектор предсказаний сети.
  4. Вычисляется значение функции потерь \(E\) путём сравнения предсказаний с эталонными значениями.

Обратный проход (Backward Pass)

  1. Вычисляется градиент ошибки по выходным значениям сети (сигнал ошибки на выходном слое).
  2. Этот сигнал ошибки «распространяется» обратно через сеть от выходного слоя к входному. Для каждого нейрона вычисляется локальный градиент — производная ошибки по его взвешенной сумме.
  3. Используя цепное правило, для каждого веса \(w_{ij}\) вычисляется частная производная \(\frac{\partial E}{\partial w_{ij}}\) как произведение сигнала ошибки нейрона-получателя и выходного значения нейрона-отправителя.
  4. Все веса и смещения сети корректируются в соответствии с правилом градиентного спуска.

Итеративный процесс

Прямой и обратный проходы повторяются для множества примеров из обучающей выборки (эпох). Постепенно веса сети настраиваются таким образом, чтобы минимизировать общую ошибку на всей обучающей выборке.

Проблемы и модификации

Исчезающий градиент (Vanishing Gradient)

При использовании насыщающихся функций активации (например, сигмоиды) в глубоких сетях градиент на ранних слоях может становиться экспоненциально малым. Это приводит к тому, что веса первых слоёв практически перестают обновляться, и сеть не обучается. Решением стало использование функций активации, не склонных к насыщению, таких как ReLU (Rectified Linear Unit) и её варианты.

Взрывающийся градиент (Exploding Gradient)

Противоположная проблема — градиент может экспоненциально возрастать, что приводит к нестабильности обучения и переполнению числовых значений. Решается нормировкой градиента (gradient clipping) или использованием специальных архитектур (например, LSTM для рекуррентных сетей).

Локальные минимумы и седловые точки

Функция потерь нейронной сети является невыпуклой и может содержать множество локальных минимумов и седловых точек. Современные методы оптимизации (Adam, RMSprop, SGD с импульсом) частично решают эту проблему, ускоряя сходимость и помогая «выскакивать» из неглубоких локальных минимумов.

Переобучение (Overfitting)

Сеть может запомнить обучающую выборку, но плохо обобщать новые данные. Для борьбы с переобучением применяются регуляризация (L1, L2), dropout (случайное отключение нейронов во время обучения), аугментация данных и ранняя остановка (early stopping).

Применение

Алгоритм обратного распространения ошибки является основой для обучения подавляющего большинства современных нейросетевых архитектур, включая:

Критика и альтернативы

Несмотря на широкую распространённость, алгоритм обратного распространения имеет ряд недостатков:

  • Биологическая неправдоподобность: в мозге человека не обнаружено механизма, аналогичного обратному распространению сигнала ошибки через синапсы.
  • Зависимость от обучающей выборки: алгоритм требует большого количества размеченных данных, что дорого и трудоёмко.
  • Чувствительность к гиперпараметрам: скорость обучения, инициализация весов, выбор функции активации существенно влияют на результат.

Альтернативными подходами к обучению нейронных сетей являются: эволюционные алгоритмы (генетические алгоритмы), обучение с подкреплением (reinforcement learning) с использованием градиента политики, а также методы, основанные на локальных правилах обучения (например, правило Хебба).

Интересные факты

  • Исторически первым алгоритмом, способным обучать многослойные сети, был метод обратного распространения, описанный в 1974 году Полом Вербосом в его докторской диссертации, но эта работа осталась незамеченной до 1980-х годов.
  • В 1989 году было доказано, что многослойный персептрон с одним скрытым слоем и сигмоидной функцией активации является универсальным аппроксиматором — может аппроксимировать любую непрерывную функцию с любой точностью при достаточном числе нейронов.
  • Современные реализации обратного распространения активно используют автоматическое дифференцирование (autograd), встроенное в библиотеки TensorFlow и PyTorch, что избавляет разработчиков от ручного вывода формул.

Источники

  • Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323(6088), 533–536.
  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  • Галушкин, А. И. (1969). Синтез многослойных систем распознавания образов. Автоматика и телемеханика, 11, 116–124.
  • Nielsen, M. A. (2015). Neural Networks and Deep Learning. Determination Press.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →