Нейронные сети и ИИ: самое сложное – понять, чего мы хотим. Применение нейронных сетей для задач классификации

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

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

Упрощение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что такое нейронные сети

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

Биологические нейронные сети

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

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

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

История нейронных сетей

Какова же история развития нейронных сетей в науке и технике? Она берет свое начало с появлением первых компьютеров или ЭВМ (электронно-вычислительная машина) как их называли в те времена. Так еще в конце 1940-х годов некто Дональд Хебб разработал механизм нейронной сети, чем заложил правила обучения ЭВМ, этих «протокомпьютеров».

Дальнейшая хронология событий была следующей:

  • В 1954 году происходит первое практическое использование нейронных сетей в работе ЭВМ.
  • В 1958 году Франком Розенблатом разработан алгоритм распознавания образов и математическая аннотация к нему.
  • В 1960-х годах интерес к разработке нейронных сетей несколько угас из-за слабых мощностей компьютеров того времени.
  • И снова возродился уже в 1980-х годах, именно в этот период появляется система с механизмом обратной связи, разрабатываются алгоритмы самообучения.
  • К 2000 году мощности компьютеров выросли настолько, что смогли воплотить самые смелые мечты ученых прошлого. В это время появляются программы распознавания голоса, компьютерного зрения и многое другое.

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

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

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

Применение нейронных сетей

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

  • Машинное обучение (machine learning), представляющее собой разновидность искусственного интеллекта. В основе его лежит обучение ИИ на примере миллионов однотипных задач. В наше время машинное обучение активно внедряют поисковые системы Гугл, Яндекс, Бинг, Байду. Так на основе миллионов поисковых запросов, которые все мы каждый день вводим в Гугле, их алгоритмы учатся показывать нам наиболее релевантную выдачу, чтобы мы могли найти именно то, что ищем.
  • В роботехнике нейронные сети используются в выработке многочисленных алгоритмов для железных «мозгов» роботов.
  • Архитекторы компьютерных систем пользуются нейронными сетями для решения проблемы параллельных вычислений.
  • С помощью нейронных сетей математики могут разрешать разные сложные математические задачи.

Типы нейронных сетей

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

  • сверточные нейронные сети,
  • реккурентные нейронные сети,
  • нейронную сеть Хопфилда.

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

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

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

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

Рекуррентными называют такие нейронные сети, соединения между нейронами которых, образуют ориентировочный цикл. Имеет такие характеристики:

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

Рекуррентные нейронные сети применяются в распознавании и обработке текстовых данных (в частотности на их основе работает Гугл переводчик, алгоритм Яндекс «Палех», голосовой помощник Apple Siri).

Нейронные сети, видео

И в завершение интересное видео о нейронных сетях.

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

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

Что такое нейронные сети и их типы?

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

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

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

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

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

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

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

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

  • Однослойная нейронная сеть. Это структура взаимодействия нейронов, при которой после попадания входных данных в первый входной слой сразу передаётся в слой выхода конечного результата. При этом первый входной слой не считается, так как он не выполняет никаких действий, кроме приёма и распределения, об этом уже было сказано выше. А второй слой производит все нужные вычисления и обработки и сразу выдаёт конечный результат. Входные нейроны объединены с основным слоем синапсами, имеющими различный весовой коэффициент, обеспечивающий качество связей.
  • Многослойная нейронная сеть. Как понятно из определения, этот вид нейронных сетей помимо входного и выходного слоёв имеет ещё и промежуточные слои. Их количество зависит от степени сложности самой сети. Она в большей степени напоминает структуру биологической нейронной сети. Такие виды сетей были разработаны совсем недавно, до этого все процессы были реализованы с помощью однослойных сетей. Соответственно подобное решение имеет намного больше возможностей, чем её предок. В процессе обработки информации каждый промежуточный слой представляет собой промежуточный этап обработки и распределения информации.

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

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

Это не единственные варианты классификации сетей.

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

Где используют нейронные сети?

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

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

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

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

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

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

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

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

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

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

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

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

При этом веса выставляются в случайном порядке.

Схема работы нейронной сети

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

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

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

  • Линейная функция f(x) = x, самая простая из всех возможных, используется только для тестирования созданной нейронной сети или передачи данных в исходном виде.
  • Сигмоид считается самой распространённой функцией активации и имеет вид f(x) = 1 / 1+e-×; при этом диапазон её значений от 0 до 1. Она ещё называется логистической функцией.
  • Чтобы охватить и отрицательные значения используют гиперболический тангенс. F(x) = e²× - 1 / e²× + 1 — такой вид имеет эта функция и диапазон который она имеет от -1 до 1. Если нейронная сеть не предусматривает использование отрицательных значений, то использовать её не стоит.

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

