vault backup: 2026-05-24 15:03:28
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,101 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- clustering
|
||||
- self-organizing-maps
|
||||
created: 2026-05-07
|
||||
updated: 2026-05-14
|
||||
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 - наличие топологической карты: обновляется не только победитель, но и его соседи, поэтому карта сохраняет отношения близости между областями данных.
|
||||
|
||||
## Метод выпуклой комбинации
|
||||
|
||||
Случайная инициализация весов может ухудшить качество карты. Плотные классы могут слиться, а близкие образы одного класса - раздробиться на дополнительные подклассы.
|
||||
|
||||
Один из способов смягчить эту проблему - метод выпуклой комбинации. Идея в том, что нормализованные входные образы сначала искусственно сближаются между собой, а затем постепенно возвращаются к исходному виду.
|
||||
|
||||
Для этого используют коэффициент $\alpha(t)$, который в процессе обучения изменяется от $0$ до $1$. В начале обучения сеть видит почти одинаковые образы и формирует грубую структуру карты. Затем входы всё сильнее приближаются к исходным данным, и карта уточняет разделение классов.
|
||||
|
||||
Этот приём снижает риск того, что начальные случайные веса слишком рано закрепят неудачное разбиение данных.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронная сеть Кохонена]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Кластерный анализ]]
|
||||
- [[Расстояние между объектами]]
|
||||
- [[Итерационная классификация. Метод 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,87 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- clustering
|
||||
- self-organizing-maps
|
||||
created: 2026-05-07
|
||||
updated: 2026-05-14
|
||||
title: Нейронная сеть Кохонена
|
||||
---
|
||||
|
||||
# Нейронная сеть Кохонена
|
||||
|
||||
**Нейронная сеть Кохонена** - класс нейронных сетей, основанный на самоорганизующихся картах (*Self-Organizing Maps*, SOM). Такие сети применяются для [[Кластерный анализ|кластеризации]] и проецирования многомерных данных на пространство меньшей размерности с сохранением топологической близости объектов.
|
||||
|
||||
Если два объекта близки в исходном пространстве признаков, после обучения они обычно попадают в близкие области карты. Поэтому сеть Кохонена удобна не только для разбиения данных на группы, но и для визуального анализа структуры выборки.
|
||||
|
||||
## Идея
|
||||
|
||||
Сеть Кохонена объединяет две задачи:
|
||||
|
||||
1. Выделение кластеров в многомерных данных.
|
||||
2. Отображение многомерных объектов на двумерную или одномерную карту.
|
||||
|
||||
В отличие от многих сетей, обучающихся с учителем, сеть Кохонена обычно работает в режиме самообучения: ей предъявляют входные объекты, а сеть постепенно настраивает веса нейронов так, чтобы разные области карты отвечали за разные группы похожих объектов.
|
||||
|
||||
Интуитивно идею можно описать так: за каждым классом или группой похожих объектов закрепляется один нейрон либо группа близких нейронов. Нейрон хранит вектор весов, который постепенно становится представителем своего класса объектов.
|
||||
|
||||
![[Pasted image 20260507230701.png]]
|
||||
|
||||
Если один и тот же нейрон слишком часто становится победителем, его иногда временно исключают из рассмотрения или тормозят. Это помогает "уравнять права" нейронов выходного слоя и не дать одному прототипу забрать на себя слишком много объектов. Простейший вариант такого механизма - торможение только что выигравшего нейрона.
|
||||
|
||||
## Архитектура
|
||||
|
||||
Сеть состоит из двух основных слоев:
|
||||
|
||||
- **входной слой** - принимает вектор признаков объекта;
|
||||
- **выходной слой** - содержит нейроны топологической карты.
|
||||
|
||||
Каждый нейрон выходного слоя связан со всеми входными признаками и имеет собственный вектор весов. Количество нейронов выходного слоя связано с желаемой детализацией карты и числом обнаруживаемых областей данных.
|
||||
|
||||
Выходной слой можно рассматривать как упорядоченную структуру радиальных нейронов. В контексте классификации без учителя число нейронов или областей карты связано с ожидаемым числом классов $K$, но это не жёсткое число заранее известных меток: карта может показать более тонкую структуру данных.
|
||||
|
||||
![[Pasted image 20260507222244.png|500]]
|
||||
|
||||
## Обучение
|
||||
|
||||
Обучение сети Кохонена сводится к последовательной подстройке весов. На каждом шаге сети предъявляется входной объект, после чего выбирается нейрон-победитель - нейрон, чей вектор весов ближе всего к входному вектору.
|
||||
|
||||
После выбора победителя корректируются:
|
||||
|
||||
- веса самого нейрона-победителя;
|
||||
- веса нейронов, лежащих в его окрестности на карте.
|
||||
|
||||
Размер окрестности $R$ и скорость обучения обычно задаются как функции времени: на первых итерациях они велики, а затем постепенно уменьшаются. В начале обучения может обновляться большая часть карты, поэтому формируется грубая структура кластеров. Ближе к концу обучения $R$ стремится к нулю, и карта уточняет границы между группами объектов.
|
||||
|
||||
Подробная процедура вынесена в [[Алгоритм обучения сети Кохонена]].
|
||||
|
||||
## Связь с кластеризацией
|
||||
|
||||
По смыслу сеть Кохонена близка к итерационным методам кластеризации: веса нейронов играют роль прототипов групп, а входные объекты притягивают ближайшие прототипы к себе. Поэтому рядом полезно держать заметки про [[Кластерный анализ]], [[Классификация]] и [[Итерационная классификация. Метод K-средних (K-means)]].
|
||||
|
||||
## Применение
|
||||
|
||||
Сети Кохонена особенно полезны для разведочного анализа данных: они помогают увидеть сгущения объектов, близость классов и потенциальные аномалии на двумерной карте.
|
||||
|
||||
Типичные применения:
|
||||
|
||||
- кластеризация без учителя;
|
||||
- визуализация многомерных данных;
|
||||
- поиск закономерностей в больших массивах данных;
|
||||
- выявление независимых или слабо связанных признаков;
|
||||
- сжатие информации;
|
||||
- моделирование и прогнозирование;
|
||||
- обнаружение новых явлений и нетипичных объектов.
|
||||
|
||||
Если после обучения кластеры разметить вручную, карту можно использовать и для классификации новых объектов. Если новый объект не похож ни на один из известных кластеров, это может быть сигналом новизны или аномалии.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронные сети]]
|
||||
- [[Алгоритм обучения сети Кохонена]]
|
||||
- [[Кластерный анализ]]
|
||||
- [[Классификация]]
|
||||
- [[Итерационная классификация. Метод K-средних (K-means)]]
|
||||
@@ -0,0 +1,284 @@
|
||||
---
|
||||
status: processing
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-14
|
||||
source: "[[МИАД_Л5_нейронки.pdf]]"
|
||||
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$.
|
||||
|
||||
## Ассоциативная память
|
||||
|
||||
Отдельный класс составляют сети ассоциативной памяти, например [[Сеть Хопфилда]] и [[Сеть Хэмминга]]. Они ориентированы на хранение эталонных образов и распознавание входного сигнала по близости к этим эталонам.
|
||||
|
||||
Их особенность в том, что весовые коэффициенты рассчитываются один раз перед началом функционирования сети. После задания весов они обычно не корректируются: сеть не обучается итеративно в привычном смысле, а хранит набор эталонов и сопоставляет с ними входной образ.
|
||||
|
||||
Пусть известен набор эталонных образов: изображений, звуков, бинарных векторов или других сигналов. Сеть должна по входному, возможно искажённому, сигналу восстановить соответствующий эталонный образ, указать номер наиболее близкого эталона или показать, что подходящего эталона нет.
|
||||
|
||||
По смыслу входной образ работает как ключ, по которому сеть "вспоминает" ближайший сохранённый образ.
|
||||
|
||||
| Сеть | Что выдаёт | Когда удобна |
|
||||
|---|---|---|
|
||||
| [[Сеть Хопфилда]] | восстановленный образ | когда нужно получить полный эталон |
|
||||
| [[Сеть Хэмминга]] | номер ближайшего эталона | когда достаточно классифицировать вход |
|
||||
|
||||
Обе сети относятся к моделям ассоциативной памяти, но решают задачу на разном уровне: сеть Хопфилда восстанавливает состояние, а сеть Хэмминга выбирает ближайший сохранённый образ.
|
||||
|
||||
## Переобучение и обобщение
|
||||
|
||||
**Обобщение** — способность сети делать точный прогноз на данных, не входивших в обучающую выборку.
|
||||
|
||||
**Переобучение** возникает, если алгоритм обучения работает слишком долго или сеть слишком сложна для объёма данных: сеть "запоминает" обучающие примеры вместо того, чтобы выявить общую зависимость. Симптом: ошибка на обучающей выборке продолжает убывать, а ошибка на тестовой — перестаёт убывать или растёт.
|
||||
|
||||
Сети с большим числом весов моделируют более сложные функции и сильнее склонны к переобучению. Сети с малым числом весов могут оказаться недостаточно гибкими.
|
||||
|
||||
**Способы борьбы**:
|
||||
- **Кросс-проверка** — часть обучающей выборки резервируется как тестовая и не участвует в обучении. Если тестовая ошибка перестаёт убывать, обучение останавливают.
|
||||
- Уменьшение числа скрытых нейронов и/или слоёв.
|
||||
- Ограничение числа эпох обучения.
|
||||
|
||||
**Эмпирическое правило** для выбора размера сети и объёма данных:
|
||||
|
||||
$$
|
||||
2 \cdot (I + H + O) \le F \le 10 \cdot (I + H + O)
|
||||
$$
|
||||
|
||||
$$
|
||||
\frac{F}{10} - I - O \le H \le \frac{F}{2} - I - O
|
||||
$$
|
||||
|
||||
где $I$ — число входов, $H$ — число скрытых нейронов, $O$ — число выходов, $F$ — число обучающих примеров.
|
||||
|
||||
## Этапы решения практических задач
|
||||
|
||||
1. **Формализация задачи** — определить, какой смысл вкладывается в компоненты входного вектора $X$ и выходного вектора $Y$.
|
||||
2. **Подготовка данных** — собрать или сгенерировать обучающую выборку.
|
||||
3. **Предобработка данных** — нормировка, кодирование нечисловых переменных, проверка коррелируемости, анализ периодичности. Подробнее: [[Предобработка данных для нейронных сетей]].
|
||||
4. **Задание структуры сети** — выбор числа слоёв, числа нейронов в каждом слое и вида функций активации.
|
||||
5. **Обучение сети** — настройка весов, контроль переобучения, возможное включение шумов в обучающий процесс.
|
||||
6. **Использование сети** — применение обученной модели к новым данным.
|
||||
|
||||
## Формализация задач
|
||||
|
||||
Многослойный перцептрон вычисляет отображение $X \to Y$. Поэтому любая задача для НС сводится к выбору смысла входного и выходного векторов. Жёстких рецептов нет — это экспертная задача.
|
||||
|
||||
### Классификация
|
||||
|
||||
Вход $X$ — вектор признаков объекта. Выход — вектор вероятностей принадлежности к $M$ классам:
|
||||
|
||||
$$
|
||||
C = (c_1, c_2, \dots, c_M), \quad 0 \le c_m \le 1, \quad \sum_{m=1}^M c_m = 1
|
||||
$$
|
||||
|
||||
Кодировать номер класса одним выходом — некорректно: сеть интерполирует между числами классов и может относить объект к классу с промежуточным номером.
|
||||
|
||||
### Прогнозирование временного ряда
|
||||
|
||||
Для прогнозирования функции $f(t)$ используется **метод окон**: скользящее окно $W_i$ размера $n$ формирует входной вектор из исторических значений, а окно $W_o$ размера $m$ — целевой вектор (значения через интервал прогнозирования $\delta_0$).
|
||||
|
||||
$$
|
||||
X = \bigl(f(t_0),\, f(t_0 - \delta_1),\, \dots,\, f(t_0 - \delta_1 - \dots - \delta_n)\bigr) \to Y = f(t_0 + \delta_0)
|
||||
$$
|
||||
|
||||
### Аппроксимация многомерной функции
|
||||
|
||||
Для функции $Y = f(X)$ с $N_I$ входами и $N_O$ выходами строится сеть с $N_I$ входами и $N_O$ выходами. Сеть обучается на известных значениях функции.
|
||||
|
||||
## Обучение с учителем
|
||||
|
||||
Процесс обучения с учителем:
|
||||
|
||||
$$
|
||||
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 для многослойной нейронной сети]].
|
||||
|
||||
## Персептрон
|
||||
|
||||
Базовая однослойная модель классификации вынесена в отдельную заметку [[Персептрон]]. Она показывает, как нейронная сеть может разделять пространство признаков гиперплоскостью и почему линейная разделимость является важным ограничением простых моделей.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Обратное распространение ошибки]]
|
||||
- [[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 для многослойной нейронной сети]]
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
@@ -0,0 +1,65 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- unsupervised-learning
|
||||
- hebb
|
||||
created: 2026-05-14
|
||||
updated: 2026-05-14
|
||||
title: Обучение без учителя. Алгоритм Хебба
|
||||
---
|
||||
|
||||
# Обучение без учителя. Алгоритм Хебба
|
||||
|
||||
Обучение без учителя — режим, при котором [[Нейронные сети|нейронной сети]] не предъявляют желаемых выходных сигналов. Сеть сама формирует выходы, а веса изменяются по алгоритму, учитывающему только входные сигналы и текущее состояние нейронов.
|
||||
|
||||
Подстройка весов при обучении без учителя опирается исключительно на информацию, доступную внутри нейрона: его текущее состояние и уже имеющиеся весовые коэффициенты.
|
||||
|
||||
## Сигнальный метод Хебба
|
||||
|
||||
Правило обновления весов:
|
||||
|
||||
$$
|
||||
w_{ij}(t) = w_{ij}(t-1) + \alpha \cdot y_i^{(n-1)} \cdot y_j^{(n)}
|
||||
$$
|
||||
|
||||
где:
|
||||
- $y_i^{(n-1)}$ — выходное значение нейрона $i$ слоя $(n-1)$;
|
||||
- $y_j^{(n)}$ — выходное значение нейрона $j$ слоя $n$;
|
||||
- $\alpha$ — скорость обучения;
|
||||
- $w_{ij}(t)$, $w_{ij}(t-1)$ — вес синапса на итерациях $t$ и $t-1$.
|
||||
|
||||
Смысл: если оба нейрона активны одновременно, синаптическая связь между ними усиливается.
|
||||
|
||||
## Дифференциальный метод Хебба
|
||||
|
||||
Правило обновления весов:
|
||||
|
||||
$$
|
||||
w_{ij}(t) = w_{ij}(t-1) + \alpha \cdot \bigl[y_i^{(n-1)}(t) -$$
|
||||
$$- y_i^{(n-1)}(t-1)\bigr] \cdot \bigl[y_j^{(n)}(t) - y_j^{(n)}(t-1)\bigr]
|
||||
$$
|
||||
|
||||
Сильнее обучаются синапсы, соединяющие те нейроны, выходы которых наиболее динамично изменились в сторону увеличения.
|
||||
|
||||
## Алгоритм обучения
|
||||
|
||||
1. Инициализировать все веса небольшими случайными значениями.
|
||||
2. Подать входной образ; распространить сигналы по сети согласно принципам прямопоточных (*feedforward*) сетей — вычислить взвешенную сумму для каждого нейрона и применить функцию активации.
|
||||
3. По формуле (1) или (2) скорректировать веса.
|
||||
4. Повторять с шага 2, пока выходные значения сети не стабилизируются с заданной точностью.
|
||||
|
||||
Критерий остановки отличается от обратного распространения: не минимизация ошибки, а стабилизация выходов, поскольку целевые значения неизвестны.
|
||||
|
||||
## Применение
|
||||
|
||||
Обучение по Хеббу используется в сетях, где нет явного учителя, в частности в [[Нейронная сеть Кохонена|сети Кохонена]]. Там нейрон-победитель обновляет свои веса, притягивая их к входному образу, — это вариант сигнального метода.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронные сети]]
|
||||
- [[Нейронная сеть Кохонена]]
|
||||
- [[Алгоритм обучения сети Кохонена]]
|
||||
- [[Обратное распространение ошибки]]
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- linear-models
|
||||
- classification
|
||||
created: 2026-05-14
|
||||
updated: 2026-05-14
|
||||
title: Персептрон
|
||||
---
|
||||
|
||||
# Персептрон
|
||||
|
||||
**Персептрон**, или **перцептрон**, - ранняя модель [[Нейронные сети|нейронной сети]], предложенная Фрэнком Розенблаттом в 1957 году и реализованная в машине "Марк-1" в 1960 году. По смыслу это однослойная модель классификации, которая принимает вектор признаков и относит объект к классу по линейному правилу.
|
||||
|
||||
Персептрон близок к [[Линейные модели|линейным моделям]]: решение строится через взвешенную сумму входных признаков и пороговую функцию активации.
|
||||
|
||||
## Идея
|
||||
|
||||
Персептрон состоит из одного слоя искусственных нейронов, соединённых с входами через весовые коэффициенты. На вход подаётся вектор признаков:
|
||||
|
||||
$$
|
||||
X=(x_1,x_2,\dots,x_n)
|
||||
$$
|
||||
|
||||
Каждый нейрон вычисляет линейную комбинацию входов:
|
||||
|
||||
$$
|
||||
S_k=\sum\limits_{i=1}^{n}x_iw_{ik}
|
||||
$$
|
||||
|
||||
и сравнивает её с порогом:
|
||||
|
||||
$$
|
||||
S_k=T_k,\quad k=1,\dots,m
|
||||
$$
|
||||
|
||||
где:
|
||||
|
||||
- $x_i$ - значение входного признака;
|
||||
- $w_{ik}$ - вес связи между входом $i$ и выходом $k$;
|
||||
- $T_k$ - порог для выходного нейрона;
|
||||
- $m$ - число выходов сети.
|
||||
|
||||
## Геометрический смысл
|
||||
|
||||
С математической точки зрения персептрон разбивает пространство признаков гиперплоскостями. В трёхмерном случае плоскость задаётся уравнением:
|
||||
|
||||
$$
|
||||
A X + B Y + C Z + D = 0
|
||||
$$
|
||||
|
||||
Точки по одну сторону плоскости удовлетворяют неравенству:
|
||||
|
||||
$$
|
||||
A X + B Y + C Z + D > 0
|
||||
$$
|
||||
|
||||
Веса персептрона задают положение такой плоскости в пространстве признаков. Поэтому классификация сводится к проверке, по какую сторону разделяющей гиперплоскости находится объект.
|
||||
|
||||
Для сети персептронного типа с $m$ выходами число областей классификации не превышает $2^m$.
|
||||
|
||||
## Ограничение
|
||||
|
||||
Однослойный персептрон решает задачи, которые можно свести к линейной разделимости. Если классы нельзя разделить одной гиперплоскостью или набором линейных порогов в исходном пространстве признаков, нужен переход к другим признакам или многослойной сети.
|
||||
|
||||
Поэтому персептрон полезен как базовая модель для понимания [[Нейронные сети|нейронных сетей]], но не заменяет многослойные архитектуры и [[Обратное распространение ошибки|обратное распространение ошибки]].
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронные сети]]
|
||||
- [[Линейные модели]]
|
||||
- [[Классификация]]
|
||||
- [[Обратное распространение ошибки]]
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- preprocessing
|
||||
- normalization
|
||||
created: 2026-05-14
|
||||
updated: 2026-05-14
|
||||
title: Предобработка данных для нейронных сетей
|
||||
---
|
||||
|
||||
# Предобработка данных для нейронных сетей
|
||||
|
||||
Перед обучением [[Нейронные сети|нейронной сети]] данные необходимо привести к виду, пригодному для входных нейронов. "Сырые" данные приводят к неустойчивому обучению и большой ошибке выхода. После правильной предобработки сеть зачастую обучается быстрее и достигает меньшей ошибки.
|
||||
|
||||
## Принцип максимизации энтропии
|
||||
|
||||
Общий принцип предобработки: **максимизировать энтропию входных и выходных значений**.
|
||||
|
||||
Если значения переменной сосредоточены в узком диапазоне, информационное содержание каждого примера мало. Если значения равномерно распределены по единичному интервалу — информация максимальна. Значит, кодирование и нормировка должны стремиться к равномерному распределению закодированных примеров.
|
||||
|
||||
## Нормировка числовых переменных
|
||||
|
||||
Все входные и выходные значения необходимо привести к единому масштабу — нейросеть не должна зависеть от единиц измерения.
|
||||
|
||||
### Линейная нормировка
|
||||
|
||||
$$
|
||||
\tilde{x}_i = \frac{x_i - x_{i,\min}}{x_{i,\max} - x_{i,\min}}
|
||||
$$
|
||||
|
||||
Результат лежит в $[0, 1]$. Оптимальна, когда значения плотно заполняют некоторый интервал без резких выбросов. При наличии выбросов весь основной массив данных сожмётся в окрестность нуля.
|
||||
|
||||
### Нормировка по статистике
|
||||
|
||||
$$
|
||||
\tilde{x}_i = \frac{x_i - \bar{x}_i}{\sigma_i}, \quad \bar{x}_i = \frac{1}{P}\sum_{\alpha=1}^{P}x_i^\alpha, \quad \sigma_i^2 = \frac{1}{P-1}\sum_{\alpha=1}^{P}(x_i^\alpha - \bar{x}_i)^2
|
||||
$$
|
||||
|
||||
Нормированные значения не гарантированно лежат в $[0, 1]$. Если выходные нейроны используют сигмоиду, диапазон выходов ограничен — нужно дополнительно ограничить диапазон нормированных меток. Естественный выход: применить к нормированным данным ту же функцию активации, что и у выходных нейронов:
|
||||
|
||||
$$
|
||||
\tilde{x}_i = f\!\left(\frac{x_i - \bar{x}_i}{\sigma_i}\right), \quad f(a) = \frac{1}{1+e^{-a}}
|
||||
$$
|
||||
|
||||
## Кодирование нечисловых переменных
|
||||
|
||||
Нейронная сеть работает с числами, поэтому нечисловые переменные необходимо закодировать. Два основных типа:
|
||||
|
||||
- **Ординальные** — упорядоченные категории, которые можно ранжировать: *плохо — хорошо — отлично*.
|
||||
- **Категориальные** — неупорядоченные классы: *красный, синий, зелёный*.
|
||||
|
||||
### Ординальные переменные
|
||||
|
||||
Единичный отрезок $[0, 1]$ разбивается на $n$ частей (по числу классов) пропорционально числу примеров каждого класса в обучающей выборке:
|
||||
|
||||
$$
|
||||
\Delta x_k = \frac{P_k}{P}
|
||||
$$
|
||||
|
||||
где $P_k$ — число примеров класса $k$, $P$ — общее число примеров. Числовым значением класса становится центр соответствующего отрезка.
|
||||
|
||||
Такой способ обеспечивает равномерное распределение закодированных значений, то есть максимальную энтропию.
|
||||
|
||||
### Категориальные переменные
|
||||
|
||||
Навязывать несуществующий порядок нельзя — это искажает структуру данных. Используется **двоичное кодирование**: $n$ категорий кодируются $n$ бинарными нейронами.
|
||||
|
||||
- первая категория: $(1, 0, \dots, 0)$
|
||||
- вторая категория: $(0, 1, \dots, 0)$
|
||||
- …
|
||||
- $n$-я категория: $(0, \dots, 0, 1)$
|
||||
|
||||
Можно использовать **биполярную кодировку**, заменяя нули на $-1$. При этом расстояния между всеми парами векторов-категорий одинаковы.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронные сети]]
|
||||
- [[Обратное распространение ошибки]]
|
||||
- [[Нейронная сеть Кохонена]]
|
||||
@@ -0,0 +1,126 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- associative-memory
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-15
|
||||
title: Сеть Хопфилда
|
||||
---
|
||||
|
||||
# Сеть Хопфилда
|
||||
|
||||
**Сеть Хопфилда** - однослойная рекуррентная [[Нейронные сети|нейронная сеть]], используемая как ассоциативная память. Она получает входной, возможно искажённый, образ и постепенно приводит состояние сети к одному из сохранённых эталонов.
|
||||
|
||||
В отличие от [[Сеть Хэмминга|сети Хэмминга]], сеть Хопфилда выдаёт не номер ближайшего образа, а сам восстановленный образ.
|
||||
|
||||
## Идея
|
||||
|
||||
Сеть хранит набор эталонных образов как устойчивые состояния. При подаче входного сигнала значения выходов нейронов инициализируются этим сигналом, после чего сеть итеративно пересчитывает состояния. Если вход близок к одному из эталонов, динамика сети должна сойтись к нему.
|
||||
|
||||
По смыслу входной образ работает как ключ: сеть "вспоминает" наиболее близкий сохранённый образ.
|
||||
|
||||
В общем случае входной сигнал описывается биполярным вектором:
|
||||
|
||||
$$
|
||||
X=(x_1,\dots,x_n),\quad x_i \in \{-1,1\}
|
||||
$$
|
||||
|
||||
Эталонный образ $k$ можно обозначить как:
|
||||
|
||||
$$
|
||||
X^k=(x_1^k,\dots,x_n^k),\quad k=1,\dots,m
|
||||
$$
|
||||
|
||||
Если сеть успешно распознаёт образ, её выход совпадает с одним из эталонов:
|
||||
|
||||
$$
|
||||
Y=X^k
|
||||
$$
|
||||
|
||||
Если выходной вектор не совпал ни с одним эталоном, сеть пришла к ложному или неинтерпретируемому состоянию.
|
||||
|
||||
## Архитектура
|
||||
|
||||
Основные свойства сети Хопфилда:
|
||||
|
||||
- каждый нейрон связан с другими нейронами;
|
||||
- выходы нейронов возвращаются на входы сети;
|
||||
- связь нейрона с самим собой обычно исключается;
|
||||
- веса задаются заранее по эталонным образам;
|
||||
- состояние сети изменяется до стабилизации.
|
||||
|
||||
![[Pasted image 20260515090401.png]]
|
||||
|
||||
Инициализация сети задаёт начальные выходы нейронов. При функционировании сеть изменяет состояние до тех пор, пока не придёт к устойчивому образу. Если входной сигнал близок к одному из сохранённых эталонов, сеть восстанавливает этот эталон.
|
||||
|
||||
Для сети Хопфилда часто используется бинарная функция активации, описанная в [[Нейронные сети]].
|
||||
|
||||
## Инициализация весов
|
||||
|
||||
Веса задаются по эталонным образам один раз перед началом работы сети:
|
||||
|
||||
$$
|
||||
w_{ij}=\sum\limits_{k=1}^{m}x_i^k x_j^k,\quad i\neq j
|
||||
$$
|
||||
|
||||
Обычно связь нейрона с самим собой исключают:
|
||||
|
||||
$$
|
||||
w_{ii}=0
|
||||
$$
|
||||
|
||||
После такой инициализации сеть не дообучается на входных примерах, а использует уже записанные в матрицу связей эталоны.
|
||||
|
||||
## Алгоритм функционирования
|
||||
|
||||
1. На вход подаётся неизвестный сигнал. Фактически ввод выполняется установкой начальных значений аксонов:
|
||||
|
||||
$$
|
||||
y_i(0)=x_i,\quad i=0,\dots,n-1
|
||||
$$
|
||||
|
||||
Ноль в скобках обозначает нулевую итерацию работы сети.
|
||||
|
||||
2. Рассчитывается новое состояние нейронов:
|
||||
|
||||
$$
|
||||
s_j(p+1)=\sum\limits_{i=1}^{n-1}w_{ij}y_i(p),\quad j=0,\dots,n-1
|
||||
$$
|
||||
|
||||
После этого вычисляются новые значения аксонов:
|
||||
|
||||
$$
|
||||
y_j(p+1)=f[s_j(p+1)]
|
||||
$$
|
||||
|
||||
где $f$ - функция активации в виде скачка.
|
||||
|
||||
![[Pasted image 20260514115340.png|300]]
|
||||
|
||||
3. Проверяется, изменились ли выходные значения за последнюю итерацию. Если изменились, сеть возвращается к пересчёту состояний. Если выходы стабилизировались, работа завершается.
|
||||
|
||||
Итоговый выходной вектор считается образом, который лучше всего соответствует входным данным.
|
||||
|
||||
## Ограничения
|
||||
|
||||
Сеть Хопфилда может не распознать образ корректно и выдать несуществующий эталон. Это связано с ограниченной ёмкостью ассоциативной памяти.
|
||||
|
||||
Для сети Хопфилда число запоминаемых образов обычно не должно превышать:
|
||||
|
||||
$$
|
||||
m \approx 0.15n
|
||||
$$
|
||||
|
||||
где $n$ - число нейронов.
|
||||
|
||||
Если два эталона слишком похожи, возможны перекрёстные ассоциации: предъявление первого образа может привести к восстановлению второго, и наоборот.
|
||||
|
||||
Сеть Хопфилда хорошо подходит для восстановления или завершения образа, но не предназначена для явного сопоставления образа с номером класса. Для такой задачи удобнее [[Сеть Хэмминга]].
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Сеть Хэмминга]]
|
||||
- [[Нейронные сети]]
|
||||
@@ -0,0 +1,117 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags:
|
||||
- machine-learning
|
||||
- neural-networks
|
||||
- associative-memory
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-15
|
||||
title: Сеть Хэмминга
|
||||
---
|
||||
|
||||
# Сеть Хэмминга
|
||||
|
||||
**Сеть Хэмминга** - нейронная сеть ассоциативной памяти, которая выбирает ближайший эталонный образ по входному сигналу. Она удобна, когда не нужно восстанавливать образ явно, а достаточно получить номер или класс ближайшего эталона.
|
||||
|
||||
По сравнению с [[Сеть Хопфилда|сетью Хопфилда]], сеть Хэмминга обычно требует меньше памяти и вычислений.
|
||||
|
||||
## Идея
|
||||
|
||||
Сеть сравнивает неизвестный входной образ со всеми сохранёнными эталонами. Для бинарных векторов близость связана с расстоянием Хэмминга: числом отличающихся битов в двух бинарных векторах.
|
||||
|
||||
Сеть должна выбрать эталон с минимальным расстоянием до входного сигнала. В результате активным остаётся один выходной нейрон, соответствующий выбранному образу.
|
||||
|
||||
В отличие от [[Сеть Хопфилда|сети Хопфилда]], сеть Хэмминга не пытается восстановить полный эталонный образ. Её цель - выбрать номер или класс ближайшего образца.
|
||||
|
||||
![[Pasted image 20260514120654.png]]
|
||||
|
||||
## Архитектура
|
||||
|
||||
Сеть состоит из двух слоёв:
|
||||
|
||||
- первый слой вычисляет близость входного вектора к каждому эталону;
|
||||
- второй слой реализует конкуренцию между эталонами.
|
||||
|
||||
Количество нейронов во втором слое равно количеству эталонных образов. Победить должен один нейрон - тот, который соответствует ближайшему эталону.
|
||||
|
||||
Первый и второй слои имеют по $m$ нейронов, где $m$ - число эталонных образов. Нейроны первого слоя имеют по $n$ синапсов, соединённых со входами сети. Эти входы можно рассматривать как фиксированный нулевой слой.
|
||||
|
||||
Нейроны второго слоя связаны между собой ингибиторными обратными связями:
|
||||
|
||||
- связь нейрона с самим собой имеет вес $+1$;
|
||||
- связи с другими нейронами имеют отрицательный вес $-\varepsilon$.
|
||||
|
||||
Параметр $\varepsilon$ выбирают так, чтобы:
|
||||
|
||||
$$
|
||||
0 < \varepsilon < \frac{1}{m}
|
||||
$$
|
||||
|
||||
Ингибиторные связи постепенно подавляют менее подходящие эталоны, пока активным не останется один победивший нейрон.
|
||||
|
||||
Первый слой нужен для начального сравнения входа со всеми эталонами. Второй слой превращает эти оценки близости в результат классификации: за счёт взаимного торможения слабые кандидаты подавляются, а сильнейший остаётся активным.
|
||||
|
||||
## Алгоритм функционирования
|
||||
|
||||
На стадии инициализации весовым коэффициентам первого слоя и порогам функции активации присваиваются значения:
|
||||
|
||||
$$
|
||||
w_{ik}=\frac{x_i^k}{2},\quad i=0,\dots,n-1,\quad k=0,\dots,m-1
|
||||
$$
|
||||
|
||||
$$
|
||||
T_k=\frac{n}{2},\quad k=0,\dots,m-1
|
||||
$$
|
||||
|
||||
где $x_i^k$ - $i$-й элемент $k$-го эталонного образа.
|
||||
|
||||
Порог $T_k$ сдвигает диапазон выхода: скалярное произведение $\sum w_{ik}x_i$ при весах $x_i^k/2$ даёт значение от $0$ до $n/2$. После прибавления $T_k = n/2$ итоговое значение $y_k^{(1)}$ попадает в диапазон $[0, n]$, где $n$ соответствует полному совпадению с эталоном, а $0$ — полному несовпадению.
|
||||
|
||||
Весовые коэффициенты тормозящих синапсов второго слоя берут равными небольшой величине $\varepsilon$. Синапс нейрона, связанный с его же аксоном, имеет вес $+1$.
|
||||
|
||||
1. На входы сети подаётся неизвестный вектор:
|
||||
|
||||
$$
|
||||
X=\{x_i:i=0,\dots,n-1\}
|
||||
$$
|
||||
|
||||
После этого рассчитываются состояния нейронов первого слоя:
|
||||
|
||||
$$
|
||||
y_j^{(1)}=s_j^{(1)}=\sum\limits_{i=1}^{n-1}w_{ij}x_i+T_j
|
||||
$$
|
||||
|
||||
Полученными значениями инициализируются значения аксонов второго слоя:
|
||||
|
||||
$$
|
||||
y_j^{(2)}=y_j^{(1)},\quad j=0,\dots,m-1
|
||||
$$
|
||||
|
||||
2. Вычисляются новые состояния нейронов второго слоя:
|
||||
|
||||
$$
|
||||
s_j^{(2)}(p+1)=y_j^{(2)}(p)-\varepsilon\sum\limits_{\substack{k=0\\k\neq j}}^{m-1}y_k^{(2)}(p),\quad j=0,\dots,m-1
|
||||
$$
|
||||
|
||||
Затем вычисляются значения их аксонов:
|
||||
|
||||
$$
|
||||
y_j^{(2)}(p+1)=f[s_j^{(2)}(p+1)]
|
||||
$$
|
||||
|
||||
3. Проверяется, изменились ли выходы нейронов второго слоя за последнюю итерацию. Если изменились, сеть возвращается к шагу 2. Если нет, работа завершается.
|
||||
|
||||
Функция активации $f$ используется как пороговая функция. Порог должен быть выбран так, чтобы возможные значения аргумента не приводили к нежелательному насыщению.
|
||||
|
||||
## Замечание о первом слое
|
||||
|
||||
Роль первого слоя условна: после вычисления начальных значений сеть больше к нему не обращается. Поэтому первый слой можно заменить матрицей весовых коэффициентов.
|
||||
|
||||
Это подчёркивает практический смысл сети Хэмминга: первая часть вычисляет расстояния или меры похожести, а вторая выбирает победителя.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Сеть Хопфилда]]
|
||||
- [[Расстояние между объектами]]
|
||||
- [[Нейронные сети]]
|
||||
Reference in New Issue
Block a user