Как работают нейросети. Нейросети: что это такое и как работает. Искусственная нейронная сеть

Как работают нейросети. Нейросети: что это такое и как работает. Искусственная нейронная сеть

14.04.2019

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

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

Но что если бы вы смогли получить преимущества использования ИИ без необходимости нанимать этих редких и дорогостоящих специалистов? Что если этот порог входа можно понизить с помощью умного ПО? Можно ли использовать глубинное обучение с менее разнообразным набором кадров?

Стартап под названием Bonsai и целая группа похожих компаний отвечают на этот вопрос «да». Приготовьтесь к демократизации искусственного интеллекта. Когда-нибудь это движение может объединить под своими знаменами миллионы, если не миллиарды людей.

На Конференции разработчиков искусственного интеллекта О’Райли в Нью-Йорке генеральный директор Bonsai Марк Хаммонд провел презентацию своей компании. (Также он объявил о раунде инвестиций на сумму в $6 млн – не такие уж большие деньги, учитывая тот факт, что в этом году размер венчурных инвестиций в сферу ИИ уже 1,5 млрд.) Презентация включала повторение одного из самых известных достижений элитных разработчиков глубинного обучения: прохождение алгоритмом DeepMind старых игр для компьютеров Atari в реальном времени. В частности, игра под названием Breakout («Теннис»), в которой платформа отбивает квадратный «мяч», разбивающий мерцающие блоки. (Игра, выпущенная в 1976 году, была прорывом для своего времени – над ней работал сам )

37 строчек кода – вся структура нейросети, которая обучается через классическую игру Atari. Источник: Bonsai

Вариант, предложенный DeepMind, был создан лучшими в мире специалистами по ИИ, которые обучали нейросеть основам игр от Atari, и результат их работы был достоин научных публикаций мирового класса. Версия от Bonsai является упрощением. Все начинается с системы развития, которая загружена в облако. Всего один программист, пусть даже тот, кто вообще не обучался основам ИИ, может в общих чертах описать игру, а система сама выберет подходящий алгоритм обучения, чтобы задействовать нейросеть. (Бедным докторам наук из DeepMind приходилось писать эти алгоритмы самостоятельно). На этом этапе программисту нужно всего лишь за пару минут заложить основные принципы игры – например, «ловить мяч на платформу» - а затем Bonsai сама займется развитием нейросети и ее оптимизацией для получения наилучшего результата. А нейросеть на выходе уже сама будет играть в «Теннис».

Версия игры, написанная Bonsai, укладывается всего в 37 строчек кода. Но эта простота обманчива. Когда Хаммонд объясняет, что находится в основе алгоритма, он показывает рисунок с демонстрацией того, как его система строит нейросеть, способную соперничать с одним из лучших творений Google. Самому программисту даже не пришлось вникать в тонкости машинного обучения. Смотри, мам, я могу без рук докторской степени!


Так играет в «Теннис» нейросеть, обученная системой Bonsai. Источник: Bonsai

Впечатляющий трюк. «Обычно меня трудно удивить демонстрацией, - рассказывает Джордж Уильямс, научный сотрудник Курантовского института математики Нью-Йоркского университета. - Однако то, что показал мне Марк, было вполне реально и в то же время потрясающе. Он взял все достижения машинного интеллекта и создал инструменты, которые позволят разработать новое поколение систем ИИ».

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

Bonsai была рождена на пляже. Хаммонд, бывший инженер и евангелист разработки ПО, уже какое-то время раздумывал над возможностями искусственного интеллекта. После ухода из Microsoft в 2004 году он стал заниматься нейробиологией в Йеле, затем в 2010 году недолгое время проработал в Numenta – стартапе по разработке ИИ, которым владел Джефф Хокинс (сооснователь компании Palm, производителя КПК). Затем Хаммонд открыл еще одну компанию в совсем другой сфере, которую он затем продал.

Тогда, в 2012 году, Хаммонд приехал в Южную Калифорнию навестить друзей. Его маленький сын устал, и все пошли обратно к машине. Пока жена Хаммонда болтала с друзьями, а сын засыпал у него на руках, он провел мысленный эксперимент. В основе этого эксперимента лежал популярные мем из мира ИИ – концепция «мастер-алгоритма». Профессор Вашингтонского университета Педро Домингес в одноименной книге написал, что этот еще не созданный алгоритм мог бы стать панацеей для всех проблем отрасли. По идее, когда этот алгоритм все-таки изобретут, с его помощью можно будет методически внедрять системы ИИ куда угодно.

Хаммонд заключил, что нужно создать систему, которая позволит даже самому заурядному разработчику использовать инструменты ИИ

Но Хаммонд видел один изъян в этой идее. «Допустим, мы нашли этот мастер-алгоритм, – говорил он себе, пока 18-месячный сын дремал у него на руках – кто станет внедрять его в бесчисленном множестве возможных сценариев?» На данный момент использовать такие инструменты под силу только настоящим адептам машинного обучения. Возможностей использования ИИ будет слишком много для ограниченного числа этих людей. Так он пришел к заключению, что нужно создать систему, которая снизит порог входа и позволит даже самому заурядному разработчику использовать эти инструменты. Такой системе не нужны будут инженеры крайне узкой специализации для обучения нейросетей. Программисты смогут сами обучать их для получения желаемого результата.

Пока Хаммонд обдумывал свои идеи, он провел аналогии с историей программирования. Изначально операторам компьютеров приходилось кропотливо писать код, который обеспечивал работу оборудования. Затем программисты взяли на вооружение набор стандартных инструкций, который был назван языком ассемблера и ускорил процесс – но вам все еще нужно было иметь очень высокий уровень подготовки, чтобы довести дело до ума. Прорыв случился, когда инженеры создали компилятор – программу, которая преобразовывала код на более удобных, так называемых языках «высокого уровня» (от самых первых BASIC и LISP до нынешних Python и C), в код на языке ассемблера. Только после этого создание мощных приложений стало доступно даже профессионалам относительно низкого уровня. Хаммонд считает, что сейчас, благодаря инструментам вроде TensorFlow от Google, системы ИИ вышли на уровень языка ассемблера, то есть инженерам уже становится легче создавать нейросети, но это все равно остается доступным тем, кто действительно понимает принцип их работы. Хаммонд хотел создать аналог компилятора, чтобы упростить все еще больше.

Этой идеей он поделился с Кином Брауном, бывшим коллегой из Microsoft, который недавно продал свой игровой стартап китайской интернет-компании. Идея ему понравилась, так как в то время он как раз пробовал заниматься машинным обучением, используя доступные на тот момент инструменты. «Вообще я человек неглупый, - говорит Браун - я приехал в Китай и выучил их язык, работал программистом в Microsoft, но даже для меня это было слишком». Он согласился стать сооснователем Bonsai. (Название было выбрано, потому что в этом японском искусстве достигается идеальный баланс между естественным и искусственным. Еще одно преимущество появилось, когда владельцы интернет-домена разрешили молодой компании зарегистрировать свой сайт по адресу bons.ai .)

Bonsai – не единственная компания, работающая над решением проблемы нехватки квалифицированных специалистов по ИИ. Некоторые из более крупных компаний поняли необходимость обучения собственных кадров и обучения обычных программистов в мастеров по нейросетям: в Google создали целую серию внутренних программ, а Apple стала обращать внимание на навыки и личные качества программистов, которые помогли бы им быстрее освоить нужные умения. Как уже говорилось выше, Google также выпустила в широкий доступ программу TensorFlow, благодаря которой ее инженерам проще создавать нейросети. Уже доступны и другие наборы инструментов для создания ИИ, и, без сомнения, таких инструментов будет становиться только больше.

«Мы открываем новые возможности для тех, кто не является ученым или программистом»

