DL in NLP
12.5K subscribers
547 photos
13 videos
27 files
1.1K links
Новости и обзоры статей на тему обработки естественного языка, нейросетей и всего такого.

Связь: @dropout05 (рекламы нет)
Download Telegram
Тут в чате затронули тему длинных трансформеров и я вспонил, что недавно делал презентацию с их обзором. Думаю кому-нибудь может быть полезно.

TL;DR: используйте BigBird или Linformer

https://docs.google.com/presentation/d/1qRcKLldtepnkDohA5AVqC6stMkdqjPEb4ev9jQUexh8/edit?usp=sharing
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.
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 на вот таком лоссе: 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
Или попросить нарисовать влюблённую перерони-пиццу
OMG, я пропагандирую эту идею уже пару лет. Добавляйте такой псевдокод в вашу статью, он зачастую понятнее формул (но и их тоже не забывайте).
Альтернативый способ улучшить ваши формулы
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: тык
Забавная библиотека для интерактивных визуализаций того, что происходит в бертах.
eccox.io

Вроде бы она только умеет в saliency map и показывание скрытых слоёв, но зато красиво.

За ссылку спасибо @fyzbt
🤯CBOW считали хуже Skip-Gram, потому что в оригинальной имплементации был баг - не нормализовали градиент на число слов.
Какой-то очень дерзкий ход от 🤗. Можно поиграться со *всеми* их модельками прямо в браузере. И купить у них API (на удивление недорого).
Очень подробно описанная имплементация Switch Transformer. Выглядит прямо отлично, советую почитать всем.

lab-ml.com/labml_nn/transformers/switch/
Forwarded from эйай ньюз
Уроки пиара от Майкрософт.

Литерали чат-бот натренированный на переписке с мертвым человеком — то, о чем думал каждый, кто тренировал чат-ботов. Но нет. "Воскрешение мертвых", черное зеркало, гроб, гроб, кладбище.

Дарю идею для патента попадания в СМИ: тренируете чатбота на переписке с живым человеком, а в конце озаглавливаете "ПРОЕКТ ПО ТРАСПЛАНТАЦИИ ЛИЧНОСТИ".
Пока интересные статьи на глаза не попадаются, но попался пост 2009 года (“BC” по меркам диплёрнинга), который очень хорошо состарился.

Главная его мысль состоит в том, что автоматическое дифференцирование - это must have тулза в ML, но люди с ней незнакомы. И призывы к тому, что это нужно менять.

Сейчас в мире DL нет ни одного человека, кто не работал бы с автоматическим дифференцированием - потому что это основа и TF, и PyTorch и всех остальных нейросетевых фреймворков. Однако, далеко не все понимают что это такое и чем автоматическое дифференцирование отличается от численного и от аналитического. И пост является хорошим ответом на эти вопросы.