Метод обратного распространения ошибки
Материал из MachineLearning.
(Новая: {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником ~~~~}} {{TOCright}} '''Метод обратн...) |
|||
| Строка 1: | Строка 1: | ||
| - | {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] | + | {{well|Статья написана с использованием LLM '''Claude Opus 4.8''' и проверена участником [[Участник:Iaroslav Lyakhov|Iaroslav Lyakhov]] 21:07, 5 июля 2026 (MSD)}} |
{{TOCright}} | {{TOCright}} | ||
| - | '''Метод обратного распространения ошибки''' (обратное распространение ошибки, англ. ''backpropagation'') - алгоритм эффективного вычисления градиента [[Функция потерь|функции потерь]] по всем параметрам [[Многослойная нейронная сеть|многослойной нейронной сети]]. Он применяет правило дифференцирования сложной функции (цепное правило), распространяя «сигнал ошибки» от выхода сети к входу. Вместе с [[Метод стохастического градиента|методом стохастического градиента]] обратное распространение составляет вычислительную основу обучения [[Искусственная нейронная сеть|нейронных сетей]] и всего современного глубокого обучения. | + | '''Метод обратного распространения ошибки''' (обратное распространение ошибки, англ. ''backpropagation'') - алгоритм эффективного вычисления градиента [[Функция потерь|функции потерь]] по всем параметрам [[Многослойная нейронная сеть|многослойной нейронной сети]]. Он применяет правило дифференцирования сложной функции (цепное правило), распространяя «сигнал ошибки» от выхода сети к её входу. Вместе с [[Метод стохастического градиента|методом стохастического градиента]] обратное распространение составляет вычислительную основу обучения [[Искусственная нейронная сеть|нейронных сетей]] и всего современного глубокого обучения. |
== Задача == | == Задача == | ||
| - | Обучение сети сводится к [[Минимизация эмпирического риска|минимизации эмпирического риска]] - средней [[Функция потерь|функции потерь]] на обучающей выборке. Для градиентной оптимизации нужно знать частные производные функции потерь по каждому | + | Обучение сети сводится к [[Минимизация эмпирического риска|минимизации эмпирического риска]] - средней [[Функция потерь|функции потерь]] на обучающей выборке. Для градиентной оптимизации на каждом шаге нужно знать частные производные функции потерь по каждому весу, а весов в современных сетях миллиарды. Если вычислять каждую производную по отдельности, численно или по определению, потребовалось бы астрономическое число операций. Обратное распространение находит сразу '''весь''' градиент за один проход, по стоимости сопоставимый с одним вычислением самой сети. |
| - | == Идея == | + | == Идея: цепное правило == |
| - | Нейронная сеть - это | + | Нейронная сеть - это композиция простых функций-слоёв: выход одного слоя подаётся на вход следующего. Производную такой композиции даёт цепное правило: производная по параметрам раннего слоя выражается через производную по выходу следующего слоя. Значит, выгодно считать производные '''от выхода к входу''', переиспользуя уже вычисленные величины, а не пересчитывая их заново для каждого веса. |
| - | + | ||
| - | + | ||
| - | + | == Два прохода == | |
| + | Алгоритм состоит из двух проходов по сети. | ||
| + | |||
| + | '''Прямой проход''' (forward pass). Вход подаётся в сеть; слой за слоем вычисляются линейные комбинации и активации: | ||
| + | |||
| + | ::<tex>z^{(l)} = W^{(l)} a^{(l-1)} + b^{(l)}, \qquad a^{(l)} = \sigma\!\left(z^{(l)}\right)</tex> | ||
| + | |||
| + | вплоть до выхода, по которому считается значение функции потерь <tex>L</tex>. Промежуточные величины <tex>z^{(l)}</tex> и <tex>a^{(l)}</tex> запоминаются. | ||
| + | |||
| + | '''Обратный проход''' (backward pass). Вычисляется «сигнал ошибки» на выходе, а затем он пересчитывается назад по слоям. Для слоя <tex>l</tex>: | ||
::<tex>\delta^{(l)} = \left(W^{(l+1)}\right)^{\top}\delta^{(l+1)} \odot \sigma'\!\left(z^{(l)}\right), \qquad \frac{\partial L}{\partial W^{(l)}} = \delta^{(l)}\left(a^{(l-1)}\right)^{\top}</tex> | ::<tex>\delta^{(l)} = \left(W^{(l+1)}\right)^{\top}\delta^{(l+1)} \odot \sigma'\!\left(z^{(l)}\right), \qquad \frac{\partial L}{\partial W^{(l)}} = \delta^{(l)}\left(a^{(l-1)}\right)^{\top}</tex> | ||
| - | где | + | где <tex>\odot</tex> - поэлементное умножение. Полученные градиенты передаются оптимизатору ([[Метод стохастического градиента|SGD]], Adam и др.), который делает шаг обновления весов. |
| + | |||
| + | Ключевое свойство: весь градиент считается за один обратный проход, стоимость которого - порядка одного прямого прохода. Именно это делает обучение больших сетей практически осуществимым. | ||
| + | |||
| + | == Связь с градиентным спуском == | ||
| + | Обратное распространение отвечает только за '''вычисление''' градиента; за '''использование''' градиента отвечает оптимизатор. На практике данные разбивают на мини-батчи, и на каждом делают шаг [[Метод стохастического градиента|стохастического градиентного спуска]]. Обратное распространение и SGD - две стороны одного цикла обучения: первый говорит, «куда» менять веса, второй - «насколько». | ||
== История == | == История == | ||
| - | Идея дифференцирования в обратном режиме | + | Идея дифференцирования в обратном режиме была описана ещё в 1970-х (С. Линнайнмаа, 1970; П. Вербос, 1974). Применительно к обучению нейронных сетей метод стал широко известен после работы Д. Румельхарта, Дж. Хинтона и Р. Уильямса (1986), показавшей, что многослойные сети можно эффективно обучать и что скрытые слои при этом сами «выучивают» полезные признаки. Это способствовало возрождению интереса к нейронным сетям после периода спада («зимы искусственного интеллекта»), хотя настоящий расцвет метода наступил только в 2010-х с ростом вычислительных мощностей и объёмов данных. |
== Трудности == | == Трудности == | ||
| - | * '''Затухающие и взрывающиеся градиенты''' | + | * '''Затухающие и взрывающиеся градиенты.''' При распространении через много слоёв сигнал ошибки может экспоненциально убывать или расти, из-за чего [[Глубокая нейронная сеть|глубокие сети]] долго не удавалось обучать. Проблему смягчают функции активации типа ReLU, нормализация (batch- и layer-normalization) и остаточные (residual) связи. |
| - | * ''' | + | * '''Память.''' Для обратного прохода нужно хранить активации всех слоёв; при обучении очень больших моделей применяют приёмы вроде повторного пересчёта активаций (gradient checkpointing). |
| - | * ''' | + | * '''Ландшафт потерь.''' Поверхность функции потерь невыпукла, но на практике седловые точки и локальные минимумы редко мешают обучению. |
== Значение == | == Значение == | ||
| - | Обратное распространение - | + | Обратное распространение - это, по сути, специальный случай '''автоматического дифференцирования''' в обратном режиме, и именно оно лежит в основе всех фреймворков глубокого обучения (PyTorch, TensorFlow, JAX), где градиент считается автоматически по вычислительному графу. Метод сделал практичной идею обучаемой векторизации данных: представления объектов не конструируются вручную, а выучиваются сетью через градиенты. На обратном распространении обучаются [[Трансформер|трансформеры]], [[Большая языковая модель|большие языковые модели]] и практически все современные архитектуры. |
== См. также == | == См. также == | ||
| Строка 37: | Строка 49: | ||
== Литература == | == Литература == | ||
| - | * {{статья |автор=Rumelhart D. E., Hinton G. E., Williams R. J. | | + | * {{статья |автор=Rumelhart D. E., Hinton G. E., Williams R. J. |заглавие=Learning representations by back-propagating errors |издание=Nature |том=323 |страницы=533-536 |год=1986}} |
| + | * {{статья |автор=Baydin A. G., Pearlmutter B. A., Radul A. A., Siskind J. M. |заглавие=Automatic Differentiation in Machine Learning: a Survey |издание=Journal of Machine Learning Research |том=18 |год=2018 |ссылка=https://arxiv.org/abs/1502.05767}} | ||
* {{книга |автор=Goodfellow I., Bengio Y., Courville A. |заглавие=Deep Learning |издательство=MIT Press |год=2016 |ссылка=https://www.deeplearningbook.org/}} | * {{книга |автор=Goodfellow I., Bengio Y., Courville A. |заглавие=Deep Learning |издательство=MIT Press |год=2016 |ссылка=https://www.deeplearningbook.org/}} | ||
[[Категория:Машинное обучение]] | [[Категория:Машинное обучение]] | ||
[[Категория:Нейронные сети]] | [[Категория:Нейронные сети]] | ||
Текущая версия
| | Статья написана с использованием LLM Claude Opus 4.8 и проверена участником Iaroslav Lyakhov 21:07, 5 июля 2026 (MSD) |
|
Метод обратного распространения ошибки (обратное распространение ошибки, англ. backpropagation) - алгоритм эффективного вычисления градиента функции потерь по всем параметрам многослойной нейронной сети. Он применяет правило дифференцирования сложной функции (цепное правило), распространяя «сигнал ошибки» от выхода сети к её входу. Вместе с методом стохастического градиента обратное распространение составляет вычислительную основу обучения нейронных сетей и всего современного глубокого обучения.
Задача
Обучение сети сводится к минимизации эмпирического риска - средней функции потерь на обучающей выборке. Для градиентной оптимизации на каждом шаге нужно знать частные производные функции потерь по каждому весу, а весов в современных сетях миллиарды. Если вычислять каждую производную по отдельности, численно или по определению, потребовалось бы астрономическое число операций. Обратное распространение находит сразу весь градиент за один проход, по стоимости сопоставимый с одним вычислением самой сети.
Идея: цепное правило
Нейронная сеть - это композиция простых функций-слоёв: выход одного слоя подаётся на вход следующего. Производную такой композиции даёт цепное правило: производная по параметрам раннего слоя выражается через производную по выходу следующего слоя. Значит, выгодно считать производные от выхода к входу, переиспользуя уже вычисленные величины, а не пересчитывая их заново для каждого веса.
Два прохода
Алгоритм состоит из двух проходов по сети.
Прямой проход (forward pass). Вход подаётся в сеть; слой за слоем вычисляются линейные комбинации и активации:
вплоть до выхода, по которому считается значение функции потерь . Промежуточные величины
и
запоминаются.
Обратный проход (backward pass). Вычисляется «сигнал ошибки» на выходе, а затем он пересчитывается назад по слоям. Для слоя :
где - поэлементное умножение. Полученные градиенты передаются оптимизатору (SGD, Adam и др.), который делает шаг обновления весов.
Ключевое свойство: весь градиент считается за один обратный проход, стоимость которого - порядка одного прямого прохода. Именно это делает обучение больших сетей практически осуществимым.
Связь с градиентным спуском
Обратное распространение отвечает только за вычисление градиента; за использование градиента отвечает оптимизатор. На практике данные разбивают на мини-батчи, и на каждом делают шаг стохастического градиентного спуска. Обратное распространение и SGD - две стороны одного цикла обучения: первый говорит, «куда» менять веса, второй - «насколько».
История
Идея дифференцирования в обратном режиме была описана ещё в 1970-х (С. Линнайнмаа, 1970; П. Вербос, 1974). Применительно к обучению нейронных сетей метод стал широко известен после работы Д. Румельхарта, Дж. Хинтона и Р. Уильямса (1986), показавшей, что многослойные сети можно эффективно обучать и что скрытые слои при этом сами «выучивают» полезные признаки. Это способствовало возрождению интереса к нейронным сетям после периода спада («зимы искусственного интеллекта»), хотя настоящий расцвет метода наступил только в 2010-х с ростом вычислительных мощностей и объёмов данных.
Трудности
- Затухающие и взрывающиеся градиенты. При распространении через много слоёв сигнал ошибки может экспоненциально убывать или расти, из-за чего глубокие сети долго не удавалось обучать. Проблему смягчают функции активации типа ReLU, нормализация (batch- и layer-normalization) и остаточные (residual) связи.
- Память. Для обратного прохода нужно хранить активации всех слоёв; при обучении очень больших моделей применяют приёмы вроде повторного пересчёта активаций (gradient checkpointing).
- Ландшафт потерь. Поверхность функции потерь невыпукла, но на практике седловые точки и локальные минимумы редко мешают обучению.
Значение
Обратное распространение - это, по сути, специальный случай автоматического дифференцирования в обратном режиме, и именно оно лежит в основе всех фреймворков глубокого обучения (PyTorch, TensorFlow, JAX), где градиент считается автоматически по вычислительному графу. Метод сделал практичной идею обучаемой векторизации данных: представления объектов не конструируются вручную, а выучиваются сетью через градиенты. На обратном распространении обучаются трансформеры, большие языковые модели и практически все современные архитектуры.
См. также
- Многослойная нейронная сеть
- Метод стохастического градиента
- Минимизация эмпирического риска
- Функция потерь
- Зима искусственного интеллекта
Литература
- Rumelhart D. E., Hinton G. E., Williams R. J. Learning representations by back-propagating errors // Nature. — 1986. — Т. 323. — С. 533-536.
- Baydin A. G., Pearlmutter B. A., Radul A. A., Siskind J. M. Automatic Differentiation in Machine Learning: a Survey // Journal of Machine Learning Research. — 2018. — Т. 18.
- Goodfellow I., Bengio Y., Courville A. Deep Learning. — MIT Press, 2016.

