Область машинного обучения, связанная с нейронными сетями, называется глубоким обучением.

Нейронная сеть (NN) — это математическая модель для решения задачи машинного обучения. На вход он принимает данные — фото, текст, видео и т. д. — а затем выдает ответ на задание. Люди вдохновлялись биологической моделью человеческого мозга, когда придумали нейронные сети.
Нейронные сети используются в самых разных задачах, таких как распознавание лиц/людей в толпе, перевод текстов, предсказание продаж предприятие, заполнение фона в видеоконференциях, распознавание текста на картинках — этот список можно продолжать до бесконечности и он расширяется день ото дня.
Возможно, вы видели изображения нейронной сети, подобные этой.

На нем каждый кружок — это отдельный нейрон. Колонки нейронов называются слоями.
Чтобы начать работу, НС подает информацию на свой входной слой. Расчеты, необходимые для его работы, он производит в скрытых слоях. Их может быть от одного до нескольких десятков. Когда сеть подсчитала результат, он отправляется на выходной слой.
Давайте проанализируем, как работает NN на одной из самых простых задач — определении того, какое число изображено на картинке.

Каждое изображение представляет собой набор точек (пикселей), и для работы с ним наша сеть должна иметь возможность просматривать каждую точку на нем.
Слой синих кругов слева будет соответствовать каждому отдельному пикселю в изображение. Эти нейроны будут брать свои значения из соответствующей точки изображения. Для примера возьмем черно-белое (просто для простоты) изображение 32х32 — это значит, что у него 32х32=1024 пикселя, а значит, во входном слое сети должно быть 1024 нейрона.

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

Вообще, работая с изображением, мы пытаемся распознать на нем закономерности, свойственные определенной категории изображений. В нашем случае категория изображений — это все изображения с одинаковым номером. Для примера возьмем число 8. Условно можно представить, что оно состоит из двух кругов, один вверху, другой внизу. Когда мы увидим, что на изображении внизу есть этот кружок, мы точно поймем, что скорее всего перед нами либо цифра 8, либо цифра 6.

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

В целом НС решает проблему классификации таким образом — распознает закономерности разного уровня абстракции (линия- › круг). Чем проще объект, тем раньше скрытые слои наша сеть научится видеть эту абстракцию. В конце концов, когда сеть решила, что на картинке изображена цифра 8, то она из всех нейронов на выходном слое каким-то образом выделит нам тот нейрон, который соответствовал классу цифры 8 и тем самым даст нам ответ.

Давайте посмотрим на работу конкретного одиночного нейрона. Как и вся сеть, нейрон также получает входные сигналы, обрабатывает их и выводит результат. Отдельный нейрон — простейший возможный элемент. Он может иметь много входов, но только один выход.

Рассмотрим нейрон, который имеет 3 входных сигнала — x, y и z. Предположим, наш нейрон уже обучен решать определенную задачу. Это значит, что он уже знает, какие входные сигналы для него наиболее важны, а на какие следует обращать меньше внимания. В соответствии с этим нейрон запоминал коэффициенты (веса) для каждого входного сигнала, с которыми их следует учитывать в процессе решения задачи. В примере мы вводим в нейрон три значения: x=5, y=1 и z=8. Он перемножает полученные из входных данных значения с соответствующим коэффициентом (он учитывает необходимый вес) и складывает их между собой. После этого он выполняет необходимое преобразование над полученной суммой и выдает результат этого преобразования в виде выходного сигнала или отклика. Что такое преобразования и зачем они нужны, будет рассказано в другой статье о том, как обучаются нейронные сети.

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

Из предыдущего примера видно, что каждый нейрон в сети, обрабатывающей информацию, запоминает свои номера для поступающих к нему сигналов. Этих значений огромное количество. Когда вы видите новость — «Нейронная сеть с 30 миллионами параметров», они имеют в виду, что НС имеет 30 миллионов чисел, которые она запоминает.

Чтобы научиться решать задачу, для которой предназначена нейронная сеть, ее необходимо обучить. Процесс обучения NN очень важен и интересен и поэтому заслуживает отдельного поста.
Я опишу процесс обучения сети в общих чертах. В сеть подаются изображения с заранее известным классом. Для нашей задачи это означает, что подаются изображения с заранее известным номером на них. NN смотрит на входное изображение, делает какое-то предположение, основанное фактически на очень важном методе выстрела в темноте. Если она замечает, что ошиблась (то есть ее ответ не совпал с правильным), то она пытается немного подкорректировать веса в нейронах, чтобы больше не ошибаться. Этот процесс называется обучением нейронной сети, поэтому поговорка «умные люди учатся на чужих ошибках» к НС явно неприменима.

Я все время писал, что какие-то паттерны/абстракции изучаются, и чем дальше к выходным слоям, тем больше они напоминают искомые объекты. Но если подумать, то на входе только исходное изображение. В ней каждый пиксель учитывается с каким-то весом, и откуда могут взяться эти черточки, кружочки, если их может и не быть в исходном изображении? В 2009 году группа инженеров опубликовала статью о том, что можно взять отдельный класс из выходного слоя нейронной сети и сгенерировать для него изображение (полностью искусственное), которое будет почти обобщенным представлением для класса изображения.

Позже это исследование имело много продолжений, в частности, как аналогично визуализировать конкретный интересующий нас нейрон, или даже слой в обученной нейронной сети. Если интересно, вот ссылка на одну из статей на эту тему. Интересно, что впоследствии сформировался отдельный вид современного искусства, в котором представлены такие образы. Статья получилась немного объемной, но заявленная тема тоже масштабная. Спасибо за внимание!

Надеюсь, это было интересно и познавательно для вас.

Если у вас есть какие-либо вопросы или предложения, пишите мне на https://www.linkedin.com/in/nikita-sidorov/