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

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

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

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

Математически, искусственный нейрон осуществляет преобразование вектора входных сигналов (воздействий) X в вектор выходных сигналов Y при помощи функции, называемой функцией активации. В рамках соединения (искусственной нейронной сети — ИНС) функционируют три вида нейронов: входные (принимающие информацию из внешнего мира – значения интересующих нас переменных), выходные (возвращающие искомые переменные – к примеру, прогнозы, или управляющие сигналы), а также промежуточные – нейроны, выполняющие некие внутренние («скрытые») функции. Классическая ИНС, таким образом, состоит из трех или более слоев нейронов, причем на втором и последующих слоях («скрытых» и выходном) каждый из элементов соединен со всеми элементами предыдущего слоя.

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

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

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

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

В общем случае, обучение ИНС заключается в следующем:

  1. входные нейроны принимают переменные («стимулы») из внешней среды;
  2. в соответствии с полученной информацией изменяются свободные параметры НС (работают промежуточные слои нейронов);
  3. в результате изменений в структуре НС сеть «реагирует» на информацию уже иным образом.

Таков общий алгоритм обучения нейронной сети (вспомним собаку Павлова – да-да, внутренний механизм образования условного рефлекса именно таков – и тут же забудем: все же наш контекст предполагает оперирование техническими понятиями и примерами).

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

Глубокое обучение

Понятие глубокого обучения (deep learning ) относится к другой классификации и обозначает подход к обучению так называемых глубоких структур, к которым можно отнести многоуровневые нейронные сети. Простой пример из области распознавания образов: необходимо научить машину выделять все более абстрактные признаки в терминах других абстрактных признаков, то есть определить зависимость между выражением всего лица, глаз и рта и, в конечном итоге, скопления цветных пикселов математически. Таким образом, в глубокой нейронной сети за каждый уровень признаков отвечает свой слой; понятно, что для обучения такой «махины» необходим соответствующий опыт исследователей и уровень аппаратного обеспечения. Условия сложились в пользу глубокого обучения НС только к 2006 году – и спустя восемь лет можно говорить о революции, которую произвел этот подход в машинном обучении.

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

Идея, как водится, прекрасная, но на пути подхода встают вполне естественные проблемы – прежде всего, коренящиеся в его претензии на универсальность. На самом деле, если на поприще распознавания образов подходы deep learning добились ощутимых успехов, то с той же обработкой естественного языка возникает пока гораздо больше вопросов, чем находится ответов. Очевидно, что в ближайшие n лет вряд ли удастся создать «искусственного Леонардо Да Винчи» или даже – хотя бы! — «искусственного homo sapiens ».

Тем не менее, перед исследователями искусственного интеллекта уже встает вопрос этики: опасения, высказываемые в каждом уважающем себя научно-фантастическом фильме, начиная с «Терминатора» и заканчивая «Трансформерами», уже не кажутся смешными (современные изощренные нейросети уже вполне могут считаться правдоподобной моделью работы мозга насекомого!), но пока явно излишни.

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

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

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

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

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

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

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

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

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


Граф полного цикла обучения AlexNet в прямом и обратном направлении

Графический компилятор Poplar превратил описание AlexNet в вычислительный граф из 18,7 миллиона вершин и 115,8 миллиона ребер. Четко видимая кластеризация – результат прочной связи между процессами в каждом слое сети с более легкой связью между уровнями.

Другой пример – простая сеть с полной связью, прошедшая обучение на MNIST – простом наборе данных для компьютерного зрения, своего рода «Hello, world» в машинном обучении. Простая сеть для изучения этого набора данных помогает понять графы, которыми управляют приложения Poplar. Интегрируя библиотеки графов с такими средами, как TensorFlow, компания представляет один из простых путей для использования IPU в приложениях машинного обучения.

После того, как с помощью компилятора построился граф, его нужно выполнить. Это возможно с помощью движка Graph Engine. На примере ResNet-50 демонстрируется его работа.


Граф ResNet-50

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

Движок создает и управляет исполнением модели машинного обучения, используя граф, созданный компилятором. После развертывания Graph Engine контролирует и реагирует на IPU или устройства, используемые приложениями.

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

Почему глубоким сетям нужно так много памяти?

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

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

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

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

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

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

