Size: a a a

gonzo-обзоры ML статей

2020 October 03
gonzo-обзоры ML статей
источник
2020 October 05
gonzo-обзоры ML статей
Linformer: Self-Attention with Linear Complexity
Sinong Wang, Belinda Z. Li, Madian Khabsa, Han Fang, Hao Ma
Статья: https://arxiv.org/abs/2006.04768

Хочется написать про свежий Performer, но пожалуй стоит перед ним написать про Linformer.

Это всё из серии про уменьшить квадратичную сложность полного механизма внимания в трансформере. Линформер, очевидно по названию, уменьшает сложность до линейной и по времени и по месту. За последние полгода таких работ уже несколько, недавний Big Bird (https://t.me/gonzo_ML/381) из свежего, или чуть более ранняя работа с многообещающим названием “Transformers are RNNs” (https://arxiv.org/abs/2006.16236).

Разберём Linformer.

Идея в общем проста — заменим полную матрицу внимания на низкоранговую аппроксимацию. Авторы исходят из наблюдения, что self-attention низкоранговый. Для этого они анализируют спектр матрицы и утверждают, что особенно в верхних слоях, больше информации сконцентрировано в наибольших сингулярных значениях. И грубо говоря, считаем SVD для матрицы внимания и оставляем только k сингулярных значений (например, 128).

SVD только дорого считать на каждый чих, поэтому делаем проще, вводим две линейные проекции для K и V (Q не трогаем) перед расчётом внимания, так что в итоге считать придётся меньше. Оригинальные размерности n*d матрицы ключей и значений конвертятся в k*d и дальше внимание уже скейлится линейно, получается матрица внимания n*k вместо n*n.

Для пущей оптимизации эти матрицы проекций (E и F) можно ещё и пошарить между головами или слоями.

В экспериментах получают для k=128 качество как у трансформера с n=512, а для k=256 сравнимо с n=1024. И шаринг тоже работает, даже если шарить матрицы на все слои (то есть вообще одна матрица E на всю сеть).

Ну в общем работает вроде как, качество норм. Получают качество сравнимое с BERT’ом или RoBERTa, но при в 4 раза меньшем k. Плюс всё получается быстрее и памяти жрёт меньше.
Telegram
gonzo-обзоры ML статей
Big Bird: Transformers for Longer Sequences
Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Amr Ahmed
Статья: https://arxiv.org/abs/2007.14062

Чего-то мы про Big Bird не написали, а это непорядок. Во-первых, потому что это ещё один персонаж Улицы Сезам (следующий полезный трансформер определённо надо назвать Mr. Snuffleupagus, https://muppet.fandom.com/wiki/Mr._Snuffleupagus). Во-вторых, потому что это развитие ETC (https://t.me/gonzo_ML/299) от тех же (в основном) авторов.

В двух словах идея такая: сделаем sparse attention таким, чтобы сложность механизма внимания стала линейной.

Для этого внимание разбирают на три части:
- глобальные токены g (смотрят на всю последовательность полным вниманием)
- случайные токены r (ключи, на которые смотрит каждый query)
- блок локальных соседей вправо и влево, всего w

Если про конкретику, то на задачах QA весь контекст имеет длину 4096 токенов, w=192..252, g=128..430, r=192.…
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
Rethinking Attention with Performers
Krzysztof Choromanski, Valerii Likhosherstov, David Dohan, Xingyou Song, Andreea Gane, Tamas Sarlos, Peter Hawkins, Jared Davis, Afroz Mohiuddin, Lukasz Kaiser, David Belanger, Lucy Colwell, Adrian Weller
Статья: https://arxiv.org/abs/2009.14794  
Код: https://github.com/google-research/google-research/tree/master/performer

Свеженький Performer, которому ещё недели не исполнилось, от сборной команды Гугла, DeepMind, Университета Кэмбриджа и Института Алана Тьюринга.

Окей, ладно, в реальности он появился ещё в июне в другой статье с названием “Masked Language Modeling for Proteins via Linearly Scalable Long-Context Transformers” (https://arxiv.org/abs/2006.03555), но она объявлена deprecated, так что он всё равно обновился (как минимум, добавился + к методу FAVOR).

Цель всё та же — заменить стандартное квадратичное внимание трансформера чем-то линейным. Но хочется это сделать так, чтобы точность была гарантирована, и при этом не полагаться на какие-то прайоры типа разреженности или низкоранговости.

Куча модификаций трансформера, также целящихся в его ускорение, не имеют целью аппроксимировать стандартное [софтмакс] внимание, а скорее предлагают более специфические механизмы внимания, часто за счёт дополнительных ограничений. Эти методы как правило без строгих гарантий относительно representational power и проверить их часто можно лишь эмпирически. Есть группа оптимизаций лишь по части памяти (обратимые слои или шаренные веса), но они не про аппроксимацию внимания. Из идейно близкого будет Linformer (https://t.me/gonzo_ML/397), но его оценка внимания смещённая и он даёт большую среднеквадратичную ошибку.

Авторы предложили новый интересный подход под названием FAVOR+: Fast Attention Via positive Orthogonal Random features. В двух словах он даёт качество полноценного механизма внимания (с теоретическими гарантиями), но с линейной сложностью!

Сначала про FA (Fast Attention). Здесь используются ядерная функция (kernel) от  рандомизированного мэппинга φ(x) фич размерности d в размерность r. Авторы предлагают вид φ(x) такой, что через него можно смоделировать большинство ядер, используемых на практике (Гауссово, софтмакс, PNG-ядра).

В частности для софтмакса получают несмещённую аппроксимацию через тригонометрические функции (sin, cos). Но с ними засада — рандомный маппинг с потенциально отрицательными значениями ведёт к нестабильному поведению, особенно когда ядро близко к нулю. Авторы взамен предлагают устойчивый механизм с положительными рандомными фичами. Это про R+ часть.

И наконец в фичи добавляют ортогональность, это ещё уменьшает дисперсию оценки софтмакса внимания. Это O-часть метода.

Желающие могут проверить предложенную теорию положительных ортогональных случайных фич, есть доказательства разных интересных свойств.

Далее идут эксперименты, где в стандартном трансформере заменяют механизм внимания на предложенный, оставляя всё остальное как есть (такой вот drop-in replacement). Получают линейное время и субквадратичную память. Кроме того, показывают, что и ортогональные и положительные фичи дают меньшую ошибку в реконструкции внимания, чем IID и тригонометрические.Также на разных задачах (например, на белковом TrEMBL) показывают, что в целом перформанс Performer’а соответствует нормальному трансформеру, чего не скажешь о перформансе Linformer’а или Reformer’а (https://t.me/gonzo_ML/176).

Отдельный интерес — датасеты с длинными последовательностями, на которых обычный трансформер даже не посчитаешь. 6-слойный Performer равносилен 12-слойному Reformer’у, аналогично с 12/24 слоями.

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

История эта скорее всего сильно больше, чем только про трансформеры. Наверняка, оно будет полезно и в куче других мест с механизмами внимания. Большое поле для деятельности. Ну и тема про рандомные фичи, думаю, ещё не раз себя покажет с интересных сторон.
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2020 October 07
gonzo-обзоры ML статей
GeDi: Generative Discriminator Guided Sequence Generation
Ben Krause, Akhilesh Deepak Gotmare, Bryan McCann, Nitish Shirish Keskar, Shafiq Joty, Richard Socher, Nazneen Fatema Rajani

Статья: https://arxiv.org/abs/2009.06367
Блогопост попроще: https://blog.einstein.ai/gedi/
Родной код: https://github.com/salesforce/GeDi
(и там же ссылка на демо в colab notebook)

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

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

- учат отдельную generative discriminator (GeDi) языковую модель, размерами поменьше основной;
- при обучении используется двойной loss -- обычный для LM + дискриминаторный по заданному набору классов, например <positive>/<negative>;
- такая модель может быть достаточно маленькой выдавать и не очень гладкий текст, т.к. сэмплить из неё напрямую никто не собирается;
- вместо этого она сэмплится одновременно с основной, но её logits на следующий токен используют для перевзвешивания logits большой модели (GPT-2, например).

Таким образом показывают, что можно направлять генерацию generic GPT-2 на нужный топик и/или сентимент, уменьшать вероятность "toxic output", ну и так далее, если у вас на чём такой generative discriminator обучить.

Это конечно, не первая попытка сделать внешнее управление генерации классификаторами, например, год назад команда из Uber предлагала пускать в процессе генерации градиент от классификатора внутрь модели (https://arxiv.org/abs/1912.02164), но тут всё проще и эффективнее, а также поддерживает концепцию Zero-shot learning, т.к. подобные классификаторы можно будет отстегнуть и потом переиспользовать с GPT-5, GPT-7 и так далее, без какого-либо дообучения.
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник