diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 1591a73..ddcc425 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,13 +13,13 @@ "state": { "type": "markdown", "state": { - "file": "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", + "file": "01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md", "mode": "preview", "source": false, "backlinks": false }, "icon": "lucide-file", - "title": "Обратное распространение ошибки - вывод" + "title": "Обратное распространение ошибки для произвольного числа слоев НС" } } ] @@ -94,8 +94,7 @@ } ], "direction": "horizontal", - "width": 221.5, - "collapsed": true + "width": 221.5 }, "right": { "id": "38c591aa0966839e", @@ -171,13 +170,13 @@ "state": { "type": "outline", "state": { - "file": "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", + "file": "01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md", "followCursor": false, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "Outline of Обратное распространение ошибки - вывод" + "title": "Outline of Обратное распространение ошибки для произвольного числа слоев НС" } }, { @@ -248,12 +247,12 @@ }, "active": "cb9f1037ae0492db", "lastOpenFiles": [ + "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", "01 Library/11 Machine Learning/Обратное распространение ошибки.md", "01 Library/11 Machine Learning/Нейронные сети.md", - "01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md", "00 Inbox/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md", "99 System/Archive/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md", - "01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md", + "01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md", "00 Inbox/Hello.md", "00 Inbox/Обратное распространение ошибки - вывод.md", "99 System/Archive/Обратное распространение ошибки - вывод.md", diff --git a/01 Library/11 Machine Learning/Линейные модели.md b/01 Library/11 Machine Learning/Линейные модели.md index 46f1a8c..9984d24 100644 --- a/01 Library/11 Machine Learning/Линейные модели.md +++ b/01 Library/11 Machine Learning/Линейные модели.md @@ -1,16 +1,19 @@ --- -status: seed +status: processing type: concept tags: - - ml + - machine-learning + - linear-models + - regression + - classification created: 2026-02-26 -updated: 2026-02-27 -title: Линейные Модели +updated: 2026-05-07 +title: Линейные модели --- -# Линейные Модели +# Линейные модели -## Общее Представление О Линейных Моделях +## Общее представление о линейных моделях **Линейные модели** являются одним из наиболее фундаментальных и широко используемых типов моделей машинного обучения. Они основаны на идее, что взаимосвязь между фичами и таргетом является **линейной**. @@ -46,7 +49,7 @@ $$Q = \{(x_i, y_i)\}_{i=1}^n =\{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\}$$ * $m$ - количество признаков * $n$ - размер выборки -Необходимо построить модель, восстанавливающую зависить $y$ от $x$: +Необходимо построить модель, восстанавливающую зависимость $y$ от $x$: $$y=f(x)$$ ### Общая Идея @@ -55,7 +58,7 @@ $$y=f(x)$$ $$f(x) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_m x_m$$ -То есть прогнозы модели $\hat{y}$ будут строится на основе этой функции: +То есть прогнозы модели $\hat{y}$ будут строиться на основе этой функции: $$\hat{y} = f(x)= \beta_0 + \beta_1 x_{1} + \beta_2 x_{2} + ... + \beta_m x_{m} = \beta_0 + \sum_{j=1}^m \beta_j \cdot x_{j}$$ @@ -872,9 +875,9 @@ $$\nabla L(\beta) = \frac{2}{n} \cdot X^T(X \cdot \beta - y)$$ -#### Градиентный Спуск: Пример Рассчетов И Реализации * +#### Градиентный Спуск: Пример Расчётов И Реализации * -> В целях экономии ручных рассчетов реализации ниже опущен коэффициент $\frac{2}{n}$, так как он не влияет на сходимость, алгоритм в любом случае сходится к точке минимума просто за бОльшее количество итераций. Добавлять его или нет - ваш выбор. В реализации градиентного спуска в sklearn данный коэффициент учитывается при рассчете. +> В целях экономии ручных расчётов в реализации ниже опущен коэффициент $\frac{2}{n}$, так как он не влияет на направление сходимости: алгоритм всё равно движется к точке минимума, просто с другим масштабом шага. В реализации градиентного спуска в sklearn данный коэффициент учитывается при расчёте. Для иллюстрации работы алгоритма приведем пример вычислений нескольких итераций градиентного спуска для случая поиска коэффициентов линейной регрессии @@ -2064,7 +2067,9 @@ $$\sigma(z) = \frac{e^z}{1+e^z} = \frac{1}{1 + e^{-z}}$$ * Значения сигмоиды $\sigma(z)$ лежат в диапазоне от $0$ до $1$. * Функция $\sigma(z) \rightarrow 0$ при $z \rightarrow -∞$ и $\sigma(z) \rightarrow 1$ при $z \rightarrow +∞$ * $\sigma(z) < 0.5$ при $z < 0$, $\sigma(z) > 0.5$ при $z>0$ и $\sigma(z) = 0.5$ при $z=0$. -* Сигмоида имеет очень простую и легко вычисляемую производную: $$\frac{d\sigma(z)}{dz} = \sigma(z)(1-\sigma(z))$$То есть, если значение сигмоиды в определенной точке уже вычислено, то мы можем использовать это же значение для рассчета значения производной (градиента) в этой же точке. Это сильно упрощает рассчеты. +* Сигмоида имеет очень простую и легко вычисляемую производную: +$$\frac{d\sigma(z)}{dz} = \sigma(z)(1-\sigma(z))$$ +То есть, если значение сигмоиды в определенной точке уже вычислено, то мы можем использовать это же значение для расчёта значения производной (градиента) в этой же точке. Это сильно упрощает расчёты. **А теперь гвоздь программы:** @@ -2233,7 +2238,7 @@ $$z = \beta ⋅ x = \beta_0 + \beta_1 \cdot x_{1} + \beta_2 \cdot x_{2} + \beta_ > **Правдоподобие** — это оценка того, насколько вероятно получить истинное значение целевой переменной $y$ при данных $x$ и параметрах $\beta$. -Цель метода — найти такие параметры , в которых наблюдается максимум функции правдоподобия. Но для упрощения математических рассчетов для поиска используется не само правдоподобие, а его логарифм. +Цель метода — найти такие параметры, при которых наблюдается максимум функции правдоподобия. Но для упрощения математических расчётов для поиска используется не само правдоподобие, а его логарифм. Приведем конечный вид формулы логарифмического правдоподобия для случая бинарной классификации. Вывод формулы и описание метода можно найти [здесь](https://kuleshov-group.github.io/aml-book/contents/lecture4-classification.html#maximum-likelihood). @@ -2366,7 +2371,7 @@ $$\beta^{(k+1)} = \beta^{(k)} - \eta \nabla L(\beta^{(k)})$$ $$\nabla L(\beta) = - \frac{1}{n} X^T(\sigma(X \cdot \beta) - y)$$ -Для того, чтобы повысить шанс пройти мимо локальных минимумов функции потерь, используется не сам градиентный спуск, а его модификации: например,стохастический градиентный спуск (SGD). +Для того, чтобы повысить шанс пройти мимо локальных минимумов функции потерь, используется не сам градиентный спуск, а его модификации: например, стохастический градиентный спуск (SGD). Помним, что применение градиентного спуска требует предварительного масштабирования данных (стандартизации/нормализации). В реализации логистической регрессии в sklearn предусмотрено ещё несколько методов оптимизации, для которых масштабирование не обязательно. О них мы упомянем в практической части модуля. @@ -2935,12 +2940,6 @@ print(metrics.classification_report(y, y_pred)) Для мультиклассовой классификации к отчёту просто добавляется новая строка, соответствующая третьему классу. - - -Из отчёта видно, что наша модель идеально решила задачу классификации (все метрики равны 1), то есть классы оказались линейно разделимыми. - -Для мультиклассовой классификации к отчёту просто добавляется новая строка, соответствующая третьему классу. - Из отчёта видно, что наша модель идеально решила задачу классификации (все метрики равны 1), то есть классы оказались линейно разделимыми. @@ -2965,6 +2964,8 @@ print(metrics.classification_report(y, y_pred)) * [Учебник по машинному обучению от Яндекса](https://education.yandex.ru/handbook/ml/article/linear-models) (0 кода, но много математики и красивых картинок) ## Связанные заметки +- [[Нейронные сети]] — персептрон и логистическая регрессия используют ту же идею линейной комбинации признаков и весов +- [[Обратное распространение ошибки]] — градиентный спуск и цепное правило обобщают идею оптимизации параметров на многослойные сети - [[Принципы дискриминантного анализа]] — статистическая формализация той же задачи классификации; обучающая выборка + матрица "объект-свойство" = постановка задачи ML - [[Функция потерь]] — C → min в ДА и MSE → min в МНК — один и тот же принцип минимизации ошибки классификации - [[Постановка задачи снижения размерности признакового пространства]] — PCA как предобработка перед линейными моделями diff --git a/01 Library/11 Machine Learning/Нейронные сети.md b/01 Library/11 Machine Learning/Нейронные сети.md index a24f880..55a0706 100644 --- a/01 Library/11 Machine Learning/Нейронные сети.md +++ b/01 Library/11 Machine Learning/Нейронные сети.md @@ -1,113 +1,204 @@ --- status: processing type: concept -tags: [] +tags: + - machine-learning + - neural-networks created: 2025-12-17 updated: 2026-05-07 -title: Нейронные сети - ДВ +title: Нейронные сети --- -# Нейронные сети - ДВ -Два основных направления исследование по ИИ: -1) Моделирование результатов естественного мышления - - Важнее всего результат - - Хорошее совпадение поведения Искусственно-созданных и естественных интеллектуальных систем - - Внутренние механизмы не важны -1) Моделирование механизмов естественного мышления +# Нейронные сети -*В первой точке зрения* рассматривается продукт интеллектуальной деятельности человека, изучается его структура и ставится цель воспроизвести этот продукт средствами современной техники (машинный интеллект). -(Системы нечеткого вывода, экспертные системы, построенные по принципу **баз знаний**) +Нейронные сети - модели машинного обучения, вдохновлённые принципами работы биологических нейронов. Их основа - набор связанных искусственных нейронов, которые преобразуют входной вектор $X$ в выходной вектор $Y$. -*Во втором* направлении рассматриваются данные о нейрофизиологических и психологических механизмах интеллектуальной деятельности и разумного поведения человека. Ставится цель воспроизвести эти механизмы с помощью тех или иных технических устройств. -(Рассматривают принципы функционирования и попытки смоделировать эти принципы, например, *нейронные сети*) +## Два направления в ИИ + +В исследованиях искусственного интеллекта можно выделить два направления: + +1. **Моделирование результатов естественного мышления** + - важен результат; + - внутренние механизмы не обязательны; + - цель - получить поведение, похожее на поведение естественных интеллектуальных систем. + + Примеры: системы нечёткого вывода, экспертные системы, построенные по принципу баз знаний. + +2. **Моделирование механизмов естественного мышления** + - важны нейрофизиологические и психологические механизмы; + - цель - воспроизвести эти механизмы техническими средствами. + + Нейронные сети относятся ко второму направлению. + +## Биологический нейрон ![[Pasted image 20260410103922.png]] -Входные сигналы дендритного дерева взвешиваются и суммируются на пути к аксонам, где генерируется выходной импульс. Выходной сигнал передается (проходит) по ветвям аксона, достигает синапсов, которые соединяют аксоны с дендритами других нейронов. +Входные сигналы дендритного дерева взвешиваются и суммируются на пути к аксону, где генерируется выходной импульс. Выходной сигнал проходит по ветвям аксона и достигает синапсов, соединяющих аксоны с дендритами других нейронов. -Нейроны бывают: -1) Рецепторные - обеспечивают ввод в мозг сенсорной информации, поступающей от органов чувств; -2) Промежуточные - трансформируют сигналы, поступившие от рецепторов (рецепторных нейронов) и передают их эффекторным; -3) Эффекторные - отображают необходимое действие. +Типы нейронов: -В 40-х годах прошлого столетия, человечество задумалось о возможности моделировать умственный процесс человека с помощью ЭВМ. -В 1957 году появляется примитивная модель - Персептрон Розенблатта. +1. **Рецепторные** - вводят в мозг сенсорную информацию от органов чувств. +2. **Промежуточные** - трансформируют сигналы от рецепторных нейронов и передают их дальше. +3. **Эффекторные** - формируют необходимое действие. -С 70-х годов началось бурное развитие этого направления. +В 1957 году Фрэнк Розенблатт предложил модель персептрона. С 1970-х годов нейросетевое направление начало активно развиваться. -Основной задачей стала задача распознавания образом (первичной - распознавание образов букв) -Самой сложной задачей является задача классификации (например, задачей распознавания лиц) +Одна из классических задач нейронных сетей - распознавание образов: букв, лиц, объектов и т.д. -Искусственный нейрон состоит из элементов тех типов: -- Умножители (синапсы) -- Сумматоры -- Нелинейные преобразователи +## Искусственный нейрон + +Искусственный нейрон состоит из трёх основных элементов: + +- умножители, или синапсы; +- сумматор; +- нелинейный преобразователь, или функция активации. ![[Pasted image 20260410105854.png]] -Функцию активации ещё часто называют блоком нелинейного преобразования +Функцию активации часто называют блоком нелинейного преобразования. + ![[Pasted image 20260410110002.png]] -При этом, к $S$ может прибавляться некоторое смещение, называемое *порогом срабатывания нейрона*: $S = \sum\limits_{i=1}^{n}\omega_{i}*x_{i}+b$ +Взвешенная сумма входов: -Функцией активации нейрона, как правило, является *сигмоида*. +$$ +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]] -В качестве активационной функции также часто используется гиперболический тангенс. -$$th(x)= \frac{sh(x)}{ch(x)}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}=\frac{e^{2x}-1}{e^{2x}+1}$$ -Подобно логистической функции гиперболический тангенс является s-образной функцией, но он симметричен относительно начала координат, и в точке 0 значение выходного сигнала равно нулю. +Для логистической функции: -## Функция активации сети Хопфилда -$$y_{i} = \begin{cases} 1, \\ -1 \end{cases}$$ +$$ +f'(x)=a f(x)(1-f(x)) +$$ -![[Pasted image 20260413131243.png]] - -Бинарная функция: -1, если S больше порога -0, если S < порога ($\theta$) - -## Модели нейронных сетей -### Персептрон -\- *Персептрон*, или *перцептрон* (англ. perceptron от лат. perceptio — восприятие; нем. perzeptron) — математическая и компьютерная модель восприятия информации мозгом (кибернетическая модель мозга), предложенная Фрэнком Розенблаттом в 1957 году и реализованная в виде электронной машины "Марк-1" в 1960 году. - -Любая нейронная сеть осуществляет некоторое нелинейное преобразование: $Y=F(X)$ - -Сущность нелинейного преобразования зависит от архитектуры сети и от характеристик самих нейронов (функции активации) - -Нейронные сети в процессе функционирования осуществляется преобразование входного вектора $X$ в элементами $x_{1}, x_{2},\dots, x_{n}$ в выходной вектор $Y$ с компонентами $y_{1},\dots, y_{m}$ -Конкретный вид, выполняемого сетью преобразования, зависит от архитектуры сети и от характеристик отдельных нейронов. -Преимущество НС - обучаемость. - -Внутри сети могут быть представлены в виде совокупности матриц весов. -Суть обучения сводится к настройке весов ($W$), чтобы для заданног вектора X из обуч. выборки, чтобы на выходе получить наиболее близкий вектор Y. - -Процесс обучения с учителем: -$X^{1} \to D^{1} \approx Y^{1}$ -$X^{2} \to D^{2}$ -$\vdots$ -$X^{p} \to D^{p}$ - -Задача классификации, задача кластеризации и задача прогнозирования - решаются с помощью НС. - -Персептрон - *один* слой искусственных нейронов. - -Перспептрон решает задачу линейной разделимости: -Разбиение гиперпространства гиперплоскостями. - -## Обучение нейронных сетей - -Обучение сети с учителем сводится к настройке весов так, чтобы выход $Y$ был близок к целевому ответу $D$. Для многослойных сетей основной алгоритм вычисления градиентов - [[Обратное распространение ошибки]]. - -Если в качестве функции активации используется сигмоида, её производная выражается через уже вычисленное значение функции: +Если $a=1$, то: $$ y'=y(1-y) $$ -Это удобно для обратного прохода: при вычислении локальной ошибки нейрона не нужно заново считать сложную производную активации. +То есть производную можно вычислить через уже полученное значение функции. Это удобно для [[Обратное распространение ошибки|обратного распространения ошибки]]. + +![[Pasted image 20260413130714.png]] + +### Гиперболический тангенс + +В качестве функции активации также используется гиперболический тангенс: + +$$ +\operatorname{th}(x) += +\frac{\operatorname{sh}(x)}{\operatorname{ch}(x)} += +\frac{e^x-e^{-x}}{e^x+e^{-x}} += +\frac{e^{2x}-1}{e^{2x}+1} +$$ + +Как и логистическая функция, гиперболический тангенс является S-образной функцией, но он симметричен относительно начала координат. В точке $0$ его значение равно $0$. + +### Бинарная функция + +Для сети Хопфилда может использоваться бинарная функция активации: + +$$ +y_i = +\begin{cases} +1, \\ +-1 +\end{cases} +$$ + +![[Pasted image 20260413131243.png]] + +В другом варианте бинарная функция возвращает: + +$$ +y = +\begin{cases} +1, & S \ge \theta \\ +0, & S < \theta +\end{cases} +$$ + +где $\theta$ - порог. + +## Модели нейронных сетей + +Любая нейронная сеть выполняет нелинейное преобразование: + +$$ +Y=F(X) +$$ + +Сеть преобразует входной вектор: + +$$ +X=(x_1,x_2,\dots,x_n) +$$ + +в выходной вектор: + +$$ +Y=(y_1,y_2,\dots,y_m) +$$ + +Конкретный вид преобразования зависит от архитектуры сети, весов и функций активации. + +Преимущество нейронных сетей - обучаемость. Веса сети можно представить как набор матриц. Суть обучения сводится к настройке этих весов так, чтобы для входного объекта $X$ сеть выдавала выход $Y$, близкий к правильному ответу $D$. + +## Обучение с учителем + +Процесс обучения с учителем: + +$$ +X^{(1)} \rightarrow D^{(1)} \approx Y^{(1)} +$$ + +$$ +X^{(2)} \rightarrow D^{(2)} \approx Y^{(2)} +$$ + +$$ +\vdots +$$ + +$$ +X^{(p)} \rightarrow D^{(p)} \approx Y^{(p)} +$$ + +Нейронные сети применяются для задач классификации, прогнозирования, распознавания образов и других задач приближения сложных функций. + +Для многослойных сетей основной алгоритм вычисления градиентов - [[Обратное распространение ошибки]]. Для сети с произвольным числом слоёв схема вынесена в [[Обратное распространение ошибки для произвольного числа слоев НС]]. + +## Персептрон + +**Персептрон**, или **перцептрон**, - математическая модель восприятия информации, предложенная Фрэнком Розенблаттом в 1957 году и реализованная в машине «Марк-1» в 1960 году. + +Персептрон - один слой искусственных нейронов. Он решает задачу линейной разделимости: разделяет пространство признаков гиперплоскостью. + +По смыслу это близко к [[Линейные модели|линейным моделям]], потому что решение строится через линейную комбинацию входных признаков и весов. + +## Связанные заметки + +- [[Обратное распространение ошибки]] +- [[Обратное распространение ошибки для произвольного числа слоев НС]] +- [[Линейные модели]] diff --git a/01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md b/01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md similarity index 89% rename from 01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md rename to 01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md index 3b77e84..62ad953 100644 --- a/01 Library/11 Machine Learning/Алгоритм обратного распространения ошибки для произвольного числа слоев НС.md +++ b/01 Library/11 Machine Learning/Обратное распространение ошибки для произвольного числа слоев НС.md @@ -1,5 +1,5 @@ --- -status: seed +status: stable type: concept tags: - machine-learning @@ -8,12 +8,12 @@ tags: - gradient-descent created: 2025-12-17 updated: 2026-05-07 -title: Алгоритм обратного распространения ошибки для произвольного числа слоев НС +title: Обратное распространение ошибки для произвольного числа слоев НС --- -# Алгоритм обратного распространения ошибки для произвольного числа слоев НС +# Обратное распространение ошибки для произвольного числа слоев НС -Эта заметка обобщает [[Обратное распространение ошибки]] на сеть с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: [[Обратное распространение ошибки - вывод]]. +Эта заметка обобщает [[Обратное распространение ошибки]] на [[Нейронные сети|нейронную сеть]] с произвольным числом слоёв. Подробный вывод для сети с одним скрытым слоем: [[Обратное распространение ошибки - вывод]]. ## Обозначения