Бум нейросетей: Кто делает нейронные сети, зачем они нужны и сколько денег могут приносить. Начальные условия при настройке коэффициентов. Где используют нейронные сети

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

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

Стоит заметить, что хотя большинство этих аббревиатур общеприняты, есть и исключения. Под RNN иногда подразумевают рекурсивную нейронную сеть, но обычно имеют в виду рекуррентную. Также можно часто встретить использование аббревиатуры RNN, когда речь идёт про любую рекуррентную НС. Автокодировщики также сталкиваются с этой проблемой, когда вариационные и шумоподавляющие автокодировщики (VAE, DAE) называют просто автокодировщиками (AE). Кроме того, во многих аббревиатурах различается количество букв «N» в конце, поскольку в каких-то случаях используется «neural network», а в каких-то - просто «network».

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


Нейронные сети прямого распространения
(feed forward neural networks, FF или FFNN) и перцептроны (perceptrons, P) очень прямолинейны, они передают информацию от входа к выходу. Нейронные сети часто описываются в виде слоёного торта, где каждый слой состоит из входных, скрытых или выходных клеток. Клетки одного слоя не связаны между собой, а соседние слои обычно полностью связаны. Самая простая нейронная сеть имеет две входных клетки и одну выходную, и может использоваться в качестве модели логических вентилей. FFNN обычно обучается по методу обратного распространения ошибки, в котором сеть получает множества входных и выходных данных. Этот процесс называется обучением с учителем, и он отличается от обучения без учителя тем, что во втором случае множество выходных данных сеть составляет самостоятельно. Вышеупомянутая ошибка является разницей между вводом и выводом. Если у сети есть достаточное количество скрытых нейронов, она теоретически способна смоделировать взаимодействие между входным и выходными данными. Практически такие сети используются редко, но их часто комбинируют с другими типами для получения новых.

Сети радиально-базисных функций (radial basis function, RBF) - это FFNN, которая использует радиальные базисные функции как функции активации. Больше она ничем не выделяется 🙂

Нейронная сеть Хопфилда (Hopfield network, HN) - это полносвязная нейронная сеть с симметричной матрицей связей. Во время получения входных данных каждый узел является входом, в процессе обучения он становится скрытым, а затем становится выходом. Сеть обучается так: значения нейронов устанавливаются в соответствии с желаемым шаблоном, после чего вычисляются веса, которые в дальнейшем не меняются. После того, как сеть обучилась на одном или нескольких шаблонах, она всегда будет сводиться к одному из них (но не всегда - к желаемому). Она стабилизируется в зависимости от общей «энергии» и «температуры» сети. У каждого нейрона есть свой порог активации, зависящий от температуры, при прохождении которого нейрон принимает одно из двух значений (обычно -1 или 1, иногда 0 или 1). Такая сеть часто называется сетью с ассоциативной памятью; как человек, видя половину таблицы, может представить вторую половину таблицы, так и эта сеть, получая таблицу, наполовину зашумленную, восстанавливает её до полной.

Цепи Маркова (Markov chains, MC или discrete time Markov Chains, DTMC) - это предшественники машин Больцмана (BM) и сетей Хопфилда (HN). Их смысл можно объяснить так: каковы мои шансы попасть в один из следующих узлов, если я нахожусь в данном? Каждое следующее состояние зависит только от предыдущего. Хотя на самом деле цепи Маркова не являются НС, они весьма похожи. Также цепи Маркова не обязательно полносвязны.

Машина Больцмана (Boltzmann machine, BM) очень похожа на сеть Хопфилда, но в ней некоторые нейроны помечены как входные, а некоторые - как скрытые. Входные нейроны в дальнейшем становятся выходными. Машина Больцмана - это стохастическая сеть. Обучение проходит по методу обратного распространения ошибки или по алгоритму сравнительной расходимости. В целом процесс обучения очень похож на таковой у сети Хопфилда.

Ограниченная машина Больцмана (restricted Boltzmann machine, RBM) удивительно похожа на машину Больцмана и, следовательно, на сеть Хопфилда. Единственной разницей является её ограниченность. В ней нейроны одного типа не связаны между собой. Ограниченную машину Больцмана можно обучать как FFNN, но с одним нюансом: вместо прямой передачи данных и обратного распространения ошибки нужно передавать данные сперва в прямом направлении, затем в обратном. После этого проходит обучение по методу прямого и обратного распространения ошибки.

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

Разреженный автокодировщик (sparse autoencoder, SAE) - в каком-то смысле противоположность обычного. Вместо того, чтобы обучать сеть отображать информацию в меньшем «объёме» узлов, мы увеличиваем их количество. Вместо того, чтобы сужаться к центру, сеть там раздувается. Сети такого типа полезны для работы с большим количеством мелких свойств набора данных. Если обучать сеть как обычный автокодировщик, ничего полезного не выйдет. Поэтому кроме входных данных подаётся ещё и специальный фильтр разреженности, который пропускает только определённые ошибки.

Вариационные автокодировщики (variational autoencoder, VAE) обладают схожей с AE архитектурой, но обучают их иному: приближению вероятностного распределения входных образцов. В этом они берут начало от машин Больцмана. Тем не менее, они опираются на байесовскую математику, когда речь идёт о вероятностных выводах и независимости, которые интуитивно понятны, но сложны в реализации. Если обобщить, то можно сказать что эта сеть принимает в расчёт влияния нейронов. Если что-то одно происходит в одном месте, а что-то другое — в другом, то эти события не обязательно связаны, и это должно учитываться.

Шумоподавляющие автокодировщики (denoising autoencoder, DAE) - это AE, в которые входные данные подаются в зашумленном состоянии. Ошибку мы вычисляем так же, и выходные данные сравниваются с зашумленными. Благодаря этому сеть учится обращать внимание на более широкие свойства, поскольку маленькие могут изменяться вместе с шумом.


Сеть типа «deep belief»
(deep belief networks, DBN) - это название, которое получил тип архитектуры, в которой сеть состоит из нескольких соединённых RBM или VAE. Такие сети обучаются поблочно, причём каждому блоку требуется лишь уметь закодировать предыдущий. Такая техника называется «жадным обучением», которая заключается в выборе локальных оптимальных решений, не гарантирующих оптимальный конечный результат. Также сеть можно обучить (методом обратного распространения ошибки) отображать данные в виде вероятностной модели. Если использовать обучение без учителя, стабилизированную модель можно использовать для генерации новых данных.


