Нейронные сети: виды, принцип работы и области применения. Обучение нейронной сети. Выбор объема сети

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

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

Упрощение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это ключевой момент в концепции искусственных нейронных сетей, я объясню его подробнее. Посмотрите на картинку ниже. Теперь каждой черной стрелке (связи) на этой картинке соответствует некоторое число ​\(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 сети) допускают прохождение сигнала только в одном направлении – от входов к выходам. Сети с обратными связями данных ограничений не имеют, и выходы нейронов могут вновь подаваться на входы.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Нейросети постоянно самообучаются. Благодаря этому процессу:

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Медицина

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

Маркетинг

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

Ecommerce

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

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

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

« Это »

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

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

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

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

Цель классификации

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

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

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

Использование нейронных сетей в качестве классификатора

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

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

Подготовка исходных данных

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

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

Кодирование выходных значений

Задача классификации при наличии двух классов может быть решена на сети с одним нейроном в выходном слое, который может принимать одно из двух значений 0 или 1, в зависимости от того, к какому классу принадлежит образец. При наличии нескольких классов возникает проблема, связанная с представлением этих данных для выхода сети. Наиболее простым способом представления выходных данных в таком случае является вектор, компоненты которого соответствуют различным номерам классов. При этом i-я компонента вектора соответствует i-му классу. Все остальные компоненты при этом устанавливаются в 0. Тогда, например, второму классу будет соответствовать 1 на 2 выходе сети и 0 на остальных. При интерпретации результата обычно считается, что номер класса определяется номером выхода сети, на котором появилось максимальное значение. Например, если в сети с тремя выходами мы имеем вектор выходных значений (0.2,0.6,0.4), то мы видим, что максимальное значение имеет вторая компонента вектора, значит класс, к которому относится этот пример, – 2. При таком способе кодирования иногда вводится также понятие уверенности сети в том, что пример относится к этому классу. Наиболее простой способ определения уверенности заключается в определении разности между максимальным значением выхода и значением другого выхода, которое является ближайшим к максимальному. Например, для рассмотренного выше примера уверенность сети в том, что пример относится ко второму классу, определится как разность между второй и третьей компонентой вектора и равна 0.6-0.4=0.2. Соответственно чем выше уверенность, тем больше вероятность того, что сеть дала правильный ответ. Этот метод кодирования является самым простым, но не всегда самым оптимальным способом представления данных.

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

Другой подход состоит в разбиении задачи с k классами на k*(k-1)/2 подзадач с двумя классами (2 на 2 кодирование) каждая. Под подзадачей в данном случае понимается то, что сеть определяет наличие одной из компонент вектора. Т.е. исходный вектор разбивается на группы по два компонента в каждой таким образом, чтобы в них вошли все возможные комбинации компонент выходного вектора. Число этих групп можно определить как количество неупорядоченных выборок по два из исходных компонент. Из комбинаторики

$A_k^n = \frac{k!}{n!\,(k\,-\,n)!} = \frac{k!}{2!\,(k\,-\,2)!} = \frac{k\,(k\,-\,1)}{2}$

Тогда, например, для задачи с четырьмя классами мы имеем 6 выходов (подзадач) распределенных следующим образом:

N подзадачи(выхода) КомпонентыВыхода
1 1-2
2 1-3
3 1-4
4 2-3
5 2-4
6 3-4

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

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

Выбор объема сети

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

Выбор архитектуры сети

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

Алгоритм построения классификатора на основе нейронных сетей

  1. Работа с данными
    • Составить базу данных из примеров, характерных для данной задачи
    • Разбить всю совокупность данных на два множества: обучающее и тестовое (возможно разбиение на 3 множества: обучающее, тестовое и подтверждающее).
  2. Предварительная обработка
    • Выбрать систему признаков, характерных для данной задачи, и преобразовать данные соответствующим образом для подачи на вход сети (нормировка, стандартизация и т.д.). В результате желательно получить линейно отделяемое пространство множества образцов.
    • Выбрать систему кодирования выходных значений (классическое кодирование, 2 на 2 кодирование и т.д.)
  3. Конструирование, обучение и оценка качества сети
    • Выбрать топологию сети: количество слоев, число нейронов в слоях и т.д.
    • Выбрать функцию активации нейронов (например "сигмоида")
    • Выбрать алгоритм обучения сети
    • Оценить качество работы сети на основе подтверждающего множества или другому критерию, оптимизировать архитектуру (уменьшение весов, прореживание пространства признаков)
    • Остановится на варианте сети, который обеспечивает наилучшую способность к обобщению и оценить качество работы по тестовому множеству
  4. Использование и диагностика
    • Выяснить степень влияния различных факторов на принимаемое решение (эвристический подход).
    • Убедится, что сеть дает требуемую точность классификации (число неправильно распознанных примеров мало)
    • При необходимости вернутся на этап 2, изменив способ представления образцов или изменив базу данных.
    • Практически использовать сеть для решения задачи.

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

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

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

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

Нейрон может иметь много входов, но только один выход. Человеческий мозг содержит примерно нейронов, и каждый нейрон может иметь тысячи соединений с другими. Входные сигналы нейрона умножаются на весовые коэффициенты и складываются для получения суммарного входа нейрона — 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. Нейронные сети — пластичны. Даже после удаления определенного количества нейронов может быть проведено повторное обучение сети до ее первичного уровня (конечно, если в ней осталась достаточное количество нейронов). Такая особенность является также характерной для мозга человека, в котором могут быть повреждены отдельные части, но со временем, с помощью обучения, достигнута первичного уровня навыков и знаний.

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

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

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

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

Когда я учился в институте, мы, например, анализировали тексты. Есть такая задачка: мы берем текст, смотрим какие-то слова-маркеры, частоту их встречаемости в тексте, и на основании количества и отношений этих слов-маркеров в тексте мы можем отнести этот текст, например, к научной литературе, к художественной или к переписке из 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 . Это открытая библиотека. В ней всякие генетические алгоритмы, целый Клондайк. С ней можно делать много интересного.

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

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