gonzo-обзоры ML статей
24.3K subscribers
3.93K photos
6 videos
3 files
1.75K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
Distilled One-Shot Federated Learning
Yanlin Zhou, George Pu, Xiyao Ma, Xiaolin Li, Dapeng Wu
Статья: https://arxiv.org/abs/2009.07999

Прикольная работа с несколькими баззвордами. Пойдём по порядку с конца.

Federated Learning (FL) — классная парадигма обучения в распределённой среде, когда нет центрального сервера, собирающего все данные мира и обучающего на них у себя модель, а есть куча клиентов, что-то делающих со своими данными у себя на местах и отсылающие в центр информацию для обучения общей модели (обычно веса или градиенты), и центральный сервер собирает из этого итоговую модель, которую потом всем рассылает. Или не рассылает, а предоставляет централизованно, но главное, что данные остаются у клиентов, что хорошо.

Вот вам комикс про FL в тему: https://federated.withgoogle.com/

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

По части коммуникации традиционные варианты FL требуют множества раундов обмена данными, это хочется сократить. Отсюда One-Shot в названии метода — результат получаем всего за один раунд коммуникации. А предлагается заюзать для этого дистилляцию данных (Dataset Distillation, мы писали про него почти год назад, https://xn--r1a.website/gonzo_ML/143).

Напомним в двух словах, что такое Dataset Distillation. Под конкретную модель с конкретными начальными весами на основе обучающего датасета мы генерим такие искусственные примеры, которые дадут минимальный итоговый лосс на этой модели за обычно небольшое число шагов обучения. Вплоть до одного примера на класс как в исходной работе (свежие работы показывают, что и это не предел, но про них как-нибудь отдельно).

Итоговая схема Distilled One-Shot Federated Learning (DOSFL) такая:
1. Центральный сервер инициализирует модель и рассылает её клиентам.
2. Клиенты дистиллируют свои датасеты и получают небольшие новые датасеты, не содержащие исходных данных, но хорошо способные обучить имеющуюся модель.
3. Клиенты отсылают дистиллированные датасеты на сервер.
4. Сервер собирает всё вместе и обучает свою модель.
5. Сервер рассылает всем обученную модель.
PROFIT!

Есть ещё тонкость по части гетерогенности, мы можем получить плохую сходимость итоговой модели, более медленную и нестабильную. Для борьбы с этим авторы предлагают две техники: soft resets (когда начальные параметры модели сэмплятся из гауссового распределения вокруг исходных параметров, мы делаем это во время дистилляции, получая более устойчивые примеры) и random masking (случайное маскирование части дистиллированных данных на время итерации и замену их на случайные тензоры).

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

Авторы экспериментируют на картинках (LeNet на MNIST) и текстах (TestCNN на IMDB, BiLSTM на TREC-6), метод работает, получается сносное качество (но пока ниже, чем если обучаться на датасетах напрямую).

Есть и трудности. Дистилляция датасетов всё-таки достаточно требовательный к ресурсам процесс, и не на каждом устройстве его можно провести (но никто не запрещает собрать гибридную схему с более мощным хабом, который занимается дистилляцией внутри контура). Есть также риски model poisoning, когда вам пришлют “отравленные” данные, из-за которых модель деградирует (но оно не ново для DOSFL, в классическом FL тоже можно прислать отравленные градиенты/веса, и даже просто при обмене данными можно прислать испорченные картинки; с дистилляцией наверное это проще сделать незаметно, но не факт, если вспомнить про adversarial examples).
В целом это интересное новое направление внутри тоже сравнительно свежего FL. Вокруг этой идеи и её развития могут возникнуть какие-то новые бизнес-модели по части “как делиться данными так, чтобы их не терять” и “как сообща побеждать крупных игроков”.

Хороший момент, чтобы что-нибудь застолбить в этой области! :)
Вот это вот прекрасно!
Очередные несколько анонсов/объявлений на случай, если вам это тоже интересно (от @che-shr-cat).

1) В субботу выступил на гугловом GDG DevFest 2020 (https://gdg-russia.com/?#!/tab/235456433-4) с докладом про трансфомеры — ”Transformer Zoo (a deeper dive)”. Это обновлённый по свежим публикациям доклад с семинара NTR. Запись видео и ссылка на слайды тут:
https://www.youtube.com/watch?v=7e4LxIVENZA

2) Записали подкаст с Михаилом, ведущим канал “Стать специалистом по машинному обучению” (https://xn--r1a.website/toBeAnMLspecialist). Поговорили про AGI и вокруг него.
Эпизод здесь: https://anchor.fm/kmsrus/episodes/008-ML-el7p5u

3) В среду 21 октября в 19:00 планирую быть в прямом эфире в передаче Саркиса Григоряна “Искусство интеллекта”. Обсудим 2020-й год в ИИ.
Больше деталей тут: https://www.facebook.com/sarkis.grigoryan/posts/10223846414296194
И ещё одно объявление.

Мы планируем запустить онлайн семинар/журнальный клуб по разбору статей вокруг общего искусственного интеллекта (AGI). Если вам интересно участвовать в этой активности в качестве слушателя или докладчика (или ещё как), ответьте, пожалуйта, на вопросы анкеты:

https://forms.gle/6dx54vmruiSVAv9A8
An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby
Статья: https://arxiv.org/abs/2010.11929
Код: https://github.com/google-research/vision_transformer
Ещё код: https://paperswithcode.com/paper/an-image-is-worth-16x16-words-transformers-1
Модели: https://console.cloud.google.com/storage/browser/vit_models

Знаковая работа от позавчера.

Можно было бы дать кликбейтовый заголовок “Новый ImageNet moment в распознавании изображений!”, но оставим попсу для других. Свежий Vision Transformer (ViT), предобученный на больших датасетах, демонстрирует SoTA и вообще интересное поведение на картинках и наверняка станет громким аналогом BERT’а в работе с изображениями, потеснив давно уже там доминирующие резнеты. Кажется, это таки знаменует пришествие self-attention’а в работу с изображениями.

Исторически это, конечно, далеко не первый подход к снаряду — было много попыток применить трансформеры к работе с картинками, начиная с Image Transformer и Sparse Transformer, к более поздним Axial Attention и multidimensional transformers (которые в принципе по-прежнему интересны), а также в наличии большой пласт работ, которые не то чтобы делают очередной трансформер, а скорее собирают аналоги свёрточных сетей на блоках с разными вариантами реализации self-attention (которые тоже интересны).

Данная работа выделяется в нескольких моментах:

1) Взята практически стандартная архитектура трансформера, для которой картиночные данные на входе адаптируют в более понятный для трансформера вид. В этом смысле это очень похоже на недавний Image GPT от OpenAI (iGPT, https://openai.com/blog/image-gpt/), также применявший стандартную в NLP архитектуру (языковую модель построенную на декодере трансформера) к последовательности пикселей (ну то есть вообще почти не адаптировали кроме как растянули картинку в строку). Предыдущие упомянутые варианты трансформеров для изображений уходили в более кастомные архитектуры (локальные или разреженные ядра и т.п.). Плюс текущего подхода в том, что в такую модель легко инкорпорировать все другие свежие достижения, показавшие профит на языковых задачах.

2) Модель предобучена на очень больших датасетах, стандартный ImageNet из них самый маленький и неинтересный. И хоть на малых датасетах (включая обычный ImageNet) рулили резнеты, на большом масштабе случается переход количества в качество и новая модель уделывает свёрточные архитектуры. И видно, что это ещё далеко не предел, есть серьёзный задел на будущее.

3). Предобученная модель (ну, одна из) выложена и её можно использовать для своих задач в режиме файнтюнинга. В таком режиме она вполне себе бьёт весь остальной имеющийся на данный момент state-of-the-art даже на старых добрых датасетах типа CIFAR-100. Научные результаты в DL безусловно важны, но часто для прогресса не менее важна трансляция научных результатов в практическую плоскость, и данная модель может стать тем же, чем стал BERT для NLP (и чем лишь очень ограниченно пока стал GPT-x).

Более детально про то, что сделано.

Как я говорил, взята практически стандартная архитектура трансформера. Для того, чтобы она работала с картинками, их специальным образом готовят: нарезают на патчи (например, размера 16x16 пикселей) и для каждого делают flatten, то есть переводят в одномерную последовательность, а затем её переводят в эмбеддинг фиксированной размерности через обучаемое линейное преобразование. Получается последовательность патчей. К ним добавляют позиционные эмбеддинги (в данном случае даже не синусоидальные как в дефолтном трансформере, а простые обучаемые). Ну и дополнительно в начало добавляют дополнительный токен [class] по аналогии с бертовым [CLS]. Эта позиция будет использоваться на выходе энкодера для классификации.

Есть ещё минорная разница с дефолтным трансформером, что слои нормализации стоят до self-attention и ffn, но это в целом мелочи.
1
Также рассматривают гибридную архитектуру, когда трансформер работает поверх feature maps полученных из свёрточной сети. Но сразу скажу, что на большом масштабе это профита не даёт, даёт только на малом.

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

Из датасетов берут старый добрый ImageNet (1.3M картинок, 1k классов), ImageNet-21k (14M картинок, 21k классов), а также JFT (303M картинок и 18k классов). На этом добре предобучают, затем делают fine-tuning на другие датасеты аналогичным берту образом (добавляя feed-forward слой взамен исходного классифицирующего и обучая его). В некоторых случаях репортят метрики даже без файнтюнинга, а простым few-shot learning’ом через линейную регрессию на замороженных эмбеддингах.

Рассматривают несколько вариантов моделей: ViT-Base и ViT-Large (по аналогии с бертом, 12 и 24 слоя), а также ViT-Huge (36 слоёв).

Модели обозначаются так: ViT-L/16, это значит, что взят ViT-Large с размером патча 16x16 пикселей.

Для сравнения взяты сильные бейзлайны на резнетах, которые дают SoTA на ImageNet (Noisy Student) или других датасетах (BiT-L).

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

Одно из главных наблюдений, на большом предобучении ViT начинает рулить и бить резнеты. И это очень интересное наблюдение, напоминающее старый добрый The Bitter Lesson Саттона (http://www.incompleteideas.net/IncIdeas/BitterLesson.html). Архитектура без специальных implicit bias (каковы были у свёрточных сетей) на большом обучении выучивает свои паттерны, которые оказываются даже лучше. И по графикам видно, что ViT ещё не насыщается на датасете с 300M картинок, так что можно ожидать дальнейшего масштабирования.

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

В supplementary есть интересное сравнение с Axial Transformer (https://arxiv.org/abs/1912.12180, в двух словах, он делает независимые одномерные внимания по каждой из осей тензора). Сравнивают ViT со специальным вариантом резнета AxialResNet, а также с модифицированным Axial-ViT. Варианты Axial-ViT лучше, но требуют больше вычислений.

В общем, я думаю, теперь от ViT в разные стороны разойдётся большое количество модификаций, будет adaptive radiation (https://en.wikipedia.org/wiki/Adaptive_radiation).
mT5: A massively multilingual pre-trained text-to-text transformer
Linting Xue, Noah Constant, Adam Roberts, Mihir Kale, Rami Al-Rfou, Aditya Siddhant, Aditya Barua, Colin Raffel
Статья: https://arxiv.org/abs/2010.11934
Код: https://github.com/google-research/multilingual-t5

Ещё одна свежая работа про большой масштаб. Гугл без лишней шумихи и ажиотажа выпустил многоязычный вариант своего T5 — mT5.

T5 (https://arxiv.org/abs/1910.10683) вообще почему-то малоупоминаемая работа, и мы сами грешны, почти про него не писали. Исправляемся.

Ещё год назад Гугл сделал огромную работу. Собрал огромный датасет “Colossal Clean Crawled Corpus” (C4) на 750Gb. Собрал большой полный трансформер (энкодер+декодер) и предобучил его в unsupervised или скорее self-supervised режиме с denoising objective похожей на бертовский MLM, только здесь заменяются не отдельные токены, а небольшие спаны. Полученная модель потом файн-тюнилась на задачи из GLUE/SuperGLUE, SQuAD, WMT и т.п.

Интересно, что модель эта — полноценный seq2seq, то есть даже задачи классификации сводились к генерации текстовой метки класса, например, “entailment”, “contradiction” или “neutral” на MNLI, а задачи регрессии к выдаче строки вида “2.6”. Назвали эту модель “Text-to-Text Transfer Transformer” или сокращённо T5 (до T-800 или T-1000 ещё далековато).

Огромность работы заключалась в том, что исследователи проверили кучу гипотез: какая objective лучше, какая структура модели, сколько токенов в обучении надо, как модель скейлится по разным измерениям и т.п. и выбрали лучшие варианты. Получили в разных местах SoTA, как водится.

Обучили и выложили (https://github.com/google-research/text-to-text-transfer-transformer#released-model-checkpoints) модели разных размеров: 60M, 220M, 770M, 3B, 11B параметров (напомню, самый большой GPT-2 в тот момент был 774M, а 1.5B открыли уже после этой статьи https://openai.com/blog/gpt-2-1-5b-release/ в ноябре 2019).

Обратите внимание, Гугл сразу выложил обученную модель на 11B параметров! И при этом не кричали как OpenAI. И вообще до сих пор довольно скромно про это рассказывали.

Так вот, на днях пришёл черёд мультиязычной модели, mT5. Для неё тоже собрали датасет (теперь он называется mC4), с поддержкой 107 языков (из них правда 6 языков это вариации основного, но латиницей, что забавно среди них есть ru-Latn). Русский, кстати, на втором месте в этом датасете, набрали на 713B токенов! Ну и вообще нам на самом деле есть чем гордиться с русским языком, в вебе он второй после английского: https://en.wikipedia.org/wiki/Languages_used_on_the_Internet#Content_languages_for_websites.

Датасет выложен: https://www.tensorflow.org/datasets/catalog/c4#c4multilingual_nights_stay

Далее на этом датасете обучили mT5 по лучшим рецептам из T5 (точнее даже из T5.1.1). Тщательно выбирали параметры сэмплинга языков, чтобы редкие обучились, но не переобучились. По модели особо не мудрствовали, старались следовать родным рецептам. По ходу дела поэкспериментировали с разными ablations, описали эффекты, выбрали лучшие параметры.

Так же опубликовали (https://github.com/google-research/multilingual-t5#released-model-checkpoints) набор моделей: 300M, 600M, 1B, 4B и 13B (у mT5 больший словарь по сравнению с чисто английским T5, так что увеличение размера моделей отсюда).

Тестировали на задачах из XTREME benchmark, так же получили SoTA и побили идейно близкие модели типа mBERT, XLM/XLM-R.

В общем это мегакруто. У нас теперь есть набор моделей разного размера (до реально очень больших, которые не так-то просто гонять будет) с поддержкой 101 языка и готовых к файнтюнингу на более-менее любые seq2seq задачи. Респект Гуглу!
👍1