Свёрточные нейронные сети
(convolutional neural networks, CNN) и глубинные свёрточные нейронные сети (deep convolutional neural networks, DCNN) сильно отличаются от других видов сетей. Обычно они используются для обработки изображений, реже для аудио. Типичным способом применения CNN является классификация изображений: если на изображении есть кошка, сеть выдаст «кошка», если есть собака - «собака». Такие сети обычно используют «сканер», не парсящий все данные за один раз. Например, если у вас есть изображение 200×200, вы не будете сразу обрабатывать все 40 тысяч пикселей. Вместо это сеть считает квадрат размера 20 x 20 (обычно из левого верхнего угла), затем сдвинется на 1 пиксель и считает новый квадрат, и т.д. Эти входные данные затем передаются через свёрточные слои, в которых не все узлы соединены между собой. Эти слои имеют свойство сжиматься с глубиной, причём часто используются степени двойки: 32, 16, 8, 4, 2, 1. На практике к концу CNN прикрепляют FFNN для дальнейшей обработки данных. Такие сети называются глубинными (DCNN).

Развёртывающие нейронные сети (deconvolutional networks, DN) , также называемые обратными графическими сетями, являются обратным к свёрточным нейронным сетям. Представьте, что вы передаёте сети слово «кошка», а она генерирует картинки с кошками, похожие на реальные изображения котов. DNN тоже можно объединять с FFNN. Стоит заметить, что в большинстве случаев сети передаётся не строка, а какой бинарный вектор: например, <0, 1> - это кошка, <1, 0> - собака, а <1, 1> - и кошка, и собака.

Каково сейчас состояние искусственного интеллекта, нейросетей, машинного обучения? Почему в последние буквально год-полгода началось такое активное обсуждение, брожение умов и всякие разговоры о том, что мы все умрем?

Очень классный вопрос! Я как раз об этом много думал. Давайте я попробую ответить развернуто.

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

Алгоритмы там были достаточно интересные. Одними из алгоритмов были нейронные сети. Такие простенькие персептроны, все четко. Нам говорили: “Ребята, нейронные сети – это классно, это романтично, это интересно. Скорее всего, за этим будущее, но это будущее достаточно далекое”. Это был 2010 год. Они проигрывали по всем фронтам другим алгоритмам анализа, которые более статистические. В основном за счет того, что они были неконтролируемы, у них куча ошибок, куча проблем по обучению.

Если переводить на человеческий язык, она может, например, попасть в зону комфорта или в локальный минимум, на математическом языке, и оттуда не выберется. Она говорит: “Мне так нравится. Я лучше не могу. Все. Пошли вон!”, хоть тряси, бей, мордуй ее. Из-за этого был достаточно большой пессимизм в отношении нейронных сетей. Пришли. Здорово. Вроде бы работает. Прикольненько. Наверно, за этим будущее. Мы пока не понимаем, что с этим делать.

Это уже была вторая итерация пессимизма. Первая была примерно в 80-х годах, когда их только открыли. По-моему, было правило обучения Хэбба. Они сделали примерно так, как обучается мозг, но только в очень примитивной модели нейронных сетей. Оно кое-как обучалось. Все: “Вау! Классно”. Но у этого правила (хебба) быстро вскрылось множество проблем, и в быту, как оказалось оно было не очень-то и применимым. Было много скепсиса, пессимизма, и на эти нейронные сети “забили” лет на 20, пока не придумали метод обучения, называемый “обратное распространения ошибки”.

Но в 1998-2003 году появилась интересная разработка. Называлась она “сверточная сеть”. Она долго лежала. Идея была простая – устроено, примерно, как в зрительной коре у человека. Идея простая. Мы берем огромное изображение, делим на маленькие квадратики и над каждым квадратиком проводим одну и ту же операцию. Мы не делаем нейрон, который связан, например, со всеми пикселями изображения. Он работает по маленьким квадратикам, причём на каждом из них одинаково. В итоге вычислительная нагрузка на нейронные сети упростилась. Обучать это дело стало проще. Точность повысилась. Самое главное – это все стало более-менее контролируемо.

И тут начались первые интересные заморочки у Гуглов и Яндексов. Причем стороны стали активно работать над этим примерно в 2013 году. Первое – распознавание котиков на YouTube.

Это сверточные нейронные сети. Они не такие страшные. Они работают даже понятнее, чем то, что я описал в статье. Нужно только немного разобраться. Например, относительно квадратика 10х10 пикселей один нейрон может сказать: “Здесь есть диагональ слева направо”. А второй нейрон будет говорить: “Здесь есть элемент диагонали справа налево”. Соответственно, диагоналями, горизонтальными, вертикальными линиями мы уже превращаем изображение из пиксельного почти в векторное. Ничего себе! Взяли и превратили, уже не в пикселях говорим, а в диагоналях. Классно! Естественно, она работала круче. Это, с одной стороны.

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

На практике это означает, что мы что-то рандомно меняем, проверяем. Как в жизни. Что-то поменяли, что-то попробовали. О! Лучше. Давайте двигаться в этом направлении. Не получилось. Давайте другое. У этих двух есть хорошие черты, давайте их объединим. Как-то так – начали учить более стохастически, случайным образом. Начали получать очень даже неплохие результаты. Более того, эти результаты не так, как прежде, зависели от сложности архитектуры сетей.

Потом набежало множество очень умных людей, и появился термин “Deep Learning”. Это не только генетический алгоритм. Это целый Клондайк алгоритмов. Где-то они используют математику. Где-то они используют генетические алгоритм. Где-то они могут использоваться еще какой-то алгоритм. Все стало креативненько. Такие сети начали работать с распознаванием статических изображений. Вы, наверно, знаете эту историю. Взяли породы животных – изображения 122-х пород собак. С течением времени, к 2015 году, сеть стала определять породу животных (собак) по фотографии лучше собаководов.

Как это работало?

История была в том, что все выражали скепсис, говорили: “Обработка изображений – это только на людях”. Есть один сайт с обучающими выборками. Там было 122 породы собак – много фотографий на каждую породу. Показали это все в сеточке. Было соревнование. Лаборатории, которые делали алгоритмы (не нейронные сети, а алгоритмы распознавания изображений), давали 80% безошибочного распознавания. Это очень хороший показатель для любого распознавания. 80-86% – это хороший показатель распознавания.

Ребята, которые занимались только нейронными сетями, сначала (по-моему, в 2013 году) показали примерно 80%. В 2014 году они получили 87%, обогнали те лаборатории. А вот к 2015 году они показали 95%. Притом, что люди-собаководы распознают только 92%. Ты ей показал фрагмент изображения собаки, а она просто по положению шерсти (даже непонятно как, какие признаки она для себя выделила) уже знает, какая это порода. Более того, она говорит вероятность идентификации этих пород. Работает обычная сеть значительно стабильнее человека. Прежде всего, сразу немного испугались люди: “Ё-мое! Это означает, что можно заменять операторов на электроэнергетических подстанциях и во многих других местах”. Это первая технология, которая “взорвалась”. Она называется “сверточные сети”.

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

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

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

Я так долго подводил, чтобы вы не боялись этих слов, понимали, что это такое. Когда их начали соединять, люди были поражены. LSTM-сети принадлежат к классу сетей, называемых “рекуррентные”. LSTM – это одна из технологий. Самое интересное, что может делать эта рекуррентная сеть – ей можно на вход подавать слова. У нее каждое слово – это какое-то число. Она его каким-то образом векторизировала. Каждое слово – это число. Ей можно на ход подавать последовательность слов.

Соответственно, например, некоторые чат-боты, которые сейчас разрабатываются, делаются так: на ход подается последовательность слов, а с выхода идет последовательность ответов – точно так же, шаг за шагом. “Я тебя прибью”. Сетка говорит: “Пошел ты на…”. Она не знает, что это такое. Она просто знает, что в такой ситуации нужно отвечать так, иначе нарушатся какие-то критерии. Потом отвечаешь ей: “А не пошла бы ты сама!”. Она помнит, что ответила, и говорит: “Нет, не пойду”.

Сейчас это все еще не коробочные решения. Это решения для Microsoft, Google, Яндекса. У меня лично такого нет. Но ребята из Амстердама поприкалывались по-черному. Что они сделали? Они вышли на улицу и сняли на видео происходящее на улочках. Люди ездят, какие-то улочки, народ бухает, кто-то куда-то бежит, женщина спешит в магазин – обычный день, ничего интересного. Взяли это видео, принесли домой. Дальше они соединили сверточные и рекуррентные сети. Сверточные анализируют изображения. Рекуррентные дают описания. В итоге у них получилась программка, которая в текстовом виде, причем в достаточно красивом, начинает описывать: “Женщина едет туда-то. Велосипедист едет туда-то”.

Ребята накинулись на эти технологии и начали творить. Мы делаем коротенькое описание истории, например: “Мужик жил в пустыне”, что-то еще. А сеть дает полное развернутое описание этой ситуации, фантазируя, что происходит. Они ей “скормили” все романы, которые только есть, и она начала в достаточно красивом виде писать эссе на страницу. Ты можешь ей “скормить” фотографию или какое-то маленькое описание ситуации. Она тебе – развернутую ситуацию: “Он опаздывал на автобус, но не успел”. Причем даже не на уровне ребенка, а на уровне достаточно взрослого подростка. Это поражает.

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

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

Сейчас больше нет игр. Gооgle сейчас развлекается тем, что хочет пустить в нейронную сеть StarCraft. Мой брат, являясь профессиональным геймером в StarCraft, говорит: “Катастрофа!”, потому что известно, что с неограниченным микроконтролем 20 зерлингами(читай – пешками) можно снести 10 танков. Люди, даже корейцы, будут уже не конкурентоспособны.

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

Последнее, самое жесткое, что есть. Мы, люди, любим себя. Но люди, во-первых, не могут так успешно менять себя под окружающую ситуацию, а во-вторых, у нас всегда очень мало информации. Например, когда недавно мы учили одну сетку для того чтобы просто искать синонимы и близкие по смыслу слова, мы ей “скормили” 1 гигабайт Википедии. Для того чтобы усвоить, “переварить” 1 гигабайт Википедии на стареньком Макбуке, ей понадобилось 4 часа, все романы на русском еще 8 часов. А вся коллекция романов художественной литературы, написанной в России на русском языке, содержит примерно 15 гигабайт, и весь корпус весь Википедии содержит 5 гигабайт. Итого за 3 дня такая сетка “переварит” все, точнее – основное, написанное людьми на русском языке. Она будет знать о русском языке все. На это ей понадобится несколько дней.

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

Спасибо за отличный рассказ. Сейчас нейронные сети “заточены” на выполнение каких-то определенных задач. Если сеть умеет распознавать котиков, она уже не может распознавать собак или если она пишет романы на русском, то распознавать котиков она тоже не может. Это правильно?

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

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

Не очень понятно. Сетке “в детстве” показывали котиков, и у нее от этого травма, а пик температуры на графике напоминает уши котиков, и она от этого замкнется. Почему невозможна такая ситуация?

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

Фактически, чтобы воспроизвести человека, нам понадобится много-много таких искусных нейронных сетей, которые будут последовательно или параллельно соединяться в подобие человеческого мозга. Я правильно понимаю?

Если поставить цель – воспроизвести подобие человека с руками, ногами и всем остальным. Серьезно. С искусственным интеллектом.

Я говорю о разуме.

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

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

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

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

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

В большинстве случаев – да. Если вы , вы помните, что я расписал 9 нейрончиков – как работает каждый из них. Их было 9, но это совсем утрированный пример. Во-первых, повторю еще раз то, что там было. То, что происходит на скрытом слое, никогда не формализуется человеком. Мы просто говорим: “3 на 3. Вот такие три входа, такие три выхода. Вот пары: как было, как должно быть. Учись”. Что она делает на этих скрытых слоях – никто не знает.

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

Goto – главное.

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

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

К сожалению, нет. Правила – не таблица, никакого “if” там нет. Там набор коэффициентов и порогов, то есть это огромное количество чисел. Например, в сети 3 на 3, о которой я говорил, может быть порядка 20-ти чисел, которые входят в настройки. В сети 10 тысяч на 100 таких коэффициентов будут миллиарды. Все.

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

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

Один нейрон говорит: “Я распознал какой-то абстрактный образ А”. Второй нейрон говорит: “Я распознал какой-то абстрактный образ Б”. Третий нейрон говорит: “Я не распознал абстрактный образ С”. Выходной нейрон спрашивает: “Насколько хорошо вы их распознали?”. У них, соответственно, точность 80, 90 и 10 процентов. Выходной нейрон говорит: “Значит, с вероятностью 75% это кошка”.

Теперь у вас немой вопрос: “Что за абстрактный образ А?”. Я говорю, что не знаю, что это за абстрактный образ А. Этот абстрактный образ А пришел еще из каких-то 20-ти подабстрактных образов или их отсутствия. А они, в свою очередь уже пришли из того, что где-то есть диагональка, которая пересекается с другой диагональкой. Наверно, аналитически мы сможем понять – похоже это на ушко, причем ушко кошки, потому что у собаки будут не диагональки, а что-то размытое, висящее и дурно пахнущее. Решение принимается примерно так.

