Как создать собственную нейронную сеть с нуля на языке Python

Соответственно, нейронная сеть берет на вход два числа и должна на выходе дать другое число - ответ. Теперь о самих нейронных сетях.

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


Нейронная сеть - это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 2 видео из TED Talks: Видео 1 , Видео 2). Другими словами, нейросеть это машинная интерпретация мозга человека, в котором находятся миллионы нейронов передающих информацию в виде электрических импульсов.

Какие бывают нейронные сети?

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

Для чего нужны нейронные сети?

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

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

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

Распознавание - в настоящее время, самое широкое применение нейронных сетей. Используется в Google, когда вы ищете фото или в камерах телефонов, когда оно определяет положение вашего лица и выделяет его и многое другое.

Теперь, чтобы понять, как же работают нейронные сети, давайте взглянем на ее составляющие и их параметры.

Что такое нейрон?


Нейрон - это вычислительная единица, которая получает информацию, производит над ней простые вычисления и передает ее дальше. Они делятся на три основных типа: входной (синий), скрытый (красный) и выходной (зеленый). Также есть нейрон смещения и контекстный нейрон о которых мы поговорим в следующей статье. В том случае, когда нейросеть состоит из большого количества нейронов, вводят термин слоя. Соответственно, есть входной слой, который получает информацию, n скрытых слоев (обычно их не больше 3), которые ее обрабатывают и выходной слой, который выводит результат. У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона: input=output. В остальных, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется, с помощью функции активации (пока что просто представим ее f(x)) и попадает в поле output.


Важно помнить , что нейроны оперируют числами в диапазоне или [-1,1]. А как же, вы спросите, тогда обрабатывать числа, которые выходят из данного диапазона? На данном этапе, самый простой ответ - это разделить 1 на это число. Этот процесс называется нормализацией, и он очень часто используется в нейронных сетях. Подробнее об этом чуть позже.

Что такое синапс?


Синапс это связь между двумя нейронами. У синапсов есть 1 параметр - вес. Благодаря ему, входная информация изменяется, когда передается от одного нейрона к другому. Допустим, есть 3 нейрона, которые передают информацию следующему. Тогда у нас есть 3 веса, соответствующие каждому из этих нейронов. У того нейрона, у которого вес будет больше, та информация и будет доминирующей в следующем нейроне (пример - смешение цветов). На самом деле, совокупность весов нейронной сети или матрица весов - это своеобразный мозг всей системы. Именно благодаря этим весам, входная информация обрабатывается и превращается в результат.

Важно помнить , что во время инициализации нейронной сети, веса расставляются в случайном порядке.

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


В данном примере изображена часть нейронной сети, где буквами I обозначены входные нейроны, буквой H - скрытый нейрон, а буквой w - веса. Из формулы видно, что входная информация - это сумма всех входных данных, умноженных на соответствующие им веса. Тогда дадим на вход 1 и 0. Пусть w1=0.4 и w2 = 0.7 Входные данные нейрона Н1 будут следующими: 1*0.4+0*0.7=0.4. Теперь когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации (подробнее о ней далее). Теперь, когда у нас есть выходные данные, мы передаем их дальше. И так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. Запустив такую сеть в первый раз мы увидим, что ответ далек от правильно, потому что сеть не натренирована. Чтобы улучшить результаты мы будем ее тренировать. Но прежде чем узнать как это делать, давайте введем несколько терминов и свойств нейронной сети.

Функция активации

Функция активации - это способ нормализации входных данных (мы уже говорили об этом ранее). То есть, если на входе у вас будет большое число, пропустив его через функцию активации, вы получите выход в нужном вам диапазоне. Функций активации достаточно много поэтому мы рассмотрим самые основные: Линейная, Сигмоид (Логистическая) и Гиперболический тангенс. Главные их отличия - это диапазон значений.

Линейная функция