Например, 50-слойная сеть ResNet имеет около 26 миллионов весовых параметров и вычисляет 16 миллионов активаций в прямом направлении. Если вы используете 32-битное число с плавающей запятой для хранения каждого веса и активации, то для этого потребуется около 168Мб пространства. Используя более низкое значение точности для хранения этих весов и активаций, мы могли бы вдвое или даже вчетверо снизить это требование для хранения.

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

В графических процессорах ширина синапса составляет 1024 бит, так что они используют 32-битные данные с плавающей запятой, поэтому часто разбивают их на параллельно работающие mini-batch из 32 образцов для создания векторов данных по 1024 бит. Этот подход к организации векторного параллелизма увеличивает число активаций в 32 раза и потребность в локальном хранилище емкостью более 2 ГБ.

Графические процессоры и другие машины, предназначенные для матричной алгебры, также подвержены нагрузке на память со стороны весов или активаций нейронной сети. Графические процессоры не могут эффективно выполнять небольшие свертки, используемые в глубоких нейронных сетях. Поэтому преобразование, называемое «понижением», используется для преобразования этих сверток в матрично-матричные умножения (GEMM), с которыми графические ускорители могут эффективно справляться.

Дополнительная память также требуется для хранения входных данных, временных значений и инструкций программы. Измерение использования памяти при обучении ResNet-50 на высокопроизводительном графическом процессоре показало, что ей требуется более 7,5 ГБ локальной DRAM.

Возможно, кто-то решит, что более низкая точность вычислений может сократить необходимый объем памяти, но это не так. При переключении значений данных до половинной точности для весов и активаций вы заполните только половину векторной ширины SIMD, потратив половину имеющихся вычислительных ресурсов. Чтобы компенсировать это, когда вы переключаетесь с полной точности до половины точности на графическом процессоре, тогда придется удвоить размер mini-batch, чтобы вызвать достаточный параллелизм данных для использования всех доступных вычислений. Таким образом, переход на более низкую точность весов и активаций на графическом процессоре все еще требует более 7,5ГБ динамической памяти со свободным доступом.

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

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

Второй подход особенно эффективен, когда вся нейронная сеть может быть проанализированна на этапе компиляции, чтобы создать фиксированную выделенную память, так как издержки на управление памятью сокращаются почти до нуля. Выяснилось, что комбинация этих методов позволяет сократить использование памяти нейронной сетью в два-три раза.
Третий значительный подход был недавно обнаружен командой Baidu Deep Speech. Они применили различные методы экономии памяти, чтобы получить 16-кратное сокращение потребления памяти функциями активации, что позволило им обучать сети со 100 слоями. Ранее при том же объеме памяти они могли обучать сети с девятью слоями.

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

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

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

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

03.05.2017 Дмитрий Ильвовский, Екатерина Черняк

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

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

Первые работы по глубинному обучению (deep learning) относятся к середине XX века. В начале 1940-х годов Уоррен Маккаллок и Уолтер Питтс предложили формальную модель человеческого мозга - искусственную нейронную сеть, а чуть позже Фрэнк Розенблатт обобщил их работы и создал модель нейронной сети на компьютере. Первые работы по обучению нейронных сетей с использованием алгоритма обратного распространения ошибки относятся к 1960-м годам (алгоритм вычисляет ошибку предсказания и минимизирует ее с помощью методов стохастической оптимизации). Однако оказалось, что, несмотря на красоту и изящество идеи имитации мозга, обучение «традиционных» нейронных сетей занимает много времени, а результаты классификации на небольших наборах данных сопоставимы с результатами, полученными более простыми методами, например машинами опорных векторов (Support Vector Machine, SVM). В итоге нейронные сети были на 40 лет забыты, но сегодня снова стали востребованы при работе с большими объемами неструктурированных данных, изображений и текстов.