Нейронная сеть – это всего лишь способ превратить любую логику в набор коэффициентов. Но когда мы настроили эти коэффициенты, мы уже не можем анализировать эту логику. Это слишком сложно для человеческого восприятия. Особенно потому, что мы привыкли анализировать что-то в четкой логике. Если что, у нас на это настроено левое полушарие. Если я подойду и ударю боксера, то, скорее всего, мне будет плохо. На самом деле, мы думаем даже не так. Мы думаем: “Мне будет плохо”. Мы не оцениваем возможность боксера.

А здесь получается нечеткая логика. Если я подойду к боксеру с этого угла, в этой ситуации, при этом боксер будет немного пьян, а освещение будет такое, вероятность “получить в табло” будет 35%. Мы называем это интуицией. У нас для этого есть правое полушарие мозга. Оно отлично отрабатывает. Когда мы ничего не понимаем, мы называем это “религия”, “магия” или “женская логика”, если нам это нравится или не нравится. Или кого-то называем гением. Мы не можем анализировать наши поступки. То же самое и здесь.

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

Здесь все очень просто. Так получилось, что я как раз 5 лет работал в электроэнергетике, как раз на системах управления. У нас же есть не только система принятия решения. Например, сейчас компьютерная. Там стоит релейная автоматика, то есть некоторые дублирующие системы. Там три системы. Релейная автоматика. Она работает уж совсем просто. Температура больше – это то-то, делать се-то, все. Есть автоматическая система управления. Это компьютер. Сейчас там логика запрограммирована программистами. Есть, в конце концов, сонный дежурный, который развлекается тем, что играет в пасьянс. Как ему ни запрещают, он все равно найдет способ поиграть в пасьянс.

Мы можем спланировать как угодно. Лично я делал бы так. Я бы оставил релейную автоматику. По компьютерной автоматике у нас есть состояния консистентное, не консистентное. Например, при повышении температуры реактора, если повышение температуры за последние несколько часов будет в такой-то точке, то мне нельзя держать стержни менее чем на таком уровне. Это прописывается в ГОСТах. Соответственно, когда мы делаем не консистентное состояние, мы из нечеткой логики переходим в четкую.

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

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

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

Мне кажется, но это уже совсем не четкий ответ, как на примере с го, все может случиться в любую минуту. Я как раз слушал лекцию на эту тему. Все может случиться в любой момент. Мне кажется, что это примерно, как с развитием персональных компьютеров. Первые персональные компьютеры у нас появились на Аполлоне. Apple II, который серьезно пошел в массы, появился, по-моему, через 8 лет. Аполлоны 1969 года, Apple II, по-моему, 1977. До этого появилась еще какая-то IВМ. Сейчас нейронные сети уже, наверно, постарше, чем Apple II, но я как программист могу вам сказать, что нет коробочных решений, которые я могу быстро развернуть и понять. Когда они появятся? Я предполагаю, что это произойдет примерно в течение пяти лет. Почему я назвал именно эту цифру? Потому что это прогнозы относительно того, когда роботы-автомобили спокойно выйдут на территорию Америки, начнут ездить.

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

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

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

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

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

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

Но вообще проблема – чем будут заниматься люди – очень острая. Это очень большой вопрос.

Сегодня я пишу программу. Вы, как я понимаю, пишите статьи? Правильно я понимаю?

Нас всех заменят?

Да. Это не шутки. Помните, раньше люди сами вязали свитера? Я недавно был в Непале, и купил вязаный свитер hand made. Ничем не отличается от не вязаного, но вроде бы классно. В России можно купить. Он будет стоить дорого. Примерно то же самое. При этом не факт, что hand made будет лучше. Я думаю, что мы с вами не захотим ездить на автомобиле, собранном вручную.

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

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

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

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

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

Это спорный вопрос – можно ли плохой музыкой убить.

Я с вами согласен.

Хорошо. Следующий вопрос. Творческие задачи тоже будут решены. А есть ли какие-нибудь ограничения, где неприменимы навыки или возможности искусственного интеллекта? Или как говорили в кино: “Будет все одно сплошное телевидение”, будет один сплошной искусственный интеллект и нейронные сети. Есть какие-то области, где все-таки это не будет эффективно работать?

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

Я долго об этом думал и прихожу к выводу, что постепенно нейронные сети будут делать так. Сначала давайте все-таки оптимизируем производство. Давайте. Подключим к ней все станки. Она будет давать экспертное решение, а люди будут определять, правильное оно или нет. Подключили. А давайте всю нашу корпорацию Google или Apple “посадим” на нее. Она будет смотреть и думать, какие зарплаты устанавливать, мониторить рынок – продавать акции или покупать акции, заниматься высокочастотным трейдингом и так далее. Давайте? Давайте. Сделали. А потом давайте она будет помогать нашим политикам. Людей очень много. Известно, что хороший политик – информированный политик. Нам нужна экспертная система. Поможет? Поможет, сделаем.

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

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

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

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

Конечно, есть. Я имею в виду, что пока не найден путь, как эту “коробочку” принести в бизнес, но в интернете система заработала. Это инструменты немного более низкого уровня. Я точно знаю два таких инструмента. Здесь еще зависит от языка программирования. Первый – самая классная штука – это Word2Vec – буквально “словарь-вектор”. В чем заключается идея? Ты ей “кормишь” огромные корпуса знаний (это то, чем занимался я), она превращает слова в вектора, и мы можем делать с ними арифметические операции.

У меня был очень смешной пример. Я беру такое словосочетание: “мальчик плюс девочка”. Она говорит: “Близкие слова: жених”. Я: “Классно”. У нее большой список слов, но одно из первых – “жених”. Молодец. “Девочка плюс мальчик”. Она: “Мисс, миссис”. Примерно правильно поняла. Но дальше самое интересное. Я говорю: “Девочка минус мальчик”. И тут началось то, от чего я заплакал. Девочка минус мальчик – это “оставлено, зафиксировано, налажено, ликвидировано, развернуто”. Я говорю: “А мальчик минус девочка?”, и сеть мне неоднозначно – “магистратура”.

Логично.

