Прогнозирование: какие методы использует Uber

19 ноября 2018
forecasting uber machine learning

Прогнозирование: какие методы использует Uber

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

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

Прогнозирование

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

Прогнозирование рынка uber
Рисунок 1. Прогнозирование рынка в Калифорнийском заливе позволяет направлять водителей в районы с высоким спросом.

Неудивительно, что Убер применяет прогнозирование для разных целей, в том числе:

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

Что делает прогнозирование (в Uber) сложной задачей?

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

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

Рис. 2 демонстрирует пример данных о поездках Uber в городе за более чем 14 месяцев. Как видно, график сильно изменчив, но видна положительная тенденция и сезонность (например, декабрь часто имеет больше пиковых дат из-за большого количества праздников, разбросанных в течение месяца).

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

Если мы увеличим масштаб (рис. 3) и перейдем к почасовым данным за июль 2017 года, вы заметите как дневную, так и недельную (7 * 24) сезонности. В выходные водители обычно более загружены заказами.

Рисунок 3. Почасовой график поездок Uber за месяц (июль 2017 года)

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

Известные подходы к прогнозированию

Количественные методы прогнозирования можно сгруппировать следующим образом:

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

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

Когда лежащие в основе механизмы неизвестны или слишком сложны для понимания, как на фондовом рынке, или известны не полностью (розничные продажи), обычно лучше применять простую статистическую модель. Популярными классическими методам, относящимися к этой категории, являются ARIMA (авторегрессионное интегрированное скользящее среднее), методы экспоненциального сглаживания, такие как Holt-Winters, и метод Theta, который используется менее широко, но работает очень хорошо. На самом деле, метод Theta выиграл M3 Forecasting Competition, и мы также выяснили, что он хорошо работает для динамики Uber (более того, он дешевле для вычислений).

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

Классические статистичекие методы:

  • Авторегрессионное интегрированное скользящее среднее — ARIMA
  • Методы экспоненциального сглаживания — Holt-Winters
  • Theta

Методы машинного обучения:

  • Рекуррентные нейронные сети (RNN)
  • Леса с квантильной регрессией (QRF)
  • Gradient boosting trees (GBM)
  • Метод опорных веркторов (SVR)
  • Распределение гауссовского процесса (GP)

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

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

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

Сравнение методов прогнозирования

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

Два основных подхода к тестированию моделей прогнозирования
Рисунок 4: Два основных подхода к тестированию моделей прогнозирования — подход скользящего окна (слева) и подход расширяющегося окна (справа)

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

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

Также возможно и даже часто полезно объединять эти два метода: начните с расширяющегося окна и когда окно станет достаточно большим, переключитесь на метод скользящего окна.

Оценка прогноза

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

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

Важность оценки неопределенности

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

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

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

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

Движение вперед

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

Azure ML туториал: создание простой модели машинного обучения

23 октября 2018
azure ml туториал что это

Azure ML туториал: создание простой модели машинного обучения

Перед вами пошаговое руководство по созданию модели машинного обучения с использованием Microsoft Azure ML, перевод статьи «Tutorial – Build a simple Machine Learning Model using AzureML«. Ссылка на оригинал — в…

Перед вами пошаговое руководство по созданию модели машинного обучения с использованием Microsoft Azure ML, перевод статьи «Tutorial – Build a simple Machine Learning Model using AzureML«. Ссылка на оригинал — в подвале статьи.

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

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

Что такое Azure ML?

azure ml туториал

Хорошая новость — освоить машинное обучение сегодня стало намного проще, чем, например, в 2014 году. Как новичок в этом деле, ты можешь начать познавать машинное обучение с помощью фреймворка Microsoft Azure ML.

Azure ML представляет собой реализацию алгоритма машинного обучения через графический интерфейс от Microsoft.

Какие ресурсы доступны на AzureML

