From cd3523f0b338db7d7409415531d087f82532cfce Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 14 May 2026 19:41:51 +0300 Subject: [PATCH] vault backup: 2026-05-14 19:41:51 --- .obsidian/workspace.json | 18 ++-- .../11 Machine Learning/Нейронные сети.md | 64 ++++++++++++++ .../Обучение без учителя. Алгоритм Хебба.md | 65 ++++++++++++++ ...редобработка данных для нейронных сетей.md | 82 ++++++++++++++++++ .../Archive}/МИАД_Л5_нейронки.pdf | Bin AGENTS.md | 2 +- 6 files changed, 221 insertions(+), 10 deletions(-) create mode 100644 90 Library/11 Machine Learning/Обучение без учителя. Алгоритм Хебба.md create mode 100644 90 Library/11 Machine Learning/Предобработка данных для нейронных сетей.md rename {00 Inbox => 99 System/Archive}/МИАД_Л5_нейронки.pdf (100%) diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 256701b..dbbc8f2 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -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" ] } \ No newline at end of file diff --git a/90 Library/11 Machine Learning/Нейронные сети.md b/90 Library/11 Machine Learning/Нейронные сети.md index 2ef3ddf..b6d288e 100644 --- a/90 Library/11 Machine Learning/Нейронные сети.md +++ b/90 Library/11 Machine Learning/Нейронные сети.md @@ -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 @@ $$ - [[Персептрон]] - [[Сеть Хопфилда]] - [[Сеть Хэмминга]] +- [[Нейронная сеть Кохонена]] +- [[Предобработка данных для нейронных сетей]] +- [[Обучение без учителя. Алгоритм Хебба]] - [[Линейные модели]] diff --git a/90 Library/11 Machine Learning/Обучение без учителя. Алгоритм Хебба.md b/90 Library/11 Machine Learning/Обучение без учителя. Алгоритм Хебба.md new file mode 100644 index 0000000..8469a1a --- /dev/null +++ b/90 Library/11 Machine Learning/Обучение без учителя. Алгоритм Хебба.md @@ -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, пока выходные значения сети не стабилизируются с заданной точностью. + +Критерий остановки отличается от обратного распространения: не минимизация ошибки, а стабилизация выходов, поскольку целевые значения неизвестны. + +## Применение + +Обучение по Хеббу используется в сетях, где нет явного учителя, в частности в [[Нейронная сеть Кохонена|сети Кохонена]]. Там нейрон-победитель обновляет свои веса, притягивая их к входному образу, — это вариант сигнального метода. + +## Связанные заметки + +- [[Нейронные сети]] +- [[Нейронная сеть Кохонена]] +- [[Алгоритм обучения сети Кохонена]] +- [[Обратное распространение ошибки]] diff --git a/90 Library/11 Machine Learning/Предобработка данных для нейронных сетей.md b/90 Library/11 Machine Learning/Предобработка данных для нейронных сетей.md new file mode 100644 index 0000000..a7b69dc --- /dev/null +++ b/90 Library/11 Machine Learning/Предобработка данных для нейронных сетей.md @@ -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$. При этом расстояния между всеми парами векторов-категорий одинаковы. + +## Связанные заметки + +- [[Нейронные сети]] +- [[Обратное распространение ошибки]] +- [[Нейронная сеть Кохонена]] diff --git a/00 Inbox/МИАД_Л5_нейронки.pdf b/99 System/Archive/МИАД_Л5_нейронки.pdf similarity index 100% rename from 00 Inbox/МИАД_Л5_нейронки.pdf rename to 99 System/Archive/МИАД_Л5_нейронки.pdf diff --git a/AGENTS.md b/AGENTS.md index d52fdeb..5e1626b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -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