Как ответить
Обратное распространение — это алгоритм, который вычисляет градиенты функции потерь по всем весам сети. Делает он это через цепное правило, проходя по графу вычислений справа налево. Без него обучать многослойные сети градиентным спуском было бы невозможно, потому что считать градиенты аналитически для каждого слоя — слишком дорого.
Процесс состоит из двух фаз.
Прямой проход (forward pass). Подаём на вход батч данных, пропускаем через все слои, получаем выход сети. Считаем значение функции потерь (например, кросс-энтропию или MSE).
Обратный проход (backward pass). Начиная с выходного слоя, вычисляем частные производные потерь по активациям и весам. Для каждого слоя с номером l:
- Вычисляем градиент потерь по активациям этого слоя:
δl = ∂L / ∂al. - Через цепное правило получаем градиент по весам:
∂L / ∂Wl = δl · (al-1)T(здесьal-1— активации предыдущего слоя). - Передаём «ошибку» на предыдущий слой:
δl-1 = (Wl)T · δl ⊙ f'(zl-1), гдеf'— производная функции активации.
После того как все градиенты получены, обновляем веса градиентным спуском: W := W - η · ∂L/∂W.
Ключевой момент — все функции активации должны быть дифференцируемы почти всюду (ReLU — кусочно-линейная, производная 0 или 1). На практике используют стохастический градиентный спуск (SGD) с батчами, а для вычисления градиентов — автодифференцирование в PyTorch/TensorFlow.
Проблемы, которые могут возникнуть: исчезающие градиенты (sigmoid/tanh на глубоких сетях) и взрывающиеся градиенты (большие значения весов). Решаются нормализацией, ResNet-связями, градиентным клипингом.