С формальной точки зрения нейронная сеть представляет собой направленный граф заданной архитектуры, вершины или узлы которого называются нейронами . На первом уровне графа находятся входные узлы, на последнем - выходные узлы, число которых зависит от задачи. Например, для классификации на два класса на выходной уровень сети можно поместить один или два нейрона, для классификации на k классов - k нейронов. Все остальные уровни в графе нейронной сети принято называть скрытыми слоями. Все нейроны, находящиеся на одном уровне, связаны ребрами со всеми нейронами следующего уровня, каждое ребро обладает весом. Каждому нейрону ставится в соответствие функция активации, моделирующая работу биологических нейронов: они «молчат», когда входной сигнал слаб, а когда его значение превышает некий порог, срабатывают и передают входное значение дальше по сети. Задача обучения нейронной сети на примерах (то есть на парах «объект - правильный ответ») заключается в поиске весов ребер, наилучшим образом предсказывающих правильные ответы. Ясно, что именно архитектура - топология строения графа нейронной сети - является ее важнейшим параметром. Хотя формального определения для «глубинных сетей» пока нет, принято считать глубинными все нейронные сети, состоящие из большого числа слоев или имеющие «нестандартные» слои (например, содержащие только избранные связи или использующие рекурсию с другими слоями).

Примером наиболее успешного применения нейронных сетей пока является анализ изображений, однако нейросетевые технологии коренным образом изменили и работу с текстовыми данными. Если раньше каждый элемент текста (буква, слово или предложение) нужно было описывать с помощью множества признаков различной природы (морфологических, синтаксических, семантических и т. д.), то теперь во многих задачах необходимость в сложных описаниях пропадает. Теоретики и практики нейросетевых технологий часто говорят об «обучении представлению» (representation learning) - в сыром тексте, разбитом только на слова и предложения, нейронная сеть способна найти зависимости и закономерности и самостоятельно составить признаковое пространство. К сожалению, в таком пространстве человек ничего не поймет - во время обучения нейронная сеть ставит каждому элементу текста в соответствие один плотный вектор, состоящих из неких чисел, представляющих обнаруженные «глубинные» взаимосвязи. Акцент при работе с текстом смещается от конструирования подмножества признаков и поиска внешних баз знаний к выбору источников данных и разметке текстов для последующего обучения нейронной сети, для которого требуется существенно больше данных по сравнению со стандартными методами. Именно из-за необходимости использовать большие объемы данных и из-за слабой интерпретируемости и непредсказуемости нейронные сети не востребованы в реальных приложениях промышленного масштаба, в отличие от других, хорошо зарекомендовавших себя алгоритмов обучения, таких как случайный лес и машины опорных векторов. Тем не менее нейронные сети используются в целом ряде задач автоматической обработки текстов (рис. 1).

Одно из самых популярных применений нейронных сетей - построение векторов слов, относящихся к области дистрибутивной семантики: считается, что значение слова можно понять по значению его контекста, по окружающим словам. Действительно, если нам незнакомо какое-то слово в тексте на известном языке, то в большинстве случаев можно угадать его значение. Математической моделью значения слова служат вектора слов: строки в большой матрице «слово-контекст», построенной по достаточно большому корпусу текстов. В качестве «контекстов» для конкретного слова могут выступать соседние слова, слова, входящие с данным в одну синтаксическую или семантическую конструкцию, и т. д. В клетках такой матрицы могут быть записаны частоты (сколько раз слово встретилось в данном контексте), но чаще используют коэффициент положительной попарной взаимной информации (Positive Pointwise Mutual Information, PPMI), показывающий, насколько неслучайным было появление слова в том или ином контексте. Такие матрицы вполне успешно могут быть использованы для кластеризации слов или для поиска слов, близких по смыслу к искомому слову.

В 2013 году Томаш Миколов опубликовал работу , в которой предлагал использовать нейронные сети для обучения векторам слов, но для меньшей размерности: по кортежам (слово, контексты) обучалась нейронная сеть простейшей архитектуры, на выходе каждому слову в соответствие ставился вектор из 300 элементов. Оказалось, что такие вектора лучше передают семантическую близость слов. Например, на них можно определить арифметические операции сложения и вычитания смыслов и получить следующие уравнения: «Париж – Франция + Россия = Москва»; «король – мужчина + женщина = королева». Или найти лишнее слово в ряду «яблоко, груша, вишня, котенок». В работе были представлены две архитектуры, skip-gram и CBOW (Continuous Bag of Words), под общим названием word2vec. Как позже было показано в , word2vec - это не что иное, как факторизация матрицы «слово-контекст» с весами PPMI. Сейчас принято относить word2vec к дистрибутивной семантике, а не к глубинному обучению , однако исходным толчком для создания этой модели послужило применение нейронной сети. Кроме того, оказалось, что вектора word2vec служат удобным представлением смысла слова, которое можно подавать на вход глубинным нейронным сетям, используемым для классификации текстов.

