Введение в нейросети. Часть 1
- Кликните по абзацу, который хотите изменить
- Редактируйте содержимое абзаца, добавляя либо удаляя текст
- Нажмите на иконку справа, чтобы отправить ваши изменения автору (если вы не зарегистрированы, то увидите сообщение об ошибке)
- Готово. Теперь нужно лишь подожать, пока автор либо применит ваши изменения, либо откажется от них
В последние годы нейросети — это самая популярная тема в сфере высоких технологий. А недавний триумф 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 книги размером с "Войну и мир".
В следующих статьях будет подробный разбор процесса обучения нейросети.