Я говорю: “ОК. Близкие слова к слову “глупость”. Она говорит: “Радость, безумие, чувственность, грусть, доброта, любовь, красота, субъективность”. Я говорю: “Классно”. Пошел по другому пути. Там есть такая штука: если А – это В, то С – это… Пример. Если Париж – это Франция, то Рим – это…? Она отвечает: “Италия”. Я говорю: “ОК. Если вино – это весело, то водка – это…?” – “Глупо”. Я говорю: “Ладно”. Она начала еще больше угорать. Я: “ОК. Мальчик хороший, а девочка…?” Она: “Плохая”. Я: “Хорошо. Девочка хорошая, а мальчик…?” – “Лучше”. Это Word2Vec. Очень угарная штука. Безумно. Нужно немного разобраться с ней, и можно зависнуть в ней надолго. Она существует для того чтобы понимать эмоциональные оттенки текста. Например, негативный комментарий пользователь оставил или нет. Это первое.

Второй очень классный из базовых конструкторов open source – Aforge.net . Это открытая библиотека. В ней всякие генетические алгоритмы, целый Клондайк. С ней можно делать много интересного.

Самое интересное баловство с нейронными сетями – это генетические алгоритмы для создания живых существ. Как их делают? Создают маленькое живое существо, которое должно передвигаться, уворачиваться от хищников и жрать еду. В лучшем случае создают два эволюционных существа. Одно – это жертва, а второе – хищник. У него есть сенсор. Условно сенсоры – дальномеры. Показывает, что впереди. Существо может поворачиваться направо, налево, идти вперед, назад и тратить на это еду. Мы задаем физический мир. Соединяем все сенсоры с двигателем через нейронную сеть и говорим: “Учить”. Соответственно, кого-то съедают, кто-то дает потомство. Через некоторое время мы получаем красивую бактерию. Они друг от друга уворачиваются, гоняются друг за другом. Тактику охоты могут выработать.

Либо второй вариант. Это было давно. На Хабре очень популярный пост. Вид сбоку: из колесиков и планочек нужно было собрать типа багги, которая должна была проехать по заданной карте как можно дальше. Если она проезжает далеко, она дает больше потомства. Если проезжает недалеко – меньше потомства. Постепенно там сами по себе создавались такие супер крутые транспортные средства, и все становилось хорошо. Вот то, что я могу порекомендовать, чтобы побаловаться, попробовать эти источники.

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

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

Упрощение

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

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

Биологическая структура → схема

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

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

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

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

Электрические сигналы → числа

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

Электрический сигнал всегда будет электрическим сигналом. Концептуально ничего не изменяется. Но что же тогда меняется? Меняется величина этого электрического сигнала (сильнее/слабее). А любую величину всегда можно выразить числом (больше/меньше).

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

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

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

Синапсы → веса связей

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

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

Это ключевой момент в концепции искусственных нейронных сетей, я объясню его подробнее. Посмотрите на картинку ниже. Теперь каждой черной стрелке (связи) на этой картинке соответствует некоторое число ​\(w_i \) ​ (вес связи). И когда сигнал проходит по этой связи, его величина умножается на вес этой связи.

На приведенном выше рисунке вес стоит не у каждой связи лишь потому, что там нет места для обозначений. В реальности у каждой ​\(i \) ​-ой связи свой собственный ​\(w_i \) ​-ый вес.

Искусственный нейрон

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

На рисунке ниже представлена полная модель искусственного нейрона.

Не пугайтесь, ничего сложного здесь нет. Давайте рассмотрим все подробно слева направо.

Входы, веса и сумматор

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

Поступившие на входы сигналы умножаются на свои веса. Сигнал первого входа ​\(x_1 \) ​ умножается на соответствующий этому входу вес ​\(w_1 \) ​. В итоге получаем ​\(x_1w_1 \) ​. И так до ​\(n \) ​-ого входа. В итоге на последнем входе получаем ​\(x_nw_n \) ​.

Теперь все произведения передаются в сумматор. Уже исходя из его названия можно понять, что он делает. Он просто суммирует все входные сигналы, умноженные на соответствующие веса:

\[ x_1w_1+x_2w_2+\cdots+x_nw_n = \sum\limits^n_{i=1}x_iw_i \]

Математическая справка

Сигма – Википедия

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

Рассмотрим простейший вариант записи:

\[ \sum\limits^5_{i=1}i=1+2+3+4+5 \]

Таким образом снизу сигмы мы присваиваем переменной-счетчику ​\(i \) ​ стартовое значение, которое будет увеличиваться, пока не дойдет до верхней границы (в примере выше это 5).

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

Пусть у нас есть ​\(n \) магазинов. У каждого магазина есть свой номер: от 1 до ​\(n \) ​. Каждый магазин приносит прибыль. Возьмем какой-то (неважно, какой) ​\(i \) ​-ый магазин. Прибыль от него равна ​\(p_i \) ​.

\[ P = p_1+p_2+\cdots+p_i+\cdots+p_n \]

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

\[ P=\sum\limits^n_{i=1}p_i \]

Словами: «Просуммируй прибыли всех магазинов, начиная с первого и заканчивая ​\(n \) ​-ым». В виде формулы это гораздо проще, удобнее и красивее.

Результатом работы сумматора является число, называемое взвешенной суммой.

Взвешенная сумма (Weighted sum ) (​\(net \) ​) - сумма входных сигналов, умноженных на соответствующие им веса.

\[ net=\sum\limits^n_{i=1}x_iw_i \]

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

Пример

Для понимания роли последнего компонента искусственного нейрона – функции активации – я приведу аналогию.

Давайте рассмотрим один искусственный нейрон. Его задача – решить, ехать ли отдыхать на море. Для этого на его входы мы подаем различные данные. Пусть у нашего нейрона будет 4 входа:

  1. Стоимость поездки
  2. Какая на море погода
  3. Текущая обстановка с работой
  4. Будет ли на пляже закусочная

Все эти параметры будем характеризовать 0 или 1. Соответственно, если погода на море хорошая, то на этот вход подаем 1. И так со всеми остальными параметрами.

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

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

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

Умножаем веса входов на сигналы соответствующих входов:

Взвешенная сумма для такого набора входных сигналов равна 6:

\[ net=\sum\limits^4_{i=1}x_iw_i = 5 + 0 + 0 + 1 =6 \]

Вот на сцену выходит функция активации.

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

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

Она преобразует взвешенную сумму в какое-то число, которое и является выходом нейрона (выход нейрона обозначим переменной ​\(out \) ​).

Для разных типов искусственных нейронов используют самые разные функции активации. В общем случае их обозначают символом ​\(\phi(net) \) ​. Указание взвешенного сигнала в скобках означает, что функция активации принимает взвешенную сумму как параметр.

Функция активации (Activation function )(​\(\phi(net) \) ​) - функция, принимающая взвешенную сумму как аргумент. Значение этой функции и является выходом нейрона (​\(out \) ​).

Функция единичного скачка