Задача классификации текстов - одна из самых актуальных для маркетологов, особенно когда речь идет об анализе мнений или отношения потребителя к какому-то товару или услуге, поэтому исследователи постоянно работают над повышением качества ее решения. Однако анализ мнений является задачей классификации скорее предложений, а не текстов - в положительном отзыве пользователь может написать одно-два отрицательно окрашенных предложения, и их тоже важно уметь определять и анализировать. Известная трудность в классификации предложений заключается в переменной длине входа - поскольку предложения в текстах бывают произвольной длины, непонятно, как подать их на вход нейронной сети. Один из подходов заимствован из области анализа изображений и заключается в использовании сверточных нейронных сетей (convolutional neural network, CNN) (рис. 2).

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

Классификация последовательностей - это задачи, в которых каждому слову нужно поставить в соответствие одну метку: морфологический разбор (каждому слову ставится в соответствие часть речи), извлечение именованных сущностей (определение того, является ли каждое слово частью имени человека, географического названия и пр.) и т. д. При классификации последовательностей используются методы, позволяющие учитывать контекст слова: если предыдущее слово - часть имени человека, то текущее тоже может быть частью имени, но вряд ли будет частью названия организации. Реализовать это требование на практике помогают рекуррентные нейронные сети, расширяющие идею языковых моделей (language model), предложенных в конце прошлого века. Классическая языковая модель предсказывает вероятность того, что слово i встретится после слова i-1. Языковые модели можно использовать и для предсказания следующего слова: какое слово с наибольшей вероятностью встретится после данного?

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

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

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

Кроме сверточных нейронных сетей, для анализа текстов применяются так называемые автокодировщики, используемые, например, для создания эффектов на изображениях в Photoshop или Instagram и нашедшие применение в лингвистике в задаче снижения размерности (поиск проекции вектора, представляющего текст, на пространство заведомо меньшей размерности). Проекция на двумерное пространство делает возможным представление текста в виде точки на плоскости и позволяет наглядно изобразить коллекцию текстов как множество точек, то есть служит средством предварительного анализа перед кластеризацией или классификацией текстов. В отличие от задачи классификации, в задаче снижения размерности нет четких критериев качества, однако изображения, получаемые при использовании автокодировщиков, выглядят достаточно «убедительно». С математической точки зрения автокодировщик - это нейронная сеть без учителя, которая обучается линейной функции f(x) = x и состоит из двух частей: кодировщика и декодировщика. Кодировщик - это сеть с несколькими скрытыми слоями с уменьшающимся количеством нейронов. Декодировщик - аналогичная сеть с увеличивающимся количеством нейронов. Их соединяет скрытый слой, на котором столько нейронов, сколько должно быть размерностей в новом пространстве меньшей размерности, и именно он отвечает за снижение размерности. Как и сверточные нейронные сети, автокодировщик не имеет никакой лингвистической интерпретации, поэтому может считаться скорее инженерным, чем аналитическим инструментом.

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

Литература

  1. Tomas Mikolov et. al. Efficient Estimation of Word Representations in Vector Space, arxiv.org. URL: http://arxiv.org/pdf/1301.3781.pdf
  2. Levy Omer, Yoav Goldberg, Ido Dagan. Improving distributional similarity with lessons learned from word embeddings. Transactions of the Association for Computational Linguistics 3. - 2015. - P. 211–225. URL: https://www.transacl.org/ojs/index.php/tacl/article/view/570/124 (дата обращения: 18.05.2017).
  3. Павел Велихов. Машинное обучение для понимания естественного языка // Открытые Системы.СУБД. - 2016. - № 1. - С.18–21. URL: (дата обращения: 18.05.2017).
  4. Christopher Manning. Computational linguistics and deep learning. Computational Linguistics. - 2016. URL: http://www.mitpressjournals.org/doi/full/10.1162/COLI_a_00239#.WQH8MBhh2qA (дата обращения: 18.05.2017).

Дмитрий Ильвовский ([email protected]) - сотрудник Международной лаборатории интеллектуальных систем и структурного анализа, Екатерина Черняк ([email protected]) - преподаватель центра непрерывного образования, факультет компьютерных наук, НИУ ВШЭ (Москва). Работа выполнена в рамках Программы фундаментальных исследований НИУ ВШЭ.



