Как происходит создание нейросетей

0
15

Как работает нейронная сеть: разбираемся с основами

Пишем код

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

Еще есть, например, метод обратного распространения ошибки — градиентный алгоритм для многослойных нейросетей. Сигналы ошибки, рассчитанные с помощью градиента, распространяются от выхода нейронной сети к входу, то есть идут не в прямом, а в обратном направлении.

Современные нейронные сети. Когда компьютеры развились до современных мощностей, концепция нейронной сети снова стала привлекательной. К тому моменту ученые успели описать много алгоритмов, которые помогали распространять информацию по нейронам, и предложили несколько структур. Это были как однослойные, так и многослойные сети, однонаправленные и рекуррентные — подробнее мы расскажем о классификации далее. Чем более продвинутыми становились компьютеры, тем больше сложных и интересных задач могли реализовать нейронные сети. Мощность системы играет важную роль, т.к. каждый нейрон постоянно выполняет ресурсоемкие вычисления. Чтобы решить сложную задачу, обычно нужно много нейронов, их масштабная структура и множество математических функций. Понятно, что для этого понадобится очень сильный компьютер.

Говоря проще, ИНС можно назвать неким «черным ящиком», превращающим входные данные в выходные данные. Если же посмотреть на это с точки зрения математики, то речь идет о том, чтобы отобразить пространство входных X-признаков в пространство выходных Y-признаков: X → Y. Таким образом, нам надо найти некую F-функцию, которая сможет выполнить данное преобразование. На первом этапе этой информации достаточно в качестве основы.

Давайте внимательно посмотрим на него. Вышенаписанная формула — это не что иное, как определение умножения матрицы на вектор. И в самом деле, если мы возьмем матрицу W размера n на m и выполним ее умножение на X размерности m, то мы получим другое векторное значение n-размерности, то есть как раз то, что надо.

Предоставление информации. Когда нейросеть обучают, ей «показывают» данные, по которым необходимо что-то предсказать, и эталонные правильные ответы для них — это называется обучающей выборкой. Информации должно быть много — считается, что минимум в десять раз больше, чем количество нейронов в сети. Во время обучения нейросети показывают какую-либо информацию и говорят, что это такое, т.е. дают ответ. Все данные представляются не посредством слов, а с помощью формул и числовых коэффициентов. Например, изображению женщины соответствует «1», а изображению мужчины — «0». Это простой пример; реальные сети устроены сложнее. Преобразования. Входные нейроны получают информацию, преобразуют ее и передают дальше. Содержание информации автоматически обрабатывается с помощью формул и превращается в математические коэффициенты. Примерно как то, что мы видим глазами, превращается в нервные импульсы и передается в мозг. Он их обрабатывает, и человек понимает, что находится вокруг него. Здесь принцип похож. Обработка и выводы. У каждого нейрона есть «вес» — число внутри него, рассчитанное по особым алгоритмам. Он показывает, насколько показания нейрона значимы для всей сети. Соответственно, во время обучения веса нейронов автоматически меняются и балансируются. В результате складывается ситуация, когда определенные нейроны реагируют, например, на силуэт человека — и выдают информацию, которая преобразуется в ответ: «Это человек». При этом человека не нужно описывать как набор математических фигур — во время обучения нейронная сеть сама задает значения весов, которые определяют его. Результат. Выводом нейронной сети становится набор формул и чисел, которые преобразуются в ответ. Например, если изображение мужчины — «0», а женщины — «1», то результат 0,67 будет означать что-то вроде «Скорее всего, это женщина». Нейросеть из-за своей структуры не может дать абсолютно точный ответ — только вероятность. И из-за закрытости и нестабильности нейронов ее показания могут различаться даже для одинаковых выборок.

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

Больше мощностей. Нейронные сети работают с матрицами, так что если нейронов много, вычисления получаются очень ресурсоемкие. Известные нейросети вроде Midjourney или ChatGPT — это сложные и «тяжелые» системы, для их работы нужны сервера с мощным «железом». Так что написать собственный DALL-E на домашнем компьютере не получится. Но есть сервисы для аренды мощностей: ими как раз пользуются инженеры машинного обучения, чтобы создавать, обучать и тестировать модели.

Формула корректировки весов

Больше нейронов. В нашей тренировочной нейросети только один нейрон. Но если нейронов будет больше — каждый из них сможет по-своему реагировать на входные данные, соответственно, на следующие нейроны будут приходить данные с разных синапсов. Значит — больше вариативность, «подумать» и передать сигнал дальше может не один нейрон, а несколько. Можно менять и формулу передачи, и связи между нейронами — так получаются разные виды нейронных сетей.

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

Человеческий мозг состоит из ста миллиардов клеток, которые называются нейронами. Они соединены между собой синапсами. Если через синапсы к нейрону придет достаточное количество нервных импульсов, этот нейрон сработает и передаст нервный импульс дальше. Этот процесс лежит в основе нашего мышления. Мы можем смоделировать это явление, создав нейронную сеть с помощью компьютера. Нам не нужно воссоздавать все сложные биологические процессы, которые происходят в человеческом мозге на молекулярном уровне, нам достаточно знать, что происходит на более высоких уровнях. Для этого мы используем математический инструмент — матрицы, которые представляют собой таблицы чисел. Чтобы сделать все как можно проще, мы смоделируем только один нейрон, к которому поступает входная информация из трех источников и есть только один выход. 3 входных и 1 выходной сигнал Наша задача — научить нейронную сеть решать задачу, которая изображена в ниже. Первые четыре примера будут нашим тренировочным набором. Получилось ли у вас увидеть закономерность? Что должно быть на месте вопросительного знака — 0 или 1?

Биологические нейронные сети. Нервная система живого существа состоит из нейронов — клеток, которые накапливают и передают информацию в виде электрических и химических импульсов. У нейронов есть аксон — основная часть клетки, и дендрит — длинный отросток на ее конце, который может достигать сантиметра в длину. Дендриты передают информацию с одной клетки на другую и работают как «провода» для нервных импульсов. С помощью специальных шипов они цепляются за другие нейроны, и так сигналы передаются по всей нервной системе. В качестве примера можно привести любое осознанное действие. Например, человек решает поднять руку: импульс сначала появляется в его мозгу, потом через сеть нейронов информация передается от одной клетки к другой. По пути она преобразуется и в конечном итоге достигает клеток в руке. Рука поднимается. Так работает большинство процессов в организме — тех, которые управляются мозгом. Но главная особенность нейронных сетей — способность обучаться. И именно она легла в основу машинных нейросетей. Первые машинные нейросети. В сороковых годах прошлого века люди впервые попытались описать сеть нейронов математически. Затем, в пятидесятых, — воссоздать ее модель с помощью кода. Получилась та самая структура, которую назвали перцептрон. На графиках и иллюстрациях ее обычно рисуют как набор кругов и прямых, их соединяющих — это и есть нейроны, образующие сетку. Перцептрон был проще современных нейросетей. Он имел всего один слой и три типа элементов: первый тип принимал информацию, второй обрабатывал и создавал ассоциативные связи, третий выдавал результат. Но даже элементарная структура уже могла обучаться и более-менее точно решать простые задачи. Например, перцептрон мог ответить, есть ли на картинке предмет, который его научили распознавать. Он был способен отвечать только на вопросы, где есть два варианта ответов: «да» и «нет». После этого развитие нейросетей замедлилось. Существующих на тот момент технологий было недостаточно, чтобы создать мощную систему. Наработки шли неторопливо, но чем больше развивалась компьютерная отрасль, тем больше интереса вызывал концепт.

ЧИТАТЬ ТАКЖЕ:  Как улучшить фотографию через нейросеть

Один нейрон может превратить в одну точку входной вектор, но по условию мы желаем получить несколько точек, т. к. выходное Y способно иметь произвольную размерность, которая определяется лишь ситуацией (один выход для XOR, десять выходов, чтобы определить принадлежность к одному из десяти классов, и так далее). Каким же образом получить n точек? На деле все просто: для получения n выходных значений, надо задействовать не один нейрон, а n. В результате для каждого элемента выходного Y будет использовано n разных взвешенных сумм от X. В итоге мы придем к следующему соотношению:

У нейросетей есть общие черты — например, наличие входного слоя, который принимает информацию на вход. Но много и различий. Для каждой из перечисленных выше задач потребуется своя нейронная сеть. У них будут различаться структуры, архитектура, типы нейронов и многое другое. Создать универсальный алгоритм невозможно, по крайней мере пока, поэтому сети отдельно оптимизируют под определенные спектры задач. Однонаправленные. Нейросети работают в одном направлении — как оригинальный перцептрон. Это значит, что у них нет «памяти», а поток информации передается только в одну сторону. Структура выходит более простой, чем в случае с рекуррентными сетями, о которых мы поговорим ниже. Но это не плохо: для решения некоторых задач простые структуры подходят лучше. Однонаправленные сети хорошо подходят для задач распознавания. Суть примерно та же, что и в случае с восприятием окружающего мира реальным мозгом. Органы чувств получают информацию и передают ее в одном направлении, та в процессе трансформируется и распознается. Мозг делает вывод: «я вижу собаку», «слышна рок-музыка», «на улице холодно». Однонаправленная модель работает по тому же принципу, но более упрощенно. Еще один вариант применения — прогнозирование. Принцип такой же: «На улице тучи — значит, пойдет дождь». Но критерии, по которым нейросети делают выводы, до конца непонятны. Рекуррентные. У этих сетей есть эффект «памяти» благодаря тому, что данные передаются в двух направлениях, а не в одном. В результате они воспринимают предыдущую полученную информацию и могут глубже ее «анализировать». Это полезно, если перед сетью стоит сложная задача вроде перевода текста. Однонаправленная нейросеть переведет каждое слово по отдельности, и получится бессвязная «каша». Рекуррентная сможет учесть контекст и перевести, например, apple tree не как «яблоко дерево», а как «яблоня». Или более сложный пример: идиома that’s a piece of cake в контексте переведется не как «это кусок торта», а как «проще простого» в зависимости от стиля текста. На это сейчас способны не все переводчики. Задачи для рекуррентной сети можно сформулировать так: это работа с большим объемом данных, которые надо разбить на более мелкие и обработать. Причем с учетом связей между друг другом. Правильно настроенная рекуррентная нейронная сеть способна отличать контекст одной ситуации от другой. Это важно, например, при создании «говорящих» ботов: вспомните, как «обижаются» голосовые помощники, если сказать им что-то грубое. Сверточные. Это отдельная категория нейронных сетей, менее закрытая, чем другие, благодаря принципиальной многослойности. Многослойными называются нейронные сети, в которых нейроны сгруппированы в слои. При этом каждый нейрон предыдущего слоя связан со всеми нейронами следующего слоя, а внутри слоев связи между нейронами отсутствуют. Сверточные сети используют для распознавания образов. У них особая структура слоев: часть занимается «свертыванием», преобразованием картинки, а часть — группировкой и распознаванием маленьких дискретных элементов, созданных на сверточных слоях. Таких слоев несколько. Результат — более высокая точность и качественное восприятие информации. Интересный факт: как обычные нейросети были основаны на нейронах в головном мозгу, так сверточные — на структуре зрительной коры. Это та часть мозга, которая отвечает за восприятие картинок. В ней чередуются «простые» и «сложные» клетки: первые реагируют на определенные линии и очертания, вторые — на активацию конкретных простых клеток. Так происходит процесс распознавания образов в мозгу, и примерно так же устроена сверточная нейросеть. Сверточные слои «воспринимают» отдельные элементы картинки как простые клетки — линии. Особые слои, называемые субдискретизирующими, реагируют на конкретные найденные элементы. Чем больше слоев, тем более абстрактные детали способна заметить и определить сеть. На результат работы промежуточных слоев можно посмотреть, если заглянуть в файлы нейросети. Поэтому она и считается менее закрытой. Результат больше всего напоминает карту признаков из машинного обучения.

Но ее легко получить путем увеличения количества нейронов. Давайте попробуем реализовать обучение с тремя нейронами в скрытом слое и одним выходным (выход ведь у нас только один). Чтобы все получилось, создадим массив X и Y, имеющий обучающие данные и саму нейронную сеть:

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

Как работает нейросеть?

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

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

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

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

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

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь