gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24K subscribers
2.75K photos
2 videos
3 files
1.36K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
Perceiver IO: A General Architecture for Structured Inputs & Outputs
Andrew Jaegle, Sebastian Borgeaud, Jean-Baptiste Alayrac, Carl Doersch, Catalin Ionescu, David Ding, Skanda Koppula, Daniel Zoran, Andrew Brock, Evan Shelhamer, Olivier Hénaff, Matthew M. Botvinick, Andrew Zisserman, Oriol Vinyals, João Carreira
Статья: https://arxiv.org/abs/2107.14795
Пост: https://deepmind.com/blog/article/building-architectures-that-can-handle-the-worlds-data
Код (на JAX/Haiku): https://github.com/deepmind/deepmind-research/tree/master/perceiver
Код (неавторский, на PyTorch): https://github.com/krasserm/perceiver-io

В марте мы писали про архитектуру для работы с мультимодальными данными от DeepMind под названием Perceiver (https://news.1rj.ru/str/gonzo_ML/545).

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

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

В июле 2021 вышел Perceiver IO, который устраняет этот недостаток.

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

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

Для задач с гомогенными выходами (например, токены языка или пиксели изображения) query могут содержать позиционные эмбеддинги (обучаемые или Фурье для картинок/звука). Для мульти-{таск, модальность} историй в query может быть эмбеддинг {задачи, модальности}.

В качестве выходов и задач используются:
1) тексты (размером 512-2048 токенов или UTF-8 байт) и MLM-предобучение + задачи из GLUE (выходные размерности от 8 до 2048);
2) видео (размером 22816) и задача предсказания оптического потока (с выходом размера 11408);
3) видео+аудио+метка в задаче автокодирования видео из датасета Kinetics-700-2020 (размера 50657x704 на входе и 803297x512 на выходе; разница, видимо, из-за того, что на входе обрабатывают патчи 4x4, а выход генерят попиксельно)
4) множество юнитов StarCraft и задача выбора юнитов для замены трансформера в AlphaStar (система DeepMind, игравшая в StarCraft).
5) картинки (50176 пикселей) и классификация на 1000 классов.

Получаются вполне достойные результаты.

На языковых задачах получается обучить модель без токенизатора (на уровне UTF-8), соответствующую аналогичной по FLOPS бейзлайн-модели с SentencePiece токенизатором.

На определении оптического потока модель вполне конкурентоспособна в сравнении со специально созданными для этого методами (PWCNet, RAFT), а на одной из задач даже получила SoTA, что классно с учётом общности модели и отсутствия существенной кастомизации под задачу.

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

В AlphaStar получилось заменить оригинальный трансформер Perceiver’ом IO с 32 латентами (на входе и выходе он работает с 512 юнитами).
👍1
На классификации картинок ImageNet и обычный Perceiver работал сносно, но здесь применяется более общий декодер и Perceiver IO стабильно лучше.

Можно сказать, что на пути к одной универсальной архитектуре, которая может работать с различными модальностями по множеству разных задач, это прогресс. При этом некоторые вопросы ещё не решены. Например, пока не исследовался вопрос генеративного моделирования, а также механизмы автоматической настройки размера латентного пространства. В любом случае выглядит интересно.
Pretrained Transformers as Universal Computation Engines
Kevin Lu, Aditya Grover, Pieter Abbeel, Igor Mordatch
Статья: https://arxiv.org/abs/2103.05247
Код: https://github.com/kzl/universal-computation

Прикольная работа весны этого года из Беркли/Google/FB, про которую нелишне ещё раз поговорить.

Общая идея в том, что обычные предобученные трансформеры для NLP (GPT-2) на самом деле довольно легко генерализуют на другие модальности (комп.зрение, вычислительные операции или предсказание структуры белка) без файнтюнинга self-attention или полносвязных слоёв. Получается, что предобучение на языковых задачах выучивает какие-то более глубокие и универсальные структуры вычислительной реальности, помогающие в довольно далёких задачах иной природы.

Для работы берут предобученный трансформер (в данном случае GPT-2), замораживают все его веса кроме линейных входных и выходных слоёв, а также позиционных эмбеддингов и параметров LayerNorm. Эти незамороженные веса потом будут файнтюниться, а такой замороженный трансформер называется Frozen Pretrained Transformer (FPT).

