From 10d04311e24e2b3ea6c2cfb1d71d319362e4a6c4 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 7 May 2026 15:42:14 +0300 Subject: [PATCH] vault backup: 2026-05-07 15:42:14 --- .obsidian/workspace.json | 30 +-- ... распространения ошибки для произвольного числа слоев НС.md | 184 ++++++++++++++++++ ... распространения ошибки для произвольного числа слоев НС.md | 0 3 files changed, 191 insertions(+), 23 deletions(-) create mode 100644 01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md rename {00 Inbox => 99 System/Archive}/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md (100%) diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 6d8d4db..ba6e0e7 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -21,24 +21,8 @@ "icon": "lucide-file", "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" @@ -186,13 +170,13 @@ "state": { "type": "outline", "state": { - "file": "00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md", + "file": "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", "followCursor": false, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "Outline of Алгоритм обратного распространения ошибки для произвольного числа слоев НС" + "title": "Outline of Обратное распространение ошибки - вывод" } }, { @@ -260,10 +244,12 @@ "obsidian-git:Open Git source control": false } }, - "active": "88b67d9f503d6d2c", + "active": "cb9f1037ae0492db", "lastOpenFiles": [ - "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.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", "00 Inbox/Hello.md", @@ -286,8 +272,6 @@ "99 System/Archive/Gitlab.md", "99 System/Archive/Git.md", "01 Library/02 DevOps/Основные команды git.md", - "00 Inbox/Git.md", - "00 Inbox/Archive/Шаблонизатор Helm.md", "00 Inbox/Archive", "01 Library/03 Math/Теория нечетких множеств/Теория нечетких множеств.md.tmp.254945.1777751883191", "01 Library/02 DevOps/Ansible/Ansible - основы.md.tmp.254945.1777751876503", diff --git a/01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md b/01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md new file mode 100644 index 0000000..3b77e84 --- /dev/null +++ b/01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md @@ -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)}$, а дальше градиент каждого веса считается локально: ошибка принимающего нейрона умножается на выход отправляющего нейрона. + +## Связанные заметки + +- [[Обратное распространение ошибки]] +- [[Обратное распространение ошибки - вывод]] +- [[Нейронные сети]] +- [[Линейные модели]] diff --git a/00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md b/99 System/Archive/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md similarity index 100% rename from 00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md rename to 99 System/Archive/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md