Разработанный под эгидой DARPA робот не справился с дверью. Источник: IEEE Spectrum / DARPA .

Судя по всему, искусственный интеллект становится неотъемлемой частью индустрии высоких технологий. Мы постоянно слышим о том, как искусственный интеллект научился отвечать на письма в почтовом клиенте Gmail , учится и сортировать отпускные фотографии . Марк Цукерберг приступил к созданию искусственного интеллекта, который будет помогать нам управляться по дому. Проблема заключается в том, что само понятие «искусственного интеллекта» способствует завышенным ожиданиям. Людям проще представить мощные суперкомпьютеры, которые помогают нашим космическим кораблям бороздить просторы Вселенной, чем эффективные спам-фильтры. Кроме того, людям свойственно обсуждать подробности и прогнозировать сроки гибели обречённого человечества от лап бездушного искусственного разума.

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

Итак, что же стоит за терминами «нейронная сеть», «машинное обучение» и «глубокое обучение»?

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

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

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

КОМПЬЮТЕРАМ ВЫ ПРОСТО ГОВОРИТЕ, ЧТО НУЖНО СДЕЛАТЬ. С ПОМОЩЬЮ МАШИННОГО ОБУЧЕНИЯ ВЫ ПОКАЗЫВАЕТЕ, КАК ИМЕННО ЭТО НУЖНО СДЕЛАТЬ

«Допустим, вы хотите объяснить компьютеру, как перейти дорогу, - рассуждает Эрнест Дэвис (Ernest Davis), профессор Нью-Йоркского университета. - С помощью традиционного программирования вы сможете задать ему точный набор правил, который будет определять его поведение: заставит смотреть по сторонам, пропускать машины, переходить по пешеходному переходу… и просто наблюдать за результатом. В случае с машинным обучением вы демонстрируете системе 10 000 видеороликов, в которых пешеходы переходят через дорогу. После этого ей нужно показать ещё 10 000 видео столкновений машин с пешеходами, а затем просто позволить системе заняться своим делом».

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

Глубокое обучение оказалось одним из наиболее практичных методов современного машинного обучения. Данный подход использует значительное количество слоёв нейронной сети для анализа данных на различных уровнях абстракции. Таким образом, при демонстрации картинки системе нейронных сетей с глубоким обучением, каждый слой сети будет занят анализом изображения при разном увеличении. Нижний слой будет анализировать пиксельные сетки размером всего 5 × 5 пикселей, и выдавать два ответа - «да» или «нет» - в зависимости от типа объекта, который появляется на данной сетке. Если нижний слой отвечает утвердительно, тогда вышерасположенный слой нейронной сети анализирует, насколько данная сетка встраивается в шаблон большего размера. Является ли данное изображение началом прямой линии или углом? Постепенно этот процесс усложняется, позволяя программному обеспечению понять и обработать самые сложные данные, расчленив их на составные части.

«Чем выше мы продвигаемся вверх по слоям нейронной сети, тем более масштабные вещи она способна определять, - поясняет руководитель лаборатории искусственного интеллекта в компании Facebook , Ян Лекун (Yann LeCun). - Они становятся более абстрактными. На уровне самого верхнего слоя расположены датчики, способные определить тип изучаемого объекта: человек, собака, планер и так далее».

ДЛЯ УСПЕШНОЙ РАБОТЫ НЕЙРОННОЙ СИСТЕМЫ С ГЛУБОКИМ ОБУЧЕНИЕМ ТРЕБУЕТСЯ БОЛЬШОЙ ОБЪЁМ ДАННЫХ И ЗНАЧИТЕЛЬНОЕ КОЛИЧЕСТВО ВРЕМЕНИ

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

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

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

Так это то самое, чем воспользовались Google , Facebook и прочие?

По большей части, да.

