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 слоями.
Работа изначально делалась с прицелом на биологические последовательности, что очень круто. Кажется, наконец, появился прямо таки заточенный на биоинформатику трансформер!
История эта скорее всего сильно больше, чем только про трансформеры. Наверняка, оно будет полезно и в куче других мест с механизмами внимания. Большое поле для деятельности. Ну и тема про рандомные фичи, думаю, ещё не раз себя покажет с интересных сторон.
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 слоями.
Работа изначально делалась с прицелом на биологические последовательности, что очень круто. Кажется, наконец, появился прямо таки заточенный на биоинформатику трансформер!
История эта скорее всего сильно больше, чем только про трансформеры. Наверняка, оно будет полезно и в куче других мест с механизмами внимания. Большое поле для деятельности. Ну и тема про рандомные фичи, думаю, ещё не раз себя покажет с интересных сторон.
GitHub
google-research/performer at master · google-research/google-research
Google Research. Contribute to google-research/google-research development by creating an account on GitHub.
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 и так далее, без какого-либо дообучения.
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 и так далее, без какого-либо дообучения.
Drawing early-bird tickets: Towards more efficient training of deep networks
Haoran You, Chaojian Li, Pengfei Xu, Yonggan Fu, Yue Wang, Xiaohan Chen, Richard G. Baraniuk, Zhangyang Wang, Yingyan Lin
Статья: https://arxiv.org/abs/1909.11957
Код: https://github.com/RICE-EIC/Early-Bird-Tickets
Давно мы не писали про Lottery Tickets, а уже накопилось всякого. Можете поискать в канале по этой фразе предыдущие статьи, что мы разбирали.
Вот, например, работа с ICLR 2020 про перевод всей этой истории про разреженные сети высокого качества в более практическую плоскость — поиск Early-Bird Tickets.
Цель проста — находить качественные разреженные сети с меньшими вычислительными затратами. Классический подход в парадигме Lottery Ticket Hypothesis заключался в итеративной процедуре: обучение-прунинг-повтор. Это долго и требует много ресурсов, особенно начальное полное обучение.
В данной работе авторы фокусируются на быстром нахождении хороших подсетей в начальной фазе обучения, это и есть “ранние пташки”, Early-Bird tickets.
Идея эффективного нахождения ранних пташек в использовании недорогих схем обучения (early stopping, low-precision) с большими learning rates. Но сначала надо показать, что найденное на таких ранних этапах, во-первых, существует, а, во-вторых, достаточно стабильно и полезно.
Про существование. Запускаем классическую процедуру (проверяют VGG16 и PreResNet-101 на CIFAR-10/100) на 160 эпох, и проверяем начиная с ранних эпох, находится ли хороший “билет”. Находится, причём начиная уже с 20-й эпохи. И они даже превосходят по качеству билеты, полученные полной процедурой (а заодно и исходную неотпруненную сеть тоже).
Второй вопрос, получаются ли они при использовании более “дешёвой” процедуры? Получаются, и процедура с более высоким learning rate даёт такие билеты раньше. А обучение с низкой точностью (8 бит) их не разрушает.
Остаётся ещё вопрос, как эти билеты идентифицировать на практике. Для этого авторы вводят mask distance, это хэммингово расстояние между бинарными масками двух билетов (=подсетей), маски показывают какие каналы остались, а какие удалились. Подсети получают структурированным прунингом (это когда удаляют каналы целиком, а не отдельные веса как в неструктурированном, для большинства железа структурированный метод более френдли), выкидывая топ-p% каналов с минимальным “весом”. Вес, что интересно, берётся из масштабирующего множителя из BatchNorm, здесь исходим из интуиции (как-то подтверждённой в других работах), что большее значение этого коэффициента относится к более значимым фильтрам. Эти маски быстро становятся достаточно стабильными и изменения между ними по mask distance уменьшаются. Билет отбирается, когда это расстояние оказывается меньше эпсилон (в работе 0.1). Для пущей стабильности это проверяется по пяти последним маскам.
Итоговый алгоритм называется EB Train (гусары, молчать!).
Алгоритм экспериментально проверяют и сравнивают с дефолтным LT, а также некоторыми другими алгоритмами прунинга типа SNIP, ThiNet, network slimming (NS). Качество EB Train выше.
Есть хорошая находка в плане измерения реальной экономии энергии. FLOPSы показывают не всё, только вычислительные операции, а в реальной работе много энергии уходит также на перемещение данных. Авторы применили классный лайфхак — обучают модели на внешнем Jetson TX2, а энергию измеряют через power meter, к которому он подключен.
С точки зрения вычислений по FLOPS метод требует в пару-тройку раз меньше вычислений, чем стандартный LT, и 1.2-2.5х меньше относительно лучшего из перечисленных конкурентов. По энергии метод ощутимо более экономный — более 10x относительно стандартного LT, в районе 6-7х относительно лучшего конкурента. Достойно. Это на мелких CIFAR-ах. На более серьёзных ResNet18/50 на ImageNet разница не столь велика, но всё равно достойна.
Ещё из позитивных моментов, у проекта на редкость неплохо выглядит репа с кодом и описанием.
Haoran You, Chaojian Li, Pengfei Xu, Yonggan Fu, Yue Wang, Xiaohan Chen, Richard G. Baraniuk, Zhangyang Wang, Yingyan Lin
Статья: https://arxiv.org/abs/1909.11957
Код: https://github.com/RICE-EIC/Early-Bird-Tickets
Давно мы не писали про Lottery Tickets, а уже накопилось всякого. Можете поискать в канале по этой фразе предыдущие статьи, что мы разбирали.
Вот, например, работа с ICLR 2020 про перевод всей этой истории про разреженные сети высокого качества в более практическую плоскость — поиск Early-Bird Tickets.
Цель проста — находить качественные разреженные сети с меньшими вычислительными затратами. Классический подход в парадигме Lottery Ticket Hypothesis заключался в итеративной процедуре: обучение-прунинг-повтор. Это долго и требует много ресурсов, особенно начальное полное обучение.
В данной работе авторы фокусируются на быстром нахождении хороших подсетей в начальной фазе обучения, это и есть “ранние пташки”, Early-Bird tickets.
Идея эффективного нахождения ранних пташек в использовании недорогих схем обучения (early stopping, low-precision) с большими learning rates. Но сначала надо показать, что найденное на таких ранних этапах, во-первых, существует, а, во-вторых, достаточно стабильно и полезно.
Про существование. Запускаем классическую процедуру (проверяют VGG16 и PreResNet-101 на CIFAR-10/100) на 160 эпох, и проверяем начиная с ранних эпох, находится ли хороший “билет”. Находится, причём начиная уже с 20-й эпохи. И они даже превосходят по качеству билеты, полученные полной процедурой (а заодно и исходную неотпруненную сеть тоже).
Второй вопрос, получаются ли они при использовании более “дешёвой” процедуры? Получаются, и процедура с более высоким learning rate даёт такие билеты раньше. А обучение с низкой точностью (8 бит) их не разрушает.
Остаётся ещё вопрос, как эти билеты идентифицировать на практике. Для этого авторы вводят mask distance, это хэммингово расстояние между бинарными масками двух билетов (=подсетей), маски показывают какие каналы остались, а какие удалились. Подсети получают структурированным прунингом (это когда удаляют каналы целиком, а не отдельные веса как в неструктурированном, для большинства железа структурированный метод более френдли), выкидывая топ-p% каналов с минимальным “весом”. Вес, что интересно, берётся из масштабирующего множителя из BatchNorm, здесь исходим из интуиции (как-то подтверждённой в других работах), что большее значение этого коэффициента относится к более значимым фильтрам. Эти маски быстро становятся достаточно стабильными и изменения между ними по mask distance уменьшаются. Билет отбирается, когда это расстояние оказывается меньше эпсилон (в работе 0.1). Для пущей стабильности это проверяется по пяти последним маскам.
Итоговый алгоритм называется EB Train (гусары, молчать!).
Алгоритм экспериментально проверяют и сравнивают с дефолтным LT, а также некоторыми другими алгоритмами прунинга типа SNIP, ThiNet, network slimming (NS). Качество EB Train выше.
Есть хорошая находка в плане измерения реальной экономии энергии. FLOPSы показывают не всё, только вычислительные операции, а в реальной работе много энергии уходит также на перемещение данных. Авторы применили классный лайфхак — обучают модели на внешнем Jetson TX2, а энергию измеряют через power meter, к которому он подключен.
С точки зрения вычислений по FLOPS метод требует в пару-тройку раз меньше вычислений, чем стандартный LT, и 1.2-2.5х меньше относительно лучшего из перечисленных конкурентов. По энергии метод ощутимо более экономный — более 10x относительно стандартного LT, в районе 6-7х относительно лучшего конкурента. Достойно. Это на мелких CIFAR-ах. На более серьёзных ResNet18/50 на ImageNet разница не столь велика, но всё равно достойна.
Ещё из позитивных моментов, у проекта на редкость неплохо выглядит репа с кодом и описанием.
GitHub
GitHub - GATECH-EIC/Early-Bird-Tickets: [ICLR 2020] Drawing Early-Bird Tickets: Toward More Efficient Training of Deep Networks
[ICLR 2020] Drawing Early-Bird Tickets: Toward More Efficient Training of Deep Networks - GATECH-EIC/Early-Bird-Tickets