Как создать собственную нейронную сеть с нуля на языке Python. Нейронные сети: какие бывают и как их используют бренды

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

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

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

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

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

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

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

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

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

1. Панель управления проектом . В принятых мной терминах под заданием понимается совокупность собственно нейронной сети, исходных данных для обучения, настроек параметров обучения и сохранения результатов. Панель управления проектом позволяет редактировать компоненты задания (кроме нейронной сети), управлять процессом обучения и контролировать результаты обучения сети. Также присутствуют возможности сохранения и загрузки заданий и готовых сетей. Отдельно отмечу наличие опции сохранения результатов. Если в проекте имеется загруженная / созданная сеть и загружен массив исходных данных то по параметрам сети происходит расчет и выгрузка результатов во внешний файл (таблицу значений или книгу Excel). Аналогично можно узнать результаты возвращаемые сетью для любого набора интерактивно введенных аргументов.

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

3. Подсистема анализа хода обучения . Подсистема очень проста и представляет собой график, демонстрирующий ход обучения сети в данном проекте. Шаг сбора статистики и общее число шагов обучения настраиваются в "Панели управления проектом". Статистику нельзя видеть в real time по ходу обучения. Она является такой же составной частью проекта, как сеть и массивы данных для обучения и будет обновлена и записана в проект по завершению обучения вместе с новыми параметрами сети. Соответственно если в загруженном проекте при предыдущем обучении была включена опция ведения статистики то просмотр графиков ошибок аппроксимации доступен сразу после загрузки задания (проекта).

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

Теперь немного расскажу о параметрах сети и о процессе обучения.

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

Алгоритм обучения - обратное распространение ошибки. За подробностями, если интересно, к Google.

Норма скорости обучения - адаптивная. На страте принимается значение, указанное в параметрах, но по ходу обучения скорость обучения может меняться. Принцип модификации скорости состоит в том, что в случае когда между шагами обучения направление градиента для ребра сети не меняется скорость обучения умножается на коэффициент К>1, а в случае изменения знака градиента множитель К становится <1. Таким образом, норма обучения хотя и остается важнейшим параметром обучения, но ее неправильный выбор может быть в значительной степени скорректирован модификаторами.

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

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

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

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

Теперь о способах запуска процесса обучения из формы обработки. Их всего 3:

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

2. Запуск через фоновое задание из внешней обработки. Думаю, что здесь все более или менее понятно. Естественно, что обработка должна быть зарегистрирована в справочнике дополнительных отчетов и обработок и в конфигурации должна присутствовать БСП версии не ниже 1.2.1.4. В этом случае у меня все прекрасно работает.

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

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

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

Что в приложенном архиве? Описание состава проекта сети (спецификация) для самостоятельной разработки проектов ( MS Word ), демо-файлы проекта и сети, а также набор из 2-х файлов демо данных. Данные - это таблицы значений с наборами аргументов и результатов.

Обработка выложена отдельным файлом для удобства обновления и замены новыми версиями. Самая важная часть дополнительных материалов - спецификация проекта сети содержится в справке обработки, так что в принципе можно скачивать только саму обработку для экономии $ m . Функционал и документацию при этом Вы получите в полном объеме.

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

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

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


Нейронная сеть - это последовательность нейронов, соединенных между собой синапсами. Структура нейронной сети пришла в мир программирования прямиком из биологии. Благодаря такой структуре, машина обретает способность анализировать и даже запоминать различную информацию. Нейронные сети также способны не только анализировать входящую информацию, но и воспроизводить ее из своей памяти. Заинтересовавшимся обязательно к просмотру 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, которая сохраняет баланс в вычислении ошибки.


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


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

Немного истории

Впервые понятие искусственных нейронных сетей (ИНС) возникло при попытке смоделировать процессы головного мозга. Первым серьезным прорывом в этой сфере можно считать создание модели нейронных сетей МакКаллока-Питтса в 1943 году. Учеными впервые была разработана модель искусственного нейрона. Ими также была предложена конструкция сети из этих элементов для выполнения логических операций. Но самое главное, учеными было доказано, что подобная сеть способна обучаться.

Следующим важным шагом стала разработка Дональдом Хеббом первого алгоритма вычисления ИНС в 1949 году, который стал основополагающем на несколько последующих десятилетий. В 1958 году Фрэнком Розенблаттом был разработан парцептрон - система, имитирующая процессы головного мозга. В свое время технология не имела аналогов и до сих пор является основополагающей в нейронных сетях. В 1986 году практически одновременно, независимо друг от друга американскими и советскими учеными был существенно доработан основополагающий метод обучения многослойного перцептрона . В 2007 году нейронные сети перенесли второе рождение. Британский информатик Джеффри Хинтоном впервые разработал алгоритм глубокого обучения многослойных нейронных сетей, который сейчас, например, используется для работы беспилотных автомобилей.

Коротко о главном

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

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

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

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

Сегодняшнее положение

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

На сегодняшний день рынок нейронных сетей огромен - это миллиарды и миллиарды долларов. Как показывает практика, большинство технологий нейросетей по всему миру мало отличаются друг от друга. Однако применение нейросетей - это очень затратное занятие, которое в большинстве случаев могут позволить себе только крупные компании. Для разработки, обучения и тестирования нейронных сетей требуются большие вычислительные мощности, очевидно, что этого в достатке имеется у крупных игроков на рынке ИТ. Среди основных компаний, ведущих разработки в этой области можно отметить подразделение Google DeepMind, подразделение Microsoft Research, компании IBM, Facebook и Baidu.

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

Почему нейросети еще далеки до человеческого мозга?

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

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

Итог

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

Для тех, кто хочет знать больше

  • Большая нейронная война: что на самом деле затевает Google
  • Как когнитивные компьютеры могут изменить наше будущее

В закладки

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

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

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

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

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

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

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

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

Кроткое видео о работе Teachable Machine

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

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

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