Технологии глубокого обучения применяются для решения множества повседневных задач. Крупные информационно-технологические компании уже давно обзавелись собственными подразделениями для исследования искусственного интеллекта. Google и Facebook объединили усилия, чтобы популяризировать эти исследования и своего программного обеспечения. Компания Google недавно запустила бесплатные трёхмесячные онлайн-курсы по изучению искусственного интеллекта. И пока научная деятельность исследователей пребывает в относительной безвестности, корпорации буквально штампуют новаторские приложения, основанные на этой технологии: начиная веб-приложением компании Microsoft , способным , и заканчивая сюрреалистическими изображениями Deep Dream . Ещё одна причина популярности технологии глубокого обучения кроется в том, что большие клиентоориентированные компании всё активнее включаются в её разработку и периодически выбрасывают на рынок наиболее странные наработки.

ИНТЕЛЛЕКТ И ЗДРАВЫЙ СМЫСЛ - ЭТО РАЗНЫЕ ВЕЩИ?

Несмотря на то, что технологии глубокого обучения уверенно справляются с задачами по распознаванию речи и изображений и обладают значительным коммерческим потенциалом, для них есть немалое число ограничений. Они требуют ввода большого количества данных и точной настройки оборудования. Проблема заключается в том, что их «интеллект» узкоспециализирован и весьма неустойчив. Как тонко подметил когнитивный психолог Гэри Маркус (Gary Marcus) в своей статье в журнале New Yorker , современные методы использования популярных технологий «славятся отсутствием причинно-следственных связей (как в случае между болезнью и симптомами) и, вероятнее всего, будут сталкиваться с определёнными трудностями при попытках анализа абстрактных понятий, например «родственный» или «идентичный». Пока этим технологиям не доступны логические умозаключения, им предстоит многому научиться, чтобы дойти до интеграции абстрактных знаний: ведь недостаточно получить сведения об объекте, важно понять его назначение и способы его применения».

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

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

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

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

Знаменитый учёный в области искусственного интеллекта Гектор Левеск (Hector Levesque) уверен, что подобное «несерьёзное поведение» лишний раз подчёркивает пропасть восприятия между искусственным интеллектом и живым мозгом. Левеск утверждает, что его коллеги забыли о слове «интеллект» в термине «искусственный интеллект» и призывает вспомнить знаменитый тест Тьюринга . Гектор всякий раз подчёркивает, что машины в ходе этого теста прибегают к различного рода ухищрениям и прикладывают все усилия, чтобы одурачить собеседника. Боты охотно пользуются шутками, цитатами; они способы изображать бурные всплески эмоций и прибегать к всевозможным словесным выпадам для того, чтобы сбить с толку и отвлечь человека, ведущего опрос. И действительно, машина, которая, по мнению некоторых изданий, успешно прошла тест Тьюринга, . Эта «легенда» была выбрана создателями бота для того, чтобы оправдать его невежество, неуклюжие формулировки и стремление к нелогичным выводам.

Левеск предлагает исследователям в области искусственного интеллекта другой тип теста, который, по его мнению, должен состоять из опроса с отвлечёнными, сюрреалистическими вопросами. Эти вопросы будут логическими, но предполагают наличие обширных фоновых знаний, которые описывает Маркус (Marcus). Гектор предлагает задавать ботам простые вопросы: «Сможет ли крокодил пробежать стометровку с препятствиями?» или «Разрешается ли бейсболистам приклеивать маленькие крылья на кепки?» Представьте, какими знаниями нужно обладать компьютеру, чтобы ответить на подобные вопросы?

Итак, что же такое «настоящий» искусственный интеллект?

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

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

«Метафора о сходстве нейронной сети и головного мозга не совсем корректна, - отмечает Ян Лекун (Yann LeCun). - Она неверна в той же степени, как и утверждение о том, что самолёт похож на птицу. Он не машет крыльями, у него нет перьев и мускулов».

«Даже если нам удастся создать искусственный интеллект, - отмечает учёный, - он не будет похож на разум человека или сознание животного. К примеру, нам будет очень сложно представить разумное существо, которое не обладает [стремлением к] самосохранению».

Большинство исследователей, работающих в области искусственного интеллекта, попросту игнорируют идею о том, что нам никогда не удастся создать по-настоящему живой, наделённый чувствами искусственный интеллект. «На данный момент отсутствует научный подход, который позволит искусственному интеллекту выйти за рамки запрограммированных установок и стать по-настоящему гибким при решении нескольких задач, - рассуждает профессор Массачусетского технологического института Андрей Барбу (Andrei Barbu), возглавляющий центр исследований Center for Brains, Minds and Machines (CBMM). - Следует понимать, что исследования искусственного интеллекта сейчас находятся на этапе создания систем, которые будут решать конкретные, узкоспециальные проблемы».

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

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

