vault backup: 2026-05-07 22:58:05

This commit is contained in:
Dmitry
2026-05-07 22:58:05 +03:00
parent 670035ac30
commit 43226521e2
5 changed files with 68 additions and 110 deletions
+7 -7
View File
@@ -13,13 +13,13 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", "file": "01 Library/11 Machine Learning/Обратное распространение ошибки.md",
"mode": "preview", "mode": "preview",
"source": false, "source": false,
"backlinks": false "backlinks": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Обратное распространение ошибки - вывод" "title": "Обратное распространение ошибки"
} }
}, },
{ {
@@ -180,13 +180,13 @@
"state": { "state": {
"type": "outline", "type": "outline",
"state": { "state": {
"file": "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", "file": "01 Library/11 Machine Learning/Обратное распространение ошибки.md",
"followCursor": false, "followCursor": false,
"showSearch": false, "showSearch": false,
"searchQuery": "" "searchQuery": ""
}, },
"icon": "lucide-list", "icon": "lucide-list",
"title": "Outline of Обратное распространение ошибки - вывод" "title": "Outline of Обратное распространение ошибки"
} }
}, },
{ {
@@ -257,6 +257,9 @@
}, },
"active": "cb9f1037ae0492db", "active": "cb9f1037ae0492db",
"lastOpenFiles": [ "lastOpenFiles": [
"01 Library/11 Machine Learning/Backpropagation для сети с одним скрытым слоем.md",
"01 Library/11 Machine Learning/Backpropagation для многослойной нейронной сети.md",
"01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md",
"01 Library/11 Machine Learning/Алгоритм обучения сети Кохонена.md", "01 Library/11 Machine Learning/Алгоритм обучения сети Кохонена.md",
"01 Library/11 Machine Learning/Нейронная сеть Кохонена.md", "01 Library/11 Machine Learning/Нейронная сеть Кохонена.md",
"99 System/Archive/Алгоритм обучения сети Кохонена.md", "99 System/Archive/Алгоритм обучения сети Кохонена.md",
@@ -272,7 +275,6 @@
"01 Library/02 DevOps/Основные команды git.md", "01 Library/02 DevOps/Основные команды git.md",
"01 Library/11 Machine Learning/Метрические алгоритмы.md", "01 Library/11 Machine Learning/Метрические алгоритмы.md",
"01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md", "01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md",
"01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md",
"00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md", "00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md",
"99 System/Archive/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md", "99 System/Archive/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md",
"00 Inbox/Hello.md", "00 Inbox/Hello.md",
@@ -284,8 +286,6 @@
"02 Projects/Наука/Статьи/Статья с Виноградовой.md", "02 Projects/Наука/Статьи/Статья с Виноградовой.md",
"CLAUDE.md", "CLAUDE.md",
"01 Library/07 HomeLab/Проблемы дистрибутивов.md", "01 Library/07 HomeLab/Проблемы дистрибутивов.md",
"01 Library/02 DevOps/Контейнеризация/Docker/Docker - Дополнительные знания.md",
"01 Library/02 DevOps/Контейнеризация/Docker/Основы - Docker.md",
"00 Inbox/Archive", "00 Inbox/Archive",
"01 Library/03 Math/Теория нечетких множеств/Теория нечетких множеств.md.tmp.254945.1777751883191", "01 Library/03 Math/Теория нечетких множеств/Теория нечетких множеств.md.tmp.254945.1777751883191",
"01 Library/02 DevOps/Ansible/Ansible - основы.md.tmp.254945.1777751876503", "01 Library/02 DevOps/Ansible/Ansible - основы.md.tmp.254945.1777751876503",
@@ -8,12 +8,12 @@ tags:
- gradient-descent - gradient-descent
created: 2025-12-17 created: 2025-12-17
updated: 2026-05-07 updated: 2026-05-07
title: Обратное распространение ошибки для произвольного числа слоев НС title: Backpropagation для многослойной нейронной сети
--- ---
# Обратное распространение ошибки для произвольного числа слоев НС # Backpropagation для многослойной нейронной сети
Эта заметка обобщает [[Обратное распространение ошибки]] на [[Нейронные сети|нейронную сеть]] с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: [[Обратное распространение ошибки - вывод]]. Эта заметка обобщает [[Обратное распространение ошибки]] на [[Нейронные сети|нейронную сеть]] с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: [[Backpropagation для сети с одним скрытым слоем]].
## Обозначения ## Обозначения
@@ -179,6 +179,6 @@ $$
## Связанные заметки ## Связанные заметки
- [[Обратное распространение ошибки]] - [[Обратное распространение ошибки]]
- [[Обратное распространение ошибки - вывод]] - [[Backpropagation для сети с одним скрытым слоем]]
- [[Нейронные сети]] - [[Нейронные сети]]
- [[Линейные модели]] - [[Линейные модели]]
@@ -7,38 +7,38 @@ tags:
- backpropagation - backpropagation
created: 2025-12-17 created: 2025-12-17
updated: 2026-05-07 updated: 2026-05-07
title: Обратное распространение ошибки - вывод title: Backpropagation для сети с одним скрытым слоем
--- ---
# Обратное распространение ошибки - вывод # Backpropagation для сети с одним скрытым слоем
Эта заметка фиксирует математический вывод градиентов для алгоритма [[Обратное распространение ошибки]]. Общий контекст нейронных сетей находится в [[Нейронные сети]]. Эта заметка фиксирует математический вывод градиентов для алгоритма [[Обратное распространение ошибки]] на примере сети с одним скрытым слоем. Общая схема для произвольного числа слоёв вынесена в [[Backpropagation для многослойной нейронной сети]].
Рассматривается сеть с одним скрытым слоем. Bias для краткости не записан: его градиент считается так же, как градиент веса при входе, равном $1$. Bias для краткости не записан: его градиент считается так же, как градиент веса при входе, равном $1$.
## Обозначения ## Обозначения
> [!note] Обозначения > [!note] Обозначения
> $x_{j}$ $j$-й вход > $x_j$ - $j$-й вход
> $w_{ij}^{(1)}$ вес от входа $j$ к скрытому нейрону $i$ > $w_{ij}^{(1)}$ - вес от входа $j$ к скрытому нейрону $i$
> $w_{li}^{(2)}$ вес от скрытого нейрона $i$ к выходу $l$ > $w_{li}^{(2)}$ - вес от скрытого нейрона $i$ к выходу $l$
> $S_{i}^{(1)}$ взвешенная сумма на входе нейрона $i$ в первом слое > $S_i^{(1)}$ - взвешенная сумма на входе нейрона $i$ в первом слое
> $u_{i}$ выход нейрона $i$ первого слоя после активации > $u_i$ - выход нейрона $i$ первого слоя после активации
> $S_{l}^{(2)}$ взвешенная сумма на входе нейрона $l$ во втором слое > $S_l^{(2)}$ - взвешенная сумма на входе нейрона $l$ во втором слое
> $y_{l}$ выход нейрона $l$ второго слоя > $y_l$ - выход нейрона $l$ второго слоя
> $d_{l}$ истинное значение > $d_l$ - истинное значение
> $F$ функция активации > $F$ - функция активации
> $\delta$ локальная ошибка нейрона > $\delta$ - локальная ошибка нейрона
## Прямой проход ## Прямой проход
$$ $$
\begin{align*} \begin{align*}
S_{i}^{(1)} &= \sum\limits_{j=1}^{n}w_{ij}^{(1)}x_{j} \\ S_i^{(1)} &= \sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j \\
u_{i} &= F(S_{i}^{(1)}) \\ u_i &= F(S_i^{(1)}) \\
S_l^{(2)} &= \sum\limits_{i=1}^{k}w_{li}^{(2)}u_i \\ S_l^{(2)} &= \sum\limits_{i=1}^{k}w_{li}^{(2)}u_i \\
y_{l} &= F(S_{l}^{(2)}) \\ y_l &= F(S_l^{(2)}) \\
E &= \frac{1}{2}\sum\limits_{l=1}^{m}(y_{l}-d_{l})^{2} E &= \frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2
\end{align*} \end{align*}
$$ $$
@@ -47,14 +47,12 @@ $$
Для веса $w_{li}^{(2)}$ используется правило цепочки: Для веса $w_{li}^{(2)}$ используется правило цепочки:
$$ $$
\begin{align*} \frac{\partial E}{\partial w_{li}^{(2)}} =
\frac{\partial E}{\partial w_{li}^{(2)}} &= \frac{\partial E}{\partial y_l}
\frac{\partial E}{\partial y_{l}}
\cdot \cdot
\frac{\partial y_{l}}{\partial S_{l}^{(2)}} \frac{\partial y_l}{\partial S_l^{(2)}}
\cdot \cdot
\frac{\partial S_{l}^{(2)}}{\partial w_{li}^{(2)}} \frac{\partial S_l^{(2)}}{\partial w_{li}^{(2)}}
\end{align*}
$$ $$
Компоненты производной: Компоненты производной:
@@ -74,7 +72,7 @@ $$
Итог: Итог:
$$ $$
\frac{\partial E}{\partial w_{li}^{(2)}}=(y_l-d_l)F'(S_l^{(2)})u_i \frac{\partial E}{\partial w_{li}^{(2)}}=(y_l-d_l)*F'(S_l^{(2)})*u_i
$$ $$
Введём локальную ошибку выходного нейрона: Введём локальную ошибку выходного нейрона:
@@ -137,7 +135,7 @@ $$
S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i
$$ $$
То: то:
$$ $$
\frac{\partial y_l}{\partial u_i} \frac{\partial y_l}{\partial u_i}
@@ -161,7 +159,7 @@ $$
S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j
$$ $$
То: то:
$$ $$
\frac{\partial u_i}{\partial w_{ij}^{(1)}} \frac{\partial u_i}{\partial w_{ij}^{(1)}}
@@ -207,13 +205,9 @@ $$
Тогда: Тогда:
$$ $$
\frac{\partial E}{\partial w_{ij}^{(1)}} \frac{\partial E}{\partial w_{ij}^{(1)}}=\delta_i^{(1)}x_j
=
\delta_i^{(1)}x_j
$$ $$
Ошибка выходного слоя $\delta_l^{(2)}$ проходит назад через вес $w_{li}^{(2)}$, суммируется по всем выходным нейронам и умножается на крутизну активации скрытого слоя. Так получается локальная ошибка $\delta_i^{(1)}$ для каждого скрытого нейрона.
## Итоговые формулы ## Итоговые формулы
Для слоя $r$ общий шаблон такой: Для слоя $r$ общий шаблон такой:
@@ -243,6 +237,6 @@ $$
## Связанные заметки ## Связанные заметки
- [[Обратное распространение ошибки]] - [[Обратное распространение ошибки]]
- [[Обратное распространение ошибки для произвольного числа слоев НС]] - [[Backpropagation для многослойной нейронной сети]]
- [[Нейронные сети]] - [[Нейронные сети]]
- [[Линейные модели]] - [[Линейные модели]]
@@ -187,7 +187,7 @@ $$
Нейронные сети применяются для задач классификации, прогнозирования, распознавания образов и других задач приближения сложных функций. Нейронные сети применяются для задач классификации, прогнозирования, распознавания образов и других задач приближения сложных функций.
Для многослойных сетей основной алгоритм вычисления градиентов - [[Обратное распространение ошибки]]. Для сети с произвольным числом слоёв схема вынесена в [[Обратное распространение ошибки для произвольного числа слоев НС]]. Для многослойных сетей основной алгоритм вычисления градиентов - [[Обратное распространение ошибки]]. Для сети с произвольным числом слоёв схема вынесена в [[Backpropagation для многослойной нейронной сети]].
## Персептрон ## Персептрон
@@ -200,5 +200,5 @@ $$
## Связанные заметки ## Связанные заметки
- [[Обратное распространение ошибки]] - [[Обратное распространение ошибки]]
- [[Обратное распространение ошибки для произвольного числа слоев НС]] - [[Backpropagation для многослойной нейронной сети]]
- [[Линейные модели]] - [[Линейные модели]]
@@ -13,11 +13,12 @@ title: Обратное распространение ошибки
# Обратное распространение ошибки # Обратное распространение ошибки
**Обратное распространение ошибки** (*backpropagation*) - алгоритм вычисления градиентов функции ошибки по весам многослойной [[Нейронные сети|нейронной сети]]. После вычисления градиентов веса обновляются методом градиентного спуска. **Обратное распространение ошибки** (*backpropagation*) - алгоритм вычисления градиентов функции ошибки по весам многослойной [[Нейронные сети|нейронной сети]]. Само обновление весов выполняет градиентный спуск или его модификации, а backpropagation отвечает за эффективный расчёт производных.
Главная идея: сначала сеть делает прямой проход и получает предсказание, затем ошибка распространяется от выходного слоя назад к предыдущим слоям. Для каждого веса считается, насколько изменение этого веса повлияло на итоговую ошибку. Главная идея: сначала сеть выполняет прямой проход и получает предсказание, затем ошибка распространяется от выходного слоя назад к предыдущим слоям. Для каждого веса считается, как изменение этого веса повлияло бы на итоговую ошибку.
## Как выглядит ## Как выглядит
![[Pasted image 20260507214813.png]] ![[Pasted image 20260507214813.png]]
## Где используется ## Где используется
@@ -29,6 +30,7 @@ X^{(p)} \rightarrow Y^{(p)} \approx D^{(p)}
$$ $$
где: где:
- $X^{(p)}$ - входной объект; - $X^{(p)}$ - входной объект;
- $Y^{(p)}$ - выход сети; - $Y^{(p)}$ - выход сети;
- $D^{(p)}$ - целевой ответ; - $D^{(p)}$ - целевой ответ;
@@ -36,79 +38,39 @@ $$
Алгоритм применим к многослойным сетям, если функции активации дифференцируемы или хотя бы имеют используемую на практике производную почти всюду. Алгоритм применим к многослойным сетям, если функции активации дифференцируемы или хотя бы имеют используемую на практике производную почти всюду.
## Прямой проход ## Базовый цикл
Для сети с одним скрытым слоем: 1. Подать входной вектор $X$ на вход сети.
2. Выполнить прямой проход и получить выходы всех слоёв.
3. Посчитать ошибку $E$ между предсказанием $Y$ и целевым ответом $D$.
4. Посчитать локальную ошибку выходного слоя.
5. Распространить ошибку назад и посчитать локальные ошибки скрытых слоёв.
6. Найти градиенты по весам.
7. Обновить веса в направлении антиградиента.
8. Повторять до выполнения условия остановки: лимит эпох, малая ошибка, малая норма градиента или отсутствие улучшения.
$$ ## Ключевые формулы
S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j
$$
$$ Для квадратичной ошибки:
u_i=F(S_i^{(1)})
$$
$$
S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i
$$
$$
y_l=F(S_l^{(2)})
$$
В развёрнутом виде:
$$
y_l=
F\left(
\sum\limits_{i=1}^{k}
w_{li}^{(2)}
F\left(
\sum\limits_{j=1}^{n}
w_{ij}^{(1)}x_j
\right)
\right),
\quad l=\overline{1,m}
$$
## Функция ошибки
Для одного обучающего примера часто используют квадратичную ошибку:
$$ $$
E=\frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2 E=\frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2
$$ $$
Коэффициент $\frac{1}{2}$ нужен только для удобства производной: при дифференцировании квадрат даёт множитель $2$, который сокращается. Обновление веса через градиентный спуск:
## Обновление весов
Минимизация ошибки происходит через градиентный спуск:
$$ $$
w_{ij}(t+1)=w_{ij}(t)-\alpha\frac{\partial E}{\partial w_{ij}(t)} w_{ij}(t+1)=w_{ij}(t)-\alpha\frac{\partial E}{\partial w_{ij}(t)}
$$ $$
где: где:
- $w_{ij}$ - вес связи; - $w_{ij}$ - вес связи;
- $t$ - номер шага обучения; - $t$ - номер шага обучения;
- $\alpha$ - скорость обучения (*learning rate*); - $\alpha$ - скорость обучения (*learning rate*);
- $\frac{\partial E}{\partial w_{ij}}$ - производная ошибки по весу. - $\frac{\partial E}{\partial w_{ij}}$ - производная ошибки по весу.
Если производная положительная, увеличение веса увеличивает ошибку, поэтому вес уменьшается. Если производная отрицательная, вес увеличивается. ## Локальная ошибка
## Алгоритм
1. Подать входной вектор $X$ на вход сети.
2. Выполнить прямой проход и получить выходы всех слоёв.
3. Посчитать ошибку $E$ между предсказанием $Y$ и целевым ответом $D$.
4. Посчитать ошибку выходного слоя $\delta^{(2)}$.
5. Распространить ошибку назад и посчитать ошибки скрытых слоёв $\delta^{(1)}$.
6. Найти градиенты по весам.
7. Обновить веса в направлении антиградиента.
8. Повторять до выполнения условия остановки: лимит эпох, малая ошибка, малая норма градиента или отсутствие улучшения.
## Локальная ошибка слоя
Для выходного слоя: Для выходного слоя:
@@ -126,16 +88,18 @@ F'(S_i^{(1)})
\delta_l^{(2)}w_{li}^{(2)} \delta_l^{(2)}w_{li}^{(2)}
$$ $$
То есть ошибка скрытого нейрона - это сумма ошибок следующего слоя, взвешенная связями с этим слоем, умноженная на производную активации скрытого нейрона. Смысл $\delta$: на выходном слое она показывает ошибку нейрона с учётом производной активации, а на скрытом слое собирает вклад ошибок следующего слоя, взвешенный связями.
## Что вынесено отдельно
- [[Backpropagation для сети с одним скрытым слоем]] - подробный математический вывод через правило цепочки.
- [[Backpropagation для многослойной нейронной сети]] - общий алгоритм для произвольного числа слоёв.
## Интуиция ## Интуиция
Backpropagation - это не отдельный способ оптимизации, а эффективный способ вычислить градиенты. Оптимизацию делает градиентный спуск или его модификации: SGD, Momentum, Adam и т.д. Backpropagation - это не отдельный способ оптимизации, а способ быстро вычислить градиенты. Оптимизацию делает градиентный спуск или его модификации: SGD, Momentum, Adam и т.д.
Смысл $\delta$: Градиент веса получается как локальная ошибка нейрона, в который входит вес, умноженная на вход этого веса. Поэтому после обратного прохода обновление всех весов становится локальной операцией.
- на выходном слое $\delta$ показывает, насколько нейрон ошибся с учётом производной активации;
- на скрытом слое прямого целевого ответа нет, поэтому ошибка собирается из всех нейронов следующего слоя;
- градиент веса получается как локальная ошибка нейрона, в который входит вес, умноженная на вход этого веса.
## Иллюстрации ## Иллюстрации
@@ -145,7 +109,7 @@ Backpropagation - это не отдельный способ оптимизац
## Связанные заметки ## Связанные заметки
- [[Обратное распространение ошибки - вывод]] - [[Backpropagation для сети с одним скрытым слоем]]
- [[Обратное распространение ошибки для произвольного числа слоев НС]] - [[Backpropagation для многослойной нейронной сети]]
- [[Нейронные сети]] - [[Нейронные сети]]
- [[Линейные модели]] - [[Линейные модели]]