Telegram Web Link
Chronos: Learning the Language of Time Series
Abdul Fatir Ansari, Lorenzo Stella, Caner Turkmen, Xiyuan Zhang, Pedro Mercado, Huibin Shen, Oleksandr Shchur, Syama Sundar Rangapuram, Sebastian Pineda Arango, Shubham Kapoor, Jasper Zschiegner, Danielle C. Maddix, Michael W. Mahoney, Kari Torkkola, Andrew Gordon Wilson, Michael Bohlke-Schneider, Yuyang Wang
Статья: https://arxiv.org/abs/2403.07815
Код: https://github.com/amazon-science/chronos-forecasting

TLDR: Предобученная трансформерная языковая модель для временных рядов с представлением ряда в виде последовательности токенов. Модель Chronos основана на T5, размеры от 20M до 710M.

Временные ряды -- большая и интересная тема, работ в ней поменьше чем в NLP или CV, но регулярно попадаются. Раньше была очень популярная тема с RNN (она отчасти возрождается сейчас с SSM, https://www.tg-me.com/gonzo_ML/2148), ещё раньше были модели типа ARIMA и т.п. Есть фейсбучная библиотека Prophet (https://github.com/facebook/prophet). Было много подходов со специальными архитектурами, в частности можно вспомнить, например, использовавшиеся для предсказания погоды и не только Temporal Convolutional Networks (TCN, https://arxiv.org/abs/1608.08242), или околотрансформерный Informer (https://arxiv.org/abs/2012.07436). Но это далеко не всё.

За последний год-два валом повалили попытки так или иначе использовать LLM, от совсем прямолинейных типа через GPT-3 (https://arxiv.org/abs/2310.07820), Time-LLM (https://arxiv.org/abs/2310.01728) или PromptCast (https://arxiv.org/abs/2210.08964) до более специальных, например, Lag-Llama (https://arxiv.org/abs/2310.08278) или TimesFM (https://arxiv.org/abs/2310.10688). Было и есть и много всего другого, вот свежий обзор по теме (https://arxiv.org/abs/2401.13912).

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

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

Одна из очевидных проблем -- временные ряды обычно состоят из вещественных чисел, а не токенов из конечного словаря, поэтому чтобы работать с LLM надо временной ряд токенизировать. Для этого он сначала скейлится (делим на среднее, но можно при желании и другую схему реализовать), а затем квантуется на B бинов (использовалось B = 4094), при деквантовании возвращается центр бина. Бины (их границы и центры) могут быть равномерно распределёнными или зависимыми от данных. Кроме B временных токенов добавлены ещё два специальных PAD (для пропущенных значений и паддинга) и EOS (для обозначения конца последовательности). Никакая другая информация (например, время или частота) к данным не добавляется.

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

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

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

Mixup использовался для изображений, там создавалась синтетическая картинка через взвешенную комбинацию двух реальных. Авторы предложили TSMix, обобщающий Mixup до более чем двух точек -- здесь это взвешенная комбинация k последовательностей. Веса сэмплятся из симметричного распределения Дирихле, Dir(α).
В дополнение к TSMix используется метод KernelSynth, генерящий искусственные данные через гауссовские процессы, где задаётся библиотека ядер (линейное ядро для тренда, RBF для гладких локальных изменений, периодические ядра для сезонных трендов). Ядра сэмплятся (с возвращением) из библиотеки и комбинируются через сложение или умножение. Итоговое ядро используется для генерации последовательности заданной длины.

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

Обучили модели T5 четырёх размеров (в репе есть и пятый Tiny на 8M): Mini (20M), Small (46M), Base (200M) и Large (710M), а также GPT-2 base (90M). Обучено на 10M TSMix аугментаций из 28 обучающих датасетов и 1M синтетических последовательностей, сгенерённых через Gaussian processes. Смешиваются в пропорции 9:1. Оригинальные данные включались в TSMix с вероятностью ⅓. Батч в обучении был 256 последовательностей. Размер контекста у моделей 512, длина предсказания 64. Обучалось 200K шагов, AdamW. Это одна из первых работ, где я вижу репортинг реальной цены за обучение, от ~250$ и ~8 часов на p4d.24xlarge (8xA100 40GB) для малой модели до 2066$ и 63 часов.

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

1) Локальные модели, оценивающие параметры для каждой последовательности индивидуально
2) Задаче-специфичные, обучаемые (или файнтюн) для каждой задачи отдельно
3) Предобученные модели без задаче-специфичного дообучения, одна модель для всего.

Оценивали как вероятностные (weighted quantile loss, WQL) так и точечные предсказания (mean absolute scaled error, MASE). Всего оценивалось на 42 датасетах разбитых на Benchmark I (In-domain, 15 датасетов) и Benchmark II (Zero-shot, 27 датасетов).

На in-domain Chronos прям хорош. Не только лучше локальных моделей, но и лучше задаче-специфичных. На zero-shot тоже хорош, 2-3 места. Бьёт модели, которые видели в обучении эти задачи. Это прям круто для zero-shot, когда модель такого вообще не видела. А если ещё и зафайнтюнить на эти задачи, то вообще хорошо, лучше остальных.

Интересно, кстати, что декодерная Chronos GPT-2 с 90М параметров отстаёт по качеству от энкодер-декодерных Small (46M) и Mini (20M). Незначительно, но стабильно.

Судя по кривым лосса и метрик, ещё большие модели ещё улучшат результаты. Рандомная инициализация чуть получше старта с предобученных на языке (датасет C4) весов. TSMix + KernelSynth в обучении лучше, чем без одного или обоих, особенно на zero-shot. С увеличением контекста модель предсказывает лучше. С увеличением размера словаря тоже.

Качественно модель неплохо предсказывает различные паттерны: шумовой процесс, тренд, сезонность, комбинированный паттерн, AR-процесс.

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

Есть ограничения: модель фокусируется на univariate time series и не учитывает никакую дополнительную информацию, которая может иметься. Также отдельная проблема -- скорость инференса. Здесь Chronos ощутимо проигрывает специализированным лёгким моделькам. Зато нет необходимости деплоить 100500 отдельных моделей если что.

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

Напоминаю, что поддержать проект можно тут patreon.com/GonzoML
2024/05/21 11:44:20
Back to Top
HTML Embed Code: