vault backup: 2026-05-14 19:41:51
This commit is contained in:
@@ -6,6 +6,7 @@ tags:
|
||||
- neural-networks
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-14
|
||||
source: "[[МИАД_Л5_нейронки.pdf]]"
|
||||
title: Нейронные сети
|
||||
---
|
||||
|
||||
@@ -182,6 +183,66 @@ $$
|
||||
|
||||
Обе сети относятся к моделям ассоциативной памяти, но решают задачу на разном уровне: сеть Хопфилда восстанавливает состояние, а сеть Хэмминга выбирает ближайший сохранённый образ.
|
||||
|
||||
## Переобучение и обобщение
|
||||
|
||||
**Обобщение** — способность сети делать точный прогноз на данных, не входивших в обучающую выборку.
|
||||
|
||||
**Переобучение** возникает, если алгоритм обучения работает слишком долго или сеть слишком сложна для объёма данных: сеть "запоминает" обучающие примеры вместо того, чтобы выявить общую зависимость. Симптом: ошибка на обучающей выборке продолжает убывать, а ошибка на тестовой — перестаёт убывать или растёт.
|
||||
|
||||
Сети с большим числом весов моделируют более сложные функции и сильнее склонны к переобучению. Сети с малым числом весов могут оказаться недостаточно гибкими.
|
||||
|
||||
**Способы борьбы**:
|
||||
- **Кросс-проверка** — часть обучающей выборки резервируется как тестовая и не участвует в обучении. Если тестовая ошибка перестаёт убывать, обучение останавливают.
|
||||
- Уменьшение числа скрытых нейронов и/или слоёв.
|
||||
- Ограничение числа эпох обучения.
|
||||
|
||||
**Эмпирическое правило** для выбора размера сети и объёма данных:
|
||||
|
||||
$$
|
||||
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$ выходами. Сеть обучается на известных значениях функции.
|
||||
|
||||
## Обучение с учителем
|
||||
|
||||
Процесс обучения с учителем:
|
||||
@@ -217,4 +278,7 @@ $$
|
||||
- [[Персептрон]]
|
||||
- [[Сеть Хопфилда]]
|
||||
- [[Сеть Хэмминга]]
|
||||
- [[Нейронная сеть Кохонена]]
|
||||
- [[Предобработка данных для нейронных сетей]]
|
||||
- [[Обучение без учителя. Алгоритм Хебба]]
|
||||
- [[Линейные модели]]
|
||||
|
||||
@@ -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,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$. При этом расстояния между всеми парами векторов-категорий одинаковы.
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[Нейронные сети]]
|
||||
- [[Обратное распространение ошибки]]
|
||||
- [[Нейронная сеть Кохонена]]
|
||||
Reference in New Issue
Block a user