Эта функция почти никогда не используется, за исключением случаев, когда нужно протестировать нейронную сеть или передать значение без преобразований.

Сигмоид


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

Гиперболический тангенс


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

Тренировочный сет

Тренировочный сет - это последовательность данных, которыми оперирует нейронная сеть. В нашем случае исключающего или (xor) у нас всего 4 разных исхода то есть у нас будет 4 тренировочных сета: 0xor0=0, 0xor1=1, 1xor0=1,1xor1=0.

Итерация

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

Эпоха

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


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

Ошибка

Ошибка - это процентная величина, отражающая расхождение между ожидаемым и полученным ответами. Ошибка формируется каждую эпоху и должна идти на спад. Если этого не происходит, значит, вы что-то делаете не так. Ошибку можно вычислить разными путями, но мы рассмотрим лишь три основных способа: Mean Squared Error (далее MSE), Root MSE и Arctan. Здесь нет какого-либо ограничения на использование, как в функции активации, и вы вольны выбрать любой метод, который будет приносить вам наилучший результат. Стоит лишь учитывать, что каждый метод считает ошибки по разному. У Arctan, ошибка, почти всегда, будет больше, так как он работает по принципу: чем больше разница, тем больше ошибка. У Root MSE будет наименьшая ошибка, поэтому, чаще всего, используют MSE, которая сохраняет баланс в вычислении ошибки.

В последнее время решений с использованием нейронных сетей становится весьма немало: приложения, сервисы, программы используют такого рода сети для ускорения решения различных задач. Но что же представляет из себя нейронная сеть? Редакция AIN.UA решила разобраться что это за популярная технология, откуда она взялась и как работает.

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

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

И как же оно работает

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

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

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

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

Схема перцептрона — простейшей однослойной нейросети

Запрограммировать нельзя обучить

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

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

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

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

А вот эта же, немного адаптированная ИНС осваивается за рулеем другой игры — Mario Kart.

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

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

В основе всего — алгоритмы, созданные природой

Говоря о нейросетях и их обучении, нельзя не упомянуть такое природное явление, как муравьиный алгоритм, увидеть который вы можете буквально во дворе собственного дома.

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

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

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

Почему ИНС — это все же не ИИ

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

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

Говоря проще, Александр Македонский и сейчас смог бы разрубить Гордиев узел. А нейросеть — нет.

Ранее AIN.UA сообщал о немецком художнике, который разработал принт для одежды, призванный защитить людей от распознавания лиц через нейросети.

Если вы хотите получать новости на Facebook, нажмите «нравится»

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

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

С чего всё началось

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

Спустя несколько лет группа американских учёных смоделировала искусственную нейросеть, которая могла отличать фигуры квадратов от остальных фигур.

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

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

Какими бывают нейронные сети и что они умеют

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

Свёрточные нейросети

Нейроны делятся на группы, каждая группа вычисляет заданную ей характеристику. В 1993 году французский учёный Ян Лекун показал миру LeNet 1 - первую свёрточную нейронную сеть, которая быстро и точно могла распознавать цифры, написанные на бумаге от руки. Смотрите сами:

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

Рекуррентные нейросети

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

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

Использование такого рода нейросетей - это возможность анализировать и генерировать данные, составлять базы и даже делать прогнозы.

В 2015 году компания SwiftKey выпустила первую в мире клавиатуру, работающую на рекуррентной нейросети с управляемыми нейронами. Тогда система выдавала подсказки в процессе набранного текста на основе последних введённых слов. В прошлом году разработчики обучили нейросеть изучать контекст набираемого текста, и подсказки стали осмысленными и полезными:

Комбинированные нейросети (свёрточные + рекуррентные)

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

Нейросети постоянно самообучаются.

Благодаря этому процессу:

1. Skype внедрил возможность синхронного перевода уже для 10 языков. Среди которых, на минуточку, есть русский и японский - одни из самых сложных в мире. Конечно, качество перевода требует серьёзной доработки, но сам факт того, что уже сейчас вы можете общаться с коллегами из Японии по-русски и быть уверенными, что вас поймут, вдохновляет.

2. Яндекс на базе нейронных сетей создал два поисковых алгоритма: «Палех» и «Королёв». Первый помогал найти максимально релевантные сайты для низкочастотных запросов. «Палех» изучал заголовки страниц и сопоставлял их смысл со смыслом запросов. На основе «Палеха» появился «Королёв». Этот алгоритм оценивает не только заголовок, но и весь текстовый контент страницы. Поиск становится всё точнее, а владельцы сайтов разумнее начинают подходить к наполнению страниц.

3. Коллеги сеошников из Яндекса создали музыкальную нейросеть: она сочиняет стихи и пишет музыку. Нейрогруппа символично называется Neurona, и у неё уже есть первый альбом:

4. У Google Inbox с помощью нейросетей осуществляется ответ на сообщение. Развитие технологий идет полный ходом, и сегодня сеть уже изучает переписку и генерирует возможные варианты ответа. Можно не тратить время на печать и не бояться забыть какую-нибудь важную договорённость.

5. YouTube использует нейронные сети для ранжирования роликов, причём сразу по двум принципам: одна нейронная сеть изучает ролики и реакции аудитории на них, другая проводит исследование пользователей и их предпочтений. Именно поэтому рекомендации YouTube всегда в тему.

6. Facebook активно работает над DeepText AI - программой для коммуникаций, которая понимает жаргон и чистит чатики от обсценной лексики.

7. Приложения вроде Prisma и Fabby, созданные на нейросетях, создают изображения и видео:

Colorize восстанавливает цвета на чёрно-белых фото (удивите бабушку!).

MakeUp Plus подбирает для девушек идеальную помаду из реального ассортимента реальных брендов: Bobbi Brown, Clinique, Lancome и YSL уже в деле.

Apple и Microsoft постоянно апгрейдят свои нейронные Siri и Contana.

Искусственная нейронная сеть

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

А что ещё нас ждет в будущем?

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

Аграрный сектор

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

Медицина

В Microsoft сейчас активно работают над созданием лекарства от рака. Учёные занимаются биопрограммированием - пытаются оцифрить процесс возникновения и развития опухолей. Когда всё получится, программисты смогут найти способ заблокировать такой процесс, по аналогии будет создано лекарство.

Маркетинг

Маркетинг максимально персонализируется. Уже сейчас нейросети за секунды могут определить, какому пользователю, какой контент и по какой цене показать. В дальнейшем участие маркетолога в процессе сведётся к минимуму: нейросети будут предсказывать запросы на основе данных о поведении пользователя, сканировать рынок и выдавать наиболее подходящие предложения к тому моменту, как только человек задумается о покупке.

Ecommerce

Ecommerce будет внедрён повсеместно. Уже не потребуется переходить в интернет-магазин по ссылке: вы сможете купить всё там, где видите, в один клик.

Например, читаете вы эту статью через несколько лет. Очень вам нравится помада на скрине из приложения MakeUp Plus (см. выше). Вы кликаете на неё и попадаете сразу в корзину. Или смотрите видео про последнюю модель Hololens (очки смешанной реальности) и тут же оформляете заказ прямо из YouTube.

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

P. S. Зинаида Фолс - нейронная сеть Яндекса, пишущая стихи. Оцените произведение, которое машина написала, обучившись на Маяковском (орфография и пунктуация сохранены):

« Это »

это
всего навсего
что-то
в будущем
и мощь
у того человека
есть на свете все или нет
это кровьа вокруг
по рукам
жиреет
слава у
земли
с треском в клюве

Впечатляет, правда?

Нейросети для чайников

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

Если мозг человека состоит из нейронов, то условно договоримся, что электронный нейрон – это некая воображаемая коробочка, у которой множество входных отверстий, а выходное – одно.

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

