Введение в нейросети. Часть 1

  1. Кликните по абзацу, который хотите изменить
  2. Редактируйте содержимое абзаца, добавляя либо удаляя текст
  3. Нажмите на иконку справа, чтобы отправить ваши изменения автору (если вы не зарегистрированы, то увидите сообщение об ошибке)
  4. Готово. Теперь нужно лишь подожать, пока автор либо применит ваши изменения, либо откажется от них

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

Я попытаюсь написать серию статей на эту тему. Их можно рассматривать как некий курс по разработке нейросетей с нуля, хотя в действительности это лишь моя попытка структурировать свои знания. А поскольку я и сам по большей части являюсь обывателем, вам скорее всего (конечно же при должном желании) будет легко следить за ходом моих мыслей.

Предисловие и так заняло много слов, поэтому сразу перейдем к делу и зададимся важным вопросом: Что такое нейросеть? В ответ можно бы было привести выдержку из википедии, но очень часто проблема статей википедии (особенно когда эти статьи пытаются объяснить сложные концепции) в том, что формулировки там настолько сложные и наводнённые терминологией, что понять их может лишь человек, который и без них знает ответ на поставленный вопрос. Я предлагаю такое определение:

Нейросеть  — это функция

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

У простой нейросети функция, как правило, имеет вид:

$$f(x_1, x_2, ..., x_n) = \omega_1x_1 + \omega_2x_2 + ... + \omega_nx_n$$

$$ x \in \mathbb{R}, \omega \in \mathbb{R}, n \in \mathbb{N}$$

Количество ($n$) аргументов $x$ не обязано быть равно количеству параметров $\omega$, но мы начнем с рассмотрения ситуации, в которой их количество одинаковое.

Представим, что нам нужно создать нейросеть, которая будет предсказывать цену квартиры на основании четырёх факторов: её площади, количества комнат, расстояния от центра города и сегодняшней температуры в Цельсиях. Эти факторы будут аргументами $x$ нашей функции:

$x_1$ — площадь квартиры

$x_2$ — количество комнат

$x_3$ — расстояние от центра города

$x_4$ — температура в Цельсиях

Сама функция примет вид:

$$f(x_1, x_2, x_3, x_4) = \omega_1x_1 + \omega_2x_2 + \omega_3x_3 + \omega_4x_4$$

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


1) площадь:50, комнат:2, расстояние:10км, температура:20. Цена: 3 200 000 р.

2) площадь:42, комнат:1, расстояние:15км, температура:15. Цена: 2 800 000 р.

3) площадь:105, комнат:5, расстояние:24км, температура:27. Цена: 10 250 000 р.

...

m) площадь:61, комнат:3, расстояние:1км, температура:32. Цена: 8 500 000 р.

Имея эти данные нейросеть спокойно сможет обучиться верной функции, используя, например, алгоритм градиентного спуска (об этом в следующих постах). И я не случайно одним из аргументов добавил температуру воздуха в Цельсиях. Понятно, что она никак не влияет на стоимость квартиры. Ведь если нейросеть посчитает, что этот аргумент никак не влияет на результат, то она легко сможет избавиться от аргумента простым способом — сделав параметр этого аргумента равным нулю:

$$f(x_1, x_2, x_3, x_4) = \omega_1x_1 + \omega_2x_2 + \omega_3x_3 + 0x_4$$

$$f(x_1, x_2, x_3, x_4) = \omega_1x_1 + \omega_2x_2 + \omega_3x_3$$

Ещё раз повторю, что обучение нейросети — это процесс нахождения верных параметров $\omega$ функции. Параметров этих может быть сколь угодно много. У ChatGPT-3 этих параметров 175 миллиардов, а у ChatGPT-4 их и вовсе 100 триллионов. Представили длину этой функции, у которой 100 триллионов параметров? В книге "Война и мир" 700 000 символов. Если бы можно было вместить один параметр функции в один символ, то описание этой функции заняло бы 142 миллиона 857 тысяч 143 книги размером с "Войну и мир".

В следующих статьях будет подробный разбор процесса обучения нейросети.




Зарегистрируйтесь и присоединитесь к нашему сообществу. У вас будет возможность создавать свои статьи, изменять чужие и оставлять комментарии.