vault backup: 2026-05-14 19:41:51

This commit is contained in:
Dmitry
2026-05-14 19:41:51 +03:00
parent 4742fcddc7
commit cd3523f0b3
6 changed files with 221 additions and 10 deletions
+9 -9
View File
@@ -259,6 +259,14 @@
},
"active": "85ff070f2dda5843",
"lastOpenFiles": [
"AGENTS.md.tmp.121674.b0be3c16a002",
"99 System/Archive/МИАД_Л5_нейронки.pdf",
"90 Library/11 Machine Learning/Нейронные сети.md.tmp.121674.c24bea39c2a0",
"90 Library/11 Machine Learning/Нейронные сети.md.tmp.121674.acad430d5db2",
"90 Library/11 Machine Learning/Нейронные сети.md.tmp.121674.b2fdcb40695a",
"90 Library/11 Machine Learning/Обучение без учителя. Алгоритм Хебба.md",
"90 Library/11 Machine Learning/Предобработка данных для нейронных сетей.md",
"90 Library/11 Machine Learning/Предобработка данных для нейронных сетей.md.tmp.121674.31daef83adde",
"00 Inbox/КР - Хэмминг.md",
"00 Inbox/КР - Хопфилд.md",
"90 Library/11 Machine Learning/Персептрон.md",
@@ -292,19 +300,11 @@
"00 Inbox/Функционирование сети Хопфилда.md",
"CLAUDE.md.tmp.34864.43ce999b6360",
"AGENTS.md",
"CODEX.md",
"00 Inbox/Идея.md",
"99 System/Archive/Сети Хопфилда и Хэмминга.md",
"99 System/Cache/Recording 20260514000859.m4a",
"99 System/Cache/Recording 20260514000811.m4a",
"99 System/Cache/Pasted image 20260512225511.png",
"99 System/Cache/Pasted image 20260512225452.png",
"99 System/Cache/Pasted image 20260508103431.png",
"99 System/Cache/Pasted image 20260508103342.png",
"03 Journal/2026/05 - May",
"00 Inbox/Archive",
"90 Library/03 Math/Теория нечетких множеств/Теория нечетких множеств.md.tmp.254945.1777751883191",
"90 Library/02 DevOps/Ansible/Ansible - основы.md.tmp.254945.1777751876503",
"90 Library/03 Math/Статистика/Кластерный анализ/Классификация.md.tmp.254945.1777751799750"
"99 System/Cache/Pasted image 20260508103342.png"
]
}
@@ -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$. При этом расстояния между всеми парами векторов-категорий одинаковы.
## Связанные заметки
- [[Нейронные сети]]
- [[Обратное распространение ошибки]]
- [[Нейронная сеть Кохонена]]
+1 -1
View File
@@ -130,7 +130,7 @@ Vault — второй мозг владельца. Агент помогает
3. Доработать черновик: расширить, уточнить формулировки, структурировать
4. Заполнить YAML frontmatter, поставить `status: seed`
5. Добавить осмысленные `[[wikilinks]]`
6. Переместить исходник в `99 System/Archive/`
6. Переместить исходник в `99 System/Archive/` и добавить в YAML frontmatter созданной/дополненной заметки поле `source: "[[имя_файла]]"` со ссылкой на архивный файл
7. После завершения показать список предложенных связей с существующими заметками, которые не были добавлены автоматически
## Workflow: Wiki