Parameter-Efficient Transfer Learning with Diff Pruning
Guo et al.
arxiv.org/abs/2012.07463
Новый интересный метод файнтюнинга нейросетей. Предлагается использовать специальный регуляризатор, который минимизирует число изменившихся весов. Таким образом вы можете файнтюнить много моделей и хранить только спарсовые дельты, отличающие их от оригинальной. Авторы обнаружили, что разные задачи при файнтюнинге изменяют разные слои (см картинку), а также, что можно достичь таких же результатов, как и обычный файнтюнинг модифицировав всего 0.5% параметров модели!
Guo et al.
arxiv.org/abs/2012.07463
Новый интересный метод файнтюнинга нейросетей. Предлагается использовать специальный регуляризатор, который минимизирует число изменившихся весов. Таким образом вы можете файнтюнить много моделей и хранить только спарсовые дельты, отличающие их от оригинальной. Авторы обнаружили, что разные задачи при файнтюнинге изменяют разные слои (см картинку), а также, что можно достичь таких же результатов, как и обычный файнтюнинг модифицировав всего 0.5% параметров модели!
Forwarded from ODS Events
Мы уже говорили, что на Data Ёлке 🎄вас ждёт много интересного. А сейчас расскажем про главный сюрприз!
Завтра в 12:00 к нам присоединится… Нет, не Дед Мороз — лучше! Сам Юрген Шмидхубер! 🤩 Да-да, тот самый культовый профессор искусственного интеллекта Университета Лугано, научный директор Лаборатории искусственного интеллекта (AI Lab IDSIA) Университета прикладных наук итальянской Швейцарии, сооснователь и научный руководитель компании NNAISENSE. А ещё Юрген является экспертом курса «Глубокое обучение» от Up Great и ПостНаука.
Круто? Не то слово. Но помните, послушать выступление живой легенды ML о судьбах ML, MLML, и всего такого можно будет только live, подключившись к трансляции на нашем YouTube канале. 💻 Не пропустите!
Завтра в 12:00 к нам присоединится… Нет, не Дед Мороз — лучше! Сам Юрген Шмидхубер! 🤩 Да-да, тот самый культовый профессор искусственного интеллекта Университета Лугано, научный директор Лаборатории искусственного интеллекта (AI Lab IDSIA) Университета прикладных наук итальянской Швейцарии, сооснователь и научный руководитель компании NNAISENSE. А ещё Юрген является экспертом курса «Глубокое обучение» от Up Great и ПостНаука.
Круто? Не то слово. Но помните, послушать выступление живой легенды ML о судьбах ML, MLML, и всего такого можно будет только live, подключившись к трансляции на нашем YouTube канале. 💻 Не пропустите!
Тут в чате затронули тему длинных трансформеров и я вспонил, что недавно делал презентацию с их обзором. Думаю кому-нибудь может быть полезно.
TL;DR: используйте BigBird или Linformer
https://docs.google.com/presentation/d/1qRcKLldtepnkDohA5AVqC6stMkdqjPEb4ev9jQUexh8/edit?usp=sharing
TL;DR: используйте BigBird или Linformer
https://docs.google.com/presentation/d/1qRcKLldtepnkDohA5AVqC6stMkdqjPEb4ev9jQUexh8/edit?usp=sharing
Google Docs
Applying Transformer Models to Long Texts: Challenges and Solutions.
Applying Transformer Models to Long Texts: Challenges and Solutions. Vladislav Lialin, Text Machine Lab, UMass Lowell [email protected]
Extracting Training Data from Large Language Models
Carlini et al.
статья: arxiv.org/abs/2012.07805
блогпост: bair.berkeley.edu/blog/2020/12/20/lmmem
Мы знаем, что языковые модели могут хорошо запоминать обучающую выборку (см Language Models and Knowledge Bases) и всегда подозревали, что они даже запоминают строки, встречающиеся в датасете всего один-два раза. Carlini et al. исследуют, как можно доставать именно такую информацию из GPT-2 (1.5B параметров).
Подход состоит из двух шагов: нагенерировать текстов, отсортировать их. Методы семплирования и сортировки очень важны, чтобы отсеить случаи, когда модель выдаёт тривиальные факты (числа от 0 до 100 или лицензию MIT) или просто повторяет одну фразу (I love you I love you I love you).
Для генерации модели давали префиксы текстов наскрапленых из интернета таким образом, чтобы они не пересекались с тренировочным сетом GPT-2.
Для сортировки сравнивали энтропию текста, которую выдавал алгоритм сжатия zlib. Идея в том, что тексты с низкой энтропией скорее всего и являются тривиальными / повторяющимися.
(И для семплирования и для сортировки пробовали и другие методы, за ними посылаю в статью.)
Более 60% сгенерированных текстов оказались реальными тектсами 😱 , что проверили вручную с помощью поиска в интеренете. Хоть большинство из них содержали открытые вещи, вроде новостных статей, terms of use, твитов Трампа, …, более 10% содержали в себе адреса/номера телефонов/twitter и другую персональную информацию реальных людей.
Очень советую статью к прочтению, в ней понятным и адекватным образом описаны этические вопросы. Своё мнение я бы сформулировал так: GPT-2 и друзья и так тренируются на публичных данных, до которых и так несложно добраться. Но, большим компаниям, тренирующих BERTы на внутренних данных нужно начать думать о том, как защищать веса этих моделей от утечек / использовать методы differentially private training.
Carlini et al.
статья: arxiv.org/abs/2012.07805
блогпост: bair.berkeley.edu/blog/2020/12/20/lmmem
Мы знаем, что языковые модели могут хорошо запоминать обучающую выборку (см Language Models and Knowledge Bases) и всегда подозревали, что они даже запоминают строки, встречающиеся в датасете всего один-два раза. Carlini et al. исследуют, как можно доставать именно такую информацию из GPT-2 (1.5B параметров).
Подход состоит из двух шагов: нагенерировать текстов, отсортировать их. Методы семплирования и сортировки очень важны, чтобы отсеить случаи, когда модель выдаёт тривиальные факты (числа от 0 до 100 или лицензию MIT) или просто повторяет одну фразу (I love you I love you I love you).
Для генерации модели давали префиксы текстов наскрапленых из интернета таким образом, чтобы они не пересекались с тренировочным сетом GPT-2.
Для сортировки сравнивали энтропию текста, которую выдавал алгоритм сжатия zlib. Идея в том, что тексты с низкой энтропией скорее всего и являются тривиальными / повторяющимися.
(И для семплирования и для сортировки пробовали и другие методы, за ними посылаю в статью.)
Более 60% сгенерированных текстов оказались реальными тектсами 😱 , что проверили вручную с помощью поиска в интеренете. Хоть большинство из них содержали открытые вещи, вроде новостных статей, terms of use, твитов Трампа, …, более 10% содержали в себе адреса/номера телефонов/twitter и другую персональную информацию реальных людей.
Очень советую статью к прочтению, в ней понятным и адекватным образом описаны этические вопросы. Своё мнение я бы сформулировал так: GPT-2 и друзья и так тренируются на публичных данных, до которых и так несложно добраться. Но, большим компаниям, тренирующих BERTы на внутренних данных нужно начать думать о том, как защищать веса этих моделей от утечек / использовать методы differentially private training.
The Berkeley Artificial Intelligence Research Blog
Does GPT-2 Know Your Phone Number?
The BAIR Blog
Learning from others' mistakes: Avoiding dataset biases without modeling them
Sanh et al. [Hugging Face]
arxiv.org/abs/2012.01300
В больших датасетах вроде MNLI с моделями случаются плохие вещи из-за низкого качества данных. Многие примеры можно правильно классифицировать с помощью эвристик, не имеющих ничего общего с задачей. Например, наличие слова “no” очень повышает вероятность класса “противоречие”.
Эту проблему можно решить очисткой датасета или нахождением конкретных эвристик и построением adversarial примеров для них. Но авторы этой статьи предложили метод, который не требует никакой ручной работы для исправления этой проблемы.
Идея в том, что в начале вы тренируете небольшую модель для классификации w, например TinyBERT из двух слоёв. Она выучивает самые простые зависимости в данных. Далее вы замораживаете эту модель и учите большую модель b на вот таком лоссе:
Идея в том, что градиенты для тех примеров, где простая модель ошибается будут большими, а там, где простая модель справляется будут очень маленькими. В результате модель b показывает хорошее качество на adversarial-тестовом датасете HANS.
Sanh et al. [Hugging Face]
arxiv.org/abs/2012.01300
В больших датасетах вроде MNLI с моделями случаются плохие вещи из-за низкого качества данных. Многие примеры можно правильно классифицировать с помощью эвристик, не имеющих ничего общего с задачей. Например, наличие слова “no” очень повышает вероятность класса “противоречие”.
Эту проблему можно решить очисткой датасета или нахождением конкретных эвристик и построением adversarial примеров для них. Но авторы этой статьи предложили метод, который не требует никакой ручной работы для исправления этой проблемы.
Идея в том, что в начале вы тренируете небольшую модель для классификации w, например TinyBERT из двух слоёв. Она выучивает самые простые зависимости в данных. Далее вы замораживаете эту модель и учите большую модель b на вот таком лоссе:
CrossEntropy(p_w * p_b, label)
.Идея в том, что градиенты для тех примеров, где простая модель ошибается будут большими, а там, где простая модель справляется будут очень маленькими. В результате модель b показывает хорошее качество на adversarial-тестовом датасете HANS.
Очень много шума наделала модель DALL·E от OpenAI, которая умеет генерировать картинки вместе с текстом.
К сожалению, OpenAI (уже традиционно) опубликовали блогпост без статьи 😕, поэтому придётся угадывать что же они там делали. Ещё один момент - зачастую блогпост OpenAI и статья OpenAI очень разные. Поэтому подробный обзор DALL·E будет позже.
Сейчас попытаюсь саммаризировать то, что я понял и мои предположения,
DALL·E - это просто языковая модель-трансформер. Но она обучена на последовательностях вида “текст связанный с картинкой <значения пикселей картинки>”. О том, как OpenAI применяет языковое моделирование для изображений можно почтитать тут.
Моделируется последовательность состоящая и из текста и из картинки просто одним большим трансформером. То есть модель предсказывает следующий токен, который может быть как словом, так и пикселем. При этом картинка и текст связанны друг с другом и помогают друг друга предсказать.
Теперь мои догадки о том, как майнили пары текст-изображение. Скорее всего просто делали поиск в интернете и майнили соответствующие картинки, соответствующие коротким фразам из датасета на котором тренировали GPT-3. Что ещё можно было сделать: как-то отсеивать тексты, которые не похожи на описания картинок или делать поиск наоборот - текста по намайненым картинкам. В конце-концов третья вещь - использовать предтренированные модели object detection или metric learning чтобы проверять, что картинки и правда похожи на текст. В качестве такой модели можно использовать DALL·E, который натренирован на предыдущей итерации датасета (оценивая моделью вероятность текста при условии картинки или наоборот).
Результаты:
Можно генерировать изображения обусловливаясь на тексте или даже не тексте и начале изображения. При этом качество картинок и уровень понимания текста зачастую очень удивляют. Например вы можете написать “вот такой же чайник, но со словом GPT на нём <картинка чайника>” и получить вот такие картинки.
openai.com/blog/dall-e
Неофициальная имплементация: github.com/lucidrains/DALLE-pytorch
Спасибо за ссылку @Archelunch
К сожалению, OpenAI (уже традиционно) опубликовали блогпост без статьи 😕, поэтому придётся угадывать что же они там делали. Ещё один момент - зачастую блогпост OpenAI и статья OpenAI очень разные. Поэтому подробный обзор DALL·E будет позже.
Сейчас попытаюсь саммаризировать то, что я понял и мои предположения,
DALL·E - это просто языковая модель-трансформер. Но она обучена на последовательностях вида “текст связанный с картинкой <значения пикселей картинки>”. О том, как OpenAI применяет языковое моделирование для изображений можно почтитать тут.
Моделируется последовательность состоящая и из текста и из картинки просто одним большим трансформером. То есть модель предсказывает следующий токен, который может быть как словом, так и пикселем. При этом картинка и текст связанны друг с другом и помогают друг друга предсказать.
Теперь мои догадки о том, как майнили пары текст-изображение. Скорее всего просто делали поиск в интернете и майнили соответствующие картинки, соответствующие коротким фразам из датасета на котором тренировали GPT-3. Что ещё можно было сделать: как-то отсеивать тексты, которые не похожи на описания картинок или делать поиск наоборот - текста по намайненым картинкам. В конце-концов третья вещь - использовать предтренированные модели object detection или metric learning чтобы проверять, что картинки и правда похожи на текст. В качестве такой модели можно использовать DALL·E, который натренирован на предыдущей итерации датасета (оценивая моделью вероятность текста при условии картинки или наоборот).
Результаты:
Можно генерировать изображения обусловливаясь на тексте или даже не тексте и начале изображения. При этом качество картинок и уровень понимания текста зачастую очень удивляют. Например вы можете написать “вот такой же чайник, но со словом GPT на нём <картинка чайника>” и получить вот такие картинки.
openai.com/blog/dall-e
Неофициальная имплементация: github.com/lucidrains/DALLE-pytorch
Спасибо за ссылку @Archelunch
Openai
DALL·E: Creating images from text
We’ve trained a neural network called DALL·E that creates images from text captions for a wide range of concepts expressible in natural language.
Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity
arxiv.org/abs/2101.03961
Fedus et al. [Google Brain]
Twitter thread: тык
Код: тык
TL;DR Допилили напильником mixture of experts, чтобы натренировать модель с 1.6 триллионами параметров.
Рисёч в области больших неросетей уже больше рисёч в области high-performance computing, чем в области нейросетей: вам нужно, чтобы ваши 100500 GPU друг с другом эффективно коммуницировали и чтобы каждая из них использовалась в полную силу. Одним из путей решения этих проблем (и создания новых) является подход Mixture of Experts (MoE), который уже позволил натренировать трансформер с 1 триллионом парметров. Основная идея: в каждом (втором) слое транфмораера FFN слой заменяется на MoE-слой, который представляет собой N (~1024) очень широких полносвязных сеток-экспертов (у них разные параметры). Каждая из сеток может лежать на своей GPU и входящая последовательность токенов в начале попадает в сетку-роутер, которая с помощью софтмакса определяет какой токен отдать каким k экспертам.
Авторы Switch Transformers дорабатывают этот подход:
1. Используют k=1 - то есть роутер отдаёт каждый токен только в одного эксперта. В оригинальной MoE-статье говорилось, что это не должно работать, тк градиенты становятся тривиальными. Но у Switch Transformers заработало 💁♂️.
1. Перед расчётом софтмакса в роутере конвертируют тензоры в fp32. Вся остальная сетка работает в fp16.
1. Чуть-чуть поменяли вид регуляризации, которая заставляет роутер использовать всех экспертов и не концентрироваться только на нескольких из них.
1. Инициализируют модель в sqrt(10) раз меньшими числами.
1. Если в эксперта приходит слишком много токенов, часть этих токенов пропускает эксперта (по сути делается skip-connection).
Результаты:
1. Обучается с меньшим количеством танцев с бубном, чем MoE - позволяют натренировать модель с 1.6 триллионами параметров без проблем с нестабильностью
1. На 600% раз быстрее, чем T5 с эквивалентным FLOPS/token и на 20% быстрее, чем MoE.
1. На языковом моделировании и на NLU-датасетах типа SuperGLUE заметно улучшает результаты T5 (размер моделей подобран так, что на их предобучение уходит одинаковое время).
1. Авторы предполагают, что даже относительно небольшие модели могут работать лучше и обучаться быстрее, если использовать Switch Transformers.
Статья очень большая и читается сложновато. Если решите вникнуть поглубже, рекомендую обратить внимание на Appendix F с псевдо-TF-кодом.
Ещё вот неплохая имплементация MoE на PyTorch: тык
arxiv.org/abs/2101.03961
Fedus et al. [Google Brain]
Twitter thread: тык
Код: тык
TL;DR Допилили напильником mixture of experts, чтобы натренировать модель с 1.6 триллионами параметров.
Рисёч в области больших неросетей уже больше рисёч в области high-performance computing, чем в области нейросетей: вам нужно, чтобы ваши 100500 GPU друг с другом эффективно коммуницировали и чтобы каждая из них использовалась в полную силу. Одним из путей решения этих проблем (и создания новых) является подход Mixture of Experts (MoE), который уже позволил натренировать трансформер с 1 триллионом парметров. Основная идея: в каждом (втором) слое транфмораера FFN слой заменяется на MoE-слой, который представляет собой N (~1024) очень широких полносвязных сеток-экспертов (у них разные параметры). Каждая из сеток может лежать на своей GPU и входящая последовательность токенов в начале попадает в сетку-роутер, которая с помощью софтмакса определяет какой токен отдать каким k экспертам.
Авторы Switch Transformers дорабатывают этот подход:
1. Используют k=1 - то есть роутер отдаёт каждый токен только в одного эксперта. В оригинальной MoE-статье говорилось, что это не должно работать, тк градиенты становятся тривиальными. Но у Switch Transformers заработало 💁♂️.
1. Перед расчётом софтмакса в роутере конвертируют тензоры в fp32. Вся остальная сетка работает в fp16.
1. Чуть-чуть поменяли вид регуляризации, которая заставляет роутер использовать всех экспертов и не концентрироваться только на нескольких из них.
1. Инициализируют модель в sqrt(10) раз меньшими числами.
1. Если в эксперта приходит слишком много токенов, часть этих токенов пропускает эксперта (по сути делается skip-connection).
Результаты:
1. Обучается с меньшим количеством танцев с бубном, чем MoE - позволяют натренировать модель с 1.6 триллионами параметров без проблем с нестабильностью
1. На 600% раз быстрее, чем T5 с эквивалентным FLOPS/token и на 20% быстрее, чем MoE.
1. На языковом моделировании и на NLU-датасетах типа SuperGLUE заметно улучшает результаты T5 (размер моделей подобран так, что на их предобучение уходит одинаковое время).
1. Авторы предполагают, что даже относительно небольшие модели могут работать лучше и обучаться быстрее, если использовать Switch Transformers.
Статья очень большая и читается сложновато. Если решите вникнуть поглубже, рекомендую обратить внимание на Appendix F с псевдо-TF-кодом.
Ещё вот неплохая имплементация MoE на PyTorch: тык
Twitter
AK
Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity pdf: https://t.co/0i6fcOuy4X abs: https://t.co/AUKgennqZy github: https://t.co/8QD4sJ2ckE
🤯CBOW считали хуже Skip-Gram, потому что в оригинальной имплементации был баг - не нормализовали градиент на число слов.
Какой-то очень дерзкий ход от 🤗. Можно поиграться со *всеми* их модельками прямо в браузере. И купить у них API (на удивление недорого).
Очень подробно описанная имплементация Switch Transformer. Выглядит прямо отлично, советую почитать всем.
lab-ml.com/labml_nn/transformers/switch/
lab-ml.com/labml_nn/transformers/switch/