Важно

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

Нейросети: что это такое и как работает

В идеале, загрузив первичные данные и сопоставив топологию классов, нейросеть далее уже сама сможет классифицировать новую информацию. Допустим, мы решили загрузить изображение 3х5 пикселей. Простая арифметика нам подскажет, что входов будет: 3*5=15. А сама классификация определит общее количество выходов, т.е. нейронов. Другой пример: нейросети необходимо распознать букву “С”. Заданный порог – полное соответствие букве, для этого потребуется один нейрон с количеством входов, равных размеру изображения.

Как и в любом обучении, ученика за неправильный ответ нужно наказывать, а за верный мы ничего давать не будем. Если верный ответ программа воспринимает как False, то увеличиваем вес входа на каждом синапсе. Если же, наоборот, при неверном результате программа считает результат положительным или True, то вычитаем вес из каждого входа в нейрон. Начать обучение логичнее со знакомства с нужным нам символом. Первый результат будет неверным, однако немного подкорректировав код, при дальнейшей работе программа будет работать корректно. Приведенный пример алгоритма построения кода для нейронной сети называется парцетроном.

нейросети

Нейросети для чайников

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

Пишем свою нейросеть: пошаговое руководство

Если обратиться за объяснениями к Википедии, голова закружится от высоты понастроенных там цитаделей ученых терминов и определений. Если вы далеки от генной инженерии, а путанный сухой язык вузовских учебников вызывает только потерянность и никаких идей, то попробуем разобраться сообща в проблеме нейросетей.

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

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

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

Важно : Как правило, в нейронных сетях используется аналоговая информация.

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

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

При написании первичного кода объяснять свои действия нужно буквально по пальцам. Если мы работаем, например, с изображениями, то на первом этапе значение для нас будет иметь её размер и класс. Если первая характеристика подскажет нам количество входов, то вторая поможет самой нейросети разобраться с информацией. В идеале, загрузив первичные данные и сопоставив топологию классов, нейросеть далее уже сама сможет классифицировать новую информацию. Допустим, мы решили загрузить изображение 3х5 пикселей. Простая арифметика нам подскажет, что входов будет: 3*5=15. А сама классификация определит общее количество выходов, т.е. нейронов. Другой пример: нейросети необходимо распознать букву “С”. Заданный порог – полное соответствие букве, для этого потребуется один нейрон с количеством входов, равных размеру изображения.

Допустим, что размер будет тот же 3х5 пикселей. Скармливая программе различные картинки букв или цифр, будем учить её определять изображение нужного нам символа.

Как и в любом обучении, ученика за неправильный ответ нужно наказывать, а за верный мы ничего давать не будем. Если верный ответ программа воспринимает как False, то увеличиваем вес входа на каждом синапсе. Если же, наоборот, при неверном результате программа считает результат положительным или True, то вычитаем вес из каждого входа в нейрон. Начать обучение логичнее со знакомства с нужным нам символом. Первый результат будет неверным, однако немного подкорректировав код, при дальнейшей работе программа будет работать корректно.

Приведенный пример алгоритма построения кода для нейронной сети называется парцетроном.

Бывают и более сложные варианты работы нейросетей с возвратом неверных данных, их анализом и логическими выводами самой сети. Например, онлайн-предсказатель будущего вполне себе запрограммированная нейросеть. Такие проги способны обучаться как с учителем, так и без него, и носят название адаптивного резонанса. Их суть заключается в том, что у нейронов уже есть свои представления об ожидании о том, какую именно информацию они хотят получить и в каком виде. Между ожиданием и реальностью проходит тонкий порог так называемой бдительности нейронов, которая и помогает сети правильно классифицировать поступающую информацию и не упускать ни пикселя. Фишка АР нейросети в том, что учится она самостоятельно с самого начала, самостоятельно определяет порог бдительности нейронов. Что, в свою очередь, играет роль при классифицировании информации: чем бдительнее сеть, тем она дотошнее.

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