В то же время другие стартапы тоже трудятся во имя демократизации ИИ. Компания Bottlenose решает проблему нехватки ученых, но для другой целевой аудитории: если Bonsai делает свой продукт в первую очередь для разработчиков ПО, Bottlenose планирует облегчить жизнь бизнес-аналитикам. Однако мотивы те же самые. «Мы открываем новые возможности для тех, кто не является ученым или программистом», - говорит генеральный директор компании Нова Спивак. Некоторые стартапы собираются затронуть еще больше пользователей: презентация компании Clarifai на конференции О’Райли называлась «Как сделать так, чтобы каждый человек на планете мог обучить и использовать ИИ».

Таким образом, хотя Bonsai, похоже, появилась в нужное время в нужном месте, сейчас индустрия ИИ настолько бурно развивается, что у стартапа Хаммонда могут возникнуть трудности с привлечением к себе внимания. Адам Чейер, специалист по ИИ, который участвовал в создании и сейчас занимает пост главного инженера , уже видел продукт Bonsai и остался очень впечатлен. Но он отмечает, что, хотя Bonsai делает ИИ доступным даже новичкам, людям все равно придется совершать умственные усилия, чтобы разобраться в их языке программирования и общем устройстве системы. «Когда новый продукт выпускает большая компания вроде Google, люди со всех ног бросаются его пробовать. Но если такой же продукт делает стартап, привлечь к нему людей намного сложнее. Хватит ли у них сил, чтобы задействовать достаточное количество пользователей и сделать свой инструмент популярным? Получится ли все у Bonsai или нет – сложно сказать прямо сейчас».

Компания создала систему из нескольких компонентов, среди которых Brain, облачная система для создания нейросетей, язык написания скриптов под названием Inkling и Mastermind, «интегрированная среда для разработки», которая предоставляет программистам все необходимые инструменты в одном месте. («Приложение для создания приложений», - объясняет Браун). Система Bonsai доступна для бета-тестирования.

Марк Хаммонд в главном офисе Bonsai в центре Беркли. Фото: Backchannel

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

Так что пока опытные инженеры систем ИИ «тренируют» сеть, сравнивая информацию на выходе с желаемым результатом (например, показывая сети фотографии собак и поощряя ее при выводе подходящих характеристик), Bonsai позволяет вам «научить» систему, просто разбив весь процесс на основные принципы. Если продолжить пример с собаками, то вы могли бы упомянуть такие вещи, как четыре лапы, морда и язык, свисающий изо рта. Вы даете только необходимую базу, а облачный «умный движок» Bonsai, в который входит и «мозг», доводит дело до конца.

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

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

«Я думаю, всегда приходится идти на компромисс, - говорит Лайла Третиков, специалист по ИИ, ранее работавшая главой фонда Wikimedia Foundation и консультировавшая Bonsai. - Результаты будут не совсем такими же, как если задействовать группу ученых. Но я не уверена, что важнее: качество или сама по себе возможность это сделать». Адам Чейер из Viv также предполагает, что код Bonsai может работать не так эффективно, как ПО, оптимизированное под конкретную задачу. «Но это все равно чертовски хороший код, и он позволяет вам не вдаваться в ненужные тонкости», - добавляет он. Чейер также говорит, что в его компании, где как раз работают столь ценные специалисты по ИИ, вряд ли будут пользоваться Bonsai - разве что для создания прототипа какой-либо из идей перед тем, как реализовать ее старым проверенным способом.

Bonsai помогает движению за появление доступа к ИИ у людей, не имеющих специальной подготовки

Хаммонд, в свою очередь, заверяет, что проигрыш в качестве при использовании Bonsai совсем не велик. «Производительность со временем увеличивается, – говорит он – в это просто нужно поверить». Когда-нибудь в это можно будет не только поверить, но и проверить.

У Bonsai большие планы на следующие несколько месяцев. Совсем скоро компания объявит о начале сотрудничества с производителем компонентов Nvidia, и клиенты Bonsai смогут получить более качественные результаты при использовании оборудования этой марки. Также компания опубликует информацию о своем договоре с центром Siemens TTB, который последние несколько месяцев тестировал систему Bonsai в области автоматизации и контроля производства.

Bonsai пытается решить проблемы, которые не смогли решить даже самые могущественные компании. «Мы работаем над многими играми», - добавляет Хаммонд и объясняет, что игры решают ключевые проблемы, которые планируют разрешить в Bonsai. «Некоторые игры не поддаются даже DeepMind. Хотя они научили свой алгоритм играть во множество игр помимо «Тенниса», пока их система еще не способна играть в «Пакмена».

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

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

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

Эта статья содержит то, что я усвоил, и, надеюсь, она будет полезна и для вас! Другие полезные статьи по теме:

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

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

Нейронные сети состоят из следующих компонентов:

  • входной слой, x
  • произвольное количество скрытых слоев
  • выходной слой, ŷ
  • набор весов и смещений между каждым слоем W и b
  • выбор для каждого скрытого слоя σ ; в этой работе мы будем использовать функцию активации Sigmoid

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

Создание класса Neural Network на Python выглядит просто:

Обучение нейронной сети

Выход ŷ простой двухслойной нейронной сети:

В приведенном выше уравнении, веса W и смещения b являются единственными переменными, которые влияют на выход ŷ.

Естественно, правильные значения для весов и смещений определяют точность предсказаний. Процесс тонкой настройки весов и смещений из входных данных известен как .

Каждая итерация обучающего процесса состоит из следующих шагов

  • вычисление прогнозируемого выхода ŷ, называемого прямым распространением
  • обновление весов и смещений, называемых

Последовательный график ниже иллюстрирует процесс:

Прямое распространение

Как мы видели на графике выше, прямое распространение - это просто несложное вычисление, а для базовой 2-слойной нейронной сети вывод нейронной сети дается формулой:

Давайте добавим функцию прямого распространения в наш код на Python-е, чтобы сделать это. Заметим, что для простоты, мы предположили, что смещения равны 0.

Однако нужен способ оценить «добротность» наших прогнозов, то есть насколько далеки наши прогнозы). Функция потери как раз позволяет нам сделать это.

Функция потери

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

Сумма квадратов ошибок - это среднее значение разницы между каждым прогнозируемым и фактическим значением.

Цель обучения - найти набор весов и смещений, который минимизирует функцию потери.

Обратное распространение

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

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

Напомним из анализа, что производная функции - это тангенс угла наклона функции.

Если у нас есть производная, то мы можем просто обновить веса и смещения, увеличив/уменьшив их (см. диаграмму выше). Это называется .

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

Фух! Это было громоздко, но позволило получить то, что нам нужно - производную (наклон) функции потерь по отношению к весам. Теперь мы можем соответствующим образом регулировать веса.

Добавим функцию backpropagation (обратного распространения) в наш код на Python-е:

Проверка работы нейросети

Теперь, когда у нас есть наш полный код на Python-е для выполнения прямого и обратного распространения, давайте рассмотрим нашу нейронную сеть на примере и посмотрим, как это работает.


Идеальный набор весов

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

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

Посмотрим на окончательное предсказание (вывод) из нейронной сети после 1500 итераций.

Мы сделали это! Наш алгоритм прямого и обратного распространения показал успешную работу нейронной сети, а предсказания сходятся на истинных значениях.

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

Финальные размышления

Я многому научился в процессе написания с нуля своей собственной нейронной сети. Хотя библиотеки глубинного обучения, такие как TensorFlow и Keras, допускают создание глубоких сетей без полного понимания внутренней работы нейронной сети, я нахожу, что начинающим Data Scientist-ам полезно получить более глубокое их понимание.

Я инвестировал много своего личного времени в данную работу, и я надеюсь, что она будет полезной для вас!

