с помощью Wavenets от Google DeepMind

В соавторстве с Apoorva Reddy Addvalli, Atindra Bandi

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

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

I. Набор данных

Набор данных состоит из 145 тыс. Временных рядов, представляющих количество ежедневных просмотров страниц различных статей Википедии, начиная с 1 июля 2015 г. по 10 сентября 2017 г. (804 точки данных). Цель состоит в том, чтобы спрогнозировать ежедневные просмотры в период с 13 сентября 2017 г. по 13 ноября 2017 г. (64 точки данных) для каждой статьи в наборе данных.

II. Подход

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

  1. Традиционные скользящие средние, методы на основе ARIMA
  2. Рекуррентные нейронные сети - долгая краткосрочная память (LSTM), закрытый рекуррентный блок (GRU)
  3. Wavenets

Растущая популярность Wavenets и наш интерес к использованию нейронных сетей для прогнозирования заставили нас предпочесть Wavenets остальным. «Google Deep mind», являющийся идейным вдохновителем Wavenets (в настоящее время используется в службе искусственного интеллекта Google, Cloud-text-to-speech), еще больше подогрел наш интерес.

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

Погружаемся глубже!

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

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

Давайте посмотрим, что на самом деле означают эти причудливые термины -

А. Типичный слой свертки

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

На изображении выше мы используем как X (0), так и X (1), чтобы предсказать y (0), и последовательность продолжается для всех y. Мы видим, что данные в прошлом и будущем используются для прогнозирования y (0). Если мы представим эти x как значения временного ряда, тогда возникнет явная проблема. Мы будем использовать будущее, чтобы предсказать это y, поэтому наша модель будет обманчива!

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

Каково решение? - Причинные свертки

Б. Причинные свертки

Это шаг, на котором мы настраиваем наш дизайн свертки, чтобы ограничить влияние будущих X на прошлые прогнозы, обеспечивающие причинную связь. Если вы тоже хотите ограничить вводимые данные, keras упростил нам задачу. Установите padding = «причинно».

В. Причинно-расширенные свертки

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

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

Благодаря вышеперечисленным спецификациям наши Wavenets могут захватывать больше информации с меньшим количеством параметров, потребляя меньшее количество эпох для схождения. Таким образом, Wavenets может расширить рецептивное поле до ›400, в то время как RNN эффективны только до 100–300.

III. Вычислительные ресурсы

Мы обучили нашу модель на Google Cloud Platform (GCP) для 3500 эпох в течение 7–8 часов с помощью графического процессора Nvidia Tesla K80.

IV. Модельная архитектура

Наше решение было мотивировано решением sjv, занявшим 6-е место на Kaggle. Во время конкурса не существовало обработки пропущенных значений, поэтому мы начали с обработки пропущенных значений. Архитектура Wavenet состоит из:

  • Остаточные блоки = 32
  • Пропустить подключения = 32
  • 8 расширенных каузальных сверточных слоев
  • 32 фильтра шириной 2 на слой
  • Экспоненциально увеличивающаяся скорость расширения (1, 2, 4, 8,…, 128)
  • 2 (распределенных по времени) полностью связанных слоя для сопоставления с конечным результатом

Переходя к архитектуре, которая окружает основную логику расширенных каузальных извилин, которые включают

  • Закрытые активации
  • Остаточные и пропускные соединения

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

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

В. Мера точности

Мы использовали модифицированную версию SMAPE (Symmetric Mean Absolute Percent Error) в качестве меры точности, которая также является целевым проигрышем для конкуренции. SMAPE предоставляется:

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

VI. Результаты

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

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

VII. Выводы

● Достигнуты прогнозы хорошего качества на долгий период времени.

● Эффективно фиксируются сезонные колебания и долгосрочные тенденции.

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

Не стесняйтесь пройти наш код.

VIII. Ссылки

  1. Https://arxiv.org/pdf/1609.03499.pdf
  2. Https://github.com/sjvasquez/web-traffic-forecasting
  3. Https://bair.berkeley.edu/blog/2018/08/06/recurrent/
  4. Https://medium.com/@kion.kim/wavenet-a-network-good-to-know-7caaae735435
  5. Https://github.com/JEddy92/TimeSeries_Seq2Seq
  6. Https://github.com/Arturus/kaggle-web-traffic
  7. Https://www.kaggle.com/arjunsurendran/using-lstm-on-training-data