Давайте познакомимся с арсеналом этого инструмента.

  1. Примеры датасетов: мне нравится тестировать инструменты, которые имеют множество встроенных наборов данных. Это упрощает процесс тестирования мощности инструмента. Azure ML поставляется с длинным списком встроенных наборов данных. Список датасетов.
  2. Средства машинного обучения: Azure ML имеет в наличии почти все популярные алгоритмы машинного обучения и формулы оценочных показателей.
  3. Преобразование данных: в Azure ML есть все параметры фильтрации, параметры преобразования, параметры суммирования и варианты расчета матрицы.
  4. Параметры преобразования формата данных: А  что если вы хотите добавить свой собственный набор данных? Azure ML имеет несколько опций для добавления наборов данных из вашей локальной системы. Вот эти варианты:

формат экспорта данных из azure ml

Создание модели

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

Здесь вы начинаете — нажмите на “Создать новый эксперимент”.

Вы получаете пустую таблицу экспериментов:

поле для экспериментов

Теперь вы можете выбрать pallete:

список датасетов azure ml

Шаг 1. Выберите набор данных. Это могут быть ваши примеры данных или же вы можете загрузить их. В этом уроке я буду использовать «Данные о раке молочной железы» из встроенных наборов данных. Просто перетащите эти данные в главное окно.

машинное обучение с azure ml

Шаг 2. Выберите инструмент деления. Вы можете использовать опцию поиска в палитре, чтобы найти «split data». Поместите «split data» под свой набор данных и присоедините.

датасеты

Теперь вы видите две точки на ячейке «split data». Это означает, что у вас есть два набора данных, готовых к работе. С правой стороны у вас есть возможность выбрать тип деления.

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

датасет

Вы можете заметить восклицательный знак в узле тренировки модели. Это означает, что вам нужно указать целевую переменную. Выберем целевую переменную, щелкнув по ней. Теперь вы увидите окно с правой стороны. Выберите «Launch column slector».

тренировка модели

Я выбрал «Класс» в качестве целевой переменной.

Шаг 4. Теперь вы оцениваете модель: см. Следующий рисунок

model training azure ml

Шаг 5. Наконец, производите вычисления

Запускаете модель!

Визуализация датасета и вывода

Чтобы визуализировать любой узел, вы просто переходите к узлу, нажимаете на него правой кнопкой мыши, затем выбираете “визуализировать”.

Вот как выглядят визуальные данные в нашем случае:

визуализация данных в azure ml

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

Так выглядит подсчитанная модель:

azure машинное обучение

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

Наконец, вот как выглядят графики:

azure ml туториал

azure ml туториал

Заключение

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

Считаете ли вы эту статью полезной ? Поделитесь с нами своим опытом работы с Azure ML.


Интересные статьи по теме:

Нейросеть оценивает незабываемость природной сцены

15 октября 2018
незабываемая сцена

Нейросеть оценивает незабываемость природной сцены

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

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

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

Предыдущие работы

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

  • Ученые из Массачусетского технологического института натренировали MemNet на крупной базе изображений, и добились точности прогнозирования близкой к тому, как человеческий разум ранжирует фотографии.
  • В MIT также создали базу данных для оценки запоминаемости человеческих лиц. Они дополнительно исследовали вклад отдельных признаков (например, доброта, степень доверия) на запоминаемость, но такие характеристики лишь частично объяснили степень запоминаемости лиц.

Новый подход

Исследователи Бэйханского университета в Пекине создали базу данных LNSIM. В базе данных LNSIM 2632 изображений естественных сцен. Для получения этих изображений из датасетов MIR Flickr, MIT1003, NUSEF и базы данных AVA было выбрано 6,886 изображений, из которых затем отобрали исключительно природные сцены.

Рис: 1 Примеры фотографий из датасета LNSIM
Рис: 1 Примеры фотографий из датасета LNSIM

Специальная игра на память используется для количественной оценки запоминаемости каждого изображения в базе данных LNSIM. Разработано программное обеспечение, в котором было задействовано 104 субъекта (47 женщин и 57 мужчин). В их числе не было добровольцев, которые участвовали в отборе изображений. Схема нашей игры приведена на рисунке 2.

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

