Что такое нейронная сеть?

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

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

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

Возможно, вы видели картинки, изображающие нейронную сеть, вроде этой.

Пример нейронной сети
Пример нейронной сети

На ней каждый круг — это отдельный нейрон. Колонки нейронов называются слоями.

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

Разберем как работает НС на одной из самых простых задач — определение какая цифра изображена на картинке.

Пример картинок из известного набора данных MNIST
Пример картинок из известного набора данных MNIST

Каждое изображение - это набор точек(пикселей) и чтобы работать с ним наша сеть должна уметь смотреть на каждую точку на нем, чтобы ничего не упустить.

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

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

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

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

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

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

Разберем работу конкретного одиночного нейрона. Как и вся сеть, нейрон тоже принимает сигнал(ы) на вход, обрабатывает их и выдает результат. Только отдельный нейрон - элемент максимально простой. Он может иметь множество входов, но только один выход.

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

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

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

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

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

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

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

Tags:
нейроные сети, глубокое обучение

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.