Яркая демонстрация силы искусственного интеллекта. Сеть Watson компании IBM выигрывает в телевизионной игре-викторине Jeopardy! Однако эти впечатляющие возможности имеют весьма ограниченное применение.

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

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

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

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

Очевидно, глубинное обучение еще далеко от совершенства, но оно уже близко к тому, чтобы приносить коммерческую пользу. Например, эти самоуправляемые машины. Известные компании вроде Google, Tesla и Uber уже пробуют внедрить автономные автомобили на улицы города.

Ford предсказывает значительное увеличение доли беспилотных транспортных средств уже к 2021 году. Правительство США также успело разработать для них свод правил безопасности.

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

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

Внешний круг – это искусственный интеллект в целом (например, компьютеры). Чуть дальше – машинное обучение, а совсем в центре – глубинное обучение и искусственные нейросети.

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

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

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

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

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

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

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

Методы глубинного обучения

Методы глубинного обучения делятся на два основных типа:

  • Обучение с учителем
  • Обучение без учителя

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

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

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

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

Важность глубинного обучения

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

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

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

Что особенно занимательно – написание общей нейросети для двух абсолютно разных языков не потребовало особенного труда: «Так исторически сложилось, что люди видели Китайский и Английский, как два совершенно разных языка, поэтому и подход к каждому из них требовался различный», — говорит начальник исследовательского центра Baidu, Andrew Ng. «Алгоритмы обучения сейчас настолько обобщены, что вы можете просто обучаться».

Google использует глубинное обучение для управления энергией в дата-центрах компании. Они смогли сократить затраты ресурсов для охлаждения на 40%. Это около 15% повышения эффективности энергопотребления и миллионы долларов экономии.

Микросервисы глубинного изучения

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

Illustration Tagger. Дополненный Illustration2Vec, этот сервис позволяет отмечать изображения с рейтингом «защищенный», «сомнительный», «опасный», «копирайт» или «общий» для того, чтобы заранее понять содержание картинки.

  • Дополнение для Theano от Google
  • Редактируется на Python и Numpy
  • Зачастую применяется для решения определенного спектра проблем
  • Не общего назначения. Основной упор на машинное зрение
  • Редактируется на C++
  • Есть интерфейс на Python

Онлайн-курсы по глубинному обучению

Google и Udacity объединились для создания бесплатного курса по глубинному обучению , части Курса Машинного Обучения Udacity. Эту программу ведут опытные разработчики, желающие развить такую область, как машинное обучение и, в частности, глубинное обучение.

Другой популярный вариант – курс машинного обучения от Andrew Ng при поддержке Coursera и Стенфорда.

  1. Машинное обучение – Стенфорд от Andrew Ng на Coursera (2010-2014)
  2. Машинное обучение – Caltech от Yaser Abu-Mostafa (2012-2014)
  3. Машинное обучение – Carnegie Mellon от Tom Mitchell (Весна 2011)
  4. Нейросети для машинного обучения – Geoffrey Hinton на Coursera (2012)
  5. Класс по нейросетям – Hugo Larochelle из Université de Sherbrooke (2013

Книги по глубинному обучению

В то время как ресурсы из предыдущей секции опираются на довольно обширную базу знаний, книга «Grokking Deep Learning», наоборот, рассчитана на новичков. Как говорят авторы: «Если вы закончили 11 классов и примерно понимаете, как писать на Python, мы научим вас глубинному обучению».

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

    1. «Глубинное обучение» от Yoshua Bengio, Ian Goodfellow и Aaron Courville (2015)
  1. «Нейросети и глубинное обучение» от Michael Nielsen (2014)
  2. «Глубинное обучение» от Microsoft Research (2013)
  3. «Туториалы по глубинному обучению» от лаборатории LISA, Университета Монреаля (2015)
  4. «neuraltalk» от Andrej Karpathy
  5. «Введение в генетические алгоритмы»
  6. «Современный подход к искусственному интеллекту»
  7. «Обзор на глубинное обучение и нейросети»

Видеоролики и лекции

Deep Learning Simplified – чудесный YouTube-канал. Вот их первое видео:

Понравилась статья? Поделиться с друзьями: