Станьте экспертом по машинному обучению менее чем за час

Доменик Пузио, инженер по обработке данных, и Дженнифер Ван, инженер по программному обеспечению, Capital One

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

Повышение уровня шумихи о глубоком обучении

Глубокое обучение - это две вещи:

  • Идея, которая берет на вооружение традиционные нейронные сети и расширяет их.
  • Огромное модное слово.

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

Но сначала - почему мы заботимся о глубоком обучении? И когда эта технология стала такой популярной?

Для нас ответ прост: глубокое обучение станет повсеместным. Это меняет то, как мы водим автомобиль (Tesla), выбираем фильмы (Netflix) и даже с кем встречаемся (Tinder). Глубокое обучение делает ценные шумные и нечеткие данные, такие как ваша библиотека фотографий или скорость, с которой вы прокручиваете ленту новостей - все это может быть преобразовано в информацию о том, как вы говорите, куда вы ходите и какой человек вы . И этот интеллект можно превратить в деньги. Глубокое обучение должно изменить то, как мы думаем о наших данных и как мы решаем ими делиться.

Что касается «когда», то идеи, лежащие в основе глубокого обучения, существуют уже более 50 лет, но они не стали популярными до последних нескольких лет. Глубокое обучение требует большого количества данных для понимания сложных проблем; для достижения экспертного уровня модели требуется около 10 миллионов точек данных. Обработка всех этих данных требует более умных алгоритмов со стороны программного обеспечения и большей вычислительной мощности со стороны оборудования. К счастью, у нас есть вычислительные ресурсы по запросу в облаке и специализированные машины для машинного обучения, которые используют обработку графическим процессором для ускорения вычислений, что значительно расширяет возможности глубокого обучения. Инструменты, необходимые для реализации методов глубокого обучения, также стали более доступными - большая часть программного обеспечения для машинного обучения теперь имеет открытый исходный код, поэтому больше людей, чем когда-либо, могут внести свой вклад в эту растущую область. В более широком смысле, изменения в программном и аппаратном обеспечении, а также общественное признание технологических достижений за последние несколько лет способствовали широкому распространению и растущему интересу к приложениям глубокого обучения.

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

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

Создание гипотетического чат-бота

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

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

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

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

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

Под капотом эта модель чат-бота представляет собой сеть с последовательной долговременной памятью (LSTM). Там есть что распаковать.

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

Сети с долговременной краткосрочной памятью или LSTM - это нейронные сети, предназначенные для фиксации взаимосвязей в последовательном вводе, таком как текст сообщения. Они обеспечивают кратковременную память по всей последовательности, позволяя сети вспомнить предыдущие решения. Допустим, наш LSTM пытается интерпретировать сообщение: «Какая погода будет завтра?»

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

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

«Меня очень беспокоит погода для завтрашнего похода. В прошлом месяце я был на Old Rag, и пошел дождь. Мы плохо провели время, потому что камни были такими скользкими! Как ты думаешь? »

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

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

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

Каждый нейрон LSTM - помимо получения информации о текущем слове и предыдущих словах - также поддерживает состояние, память, которая со временем теряет актуальность. Один нейрон LSTM может запомнить тип предложения, с которым мы имеем дело (вопрос); один нейрон может заботиться о важном понятии (погоде); другой может хранить локацию (Старая тряпка); и один нейрон может отслеживать временные рамки (завтра). Имея в виду всю эту информацию, сеть LSTM в целом (комбинация всех этих отдельных нейронов) может сделать точное суждение о значении всего утверждения: вопрос о погоде в Old Rag завтра.

LSTM поддерживают это состояние ячейки или память с помощью двух ворот. Первые ворота говорят нейрону, следует ли забыть о состоянии своей клетки. Например, мы знаем, что один нейрон отслеживает обсуждаемое местоположение (Старая тряпка). Если в тексте упоминается новое место для пеших прогулок (например, каньон Уайт-Оук), о Old Rag следует забыть.

Далее нам нужно запомнить новое место в нашем состоянии ячейки: Каньон Белого Дуба. Это то, что обрабатывает второй вентиль, добавляя новую информацию в состояние ячейки. Эти два ворот контролируются входами в ячейку, что имеет смысл, поскольку нам нужно забыть о Старой тряпке только тогда, когда мы видим новое место позже в последовательности. Кроме того, мы знаем, что следует помнить вместо Old Rag, только глядя на новый ввод. ворота забывания и ворота запоминания образуют динамическую ячейку памяти, которая сохраняет важность с течением времени.

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

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

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

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

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

LSTM начинает улавливать часто используемые слова и стиль речи. И чем больше информации в Messenger мы показываем, тем лучше мы ожидаем от нее. Наконец, наши ответы начинают обретать смысл.

Вот как на самом деле разговаривает Джен! И похоже, наш LSTM напоминает, что однажды мы случайно установили вредоносное ПО на ноутбук Джен для проекта хакатона ...

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

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

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

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

Если вы приедете в Остин на SXSW, обязательно ознакомьтесь с нашим вводным докладом о машинном обучении!

Это мнение автора. Если в этом посте не указано иное, Capital One не связан и не одобрен ни одной из упомянутых компаний. Все используемые или отображаемые товарные знаки и другая интеллектуальная собственность являются собственностью соответствующих владельцев. Эта статья © Capital One, 2018.