Интеграция — это счётчик, который увеличивается с каждым тренировочным сетом.

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

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

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

Что такое нейрон смещения и для чего он нужен?

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

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

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

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

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

Наличие нейрона смещения позволит исправить ситуацию и получить иной результат. Целесообразность использования нейронов смещения определяется путём тестирования сети с ними и без них и сравнения результатов.

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

Добрый день, меня зовут Наталия Ефремова, и я research scientist в компании NtechLab. Сегодня я буду рассказывать про виды нейронных сетей и их применение.

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

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

В последние 10 лет deep learning и компьютерное зрение развивались неимоверными темпами. Все, что сделано значимого в этой области, произошло в последние лет 6.

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

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

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

Итак, первая часть доклада будет посвящена сверточным нейронным сетям. Я расскажу, как работают convolutional neural network (CNN), распознавание изображений на примере из распознавания лиц. Немного расскажу про рекуррентные нейронные сети recurrent neural network (RNN) и обучение с подкреплением на примере систем deep learning.

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

Что такое нейронные сети

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

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

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

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

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

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

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

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

Здесь вы видите примеры сложности стимулов, различных двухмерных форм, которые распознаются в зонах V2, V4 и различных частях височных полей у макак. Также проводятся некоторое количество экспериментов на МРТ.

Здесь вы видите, как проводятся такие эксперименты. Это 1 нанометровая часть зон IT cortex"a мартышки при распознавании различных объектов. Подсвечено то, где распознается.

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

Компьютерное зрение

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

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

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

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

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

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

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

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

Сейчас это происходит не так. Мы разбиваем наше изображение либо на пиксели, либо на некие патчи: 2х2, 3х3, 5х5, 11х11 пикселей - как удобно создателям системы, в которой они служат входным слоем в нейронную сеть.

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

Условно все эти части можно разделить на три класса, мы их обозначим X, W и Y, где Х - это наше входное изображение, Y - это набор лейблов, и нам нужно получить наши веса. Как мы вычислим W?

При наличии нашего Х и Y это, кажется, просто. Однако то, что обозначено звездочкой, очень сложная нелинейная операция, которая, к сожалению, не имеет обратной. Даже имея 2 заданных компоненты уравнения, очень сложно ее вычислить. Поэтому нам нужно постепенно, методом проб и ошибок, подбором веса W сделать так, чтобы ошибка максимально уменьшилась, желательно, чтобы стала равной нулю.

Этот процесс происходит итеративно, мы постоянно уменьшаем, пока не находим то значение веса W, которое нас достаточно устроит.

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

Перед вами первая сеть, которая победила на международном соревновании ImageNet в 2012 году. Это так называемый AlexNet. Это сеть, которая впервые заявила о себе, о том, что существует convolutional neural networks и с тех самых пор на всех международных состязаниях уже convolutional neural nets не сдавали своих позиций никогда.

Несмотря на то, что эта сеть достаточно мелкая (в ней всего 7 скрытых слоёв), она содержит 650 тысяч нейронов с 60 миллионами параметров. Для того, чтобы итеративно научиться находить нужные веса, нам нужно очень много примеров.

Нейронная сеть учится на примере картинки и лейбла. Как нас в детстве учат «это кошка, а это собака», так же нейронные сети обучаются на большом количестве картинок. Но дело в том, что до 2010 не существовало достаточно большого data set’a, который способен был бы научить такое количество параметров распознавать изображения.

Самые большие базы данных, которые существовали до этого времени: PASCAL VOC, в который было всего 20 категорий объектов, и Caltech 101, который был разработан в California Institute of Technology. В последнем была 101 категория, и это было много. Тем же, кто не сумел найти свои объекты ни в одной из этих баз данных, приходилось стоить свои базы данных, что, я скажу, страшно мучительно.

Однако, в 2010 году появилась база ImageNet, в которой было 15 миллионов изображений, разделённые на 22 тысячи категорий. Это решило нашу проблему обучения нейронных сетей. Сейчас все желающие, у кого есть какой-либо академический адрес, могут спокойно зайти на сайт базы, запросить доступ и получить эту базу для тренировки своих нейронных сетей. Они отвечают достаточно быстро, по-моему, на следующий день.