Самый простой вид функции активации. Выход нейрона может быть равен только 0 или 1. Если взвешенная сумма больше определенного порога ​\(b \) ​, то выход нейрона равен 1. Если ниже, то 0.

Как ее можно использовать? Предположим, что мы поедем на море только тогда, когда взвешенная сумма больше или равна 5. Значит наш порог равен 5:

В нашем примере взвешенная сумма равнялась 6, а значит выходной сигнал нашего нейрона равен 1. Итак, мы едем на море.

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

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

Графически эту функцию активации можно изобразить следующим образом.

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

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

\[ out(net) = \begin{cases} 0, net < b \\ 1, net \geq b \end{cases} \]

В этой записи нет ничего сложного. Выход нейрона (​\(out \) ​) зависит от взвешенной суммы (​\(net \) ​) следующим образом: если ​\(net \) ​ (взвешенная сумма) меньше какого-то порога (​\(b \) ​), то ​\(out \) ​ (выход нейрона) равен 0. А если ​\(net \) ​ больше или равен порогу ​\(b \) ​, то ​\(out \) ​ равен 1.

Сигмоидальная функция

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

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

Итак… самая часто используемая в нейронных сетях сигмоида - логистическая функция .

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

А вот так она записывается аналитически:

\[ out(net)=\frac{1}{1+\exp(-a \cdot net)} \]

Что за параметр ​\(a \) ​? Это какое-то число, которое характеризует степень крутизны функции. Ниже представлены логистические функции с разным параметром ​\(a \) ​.

Вспомним наш искусственный нейрон, определяющий, надо ли ехать на море. В случае с функцией единичного скачка все было очевидно. Мы либо едем на море (1), либо нет (0).

Здесь же случай более приближенный к реальности. Мы до конца полностью не уверены (в особенности, если вы параноик) – стоит ли ехать? Тогда использование логистической функции в качестве функции активации приведет к тому, что вы будете получать цифру между 0 и 1. Причем чем больше взвешенная сумма, тем ближе выход будет к 1 (но никогда не будет точно ей равен). И наоборот, чем меньше взвешенная сумма, тем ближе выход нейрона будет к 0.

Например, выход нашего нейрона равен 0.8. Это значит, что он считает, что поехать на море все-таки стоит. Если бы его выход был бы равен 0.2, то это означает, что он почти наверняка против поездки на море.

Какие же замечательные свойства имеет логистическая функция?

  • она является «сжимающей» функцией, то есть вне зависимости от аргумента (взвешенной суммы), выходной сигнал всегда будет в пределах от 0 до 1
  • она более гибкая, чем функция единичного скачка – ее результатом может быть не только 0 и 1, но и любое число между ними
  • во всех точках она имеет производную, и эта производная может быть выражена через эту же функцию

Именно из-за этих свойств логистическая функция чаще всего используются в качестве функции активации в искусственных нейронах.

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

Однако есть и еще одна сигмоида – гиперболический тангенс. Он применяется в качестве функции активации биологами для более реалистичной модели нервной клетки.

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

Функция записывается следующим образом:

\[ out(net) = \tanh\left(\frac{net}{a}\right) \]

В данной выше формуле параметр ​\(a \) ​ также определяет степень крутизны графика этой функции.

А вот так выглядит график этой функции.

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

Что мы узнали?

Теперь вы получили полное представление о внутренней структуре искусственного нейрона. Я еще раз приведу краткое описание его работы.

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

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

Сформулируем теперь самое короткое описание работы нейрона – его математическую модель:

Математическая модель искусственного нейрона с ​\(n \) ​ входами:

где
​\(\phi \) ​ – функция активации
\(\sum\limits^n_{i=1}x_iw_i \) ​ – взвешенная сумма, как сумма ​\(n \) ​ произведений входных сигналов на соответствующие веса.

Виды ИНС

Мы разобрались со структурой искусственного нейрона. Искусственные нейронные сети состоят из совокупности искусственных нейронов. Возникает логичный вопрос – а как располагать/соединять друг с другом эти самые искусственные нейроны?

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

Однослойные нейронные сети

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

Выглядит однослойная нейронная сеть следующим образом:

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

Нейроны соединены друг с другом стрелками. Над стрелками расположены веса соответствующих связей (весовые коэффициенты).

Однослойная нейронная сеть (Single-layer neural network ) - сеть, в которой сигналы от входного слоя сразу подаются на выходной слой, который и преобразует сигнал и сразу же выдает ответ.

Многослойные нейронные сети

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

Такая структура нейронных сетей копирует многослойную структуру определенных отделов мозга.

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

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

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

Многослойная нейронная сеть (Multilayer neural network ) - нейронная сеть, состоящая из входного, выходного и расположенного(ых) между ними одного (нескольких) скрытых слоев нейронов.

Сети прямого распространения

Можно заметить одну очень интересную деталь на картинках нейросетей в примерах выше.

Во всех примерах стрелки строго идут слева направо, то есть сигнал в таких сетях идет строго от входного слоя к выходному.

Сети прямого распространения (Feedforward neural network ) (feedforward сети) - искусственные нейронные сети, в которых сигнал распространяется строго от входного слоя к выходному. В обратном направлении сигнал не распространяется.

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

Однако никто не запрещает сигналу идти и в обратную сторону.

Сети с обратными связями

В сетях такого типа сигнал может идти и в обратную сторону. В чем преимущество?

Дело в том, что в сетях прямого распространения выход сети определяется входным сигналом и весовыми коэффициентами при искусственных нейронах.

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

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

Сети с обратными связями (Recurrent neural network ) - искусственные нейронные сети, в которых выход нейрона может вновь подаваться на его вход. В более общем случае это означает возможность распространения сигнала от выходов к входам.

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

Теперь давайте чуть более подробно рассмотрим вопрос обучения нейронной сети. Что это такое? И каким образом это происходит?

Что такое обучение сети?

Искусственная нейронная сеть – это совокупность искусственных нейронов. Теперь давайте возьмем, например, 100 нейронов и соединим их друг с другом. Ясно, что при подаче сигнала на вход, мы получим что-то бессмысленное на выходе.

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

Что мы можем менять в нейронной сети?

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

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

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

Остается только один вариант – менять веса связей .

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

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

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

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

Именно с этой целью и создаются обучающие выборки .

Обучающая выборка (Training set ) - конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит обучение сети.

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

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

Тестовая выборка (Testing set ) - конечный набор входных сигналов (иногда вместе с правильными выходными сигналами), по которым происходит оценка качества работы сети.

Мы поняли, что такое «обучение сети» – подбор правильного набора весов. Теперь возникает вопрос – а как можно обучать сеть? В самом общем случае есть два подхода, приводящие к разным результатам: обучение с учителем и обучение без учителя.

Обучение с учителем

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

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

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

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

Где взять правильные ответы?

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

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

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

Обучение без учителя

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

Что же происходит при таком обучении сети? Оказывается, что при таком «обучении» сеть начинает выделять классы подаваемых на вход сигналов. Короче говоря – сеть начинает кластеризацию.

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

Обучение без учителя (Unsupervised learning ) - вид обучения сети, при котором сеть самостоятельно классифицирует входные сигналы. Правильные (эталонные) выходные сигналы не демонстрируются.

Выводы

В этой главе вы узнали все о структуре искусственного нейрона, а также получили полное представление о том, как он работает (и о его математической модели).

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

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

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

Вопросы и задачи

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

Опишите упрощения ИНС по сравнению с биологическими нейросетями.

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

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

Функцию активации часто обозначают за ​\(\phi(net) \) ​.

Запишите математическую модель искусственного нейрона.

Искусственный нейрон c ​\(n \) ​ входами преобразовывает входной сигнал (число) в выходной сигнал (число) следующим образом:

\[ out=\phi\left(\sum\limits^n_{i=1}x_iw_i\right) \]

Чем отличаются однослойные и многослойные нейронные сети?

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

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

В чем отличие feedforward сетей от сетей с обратными связями?

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

Что такое обучающая выборка? В чем ее смысл?

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

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

Что понимают под обучением сети?

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

Что такое обучение с учителем и без него?

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

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

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

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

Схема типового искусственного нейрона

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

Рис. 1.Типовой искусственный нейрон

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

Структура сети с обратным распространением" src="https://libtime.ru/uploads/images/00/00/01/2014/06/27/set-s-obratnym-rasprostraneniyem.png.pagespeed.ce.O_0jCrJsLr.png" alt="Структура сети с обратным распространением" width="450" height="370">

Рис. 2. Сеть с обратным распространением

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

Характеристики нейронных сетей

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

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

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

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

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


Нейронная сеть как средство решения задачи

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

  1. Память нейронной сети является отказоустойчивой. При удалении отдельных частей нейронной сети происходит лишь снижение качества информации, в ней сохраняется, но не полное ее исчезновение. Это происходит потому, что информация хранится в распределенной форме.
  2. Качество информации в нейронной сети, которая подлежит сокращению, снижается постепенно, пропорционально той части сети, была удалена. Катастрофической потери информации не происходит.
  3. Данные в нейронной сети хранятся естественным образом с помощью ассоциативной памяти. Ассоциативной памятью называют такую память, в которой достаточно выполнить поиск частично представленных данных, чтобы полностью восстановить всю информацию. В этом состоит отличие ассоциативной памяти от обычной памяти, в которой получение данных осуществляется путем указания точного адреса соответствующих элементов памяти.
  4. позволяют выполнять экстраполяцию и интерполяцию на основе информации, хранящейся в них. То есть, обучение позволяет придать сети способности осуществлять поиск важных особенностей или связей в данных. После этого сеть в состоянии экстраполировать и выявлять связи в новых данных, что к ней поступают. Например, в одном эксперименте было проведено обучение нейронной сети на гипотетическом примере. После окончания обучения сеть приобрела способность правильно отвечать на вопросы, по которым обучение не проводилось.
  5. Нейронные сети — пластичны. Даже после удаления определенного количества нейронов может быть проведено повторное обучение сети до ее первичного уровня (конечно, если в ней осталась достаточное количество нейронов). Такая особенность является также характерной для мозга человека, в котором могут быть повреждены отдельные части, но со временем, с помощью обучения, достигнута первичного уровня навыков и знаний.

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

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

В первой половине 2016 года мир услышал о множестве разработок в области нейронных сетей - свои алгоритмы демонстрировали Google (сеть-игрок в го AlphaGo), Microsoft (ряд сервисов для идентификации изображений), стартапы MSQRD, Prisma и другие.

В закладки

Редакция сайт рассказывает, что из себя представляют нейронные сети, для чего они нужны, почему захватили планету именно сейчас, а не годами раньше или позже, сколько на них можно заработать и кто является основными игроками рынка. Своими мнениями также поделились эксперты из МФТИ, «Яндекса», Mail.Ru Group и Microsoft.

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

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

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

Руководитель направления «Поиск Mail.ru» в Mail.Ru Group Андрей Калинин отмечает, что нейронные сети способны решать такие же задачи, как и другие алгоритмы машинного обучения, разница заключается лишь в подходе к обучению.

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

Директор программ технологического сотрудничества Microsoft в России Влад Шершульский замечает, что сейчас нейросети применяются повсеместно: «Например, многие крупные интернет-сайты используют их, чтобы сделать реакцию на поведение пользователей более естественной и полезной своей аудитории. Нейросети лежат в основе большинства современных систем распознавания и синтеза речи, а также распознавания и обработки изображений. Они применяются в некоторых системах навигации, будь то промышленные роботы или беспилотные автомобили. Алгоритмы на основе нейросетей защищают информационные системы от атак злоумышленников и помогают выявлять незаконный контент в сети».

В ближайшей перспективе (5-10 лет), полагает Шершульский, нейронные сети будут использоваться ещё шире:

Представьте себе сельскохозяйственный комбайн, исполнительные механизмы которого снабжены множеством видеокамер. Он делает пять тысяч снимков в минуту каждого растения в полосе своей траектории и, используя нейросеть, анализирует - не сорняк ли это, не поражено ли оно болезнью или вредителями. И обрабатывает каждое растение индивидуально. Фантастика? Уже не совсем. А через пять лет может стать нормой. - Влад Шершульский, Microsoft

Заведующий лабораторией нейронных систем и глубокого обучения Центра живых систем МФТИ Михаил Бурцев приводит предположительную карту развития нейронных сетей на 2016-2018 годы:

  • системы распознавания и классификации объектов на изображениях;
  • голосовые интерфейсы взаимодействия для интернета вещей;
  • системы мониторинга качества обслуживания в колл-центрах;
  • системы выявления неполадок (в том числе, предсказывающие время технического обслуживания), аномалий, кибер-физических угроз;
  • системы интеллектуальной безопасности и мониторинга;
  • замена ботами части функций операторов колл-центров;
  • системы видеоаналитики;
  • самообучающиеся системы, оптимизирующие управление материальными потоками или расположение объектов (на складах, транспорте);
  • интеллектуальные, самообучающиеся системы управления производственными процессами и устройствами (в том числе, робототехнические);
  • появление систем универсального перевода «на лету» для конференций и персонального использования;
  • появление ботов-консультантов технической поддержки или персональных ассистентов, по функциям близким к человеку.

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

Почему нейронные сети стали так популярны именно сейчас

Учёные занимаются разработкой искусственных нейронных сетей более 70 лет. Первую попытку формализовать нейронную сеть относят к 1943 году, когда два американских учёных (Уоррен Мак-Каллок и Уолтер Питтс) представили статью о логическом исчислении человеческих идей и нервной активности.

Однако до недавнего времени, говорит Андрей Калинин из Mail.Ru Group, скорость работы нейросетей была слишком низкой, чтобы они могли получить широкое распространение, и поэтому такие системы в основном использовались в разработках, связанных с компьютерным зрением, а в остальных областях применялись другие алгоритмы машинного обучения.

Трудоёмкая и длительная часть процесса разработки нейронной сети - её обучение. Для того, чтобы нейронная сеть могла корректно решать поставленные задачи, требуется «прогнать» её работу на десятках миллионов наборов входных данных. Именно с появлением различных технологий ускоренного обучения и связывают распространение нейросетей Андрей Калинин и Григорий Бакунов.

Главное, что произошло сейчас, - появились разные уловки, которые позволяют делать нейронные сети, значительно меньше подверженные переобучению.- Григорий Бакунов, «Яндекс»

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

Каковы объёмы рынка нейронных сетей

«Очень легко посчитать. Можно взять любую область, в которой используется низкоквалифицированный труд, - например, работу операторов колл-центров - и просто вычесть все людские ресурсы. Я бы сказал, что речь идет о многомиллиардном рынке даже в рамках отдельной страны. Какое количество людей в мире задействовано на низкоквалифицированной работе, можно легко понять. Так что даже очень абстрактно говоря, думаю, речь идет о стомиллиардном рынке во всем мире», - говорит директор по распространению технологий «Яндекса» Григорий Бакунов.

По некоторым оценкам, больше половины профессий будет автоматизировано – это и есть максимальный объём, на который может быть увеличен рынок алгоритмов машинного обучения (и нейронных сетей в частности).- Андрей Калинин, Mail.Ru Group

«Алгоритмы машинного обучения - это следующий шаг в автоматизации любых процессов, в разработке любого программного обеспечения. Поэтому рынок как минимум совпадает со всем рынком ПО, а, скорее, превосходит его, потому что становится возможно делать новые интеллектуальные решения, недоступные старому ПО», - продолжает руководитель направления «Поиск Mail.ru» в Mail.Ru Group Андрей Калинин.

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

В последние несколько месяцев на рынке появилось сразу несколько громких развлекательных проектов, использующих нейронные сети - это и популярный видеосервис , который социальная сеть Facebook, и российские приложения для обработки снимков (в июне инвестиции от Mail.Ru Group) и и другие.

Способности собственных нейронных сетей демонстрировали и Google (технология AlphaGo выиграла у чемпиона в го; в марте 2016 года корпорация продала на аукционе 29 картин, нарисованных нейросетями и так далее), и Microsoft (проект CaptionBot , распознающий изображения на снимках и автоматически генерирующий подписи к ним; проект WhatDog , по фотографии определяющий породу собаки; сервис HowOld , определяющий возраст человека на снимке и так далее), и «Яндекс» (в июне команда встроила в приложение «Авто.ру» сервис для распознавания автомобилей на снимках; представила записанный нейросетями музыкальный альбом; в мае создала проект LikeMo.net для рисования в стиле известных художников).

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

«Игры - характерная особенность нашего поведения как биологического вида. С одной стороны, на игровых ситуациях можно смоделировать практически все типичные сценарии человеческого поведения, а с другой - и создатели игр и, особенно, игроки могут получить от процесса массу удовольствия. Есть и сугубо утилитарный аспект. Хорошо спроектированная игра приносит не только удовлетворение игрокам: в процессе игры они обучают нейросетевой алгоритм. Ведь в основе нейросетей как раз и лежит обучение на примерах», - говорит Влад Шершульский из Microsoft.

«В первую очередь это делается для того, чтобы показать возможности технологии. Другой причины, на самом деле, нет. Если речь идёт о Prisma, то понятно, для чего это делали они. Ребята построили некоторый пайплайн, который позволяет им работать с картинками. Для демонстрации этого они избрали для себя довольно простой способ создания стилизаций. Почему бы и нет? Это просто демонстрация работы алгоритмов», - говорит Григорий Бакунов из «Яндекса».

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

Основные игроки на рынке нейронных сетей

Как отмечает Андрей Калинин, по большому счёту, большинство присутствующих на рынке нейронных сетей мало чем отличаются друг от друга. «Технологии у всех примерно одинаковые. Но применение нейросетей - это удовольствие, которое могут позволить себе далеко не все. Чтобы самостоятельно обучить нейронную сеть и поставить на ней много экспериментов, нужны большие обучающие множества и парк машин с дорогими видеокартами. Очевидно, что такие возможности есть у крупных компаний», - говорит он.

Среди основных игроков рынка Калинин упоминает Google и её подразделение Google DeepMind, создавшее сеть AlphaGo, и Google Brain. Собственные разработки в этой области есть у Microsoft - ими занимается лаборатория Microsoft Research. Созданием нейронных сетей занимаются в IBM, Facebook (подразделение Facebook AI Research), Baidu (Baidu Institute of Deep Learning) и другие. Множество разработок ведётся в технических университетах по всему миру.

Директор по распространению технологий «Яндекса» Григорий Бакунов отмечает, что интересные разработки в области нейронных сетей встречаются и среди стартапов. «Я бы вспомнил, например, компанию ClarifAI . Это небольшой стартап, сделанный когда-то выходцами из Google. Сейчас они, пожалуй, лучше всех в мире умеют определять содержимое картинки». К таким стартапам относятся и MSQRD, и Prisma, и другие.

В России разработками в области нейронных сетей занимаются не только стартапы, но и крупные технологические компании - например, холдинг Mail.Ru Group применяет нейросети для обработки и классификации текстов в «Поиске», анализа изображений. Компания также ведёт экспериментальные разработки, связанные с ботами и диалоговыми системами.

Созданием собственных нейросетей занимается и «Яндекс»: «В основном такие сети уже используются в работе с изображениями, со звуком, но мы исследуем их возможности и в других областях. Сейчас мы много экспериментов ставим в использовании нейросетей в работе с текстом». Разработки ведутся в университетах: в «Сколтехе», МФТИ, МГУ, ВШЭ и других.