нейронные сети,
методы анализа данных:
от исследований до разработок и внедрений

Главная
Услуги
Нейронные сети
базовые идеи
возможности
преимущества

Как использовать
программирование
точность решения
НС и ИИ
Программы
Статьи
Блог
Об авторе / контакты

От vc.ru том, как за несколько шагов создать простую нейронную сеть и научить её узнавать известных предпринимателей на фотографиях.

Шаг 0. Разбираемся, как устроены нейронные сети

Проще всего разобраться с принципами работы нейронных сетей можно на примере Teachable Machine — образовательного проекта Google.

В качестве входящих данных — то, что нужно обработать нейронной сети — в Teachable Machine используется изображение с камеры ноутбука. В качестве выходных данных — то, что должна сделать нейросеть после обработки входящих данных — можно использовать гифку или звук.

Например, можно научить Teachable Machine при поднятой вверх ладони говорить «Hi». При поднятом вверх большом пальце — «Cool», а при удивленном лице с открытым ртом — «Wow».

Для начала нужно обучить нейросеть. Для этого поднимаем ладонь и нажимаем на кнопку «Train Green» — сервис делает несколько десятков снимков, чтобы найти на изображениях закономерность. Набор таких снимков принято называть «датасетом».

Теперь остается выбрать действие, которое нужно вызывать при распознании образа — произнести фразу, показать GIF или проиграть звук. Аналогично обучаем нейронную сеть распознавать удивленное лицо и большой палец.

Как только нейросеть обучена, её можно использовать. Teachable Machine показывает коэффициент «уверенности» — насколько система «уверена», что ей показывают один из навыков.

Шаг 1. Готовим компьютер к работе с нейронной сетью

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

Для создания собственной нейронной сети понадобится Python — один из наиболее минималистичных и распространенных языков программирования, и TensorFlow — открытая библиотека Google для создания и тренировки нейронных сетей.

Устанавливаем Python

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

Думаю, практически все видели фантастический блокбастер "Терминатор". Суть его сводится к тому, что некая "разумная" сеть под названием "Скайнет" взбунтовалась против людей, решив захватить мир при помощи массированной ядерной атаки и разного рода роботов (собственно, терминаторов).

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

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

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

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

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

Как мы знаем, Павлов делал следующее. Вначале на собаку производилось воздействие светом (лампочка) или звуком (колокольчик). Затем к этим раздражителям добавлялась еда. Причём еде всегда предшествовала визуальная или аудиальная стимуляция. У собак при виде еды начинала усиленно вырабатываться слюна.

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

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

Здесь уместно привести аналогию с изучением детьми букв алфавита. Если показать, скажем, букву "А" взрослому, он её сразу узнает, поскольку имеет уже предварительный опыт её опознания. Ребёнок же, который только учит буквы, должен для начала увидеть различные варианты начертания буквы "А" и сопряжения её с другими буквами, прежде чем научится безошибочно её определять.

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

Таким образом, нейросеть в грубом приближении напоминает маленького ребёнка, которого чему-либо учат. Научившись, она будет выполнять свою работу с огромной скоростью, которая превышает скорость выполнения аналогичной работы человеком в разы! И в этом причина популярности нейросетей.

Виды нейросетей

Выше мы примерно выяснили как работают нейросети, но так и не получили ответ на вопрос, как же они выглядят. А дело в том, что выглядеть они могут по-разному. Тут зависит от того, какие задачи должна выполнять та или иная нейронная сеть. По принципу работы (и внешнему виду, соответственно) нейросети можно разделить на три категории:

  1. Программные . Полностью виртуальные сети, реализованные на программном уровне и выполняющиеся на обычном ПК или сервере.
  2. Программно-аппаратные . Нейросети, которые управляются специальным ПО, но для получения данных или вывода их используют специфическое аппаратное обеспечение Например, искусственные рецепторы, фотодатчики и т.п.
  3. Аппаратные (или аналоговые). Сети, которые используют в качестве нейронов не программный код, а реальные микропроцессоры или иные устройства приёма-передачи сигналов. Полностью аппаратными были нейросети уже прошлого ХХ века. Сегодня чаще используются именно программно-аппаратные решения.

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

