---
status: stable
type: concept
tags:
  - machine-learning
  - neural-networks
  - backpropagation
  - gradient-descent
created: 2025-12-17
updated: 2026-05-07
title: Backpropagation для многослойной нейронной сети
---

# Backpropagation для многослойной нейронной сети

Эта заметка обобщает [[Обратное распространение ошибки]] на [[Нейронные сети|нейронную сеть]] с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: [[Backpropagation для сети с одним скрытым слоем]].

## Обозначения

Пусть сеть имеет $N$ слоёв с обучаемыми весами.

- $r$ - номер слоя, $r=1,\dots,N$;
- $i$ - номер нейрона в предыдущем слое;
- $j$ - номер нейрона в текущем слое;
- $y_i^{(r)}$ - выход нейрона $i$ слоя $r$;
- $s_j^{(r)}$ - взвешенная сумма на входе нейрона $j$ слоя $r$;
- $w_{ij}^{(r)}$ - вес от нейрона $i$ слоя $r-1$ к нейрону $j$ слоя $r$;
- $\delta_j^{(r)}$ - локальная ошибка нейрона $j$ слоя $r$;
- $\eta$ - скорость обучения (*learning rate*);
- $d_j$ - целевое значение для выходного нейрона $j$.

Для входного слоя можно считать:

$$
y_i^{(0)}=x_i
$$

## Шаг 1. Прямой проход

На вход сети подаётся один обучающий пример. Сигналы распространяются от входного слоя к выходному.

Для каждого слоя:

$$
s_j^{(r)}=\sum_i w_{ij}^{(r)}y_i^{(r-1)}
$$

$$
y_j^{(r)}=F(s_j^{(r)})
$$

На выходе получаем предсказание сети:

$$
y_j^{(N)}
$$

## Шаг 2. Локальная ошибка выходного слоя

Для квадратичной ошибки:

$$
E=\frac{1}{2}\sum_j(y_j^{(N)}-d_j)^2
$$

Локальная ошибка выходного слоя:

$$
\delta_j^{(N)}
=
(y_j^{(N)}-d_j)F'(s_j^{(N)})
$$

Если в конспекте уже используется запись $y_j'$, то это то же самое:

$$
y_j'=F'(s_j^{(N)})
$$

Тогда:

$$
\delta_j^{(N)}=(y_j^{(N)}-d_j)y_j'
$$

## Шаг 3. Локальная ошибка скрытых слоёв

Для всех скрытых слоёв ошибка считается справа налево:

$$
r=N-1,N-2,\dots,1
$$

Формула:

$$
\delta_i^{(r)}
=
F'(s_i^{(r)})
\sum_j
\delta_j^{(r+1)}w_{ij}^{(r+1)}
$$

Смысл: ошибка нейрона слоя $r$ складывается из ошибок следующего слоя, взвешенных весами связей, и умножается на производную активации текущего нейрона.

## Шаг 4. Градиенты по весам

Градиент веса слоя $r$:

$$
\frac{\partial E}{\partial w_{ij}^{(r)}}
=
\delta_j^{(r)}y_i^{(r-1)}
$$

То есть градиент веса равен локальной ошибке нейрона, в который входит вес, умноженной на выход предыдущего нейрона.

## Шаг 5. Изменение весов

Изменение веса:

$$
\Delta w_{ij}^{(r)}
=
-\eta\delta_j^{(r)}y_i^{(r-1)}
$$

Обновление веса:

$$
w_{ij}^{(r)}(t+1)
=
w_{ij}^{(r)}(t)
+
\Delta w_{ij}^{(r)}(t)
$$

Или сразу через градиентный спуск:

$$
w_{ij}^{(r)}(t+1)
=
w_{ij}^{(r)}(t)
-
\eta
\frac{\partial E}{\partial w_{ij}^{(r)}}
$$

## Шаг 6. Проверка сходимости

После обновления весов алгоритм повторяется для следующих обучающих примеров.

Типовые условия остановки:

- достигнут лимит эпох;
- ошибка стала меньше заданного порога;
- ошибка перестала заметно уменьшаться;
- норма градиента стала достаточно малой.

## Короткая схема

1. Прямой проход: посчитать все $s^{(r)}$ и $y^{(r)}$.
2. Посчитать $\delta^{(N)}$ для выходного слоя.
3. Для $r=N-1,\dots,1$ посчитать $\delta^{(r)}$.
4. Для каждого слоя найти $\frac{\partial E}{\partial w_{ij}^{(r)}}=\delta_j^{(r)}y_i^{(r-1)}$.
5. Обновить веса.
6. Повторять до остановки.

## Интерпретация

Ошибка течёт от выхода к входу. На каждом слое она:

- проходит назад через веса следующего слоя;
- суммируется по всем путям влияния;
- умножается на производную функции активации текущего нейрона.

Так для каждого слоя получается своя локальная ошибка $\delta^{(r)}$, а дальше градиент каждого веса считается локально: ошибка принимающего нейрона умножается на выход отправляющего нейрона.

## Связанные заметки

- [[Обратное распространение ошибки]]
- [[Backpropagation для сети с одним скрытым слоем]]
- [[Нейронные сети]]
- [[Линейные модели]]