В этом эксперименте было использовано 2632 целевых изображения, 488 изображений на бдительность и 1200 изображений-наполнителей, все они были неизвестны испытуемым. Изображения на бдительность и наполнители были случайным образом отобраны из 6886 изображений. Образцы на бдительность повторялись в пределах 7 изображений, чтобы быть уверенным, что испытуемые сосредоточены на игре. Изображения-наполнители были представлены один раз, так чтобы можно было задать расстояние между одинаковыми целевыми изображениями или изображениями бдительности. После сбора данных каждому изображению присваивается оценка для определения запоминаемости. Кроме этого, для оценки того, как человеческий разум ранжирует фотографии субъекты разделяются на две независимые группы (группы 1 и 2).

Анализ запоминаемости естественной сцены

Датасет LNSIM собран для лучшего понимания влияния низко-, средне-,  высокоуровневых рукописных образов и глубоких образов (deep features) на запоминаемость природной сцены.

Низкоуровневые образы — пиксели, SIFT и HOG2 — оказывают влияние на запоминаемость общих изображений. Чтобы оценить это влияние, регрессия опорных векторов (SVR) для каждого низкоуровневого образа использует тренировочный датасет для предсказания запоминаемости, а затем оценивает SRCC этих низкоуровневых образов с запоминаемостью в тестовом наборе.  Ниже в таблице 1 представлены результаты SRCC для естественных сцен, SRCC для общих изображений используется в сравнении. Очевидно, что пиксели (ρ = 0,08), SIFT (ρ = 0,28) и HOG2 (ρ = 0,29) не так эффективны для запоминаемости, как ожидалось, особенно по сравнению с их эффективностью для общих изображений

Таблица 1: Корреляция между низкоуровневыми образами и запоминаемостью природной сцены

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

Образы GIST среднего уровня описывают пространственную структуру изображения. Однако в таблице 2 показано, что SRCC у GIST составляет всего 0,23 для естественной сцены, что намного меньше, чем ρ = 0,38 для общих изображений. Это говорит о том, что структурная информация, предоставляемая функцией GIST, менее эффективна для прогнозирования значений запоминаемости на естественных сценах.

Таблица 2: Корреляция между среднеуровневыми образами и запоминаемостью природной сцены

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

  • Задача 1 (Классификации): пятерых участников попросили указать, какие категории сцен они видят на изображениях. Каждому участнику попадалось случайное изображение. Участникам нужно было выбрать подходящую категорию сцены для каждого из них
  • Задача 2 (Подтверждение): Отдельная задача выполнялась на одном и том же наборе изображений путем случайного выбора новых пятерых участников после Задания 1. Участников попросили дать ответ “да” или “нет” на вопрос про каждое изображение. Ответ по умолчанию был установлен на «Нет».

Все изображения относились к категориям на основе большинства голосов после задач 1 и 2.

Далее SVR обучалась для распознавания категории сцен. Определение категории сцены достигает производительности SRCC (ρ = 0,38), превосходя результаты комбинаций низкоуровневых образов. 

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

Сравнение средних значений запоминаемости и стандартного отклонения для каждой категории сцен

Чтобы понять, как глубокие образы влияют на запоминаемость естественной сцены, настроенная сеть MemNet обучается на базе данных LNSIM, используя евклидово расстояние между предсказанными и известными значениями запоминаемости как функцию потерь. Выходные значения последнего скрытого слоя извлекаются как глубокий образ (размер: 4096). Чтобы оценить корреляцию между глубоким образом и запоминаемостью естественной сцены, аналогично со случаем рукописных образов, предсказатель SVR с гистограммой пересечения ядра обучается для работы с глубокими образами.

SRCC глубокого образа составляет 0,44, что превышает показатели для рукописных образов. DNN действительно хорошо работает для прогнозирования запоминаемости естественной сцены, поскольку глубокий образ показывает довольно высокую точность предсказания. Тем не менее, нет никаких сомнений в том, что точно настроенная сеть MemNet также имеет свое ограничение, поскольку она по-прежнему не достигает человеческих результатов (ρ = 0,78).

DeepNSM

Настроенная (fine-tuned) сеть MemNet служит базовой моделью для прогнозирования запоминаемости природной сцены. В предлагаемой архитектуре DeepNSM deep features прикрепляются к элементу из категории естественных сцен, чтобы точно предсказать запоминаемость изображений естественных сцен. Обратите внимание, что «deep feature» это образ размера 4096, извлеченный из базовой модели.

Рис: 2. Архитектура модели DeepNSM
Рис: 2. Архитектура модели DeepNSM

Архитектура модели DeepNSM представлена ​​на рисунке 2. В модели DeepNSM вышеупомянутый образ из категории объединен с deep feature, полученными из базовой модели. На основе такой связи элементов, дополнительные полносвязные слои (включая один скрытый слой размера 4096) служат для прогнозирования запоминаемости естественных сцен. При обучении базовые слои и модели ResNet инициализируются индивидуально подготовленными моделями, а добавленные полносвязные слои случайным образом инициализируются.

Вся сеть совместно обучается методом end-to-end, используя оптимизатор Adam с евклидовым расстоянием, принятым в качестве функции потерь.

Сравнение с другими моделями

Показатели модели DeepNSM в прогнозировании запоминания природной сцены в отношении SRCC (ρ). Модель DeepNSM тестируется как на тестовом наборе базы данных LNSIM, так и на базе базы данных NSIM. Производительность SRCC модели DeepNSM сравнивается с самыми современными методами прогнозирования запоминаемости, включая MemNet, MemoNet и Lu et al. Среди них MemNet и MemoNet — новейшие методы DNN для общих изображений, которые превзошли обычные методы, используя вручную построенные образы. Lu et al. это современный способ предсказания запоминаемости природной сцены.

Показатели SRCC DeepNSM и сравниваемых методов.
Рис 3. Показатели SRCC DeepNSM и сравниваемых методов

На рисунке 3 показатели SRCC DeepNSM и три сравниваемых метода. DeepNSM достигает значений Ρ = 0,58 и 0,55 по базам LNSIM и NSIM, соответственно. Это значительно превосходит современные методы DNN, MemNet и MemoNet. Результаты демонстрируют эффективность DeepNSM в прогнозировании запоминаемости природной сцены.

Выводы

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

Автоэнкодеры: типы архитектур и применение

11 сентября 2018
автоэнкодер

Автоэнкодеры: типы архитектур и применение

Autoencoder (автокодер, автоэнкодер, AE) — нейронная сеть, которая копирует входные данные на выход. По архитектуре похож на персептрон. Автоэнкодеры сжимают входные данные для представления их в latent-space (скрытое пространство), а затем…

Autoencoder (автокодер, автоэнкодер, AE) — нейронная сеть, которая копирует входные данные на выход. По архитектуре похож на персептрон. Автоэнкодеры сжимают входные данные для представления их в latent-space (скрытое пространство), а затем восстанавливают из этого представления output (выходные данные). Цель — получить на выходном слое отклик, наиболее близкий к входному.

Отличительная особенность автоэнкодеров — количество нейронов на входе и на выходе совпадает.

Автокодер состоит из двух частей:

  1. Энкодер: отвечает за сжатие входа в latent-space. Представлен функцией кодирования h = f (x);
  2. Декодер: предназначеа для восстановления ввода из latent-space. Представлен функцией декодирования h = f (x).
Архитектура автокодеров
Архитектура автоэнкодера

Таким образом, автокодер описывают функцией g (f (x)) = r, где r совпадает с изначальным x на входе.

Зачем копировать вход на выход

Если бы единственной задачей автоэнкодеров было копирование входных данных на выход, они были бы бесполезны. Исследователи рассчитывают на то, что скрытое представление h будет обладать полезными свойствами.

Этого добиваются созданием ограничений для задачи копирования. Один из способов получить полезные результаты от автоэнкодера — ограничить h размерами меньшими , чем x. D этом случае автокодирование называется неполным.

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

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

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

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


Где применяются автоэнкодеры

Два основных практических применения автоэнкодеров для визуализации данных:

  • сглаживание шума;
  • снижение размерности.

С соответствующими ограничениями по размерности и разреженности автоэнкодеры могут изучать data projections, которые более интересны, чем PCA (метод главных компонент) или другие базовые техники.

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

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

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


Типы автоэнкодеров

В этой статье будут описаны четыре следующих типа автокодеров:

  1. Автокодер Vanilla;
  2. Многослойный автокодер;
  3. Сверточный автокодер;
  4. Регуляризованный.

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

Автоэнкодер vanilla

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

Здесь мы видим неполный автокодер, поскольку размер скрытого слоя (64) меньше, чем вход (784). Это ограничение заставит нашу нейронную сеть изучить сжатое представление данных.

Многослойный автоэнкодер

Если одного скрытого слоя недостаточно, автокодер расширяют до большего их количества.

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

Сверточные автоэнкодеры

Можно ли использовать автокодеры со свертками вместо использования с полносвязными слоями?

Ответ — да. И принцип тот же, но только с использованием 3D-векторов вместо 1D-векторов.

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

Регуляризованный автоэнкодер

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

Sparse

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

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

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

Denoising

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


Интересные статьи по теме:

Генеративно-состязательная нейросеть (GAN). Руководство для новичков

29 августа 2018
генеративно-состязательная нейросеть GAN

Генеративно-состязательная нейросеть (GAN). Руководство для новичков

Генеративно-состязательная нейросеть (Generative adversarial network, GAN) — архитектура, состоящая из генератора и дискриминатора, настроенных на работу друг против друга. Отсюда GAN и получила название генеративно-созтязательная. В случае работы с изображениями, во…

Генеративно-состязательная нейросеть (Generative adversarial network, GAN) — архитектура, состоящая из генератора и дискриминатора, настроенных на работу друг против друга. Отсюда GAN и получила название генеративно-созтязательная. В случае работы с изображениями, во всем остальном — это сверточная нейронная сеть.

GAN были впервые представлены в работе 2014-го года Ian’a Goodfellow’a и других исследователей университета Монреаля, включая Yoshua Bengio. Директор Facebook по исследованиям искусственного интеллекта Yann LeCun назвал состязательную тренировку сетей “самой интересной идеей в машинном обучении за последние 10 лет”.

Вряд ли вы подумаете, что программиста можно назвать артистом, но, на самом деле, программирование это очень творческая профессия. Творчество, основанное на логике — John Romero

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

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

Рассмотрим, как работают алгоритмы дикриминатора и генератора.

Дискриминатор

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

К примеру, пробегая все слова в письме дискриминационный алгоритм может предсказать, является сообщение спамом или не спамом. Спам — это категория, а пакет слов, собранный из электронной почты — образы, которые составляют входные данные. Математически категории обозначают y, а образы обозначают x. Запись p(y|x) используется для обозначения «вероятности y при заданном x», которая обозначает «вероятность того, что электронное письмо является спамом при имеющемся наборе слов».

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

Генератор

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

В то время как дискриминационные алгоритмы волнует взаимосвязь между y и x, генеративные алгоритмы волнует “откуда берутся x”. Они позволяют находить p(x|y), вероятность x при данном y или вероятность образов при данном классе (генеративные алгоритмы также могут использоваться в качестве классификаторов. Они могут делать больше, чем классифицировать входные данные.)

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

  • Дискриминационные модели изучают границу между классами;
  • Генеративные модели моделируют распределение отдельных классов.

Как работают GAN

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

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

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

Шаги, которые проходит GAN:

  • Генератор получает рандомное число и возвращает изображение.
  • Это сгенерированное изображение подается в дискриминатор наряду с потоком изображений, взятых из фактического набора данных.
  • Дискриминатор принимает как реальные, так и поддельные изображения и возвращает вероятности, числа от 0 до 1, причем 1 представляет собой подлинное изображение и 0 представляет фальшивое.