По сравнению с предыдущими data set’ами, это очень большая база данных.

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

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

Архитектура глубинной нейронной сети

Условно ее можно разделить на 2 части: те, которые учатся, и те, которые не учатся.

Чёрным обозначены те части, которые не учатся, все остальные слои способны обучаться. Существует множество определений того, что находится внутри каждого сверточного слоя. Одно из принятых обозначений - один слой с тремя компонентами разделяют на convolution stage, detector stage и pooling stage.

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

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

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

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

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

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

Есть люди, которые утверждают, что человек всегда распознаёт лучше, чем сеть. Так ли это?

В 2014 году ученые решили проверить, насколько мы хорошо распознаем в сравнении с нейронными сетями. Они взяли 2 самые лучшие на данный момент сети - это AlexNet и сеть Мэттью Зиллера и Фергюса, и сравнили с откликом разных зон мозга макаки, которая тоже была научена распознавать какие-то объекты. Объекты были из животного мира, чтобы обезьяна не запуталась, и были проведены эксперименты, кто же распознаёт лучше.

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

Оказалось, что в нормальных условиях клетки мозга реагировали так же хорошо, как и state of the art model на тот момент, то есть сеть Мэттью Зиллера.

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

Классические задачи сверточных нейронных сетей

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

На примере этого изображения рассмотрим, что делает каждая из задач.

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

Распознавание лиц

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

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

Именно таким образом работает наш продукт FindFace - это бесплатный сервис, который помогает искать профили людей в базе «ВКонтакте».

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

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

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

Очень быстрый поиск, затрачивается 0,5 секунд на обработку 1 миллиарда фотографий. Нами разработан уникальный индекс быстрого поиска. Также мы можем работать с изображениями низкого качества, полученных с CCTV-камер. Мы можем обрабатывать это все в режиме реального времени. Можно загружать фото через веб-интерфейс, через Android, iOS и производить поиск по 100 миллионам пользователей и их 250 миллионам фотографий.

Как я уже говорила мы заняли первое место на MegaFace competition - аналог для ImageNet, но для распознавания лиц. Он проводится уже несколько лет, в прошлом году мы были лучшими среди 100 команд со всего мира, включая Google.

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

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

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

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

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

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

В 2005 году на состязании Emotion Recognition in the Wild специально для распознавания эмоций команда из Монреаля представила рекуррентную систему, которая выглядела очень просто. У нее было всего несколько свёрточных слоев, и она работала исключительно с видео. В этом году они добавили также распознавание аудио и cагрегировали покадровые данные, которые получаются из convolutional neural networks, данные аудиосигнала с работой рекуррентной нейронной сети (с возвратом состояния) и получили первое место на состязании.

Обучение с подкреплением

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

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

Все, наверное, слышали про успехи deep reinforcement learning в Atari и в го.

Кто слышал про Atari? Ну кто-то слышал, хорошо. Про AlphaGo думаю слышали все, поэтому я даже не буду рассказывать, что конкретно там происходит.

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

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

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

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

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

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

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

Нестандартные применения нейронных сетей

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

Итак, ученые Стэнфорда недавно придумали очень необычное применение нейронной сети CNN для предсказания бедности. Что они сделали?

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

Учёные собирали дневные и ночные карты со спутников и скармливали их нейронной сети в течение некоторого времени.

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

Здесь вы видите результаты прогноза, построенного нейронной сетью. Прогноз был сделан с различным разрешением. И вы видите - самый последний кадр - реальные данные, собранные правительством Уганды в 2005 году.

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

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

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

Для этого есть несколько причин.

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

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

Вот пример для определения объема плаценты.

Автоматически это работает хорошо, но не настолько, чтобы это было выпущено в производство, поэтому пока только начинается. Есть несколько стартапов для создания таких систем медицинского зрения. Вообще в deep learning очень много стартапов в ближайшее время. Говорят, что venture capitalists в последние полгода выделили больше бюджета на стартапы обрасти deep learning, чем за прошедшие 5 лет.

Эта область активно развивается, много интересных направлений. Мы с вами живем в интересное время. Если вы занимаетесь deep learning, то вам, наверное, пора открывать свой стартап.

Ну на этом я, наверное, закруглюсь. Спасибо вам большое.

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то