vault backup: 2026-05-14 10:49:10
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
---
|
||||
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 для однослойного перцептрона]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
@@ -0,0 +1,242 @@
|
||||
---
|
||||
status: stable
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- backpropagation
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-08
|
||||
title: Backpropagation для однослойного перцептрона
|
||||
---
|
||||
|
||||
# Backpropagation для однослойного перцептрона
|
||||
|
||||
Эта заметка фиксирует математический вывод градиентов для алгоритма [[Обратное распространение ошибки]] на примере сети с одним скрытым слоем. Общая схема для произвольного числа слоёв вынесена в [[Backpropagation для многослойной нейронной сети]].
|
||||
|
||||
Bias для краткости не записан: его градиент считается так же, как градиент веса при входе, равном $1$.
|
||||
|
||||
## Обозначения
|
||||
|
||||
> [!note] Обозначения
|
||||
> $x_j$ - $j$-й вход
|
||||
> $w_{ij}^{(1)}$ - вес от входа $j$ к скрытому нейрону $i$
|
||||
> $w_{li}^{(2)}$ - вес от скрытого нейрона $i$ к выходу $l$
|
||||
> $S_i^{(1)}$ - взвешенная сумма на входе нейрона $i$ в первом слое
|
||||
> $u_i$ - выход нейрона $i$ первого слоя после активации
|
||||
> $S_l^{(2)}$ - взвешенная сумма на входе нейрона $l$ во втором слое
|
||||
> $y_l$ - выход нейрона $l$ второго слоя
|
||||
> $d_l$ - истинное значение
|
||||
> $F$ - функция активации
|
||||
> $\delta$ - локальная ошибка нейрона
|
||||
|
||||
## Прямой проход
|
||||
|
||||
$$
|
||||
\begin{align*}
|
||||
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)}) \\
|
||||
E &= \frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2
|
||||
\end{align*}
|
||||
$$
|
||||
|
||||
## Обратный проход для выходного слоя
|
||||
|
||||
Для веса $w_{li}^{(2)}$ используется правило цепочки:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{li}^{(2)}} =
|
||||
\frac{\partial E}{\partial y_l}
|
||||
\cdot
|
||||
\frac{\partial y_l}{\partial S_l^{(2)}}
|
||||
\cdot
|
||||
\frac{\partial S_l^{(2)}}{\partial w_{li}^{(2)}}
|
||||
$$
|
||||
|
||||
Компоненты производной:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial y_l}=y_l-d_l
|
||||
$$
|
||||
|
||||
$$
|
||||
\frac{\partial y_l}{\partial S_l^{(2)}}=F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
$$
|
||||
\frac{\partial S_l^{(2)}}{\partial w_{li}^{(2)}}=u_i
|
||||
$$
|
||||
|
||||
Итог:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{li}^{(2)}}=(y_l-d_l)*F'(S_l^{(2)})*u_i
|
||||
$$
|
||||
|
||||
Введём локальную ошибку выходного нейрона:
|
||||
|
||||
$$
|
||||
\delta_l^{(2)}=(y_l-d_l)*F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
Тогда:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{li}^{(2)}}=\delta_l^{(2)}u_i
|
||||
$$
|
||||
|
||||
## Обратный проход для скрытого слоя
|
||||
|
||||
Теперь нужна производная ошибки по весу первого слоя:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}}
|
||||
$$
|
||||
|
||||
Вес $w_{ij}^{(1)}$ влияет на $E$ не напрямую, а через все выходные нейроны:
|
||||
|
||||
$$
|
||||
w_{ij}^{(1)} \rightarrow u_i \rightarrow y_l \rightarrow E
|
||||
$$
|
||||
|
||||
По правилу цепочки нужно просуммировать вклады всех путей от скрытого нейрона $i$ к выходным нейронам:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}} =
|
||||
\sum\limits_{l=1}^{m}
|
||||
\frac{\partial E}{\partial y_l}
|
||||
\cdot
|
||||
\frac{\partial y_l}{\partial u_i}
|
||||
\cdot
|
||||
\frac{\partial u_i}{\partial w_{ij}^{(1)}}
|
||||
$$
|
||||
|
||||
Первый множитель:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial y_l}=y_l-d_l
|
||||
$$
|
||||
|
||||
Производная выхода $y_l$ по выходу скрытого нейрона $u_i$:
|
||||
|
||||
$$
|
||||
\frac{\partial y_l}{\partial u_i}
|
||||
=
|
||||
\frac{\partial y_l}{\partial S_l^{(2)}}
|
||||
\cdot
|
||||
\frac{\partial S_l^{(2)}}{\partial u_i}
|
||||
$$
|
||||
|
||||
Так как:
|
||||
|
||||
$$
|
||||
S_l^{(2)}=\sum\limits_{i=1}^{k}w_{li}^{(2)}u_i
|
||||
$$
|
||||
|
||||
то:
|
||||
|
||||
$$
|
||||
\frac{\partial y_l}{\partial u_i}
|
||||
=
|
||||
F'(S_l^{(2)})*w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
Производная выхода скрытого нейрона $u_i$ по весу $w_{ij}^{(1)}$:
|
||||
|
||||
$$
|
||||
\frac{\partial u_i}{\partial w_{ij}^{(1)}}
|
||||
=
|
||||
\frac{\partial u_i}{\partial S_i^{(1)}}
|
||||
\cdot
|
||||
\frac{\partial S_i^{(1)}}{\partial w_{ij}^{(1)}}
|
||||
$$
|
||||
|
||||
Так как:
|
||||
|
||||
$$
|
||||
S_i^{(1)}=\sum\limits_{j=1}^{n}w_{ij}^{(1)}x_j
|
||||
$$
|
||||
|
||||
то:
|
||||
|
||||
$$
|
||||
\frac{\partial u_i}{\partial w_{ij}^{(1)}}
|
||||
=
|
||||
F'(S_i^{(1)})*x_j
|
||||
$$
|
||||
|
||||
Собираем:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}} =
|
||||
\sum\limits_{l=1}^{m}
|
||||
(y_l-d_l)*
|
||||
F'(S_l^{(2)})*
|
||||
w_{li}^{(2)}*
|
||||
F'(S_i^{(1)})*
|
||||
x_j
|
||||
$$
|
||||
|
||||
Вводим локальную ошибку скрытого нейрона:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
\sum\limits_{l=1}^{m}
|
||||
(y_l-d_l)*
|
||||
F'(S_l^{(2)})*
|
||||
w_{li}^{(2)}*
|
||||
F'(S_i^{(1)})
|
||||
$$
|
||||
|
||||
Или через ошибку выходного слоя $\delta_l^{(2)}$:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
F'(S_i^{(1)})*
|
||||
\sum\limits_{l=1}^{m}
|
||||
\delta_l^{(2)}*
|
||||
w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
Тогда:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(1)}}=\delta_i^{(1)}x_j
|
||||
$$
|
||||
|
||||
## Итоговые формулы
|
||||
|
||||
Для слоя $r$ общий шаблон такой:
|
||||
|
||||
$$
|
||||
\frac{\partial E}{\partial w_{ij}^{(r)}}=\delta_i^{(r)}a_j^{(r-1)}
|
||||
$$
|
||||
|
||||
где $a_j^{(r-1)}$ - выход предыдущего слоя. Для первого слоя $a_j^{(0)}=x_j$, для второго слоя $a_i^{(1)}=u_i$.
|
||||
|
||||
Для выходного слоя:
|
||||
|
||||
$$
|
||||
\delta_l^{(2)}=(y_l-d_l)F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
Для скрытого слоя:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
F'(S_i^{(1)})
|
||||
\sum\limits_{l=1}^{m}
|
||||
\delta_l^{(2)}w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Обратное распространение ошибки]]
|
||||
- [[Backpropagation для многослойной нейронной сети]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- clustering
|
||||
- self-organizing-maps
|
||||
created: 2026-05-07
|
||||
updated: 2026-05-07
|
||||
title: Алгоритм обучения сети Кохонена
|
||||
---
|
||||
|
||||
# Алгоритм обучения сети Кохонена
|
||||
|
||||
**Алгоритм обучения сети Кохонена** - процедура самообучения, при которой нейроны топологической карты постепенно становятся прототипами групп похожих входных объектов. Алгоритм относится к [[Нейронная сеть Кохонена|сетям Кохонена]] и связан с задачами [[Кластерный анализ|кластеризации]].
|
||||
|
||||
## Общая схема
|
||||
|
||||
1. Инициализировать веса нейронов небольшими случайными значениями.
|
||||
2. Подать на вход очередной обучающий объект.
|
||||
3. Найти нейрон-победитель, чей вектор весов лучше всего соответствует входному вектору.
|
||||
4. Скорректировать веса нейрона-победителя и, в классической SOM, нейронов из его окрестности.
|
||||
5. Повторять предъявление объектов до стабилизации карты или достижения заданного числа эпох.
|
||||
|
||||
Базовая формула корректировки веса:
|
||||
|
||||
$$
|
||||
w_{ij}(t)=w_{ij}(t-1)+\alpha(x_i-w_{ij}(t-1))
|
||||
$$
|
||||
|
||||
где:
|
||||
|
||||
- $w_{ij}$ - вес связи между входом $i$ и нейроном $j$;
|
||||
- $x_i$ - значение входного признака;
|
||||
- $\alpha$ - скорость обучения;
|
||||
- $t$ - номер шага обучения.
|
||||
|
||||
## Выбор нейрона-победителя
|
||||
|
||||
Нейрон-победитель можно выбирать через меру близости входного вектора и вектора весов нейрона.
|
||||
|
||||
### Через скалярное произведение
|
||||
|
||||
Если векторы нормализованы, близость можно оценивать скалярным произведением:
|
||||
|
||||
$$
|
||||
S_j=\sum\limits_{i=1}^{m}x_iw_{ij}=||x||\cdot||w^j||\cdot cos(\phi)
|
||||
$$
|
||||
|
||||
Побеждает нейрон с максимальным значением $S_j$.
|
||||
|
||||
### Через евклидово расстояние
|
||||
|
||||
Чаще победителем считают нейрон с минимальным расстоянием до входного объекта:
|
||||
|
||||
$$
|
||||
D_j=\sqrt{\sum\limits_{i=1}^{m}(x_i-w_{ij})^2}
|
||||
$$
|
||||
|
||||
где $j$ - индекс нейрона, $i$ - индекс входного признака, $m$ - размерность входного вектора.
|
||||
|
||||
Такой способ напрямую связан с заметкой [[Расстояние между объектами]].
|
||||
|
||||
## Нормализация
|
||||
|
||||
Перед обучением часто нормализуют входные данные и начальные веса, чтобы признаки с крупным масштабом не доминировали при выборе победителя.
|
||||
|
||||
Нормализация входного вектора:
|
||||
|
||||
$$
|
||||
x_j=\frac{x_j}{\sqrt{\sum\limits_{l=1}^{m}x_l^2}}
|
||||
$$
|
||||
|
||||
Нормализация весов:
|
||||
|
||||
$$
|
||||
w_{ij}=\frac{w_{ij}}{\sqrt{\sum\limits_{l=1}^{k}w_{lj}^2}}
|
||||
$$
|
||||
|
||||
## Отличие от K-means
|
||||
|
||||
Алгоритм похож на [[Итерационная классификация. Метод K-средних (K-means)|K-means]] тем, что объект влияет на ближайший прототип. Главное отличие SOM - наличие топологической карты: обновляется не только победитель, но и его соседи, поэтому карта сохраняет отношения близости между областями данных.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронная сеть Кохонена]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Кластерный анализ]]
|
||||
- [[Расстояние между объектами]]
|
||||
- [[Итерационная классификация. Метод K-средних (K-means)]]
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,69 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- clustering
|
||||
- self-organizing-maps
|
||||
created: 2026-05-07
|
||||
updated: 2026-05-07
|
||||
title: Нейронная сеть Кохонена
|
||||
---
|
||||
|
||||
# Нейронная сеть Кохонена
|
||||
|
||||
**Нейронная сеть Кохонена** - класс нейронных сетей, основанный на самоорганизующихся картах (*Self-Organizing Maps*, SOM). Такие сети применяются для [[Кластерный анализ|кластеризации]] и проецирования многомерных данных на пространство меньшей размерности с сохранением топологической близости объектов.
|
||||
|
||||
Если два объекта близки в исходном пространстве признаков, после обучения они обычно попадают в близкие области карты. Поэтому сеть Кохонена удобна не только для разбиения данных на группы, но и для визуального анализа структуры выборки.
|
||||
|
||||
## Идея
|
||||
|
||||
Сеть Кохонена объединяет две задачи:
|
||||
|
||||
1. Выделение кластеров в многомерных данных.
|
||||
2. Отображение многомерных объектов на двумерную или одномерную карту.
|
||||
|
||||
В отличие от многих сетей, обучающихся с учителем, сеть Кохонена обычно работает в режиме самообучения: ей предъявляют входные объекты, а сеть постепенно настраивает веса нейронов так, чтобы разные области карты отвечали за разные группы похожих объектов.
|
||||
|
||||
Интуитивно идею можно описать так: за каждым классом или группой похожих объектов закрепляется один нейрон либо группа близких нейронов. Нейрон хранит вектор весов, который постепенно становится представителем своего класса объектов.
|
||||
|
||||
![[Pasted image 20260507230701.png]]
|
||||
|
||||
Если один и тот же нейрон слишком часто становится победителем, его иногда временно исключают из рассмотрения или тормозят. Это помогает "уравнять права" нейронов выходного слоя и не дать одному прототипу забрать на себя слишком много объектов. Простейший вариант такого механизма - торможение только что выигравшего нейрона.
|
||||
|
||||
## Архитектура
|
||||
|
||||
Сеть состоит из двух основных слоев:
|
||||
|
||||
- **входной слой** - принимает вектор признаков объекта;
|
||||
- **выходной слой** - содержит нейроны топологической карты.
|
||||
|
||||
Каждый нейрон выходного слоя связан со всеми входными признаками и имеет собственный вектор весов. Количество нейронов выходного слоя связано с желаемой детализацией карты и числом обнаруживаемых областей данных.
|
||||
|
||||
![[Pasted image 20260507222244.png|500]]
|
||||
|
||||
## Обучение
|
||||
|
||||
Обучение сети Кохонена сводится к последовательной подстройке весов. На каждом шаге сети предъявляется входной объект, после чего выбирается нейрон-победитель - нейрон, чей вектор весов ближе всего к входному вектору.
|
||||
|
||||
После выбора победителя корректируются:
|
||||
|
||||
- веса самого нейрона-победителя;
|
||||
- веса нейронов, лежащих в его окрестности на карте.
|
||||
|
||||
Размер окрестности $R$ и скорость обучения обычно задаются как функции времени: на первых итерациях они велики, а затем постепенно уменьшаются. В начале обучения может обновляться большая часть карты, поэтому формируется грубая структура кластеров. Ближе к концу обучения $R$ стремится к нулю, и карта уточняет границы между группами объектов.
|
||||
|
||||
Подробная процедура вынесена в [[Алгоритм обучения сети Кохонена]].
|
||||
|
||||
## Связь с кластеризацией
|
||||
|
||||
По смыслу сеть Кохонена близка к итерационным методам кластеризации: веса нейронов играют роль прототипов групп, а входные объекты притягивают ближайшие прототипы к себе. Поэтому рядом полезно держать заметки про [[Кластерный анализ]], [[Классификация]] и [[Итерационная классификация. Метод K-средних (K-means)]].
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронные сети]]
|
||||
- [[Алгоритм обучения сети Кохонена]]
|
||||
- [[Кластерный анализ]]
|
||||
- [[Классификация]]
|
||||
- [[Итерационная классификация. Метод K-средних (K-means)]]
|
||||
@@ -0,0 +1,204 @@
|
||||
---
|
||||
status: processing
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-07
|
||||
title: Нейронные сети
|
||||
---
|
||||
|
||||
# Нейронные сети
|
||||
|
||||
Нейронные сети - модели машинного обучения, вдохновлённые принципами работы биологических нейронов. Их основа - набор связанных искусственных нейронов, которые преобразуют входной вектор $X$ в выходной вектор $Y$.
|
||||
|
||||
## Два направления в ИИ
|
||||
|
||||
В исследованиях искусственного интеллекта можно выделить два направления:
|
||||
|
||||
1. **Моделирование результатов естественного мышления**
|
||||
- важен результат;
|
||||
- внутренние механизмы не обязательны;
|
||||
- цель - получить поведение, похожее на поведение естественных интеллектуальных систем.
|
||||
|
||||
Примеры: системы нечёткого вывода, экспертные системы, построенные по принципу баз знаний.
|
||||
|
||||
2. **Моделирование механизмов естественного мышления**
|
||||
- важны нейрофизиологические и психологические механизмы;
|
||||
- цель - воспроизвести эти механизмы техническими средствами.
|
||||
|
||||
Нейронные сети относятся ко второму направлению.
|
||||
|
||||
## Биологический нейрон
|
||||
|
||||
![[Pasted image 20260410103922.png]]
|
||||
|
||||
Входные сигналы дендритного дерева взвешиваются и суммируются на пути к аксону, где генерируется выходной импульс. Выходной сигнал проходит по ветвям аксона и достигает синапсов, соединяющих аксоны с дендритами других нейронов.
|
||||
|
||||
Типы нейронов:
|
||||
|
||||
1. **Рецепторные** - вводят в мозг сенсорную информацию от органов чувств.
|
||||
2. **Промежуточные** - трансформируют сигналы от рецепторных нейронов и передают их дальше.
|
||||
3. **Эффекторные** - формируют необходимое действие.
|
||||
|
||||
В 1957 году Фрэнк Розенблатт предложил модель персептрона. С 1970-х годов нейросетевое направление начало активно развиваться.
|
||||
|
||||
Одна из классических задач нейронных сетей - распознавание образов: букв, лиц, объектов и т.д.
|
||||
|
||||
## Искусственный нейрон
|
||||
|
||||
Искусственный нейрон состоит из трёх основных элементов:
|
||||
|
||||
- умножители, или синапсы;
|
||||
- сумматор;
|
||||
- нелинейный преобразователь, или функция активации.
|
||||
|
||||
![[Pasted image 20260410105854.png]]
|
||||
|
||||
Функцию активации часто называют блоком нелинейного преобразования.
|
||||
|
||||
![[Pasted image 20260410110002.png]]
|
||||
|
||||
Взвешенная сумма входов:
|
||||
|
||||
$$
|
||||
S=\sum\limits_{i=1}^{n}\omega_i x_i+b
|
||||
$$
|
||||
|
||||
где:
|
||||
- $x_i$ - входной сигнал;
|
||||
- $\omega_i$ - вес входа;
|
||||
- $b$ - смещение (*bias*).
|
||||
|
||||
Смещение можно интерпретировать как порог срабатывания нейрона.
|
||||
|
||||
## Функции активации
|
||||
|
||||
Функция активации добавляет нелинейность. Без неё многослойная сеть сводилась бы к одному линейному преобразованию, а значит не могла бы эффективно моделировать сложные зависимости.
|
||||
|
||||
### Сигмоида
|
||||
|
||||
Функцией активации нейрона часто является сигмоида.
|
||||
|
||||
![[Pasted image 20260410110555.png]]
|
||||
|
||||
Для логистической функции:
|
||||
|
||||
$$
|
||||
f'(x)=a f(x)(1-f(x))
|
||||
$$
|
||||
|
||||
Если $a=1$, то:
|
||||
|
||||
$$
|
||||
y'=y(1-y)
|
||||
$$
|
||||
|
||||
То есть производную можно вычислить через уже полученное значение функции. Это удобно для [[Обратное распространение ошибки|обратного распространения ошибки]].
|
||||
|
||||
![[Pasted image 20260413130714.png]]
|
||||
|
||||
### Гиперболический тангенс
|
||||
|
||||
В качестве функции активации также используется гиперболический тангенс:
|
||||
|
||||
$$
|
||||
\operatorname{th}(x)
|
||||
=
|
||||
\frac{\operatorname{sh}(x)}{\operatorname{ch}(x)}
|
||||
=
|
||||
\frac{e^x-e^{-x}}{e^x+e^{-x}}
|
||||
=
|
||||
\frac{e^{2x}-1}{e^{2x}+1}
|
||||
$$
|
||||
|
||||
Как и логистическая функция, гиперболический тангенс является S-образной функцией, но он симметричен относительно начала координат. В точке $0$ его значение равно $0$.
|
||||
|
||||
### Бинарная функция
|
||||
|
||||
Для сети Хопфилда может использоваться бинарная функция активации:
|
||||
|
||||
$$
|
||||
y_i =
|
||||
\begin{cases}
|
||||
1, \\
|
||||
-1
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
![[Pasted image 20260413131243.png]]
|
||||
|
||||
В другом варианте бинарная функция возвращает:
|
||||
|
||||
$$
|
||||
y =
|
||||
\begin{cases}
|
||||
1, & S \ge \theta \\
|
||||
0, & S < \theta
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
где $\theta$ - порог.
|
||||
|
||||
## Модели нейронных сетей
|
||||
|
||||
Любая нейронная сеть выполняет нелинейное преобразование:
|
||||
|
||||
$$
|
||||
Y=F(X)
|
||||
$$
|
||||
|
||||
Сеть преобразует входной вектор:
|
||||
|
||||
$$
|
||||
X=(x_1,x_2,\dots,x_n)
|
||||
$$
|
||||
|
||||
в выходной вектор:
|
||||
|
||||
$$
|
||||
Y=(y_1,y_2,\dots,y_m)
|
||||
$$
|
||||
|
||||
Конкретный вид преобразования зависит от архитектуры сети, весов и функций активации.
|
||||
|
||||
Преимущество нейронных сетей - обучаемость. Веса сети можно представить как набор матриц. Суть обучения сводится к настройке этих весов так, чтобы для входного объекта $X$ сеть выдавала выход $Y$, близкий к правильному ответу $D$.
|
||||
|
||||
## Обучение с учителем
|
||||
|
||||
Процесс обучения с учителем:
|
||||
|
||||
$$
|
||||
X^{(1)} \rightarrow D^{(1)} \approx Y^{(1)}
|
||||
$$
|
||||
|
||||
$$
|
||||
X^{(2)} \rightarrow D^{(2)} \approx Y^{(2)}
|
||||
$$
|
||||
|
||||
$$
|
||||
\vdots
|
||||
$$
|
||||
|
||||
$$
|
||||
X^{(p)} \rightarrow D^{(p)} \approx Y^{(p)}
|
||||
$$
|
||||
|
||||
Нейронные сети применяются для задач классификации, прогнозирования, распознавания образов и других задач приближения сложных функций.
|
||||
|
||||
Для многослойных сетей основной алгоритм вычисления градиентов - [[Обратное распространение ошибки]]. Для сети с произвольным числом слоёв схема вынесена в [[Backpropagation для многослойной нейронной сети]].
|
||||
|
||||
## Персептрон
|
||||
|
||||
**Персептрон**, или **перцептрон**, - математическая модель восприятия информации, предложенная Фрэнком Розенблаттом в 1957 году и реализованная в машине «Марк-1» в 1960 году.
|
||||
|
||||
Персептрон - один слой искусственных нейронов. Он решает задачу линейной разделимости: разделяет пространство признаков гиперплоскостью.
|
||||
|
||||
По смыслу это близко к [[Линейные модели|линейным моделям]], потому что решение строится через линейную комбинацию входных признаков и весов.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Обратное распространение ошибки]]
|
||||
- [[Backpropagation для многослойной нейронной сети]]
|
||||
- [[Линейные модели]]
|
||||
@@ -0,0 +1,115 @@
|
||||
---
|
||||
status: stable
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- backpropagation
|
||||
- gradient-descent
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-07
|
||||
title: Обратное распространение ошибки
|
||||
---
|
||||
|
||||
# Обратное распространение ошибки
|
||||
|
||||
**Обратное распространение ошибки** (*backpropagation*) - алгоритм вычисления градиентов функции ошибки по весам многослойной [[Нейронные сети|нейронной сети]]. Само обновление весов выполняет градиентный спуск или его модификации, а backpropagation отвечает за эффективный расчёт производных.
|
||||
|
||||
Главная идея: сначала сеть выполняет прямой проход и получает предсказание, затем ошибка распространяется от выходного слоя назад к предыдущим слоям. Для каждого веса считается, как изменение этого веса повлияло бы на итоговую ошибку.
|
||||
|
||||
## Как выглядит
|
||||
|
||||
![[Pasted image 20260507214813.png]]
|
||||
|
||||
## Где используется
|
||||
|
||||
Backpropagation нужен при обучении сетей с учителем:
|
||||
|
||||
$$
|
||||
X^{(p)} \rightarrow Y^{(p)} \approx D^{(p)}
|
||||
$$
|
||||
|
||||
где:
|
||||
|
||||
- $X^{(p)}$ - входной объект;
|
||||
- $Y^{(p)}$ - выход сети;
|
||||
- $D^{(p)}$ - целевой ответ;
|
||||
- $p$ - номер обучающего примера.
|
||||
|
||||
Алгоритм применим к многослойным сетям, если функции активации дифференцируемы или хотя бы имеют используемую на практике производную почти всюду.
|
||||
|
||||
## Базовый цикл
|
||||
|
||||
1. Подать входной вектор $X$ на вход сети.
|
||||
2. Выполнить прямой проход и получить выходы всех слоёв.
|
||||
3. Посчитать ошибку $E$ между предсказанием $Y$ и целевым ответом $D$.
|
||||
4. Посчитать локальную ошибку выходного слоя.
|
||||
5. Распространить ошибку назад и посчитать локальные ошибки скрытых слоёв.
|
||||
6. Найти градиенты по весам.
|
||||
7. Обновить веса в направлении антиградиента.
|
||||
8. Повторять до выполнения условия остановки: лимит эпох, малая ошибка, малая норма градиента или отсутствие улучшения.
|
||||
|
||||
## Ключевые формулы
|
||||
|
||||
Для квадратичной ошибки:
|
||||
|
||||
$$
|
||||
E=\frac{1}{2}\sum\limits_{l=1}^{m}(y_l-d_l)^2
|
||||
$$
|
||||
|
||||
Обновление веса через градиентный спуск:
|
||||
|
||||
$$
|
||||
w_{ij}(t+1)=w_{ij}(t)-\alpha\frac{\partial E}{\partial w_{ij}(t)}
|
||||
$$
|
||||
|
||||
где:
|
||||
|
||||
- $w_{ij}$ - вес связи;
|
||||
- $t$ - номер шага обучения;
|
||||
- $\alpha$ - скорость обучения (*learning rate*);
|
||||
- $\frac{\partial E}{\partial w_{ij}}$ - производная ошибки по весу.
|
||||
|
||||
## Локальная ошибка
|
||||
|
||||
Для выходного слоя:
|
||||
|
||||
$$
|
||||
\delta_l^{(2)}=(y_l-d_l)F'(S_l^{(2)})
|
||||
$$
|
||||
|
||||
Для скрытого слоя:
|
||||
|
||||
$$
|
||||
\delta_i^{(1)}
|
||||
=
|
||||
F'(S_i^{(1)})
|
||||
\sum\limits_{l=1}^{m}
|
||||
\delta_l^{(2)}w_{li}^{(2)}
|
||||
$$
|
||||
|
||||
Смысл $\delta$: на выходном слое она показывает ошибку нейрона с учётом производной активации, а на скрытом слое собирает вклад ошибок следующего слоя, взвешенный связями.
|
||||
|
||||
## Что вынесено отдельно
|
||||
|
||||
- [[Backpropagation для однослойного перцептрона]] - подробный математический вывод через правило цепочки.
|
||||
- [[Backpropagation для многослойной нейронной сети]] - общий алгоритм для произвольного числа слоёв.
|
||||
|
||||
## Интуиция
|
||||
|
||||
Backpropagation - это не отдельный способ оптимизации, а способ быстро вычислить градиенты. Оптимизацию делает градиентный спуск или его модификации: SGD, Momentum, Adam и т.д.
|
||||
|
||||
Градиент веса получается как локальная ошибка нейрона, в который входит вес, умноженная на вход этого веса. Поэтому после обратного прохода обновление всех весов становится локальной операцией.
|
||||
|
||||
## Иллюстрации
|
||||
|
||||
![[Pasted image 20260417105754.png|536]]
|
||||
|
||||
![[Pasted image 20260417105833.png|540]]
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Backpropagation для однослойного перцептрона]]
|
||||
- [[Backpropagation для многослойной нейронной сети]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
Reference in New Issue
Block a user