И этот FPT обучается решать задачи с качеством, аналогичным обучению полного трансформера или LSTM, несмотря на то, что файнтюнилась только 0.1% всех параметров и вообще не трогались параметры self-attention. Это интересно.

Задачи взяты следующие:

1. Bit memory: показывают пять битовых строк длины 1000, затем модели показывают одну из этих пяти с замаскированными с вероятностью 0.5 битами, и модель должна восстановить оригинальную строку.

2. Bit XOR: модели дают две битовых строки длины пять (по одному биту за раз), и она должна выдать поэлементный XOR.

3. ListOps: на вход дают последовательность операций со списками (похоже на LISP) и на выходе нужно получить результат этих операций.

4. MNIST: стандартный MNIST, где надо классифицировать картинку с цифрой, но на вход поступают 64 токена с патчами 4x4.

5. CIFAR-10: аналогично

6. CIFAR-10 LRA: модификация с Long-Range Arena, всё переведено в grayscale и flattened и подаётся по токену размера 1 за раз. По сути sequential CIFAR.

7. Remote Homology Detection: по последовательности аминокислот белка предсказать метку (всего 1195 классов). При этом никакого предобучения на базах последовательностей типа Pfam.

В случае GPT-2 Base n_dim=768, n_layers=12, входные и выходные размерности d_in, d_out зависят от задачи, максимальная длина последовательности l.

Для кейса с CIFAR-10 (d_out=10, d_in=16, l=64) получаются обучаемые параметры:
- выходной слой (768*10 = 7680 параметров)
- входной слой (16*768 = 13056)
- параметры LayerNorm (4*768*12 = 36684)
- позиционные эмбеддинги (64*768 = 49512)

Всё скейлится линейно по параметрам датасета. Для базовой модели GPT-2 со 124M параметров это всего лишь 0.086%, а для GPT-2 XL вообще 0.029%.

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

Сравниваются с 1) трансформером, который обучается с нуля на задачу, с 2) LSTM также обучающемся сразу на задачу.

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

В некоторых случаях с маленькими датасетами обучить 12-слойный трансформер с нуля не получается, поэтому берут трансформер поменьше, например трёхслойный для CIFAR. С другой стороны для FPT увеличение модели только улучшает результат.

Сравниваются с разным другим предобучением (случайная инициализация без предобучения, предобучение на bit memory задаче, предобученный ViT -- с ним есть тонкость, потому что он обучался как энкодер, а GPT-2 -- декодер).

Здесь, во-первых, интересно, что случайная инициализация даёт весьма хороший результат (частый кейс и сильный бэйзлайн, рандомные фичи рулят). Во-вторых, предобучение на языке явно рулит.
1
Из более глубокого копания в случайных фичах показывают, что случайно инициализированный трансформер работает явно лучше, чем случайно инициализированная LSTM. То есть что-то есть в архитектуре. Есть в self-attention какой-то более подходящий inductive bias для универсальных вычислений.

Дообучение FPT сходится быстрее, чем дообучение случайных фич (обычно в несколько раз, но на кейсе XOR это 40x).

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

Также показывают (через разницу между test/train accuracy), что FPT не оверфитится, в отличие от обучаемых с нуля, в том числе более мелких трансформеров. И как я писал выше, более тяжёлые модели FPT только улучшают результат, в отличие от обучаемых с нуля.

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

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

Есть эксперимент, где обучают только выход (что по сути получается похожим на reservoir computing/ESN) и оно в целом работает, но хуже FPT (зато быстрее в сотни и тысячи раз).

Пробуют вместо GPT-2 также BERT, энкодер T5 и Longformer. В целом поведение похоже, только у T5 просадка (но интересно было бы посмотреть на T5 с декодером).

В общем это интересный набор исследований. В контексте движения про Foundation Models мы и правда можем оказаться через неокторое время в ситуации, когда у нас есть огромные предобученные модели, демонстрирующие как минимум good enough результаты на куче разнородных задач, и даже если мы не понимаем, почему именно они работают, их можно хоть зашивать в железо (после различной оптимизации, и возможно даже в аналоговом виде) и предоставлять как универсальную микросхему для решения большого класса задач, по сути Микропроцессор 2.0. Если это будет достаточно массово и дёшево, может родиться новый класс доступных и умных продуктов с интеллектом “на месте”, а не в облаке.