vault backup: 2026-05-07 15:42:14
This commit is contained in:
Vendored
+7
-23
@@ -21,24 +21,8 @@
|
|||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Обратное распространение ошибки - вывод"
|
"title": "Обратное распространение ошибки - вывод"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "88b67d9f503d6d2c",
|
|
||||||
"type": "leaf",
|
|
||||||
"state": {
|
|
||||||
"type": "markdown",
|
|
||||||
"state": {
|
|
||||||
"file": "00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md",
|
|
||||||
"mode": "source",
|
|
||||||
"source": false,
|
|
||||||
"backlinks": false
|
|
||||||
},
|
|
||||||
"icon": "lucide-file",
|
|
||||||
"title": "Алгоритм обратного распространения ошибки для произвольного числа слоев НС"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"currentTab": 1
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "vertical"
|
"direction": "vertical"
|
||||||
@@ -186,13 +170,13 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "outline",
|
"type": "outline",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.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 Обратное распространение ошибки - вывод"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -260,10 +244,12 @@
|
|||||||
"obsidian-git:Open Git source control": false
|
"obsidian-git:Open Git source control": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "88b67d9f503d6d2c",
|
"active": "cb9f1037ae0492db",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md",
|
|
||||||
"00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md",
|
"00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md",
|
||||||
|
"99 System/Archive/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.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",
|
"01 Library/11 Machine Learning/Нейронные сети.md",
|
||||||
"00 Inbox/Hello.md",
|
"00 Inbox/Hello.md",
|
||||||
@@ -286,8 +272,6 @@
|
|||||||
"99 System/Archive/Gitlab.md",
|
"99 System/Archive/Gitlab.md",
|
||||||
"99 System/Archive/Git.md",
|
"99 System/Archive/Git.md",
|
||||||
"01 Library/02 DevOps/Основные команды git.md",
|
"01 Library/02 DevOps/Основные команды git.md",
|
||||||
"00 Inbox/Git.md",
|
|
||||||
"00 Inbox/Archive/Шаблонизатор Helm.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",
|
||||||
|
|||||||
+184
@@ -0,0 +1,184 @@
|
|||||||
|
---
|
||||||
|
status: seed
|
||||||
|
type: concept
|
||||||
|
tags:
|
||||||
|
- machine-learning
|
||||||
|
- neural-networks
|
||||||
|
- backpropagation
|
||||||
|
- gradient-descent
|
||||||
|
created: 2025-12-17
|
||||||
|
updated: 2026-05-07
|
||||||
|
title: Алгоритм обратного распространения ошибки для произвольного числа слоев НС
|
||||||
|
---
|
||||||
|
|
||||||
|
# Алгоритм обратного распространения ошибки для произвольного числа слоев НС
|
||||||
|
|
||||||
|
Эта заметка обобщает [[Обратное распространение ошибки]] на сеть с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: [[Обратное распространение ошибки - вывод]].
|
||||||
|
|
||||||
|
## Обозначения
|
||||||
|
|
||||||
|
Пусть сеть имеет $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)}$, а дальше градиент каждого веса считается локально: ошибка принимающего нейрона умножается на выход отправляющего нейрона.
|
||||||
|
|
||||||
|
## Связанные заметки
|
||||||
|
|
||||||
|
- [[Обратное распространение ошибки]]
|
||||||
|
- [[Обратное распространение ошибки - вывод]]
|
||||||
|
- [[Нейронные сети]]
|
||||||
|
- [[Линейные модели]]
|
||||||
Reference in New Issue
Block a user