Таким образом, у есть двойной цикл обратной связи:

  • Дискриминатор находится в цикле с достоверными изображениями.
  • Генератор находится в цикле вместе с дискриминатором

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

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

Обе сети пытаются оптимизировать целевую функцию или функцию потерь в игре zero-zum. Это, по сути, модель актера-критика (actor-critic). Когда дискриминатор меняет свое поведение, то и генератор меняет, и наоборот.

Автокодеры и VAE

Полезно сравнить генеративные состязательные сети с другими нейронными сетями, такими как автокодеры (автоэнкодеры) и вариационные автокодеры.

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

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

Вы можете разделить генеративные алгоритмы на три типа, которые имея:

  • категорию, предсказывают связанные функции (Naive Bayes);
  • скрытое представление, предсказывают связанные функции (VAE, GAN);
  • некоторые образы, предсказывают остальное (inpainting, imputation);

Советы по обучению GAN

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

Точно так же предварительная тренировка дискриминатора против MNIST будет способствовать установлению более четкого градиента.

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

GAN требуют много времени на тренировку. На одном GPU тренировка может занимать часы, а на одном CPU — более одного дня. Несмотря на сложность настройки и, следовательно, использования, GAN стимулировали создание многих интересных исследований и статей, например:

Просто покажите код

Вот пример GAN, запрограммированной в библиотеке Keras, из которой модели могут в дальнейшем быть импортированы в Deeplearning4j.

class GAN():
    def __init__(self):
        self.img_rows = 28 
        self.img_cols = 28
        self.channels = 1
        self.img_shape = (self.img_rows, self.img_cols, self.channels)

        optimizer = Adam(0.0002, 0.5)

        # Build and compile the discriminator
        self.discriminator = self.build_discriminator()
        self.discriminator.compile(loss='binary_crossentropy', 
            optimizer=optimizer,
            metrics=['accuracy'])

        # Build and compile the generator
        self.generator = self.build_generator()
        self.generator.compile(loss='binary_crossentropy', optimizer=optimizer)

        # The generator takes noise as input and generated imgs
        z = Input(shape=(100,))
        img = self.generator(z)

        # For the combined model we will only train the generator
        self.discriminator.trainable = False

        # The valid takes generated images as input and determines validity
        valid = self.discriminator(img)

        # The combined model  (stacked generator and discriminator) takes
        # noise as input => generates images => determines validity 
        self.combined = Model(z, valid)
        self.combined.compile(loss='binary_crossentropy', optimizer=optimizer)

    def build_generator(self):

        noise_shape = (100,)
        
        model = Sequential()

        model.add(Dense(256, input_shape=noise_shape))
        model.add(LeakyReLU(alpha=0.2))
        model.add(BatchNormalization(momentum=0.8))
        model.add(Dense(512))
        model.add(LeakyReLU(alpha=0.2))
        model.add(BatchNormalization(momentum=0.8))
        model.add(Dense(1024))
        model.add(LeakyReLU(alpha=0.2))
        model.add(BatchNormalization(momentum=0.8))
        model.add(Dense(np.prod(self.img_shape), activation='tanh'))
        model.add(Reshape(self.img_shape))

        model.summary()

        noise = Input(shape=noise_shape)
        img = model(noise)

        return Model(noise, img)

    def build_discriminator(self):

        img_shape = (self.img_rows, self.img_cols, self.channels)
        
        model = Sequential()

        model.add(Flatten(input_shape=img_shape))
        model.add(Dense(512))
        model.add(LeakyReLU(alpha=0.2))
        model.add(Dense(256))
        model.add(LeakyReLU(alpha=0.2))
        model.add(Dense(1, activation='sigmoid'))
        model.summary()

        img = Input(shape=img_shape)
        validity = model(img)

        return Model(img, validity)

    def train(self, epochs, batch_size=128, save_interval=50):

        # Load the dataset
        (X_train, _), (_, _) = mnist.load_data()

        # Rescale -1 to 1
        X_train = (X_train.astype(np.float32) - 127.5) / 127.5
        X_train = np.expand_dims(X_train, axis=3)

        half_batch = int(batch_size / 2)

        for epoch in range(epochs):

            # ---------------------
            #  Train Discriminator
            # ---------------------

            # Select a random half batch of images
            idx = np.random.randint(0, X_train.shape[0], half_batch)
            imgs = X_train[idx]

            noise = np.random.normal(0, 1, (half_batch, 100))

            # Generate a half batch of new images
            gen_imgs = self.generator.predict(noise)

            # Train the discriminator
            d_loss_real = self.discriminator.train_on_batch(imgs, np.ones((half_batch, 1)))
            d_loss_fake = self.discriminator.train_on_batch(gen_imgs, np.zeros((half_batch, 1)))
            d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)


            # ---------------------
            #  Train Generator
            # ---------------------

            noise = np.random.normal(0, 1, (batch_size, 100))

            # The generator wants the discriminator to label the generated samples
            # as valid (ones)
            valid_y = np.array([1] * batch_size)

            # Train the generator
            g_loss = self.combined.train_on_batch(noise, valid_y)

            # Plot the progress
            print ("%d [D loss: %f, acc.: %.2f%%] [G loss: %f]" % (epoch, d_loss[0], 100*d_loss[1], g_loss))

            # If at save interval => save generated image samples
            if epoch % save_interval == 0:
                self.save_imgs(epoch)

    def save_imgs(self, epoch):
        r, c = 5, 5
        noise = np.random.normal(0, 1, (r * c, 100))
        gen_imgs = self.generator.predict(noise)

        # Rescale images 0 - 1
        gen_imgs = 0.5 * gen_imgs + 0.5

        fig, axs = plt.subplots(r, c)
        cnt = 0
        for i in range(r):
            for j in range(c):
                axs[i,j].imshow(gen_imgs[cnt, :,:,0], cmap='gray')
                axs[i,j].axis('off')
                cnt += 1
        fig.savefig("gan/images/mnist_%d.png" % epoch)
        plt.close()


if __name__ == '__main__':
    gan = GAN()
    gan.train(epochs=30000, batch_size=32, save_interval=200)

Источник: https://skymind.ai/wiki/generative-adversarial-network-gan

Может быть интересно:

GAN применили для реалистичной дорисовки фотографий

21 августа 2018
Realistic outpainting using GAN

GAN применили для реалистичной дорисовки фотографий

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

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

Тем не менее, исследователи из Стенфорда представили подход для задачи экстраполяции (image outpainting). Они решали проблему с помощью генеративно-состязательного обучения.

Генеративно-состязательное обучение DCGAN

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

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

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

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

Data

Примеры изображений из набора данных Places365

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

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

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

Метод

Как упоминалось ранее, генеративная модель представляет собой сеть GAN, которая обучается по трехфазной учебной процедуре, чтобы добиться стабильности в процессе обучения. Генеративная сеть это несимметричная энкодер-декодер сеть и Дискриминатор, отвечающий за глобальные и локальные дискриминаторы. Генеративная сеть имеет 9 слоев (8 конволюционных и 1 деконволюционный), в то время как дискриминатор имеет 5 сверточных и 1 полностью подключенный уровень. Плюс конкатенациионный слой (concatenation layer), который объединяет выходы локальных дискриминаторов для создания одного выхода.

Схема тренировки, использованной в методе

Каждый слой сопровождается активацией ReLU, за исключением выходных уровней в обеих сетях, а расширенные свертки используются для дальнейшего улучшения outpainting. Авторы утверждают, что расширенные свертки действительно сильно влияют на качество сгенерированного изображения и способность перерисовывать изображение. Фактически же, улучшение происходит из-за увеличения локальной восприимчивости области, которая позволяет перерисовать весь образ. Расширенные свертки — всего лишь эффективный способ увеличить локальное восприимчивое поле в сверточных слоях без увеличения вычислительной сложности.

Генератор
Дискриминатор

Оценка и выводы

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

Realistic outpainting using GAN
Результаты дорисовки (2 ряд)

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

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

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