В этот раз я решил изучить нейронные сети. Базовые навыки в этом вопросе я смог получить за лето и осень 2015 года. Под базовыми навыками я имею в виду, что могу сам создать простую нейронную сеть с нуля. Примеры можете найти в моих репозиториях на GitHub. В этой статье я дам несколько разъяснений и поделюсь ресурсами, которые могут пригодиться вам для изучения.

Шаг 1. Нейроны и метод прямого распространения

Так что же такое «нейронная сеть»? Давайте подождём с этим и сперва разберёмся с одним нейроном.

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

Круг ниже обозначает искусственный нейрон. Он получает 5 и возвращает 1. Ввод - это сумма трёх соединённых с нейроном синапсов (три стрелки слева).

В левой части картинки мы видим 2 входных значения (зелёного цвета) и смещение (выделено коричневым цветом).

Входные данные могут быть численными представлениями двух разных свойств. Например, при создании спам-фильтра они могли бы означать наличие более чем одного слова, написанного ЗАГЛАВНЫМИ БУКВАМИ, и наличие слова «виагра».

Входные значения умножаются на свои так называемые «веса», 7 и 3 (выделено синим).

Теперь мы складываем полученные значения со смещением и получаем число, в нашем случае 5 (выделено красным). Это - ввод нашего искусственного нейрона.

Потом нейрон производит какое-то вычисление и выдает выходное значение. Мы получили 1, т.к. округлённое значение сигмоиды в точке 5 равно 1 (более подробно об этой функции поговорим позже).

Если бы это был спам-фильтр, факт вывода 1 означал бы то, что текст был помечен нейроном как спам.

Иллюстрация нейронной сети с Википедии.

Если вы объедините эти нейроны, то получите прямо распространяющуюся нейронную сеть - процесс идёт от ввода к выводу, через нейроны, соединённые синапсами, как на картинке слева.

Шаг 2. Сигмоида

После того, как вы посмотрели уроки от Welch Labs, хорошей идеей было бы ознакомиться с четвертой неделей курса по машинному обучению от Coursera , посвящённой нейронным сетям - она поможет разобраться в принципах их работы. Курс сильно углубляется в математику и основан на Octave, а я предпочитаю Python. Из-за этого я пропустил упражнения и почерпнул все необходимые знания из видео.

Сигмоида просто-напросто отображает ваше значение (по горизонтальной оси) на отрезок от 0 до 1.

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

Но на одних видео далеко не уедешь. Для полного понимания я решил закодить её самостоятельно. Поэтому я начал писать реализацию алгоритма логистической регрессии (который использует сигмоиду).

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

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

Шаг 3. Метод обратного распространения ошибки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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. Разрешается свободно копировать и цитировать данную статью при условии указания открытой активной ссылки на источник и сохранения авторства Руслана Тертышного.

Нейронных сетей. В качестве примера, созданы компоненты реализующие две нейросетевые парадигмы: рекуррентную нейронную сеть, в нашем случае – это сеть Хопфилда и многослойную нейронную сеть обучаемую по алгоритму обратного распространения ошибки (back propagation).

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

Иерархия классов

Существует три базовых класса TNeuron, TLayer, TNeuralNet. Все остальные являются производными от них. На рис.1 приведена иерархия классов, сплошными линиями показано наследование (стрелкой указан потомок), пунктирными в каких классах они используются.

TNeuron является базовым классом для нейронов, несет всю основную функциональность, имеет индексированное свойство Weights, представляющее собой весовые коэффициенты (синапсы), свойство Output, которое является выходом нейрона (результатом вычислений) и сумматор, роль которого, выполняет метод ComputeOut.

TNeuronHopf , потомок TNeuron, реализует нейрон используемый в нейронной сети Хопфилда, единственным отличием от базового класса, является использования активационной функции в перекрытом методе ComputeOut.

Следующим порожденным классом, является TNeuronBP служащий для программной реализации многослойных нейронных сетей. Аббревиатура BP в имени класса не должна вводить вас в заблуждение, что нейрон этого типа используется исключительно в сетях обучаемых по алгоритму обратного распространения, этим, мы лишний раз хотели подчеркнуть, что в нашем случае нейронная сеть обучается по этому алгоритму.
Переписан метод ComputeOut, использующий теперь нелинейную активационную функцию, которая реализована в виде индексированного свойства процедурного типа OnActivationF. Кроме того, добавлены два важных свойства, Delta – содержащая локальную ошибку и индексированное свойство PrevUpdate – содержащее величину коррекции весовых коэффициентов на предыдущем шаге обучения сети.

Основным назначением базового класса TLayer и его потомков TLayerHopf и TLayerBP является объединение нейронов в слой, для упрощения работы с нейронами.

Компонент TNeuralNet базовый компонент для всех видов нейронных сетей. TNeuralNet обеспечивает необходимую функциональность производных компонентов. Этот компонент поддерживает методы для работы со слоями сети (AddLayer, DeleteLayer) и методы для манипуляций с исходными данными (AddPattern, DeletePattern, ResetPatterns). Метод Init служит для построения нейронной сети. Большинство методов объявленных в разделе public в базовом компоненте и его потомках – виртуальные, что позволяет легко перекрывать их.
Компонент TNeuralNetHopf реализует нейронную сеть Хопфилда.

Дополнительно включены следующие методы: InitWeights – запоминает предъявленные образцы в матрице образов и метод Calc – вычисляет выход сети Хопфилда.

Компонент TNeuralNetBP реализует многослойную нейронную сеть обучаемую по алгоритму обратного распространения ошибки.

Дополнительно включены следующие методы: Compute – вычисляет выход нейронной сети, используется после обучения сети; TeachOffLine – обучает нейронную сеть. Компонент позволяет в режиме design-time, в окне Object Inspector, конструировать нейронную сеть добавляя или удаляя слои и нейроны в сети. Для этого используется редактор свойств NeuronsInLayer, имеющий следующий вид:

Совместимость с Neural Network Wizard

Следующим компонентом является TNeuralNetExtented порожденный от TNeuralNetBP, который обеспечивает полную совместимость с Neural Network Wizard. Дополнительно включены следующие методы: для записи (LoadPhase1, LoadPhase2, LoadPhase4, LoadNetwork) и чтения (SavePhase1, SavePhase2, SavePhase4, SaveNetwork) обученной нейронной сети в формате *.nnw; LoadDataFrom – загружает данные из текстового файла, а также метод NormalizeData нормализации входных и выходных данных; Train – для обучения нейронной сети; ComputeUnPrepData – для вычисления выхода сети, используется в том случае, если у вас входные значения ненормализованы.

Компонент позволяет в режиме design-time, в окне Object Inspector, выбирать нужные поля, а также задавать тип нормализации полей. Для этих целей используется редактор свойств, имеющий следующий вид:

Компонент TNeuralNetExtented один из самых мощных в библиотеке NeuralBase. Используя этот компонент, практически за считанные минуты можете получить готовое полнофункциональное приложение.

Демонстрационные программы

В качестве демонстрационных примеров приведены три программы, показывающие возможности предложенных компонентов.

Программа Recognition используя компонент TNeuralNetHopf , реализует нейронную сеть Хопфилда. Программа решает задачу распознавания образов. На вход сети подается некий образ, возможно искаженный или неполный и нейронная сеть восстанавливает образ, т.е. относит предъявляемый образ к одному из хранимых сетью образов, либо в случае неудачи, выдает новый образ, иногда называемый "химерой".

Программа XOR_Problem , реализует функцию "исключающее или", которая является стандартным тестом, после знаменитой работы Минского и Пейперта "Перцептроны". В основе программы лежит компонент TNeuralNetBP.

Программа EasyNNW , использующая компонент TNeuralNetExtented представляет собой аналог программы , единственным отличием от NNW является несколько "облегченный" интерфейс. Данный пример показывает, насколько легко и быстро, создаются программы реализующие нейронные сети с достаточно хорошей функциональностью на основе библиотеки компонентов NeuralBase.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows