> For the complete documentation index, see [llms.txt](https://aibm.gitbook.io/prosto-o-glubokom-obuchenii/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aibm.gitbook.io/prosto-o-glubokom-obuchenii/uroven-i-30-minut/slovar-terminov.md).

# Что такое нейронная сеть и как она обучается?

Данный раздел срывает покров мистики и описывает на пальцах как работает наиболее распространенный тип нейронных сетей.

## Что делает исскуственная нейронная сеть?

Большинство реально используемых **искусственных нейронных сетей** - это последовательности операций применяемых к входным значениям нейронной сети. В качестве таких операций чаще всего встречаются перемножения вектора на матрицу, дискретная свертка и применение элементарных ("школьных") функций к некоторым промежуточным результатам.

Нейронные сети в качестве входного значения могут принимать вектор параметров или матрицу. В качестве выходного значения нейронная сеть обычно возвращает вектор параметров.&#x20;

Так как матрицу можно представить в виде вектора, развернув ее по столбцам в один большой, без ограничения общности можно считать, что нейронная сеть - это векторная функция векторного аргумента:

$$
F\_{\mathbf{w}}(\mathbf{x}) = \mathbf{y},\ F:\mathbb{R}^n\rightarrow \mathbb{R}^m,\\
\mathbf{x} = (x\_1, x\_2,..,x\_n),\\
\mathbf{y} = (y\_1, y\_2,..,y\_m).
$$

*Примечание: здесь и далее в этом руководстве приняты обозначения, распространенные в англоязычной литературе. Жирный **x** - это вектор, не жирный x - это число или скаляр.*

Вход нейронный сети может содержать разные виды данных, например, это могут быть параметры измерений, финансовые показатели, аудиосигналы, изображения и т.д. В большинстве случаев данные как то предварительно обабатываются. Обычно выполняется **нормализация данных**, чтобы входные значения поместились в диапазоны \[0,1] или \[-1,1]. Однако, в случае работы с текстами или графами могут потребоваться дополнительные более сложные преобразования.

Выход нейронной сети должен соответствовать задаче, которая стоит перед исскуственной нейронной сетью. Например, если мы хотим выполнить классификацию, то есть определить к какому из N типов относится входной вектор, то выход обычно состоит из 10 чисел, где максимальное значение будет соответствовать номеру типа, а все остальные значения будут близки к нулю. Такая задача называтся **задачей классификации**.&#x20;

## Как обучается исскуственная нейронная сеть?

Как уже написано выше, исскуственная нейронная сеть это последовательность применения математических операций. В большинстве случаев все эти операции имеют какие то коэффиценты, назовем вектор этих коэффициентов **w:**

$$
\mathbf{w} = (w\_1, w\_2, .. , w\_k)
$$

Например, нейронная сеть состоящая из одного слоя с двумя нейронами и линейными функциями активации может быть представлена как перемножение входного вектора на матрицу:

$$
F\_{\mathbf{w}}(\mathbf{x}) = \mathbf{y},\ F:\mathbb{R}^2\rightarrow \mathbb{R}^2,\\
\mathbf{x} = (x\_1, x\_2),\\
\mathbf{y} = (y\_1, y\_2),\\
\mathbf{w} = (w\_1, w\_2),\\
\~\\
\begin{pmatrix}
w\_1 & w\_2 \\
w\_1 & w\_2
\end{pmatrix}
\begin{pmatrix}
x\_1\\
x\_2
\end{pmatrix} =
\begin{pmatrix}
y\_1\\
y\_2
\end{pmatrix}
$$

Задача обучения такой нейронной сети - это задача поиска "хороших" коэффициентов **w**. Для того чтобы определить "степень хорошести" для **w** используют **обучающую выборку данных** и **функцию потерь.**

**Обучающая выборка данных** - это множество пар из векторов **x** и **y**. Тоесть это такие примеры, для которых уже известны правильные ответы. **Функция потерь** измеряет разницу между ожидаемыми ответами и выдаваемыми нейронной сетью. При этом чем меньше функция потерь, тем ближе предсказания нейронной сети к ожидаемым результатам. Например, функция потерь может быть выражена как сумма Евклидовых дистанций между ожидаемыми и предсказанными векторами:

$$
\sum\_{l=1}^{M}|F\_{\mathbf{w}}(\mathbf{x}\_l) -\mathbf{y}\_l|\_2 \rightarrow \min
$$

В итоге, исскуственная нейронная сеть - это просто функция принимающая и возвращающая вектор. А обучение нейронной сети - это  поиск минимума для выражения специального вида при зафиксированном наборе данных для которого известны правильные ответы.

Стоит отметить, что здесь описано **обучение с учителем**, тоесть в распоряжении исследователя есть известные ответы на некоторые входные данные и подход, который определяет насколько хорошо нейронная сеть работает. Так же есть обширный класс подходов, которые решают задачу **обучения без учителя**. Тоесть они используют входные данные, для которых неизвестны правильные ответы, и представляют их в каком то определенном новом виде.

![Автор: Ушенин Константин](https://2802650259-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LmMOOymZkxo-D_wmGKi%2F-LmV-BQ42__t8--p1aar%2F-LmV16Hi3oFFG84RsvB6%2F88x31.png?alt=media\&token=f9f4d908-fab8-4b89-99ec-786c0c6ab01a)