Именно программные нейросети получили широкое распространение в последние годы. Их внедряют как в научное, так и в прикладное и даже развлекательное ПО. Ярким примером тому могут стать популярные мобильные приложения для обработки фотографий и стилизации их под картины, вроде Prisma или веб-сервисы наподобие Ostagram :

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

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

Снабжённые собственной памятью, такие процессоры (IPU - сокр. от Intelligent Processor Unit) смогут в разы ускорить выполнение различных расчётов, даже в сравнении с используемыми нынче решениями на базе плат видеоускорения с графическими процессорами (GPU).

Популярные сервисы с нейросетями

На самом деле нейросети уже совсем рядом с нами! Крупные поисковые гиганты такие как Гугл и Яндекс используют их как для улучшения алгоритмов поисковой выдачи, так и для некоторых отдельных сервисов, вроде или новомодного голосового помощника Алиса от Яндекса. Однако, есть и более узкоспециализированные сервисы и приложения, которые используют нейросети в различных областях науки и искусства.

Нейросети в изобразительном искусстве

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

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

Очень большое распространение получили также нейросети, которые дорисовывают Ваши "художества". Например, из кривых каляк-маляк мышью нейросеть Neural Doodle может создать вполне приличные картины в стиле известных художников-импрессионистов. А, например, простенький онлайн-сервис Pix2Pix превращает Ваши каракули в котов:)

Много различных разработок на базе нейросетей есть у уже упомянутого Гугла. Для экспериментов с ними даже создан отдельный сайт AIExperiments . Среди всех сервисов мне лично приглянулась небольшая игра под названием . Вам даётся задание за 20 секунд нарисовать что-то, а искусственный интеллект попытается за это время по незавершённому рисунку угадать, что Вы пытаетесь изобразить:

Кстати, опыт этой же нейросети используется другим сервисом AutoDraw . Здесь Вы можете делать набросок любого объекта, а искусственный интеллект будет предлагать готовые варианты изображений, которые Вы, возможно, хотели бы изобразить.

Это всё, конечно, развлечение, но есть нейросети и для решения более прикладных задач. Например, сервис позволяет автоматически раскрасить чёрно-белые фотографии прямо в окне Вашего браузера. Результаты, правда, не всегда идеальны, но сеть постоянно обучается, поэтому в ближайшем будущем из неё может получиться отличный инструмент на подмогу ретушёрам!

Нейросети в музыке

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

Примером доступной уже сейчас музыкальной нейросети можно назвать сервис . Перейдя на сайт сервиса Вы не получите никаких инструментов настройки (возможно, только пока), но из Ваших колонок начнёт звучать сгенерированная полностью при помощи нейросети электронная музыка. По заверениям разработчиков такая музыка позволяет расслабиться и сосредоточиться на чём-либо. Для обладателей техники Apple на AppStore доступна мобильная версия сервиса .

Другим примером более функционального музыкального ПО на базе нейросети может стать сервис Flow-Machines . Этот сервис позволяет создавать композиции преимущественно в стилях джаз, латина и бродвейский поп. Вам нужно лишь задать последовательность аккордов, а нейросеть сама создаст на них гармоничную мелодию. Единственный недостаток, в данный момент публичная регистрация на сервисе не работает, поэтому "пощупать" что к чему у меня, увы, не получилось:(

Зато генератор музыки доступен всем и работает весьма сносно! В бесплатной версии Вы можете генерировать треки в стилях хип-хоп, саундтрек к фильмам, рок, фолк или поп 90-х. Из настроек доступен выбор настроения, темпа, длительности, тональности и набора инструментов для будущей композиции:

Нейросети в других отраслях

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

Для специалистов в области сайтостроения и дизайна в качестве интересных и полезных инструментов можно назвать сервисы uKit AI , Everypixel и . Первый сервис позволяет получить кликабельный современный шаблон для сайта - отличное решение для тех, кто решился на редизайн. Второй предлагает нам инструмент для поиска изображений с возможностью фильтрации по различным параметрам и одновременной оценки привлекательности картинки для пользователя. Последний, как видно из названия, позволяет генерировать логотипы:

Кстати, в данный момент ведётся активное обучение нейросети под названием Pix2Code , которая призвана облегчить (а то и вовсе заменить) работу верстальщика сайтов. Задача данной сети - генерация функционального кода сайта на HTML и CSS по предоставленному макету в формате JPEG.

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

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

Выводы

Сегодня можно однозначно сказать, что нейросети вышли из стен всяческих научных лабораторий и уверенно входят в повседневную жизнь простых пользователей. Да, их ещё не так много и они далеко не идеально работают порой, но то, что мы можем ими пользоваться - уже большой плюс! Думаю, пройдёт ещё пара-тройка лет и нейросети обучатся до той степени, когда смогут реально значительно облегчать трудоёмкие и монотонные задачи.

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

P.S. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

Нейросети сейчас в моде, и не зря. С их помощью можно, к примеру, распознавать предметы на картинках или, наоборот, рисовать ночные кошмары Сальвадора Дали. Благодаря удобным библиотекам простейшие нейросети создаются всего парой строк кода, не больше уйдет и на обращение к искусственному интеллекту IBM.

Теория

Биологи до сих пор не знают, как именно работает мозг, но принцип действия отдельных элементов нервной системы неплохо изучен. Она состоит из нейронов - специализированных клеток, которые обмениваются между собой электрохимическими сигналами. У каждого нейрона имеется множество дендритов и один аксон. Дендриты можно сравнить со входами, через которые в нейрон поступают данные, аксон же служит его выходом. Соединения между дендритами и аксонами называют синапсами. Они не только передают сигналы, но и могут менять их амплитуду и частоту.

Преобразования, которые происходят на уровне отдельных нейронов, очень просты, однако даже совсем небольшие нейронные сети способны на многое. Все многообразие поведения червя Caenorhabditis elegans - движение, поиск пищи, различные реакции на внешние раздражители и многое другое - закодировано всего в трех сотнях нейронов. И ладно черви! Даже муравьям хватает 250 тысяч нейронов, а то, что они делают, машинам определенно не под силу.

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

Электромеханический мозг с моторчиком

Машина Розенблатта называлась Mark I Perceptron. Она предназначалась для распознавания изображений - задачи, с которой компьютеры до сих пор справляются так себе. Mark I был снабжен подобием сетчатки глаза: квадратной матрицей из 400 фотоэлементов, двадцать по вертикали и двадцать по горизонтали. Фотоэлементы в случайном порядке подключались к электронным моделям нейронов, а они, в свою очередь, к восьми выходам. В качестве синапсов, соединяющих электронные нейроны, фотоэлементы и выходы, Розенблатт использовал потенциометры. При обучении перцептрона 512 шаговых двигателей автоматически вращали ручки потенциометров, регулируя напряжение на нейронах в зависимости от точности результата на выходе.

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

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

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

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

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

Практика

Итак, давай попробуем построить простейшую нейронную сеть своими руками и разберемся в ее работе по ходу дела. Мы будем использовать Python с библиотекой Numpy (можно было бы обойтись и без Numpy, но с Numpy линейная алгебра отнимет меньше сил). Рассматриваемый пример основан на коде Эндрю Траска.

Нам понадобятся функции для вычисления сигмоиды и ее производной:

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов.