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

Связь: @dropout05 (рекламы нет)
Download Telegram
Pay Attention to MLPs
Liu et al, [Google]
arxiv.org/abs/2105.08050

Новая архитектура, которая работает так же хорошо, как и self-attention в CV и лишь немного хуже self-attention в NLP. Основая идея (на картинке) следующая: используем MLP с skip-connection, а для того, чтобы токены могли взаимодействовать друг с другом используем spatial gating unit. Никакого self-attention или свёрток.

Spatial gating unit это мега простая штука. Вот обычно мы применяем линейный слой по hidden-размерности, т.е. [seq_len, hidden] @ W, а тут будем применять его по пространственной [hidden, seq_len] @ W, да ещё и гейт добавим и получим GeLU(x) * [x @ W], где * — поэлементное произведение, а @ - матричное умножение по пространственной размерности seq_len.

На удивление показыает неплохие результаты на задачах с парой текстов: SST (схожесть текстов), MNLI (логческое следствие) и SQuAD.
Главная грусть в том, что число параметров матрицы W = seq_len * seq_len, и что никакой тебе вариативной длины текста. Зафиксировали 128 (или 512) и только на такой длине и работаем.
OpenAI Codex: Evaluating Large Language Models Trained on Code
Chen et al.
arxiv.org/abs/2107.03374

С одной стороны хайп по GitHub Copilot начал спадать, но с другой я не видел ни одного ревью статьи, которая описывает нейросетку под капотом.

Основная идея: зафайтнюнить GPT-3 генерировать код программы по её докстрингу. Первый вопрос: как эвалюировать? Считать перплексию как-то бессмысленно, поэтому авторы сделали тестовый сет из 164 задачек с юниттестами и смотрели может ли модель сгенерировать код, который их проходит. Также пробовали использовать BLEU и показали, что он бесполезен.

Тк сгенеренный моделью код должен где-то выполняться, чтобы злобный AI не захватил мир, авторы озаботились созданием сендбокса с помощью gVisor и eBPF-правил для файервола (на самом деле на случай, воспроизведения кода malware, которого на гитхабе хватает).

Кроме этого создали "чистый" датасет функций, который намайнили с сайтов типа leetcode, а также из репозиториев с CI, откуда забрали только те функции, которые проходят юниттесты из этих репозиториев. На нём зафайтнютились ещё раз, что сильно улучшило модель. Финальный результат: модель решает 28% задач, если генерируем только одну функцию и 70%, если генерируем 100 функций и ищем хотя бы одну, которая проходит юниттесты.

Интересные детали: GPT-3 в качестве инициализации не улучшает финальное качество по сравнению с обучением с нуля, но сходится быстрее. Также добавили в словарь токенов отвечающих за несколько пробелов подряд, это уменьшило длину на 30%.

Кажется, что мы про Copilot ещё услышим. Мне эта штука не нравится, тк сложность программирования не в том, чтобы код писать, а в том, чтобы его читать, и Copilot с этим не помогает и даже делает хуже.
Во вторник будет Fireside chat with Geoffrey Hinton and Oriol Vinyals

Я не особый фанат Хинтона (не фанат биологических аналогий), но у Vinyals очень много классных (и более приземленных) статей. Думаю их обсуждение может быть весьма интересным.

https://www.crowdcast.io/e/fireside-chat-with-7
OpenAI Triton — новый язык программирования (ну почти), заточенный под нейросетки.

Основная мотивация: если ваш кастомный слой в нейросетке очень кастомный, вам сейчас приходится либо страдать от его низкой скорости, либо писать на CUDA (и страдать от CUDA). Причём вариант с кудой не очень классный, потому что если потом захотите портировать на iphone/android/edge/... , то будете страдать снова.

Triton это такой "Си с тайлами". Сверху языка С добавлена абстракция Tile, которая по факту — тензор. Под капотом много оптимизаций для того, чтобы всё это эффективно считалось на GPU.

Из документации видно, что сейчас язык больше продвигают как альтернативу TorchScript. То есть, вы пишете на питоне, добавляете несколько декораторов к вашим функциям и 🧙 делает ваш говнокод не лучше, но быстрее.

Проект ещё в очень ранней фазе и исходники выглядят не шибко приятно, но если он уменьшит число CUDA kernels в этом мире, я буду рад.
Вот такой софтмакс на Тритоне в некоторых кейсах работает в 2-3 раза быстрее торча.
Интересная статья, рассказывающая что можно легко зафайнтюнить layer norm в BERT и научить его классифицировать изображения или протеины вместо текста.

Какое-то время назад обсуждали такое в лабе и сошлись на том, что возможно MLM не так и хорош и не учит ничего специфичного для языка. Учит только много простых эвристик типа "посмотреть на следующее/предыдущее слово", что видно в статьях по анализу трансформеров.

Возможно именно потому что MLM учит такие простые, но эффективные вещи эти модельки легко обобщаются на разные домены/модельности. Что на самом деле делает такие статьи только более интересными лично для маня.
Forwarded from эйай ньюз
Очень любопытная работа от UC Berkeley + FB + Google.
Поразительно, но трансформеры, предобученные на языковых задачах, неплохо обобщаются и на другие модальности.

После обучения на текстовых данных, у трансофрмера файнтюнится только линейный входной слой, выходной слой, positional embeddings и параметры layer norm слоев (см. картинку выше). В итоге после файнтюнинга всего лишь 0.1% всех параметров на новом датасете такой трансофрмер может хорошо решать задачи в других модальностях, таких как предсказание структуры белка, математические вычисления или классификация изображений.

Выглядит так, что наш мир состоит из неких информационных структур, имеющих что-то общее даже если рассмотреть совсем разные задачи. Это довольно интересная гипотеза, и судя по всему, мы движемся к какой-то универсальной "нейронной сети", которая сможет решать много разных задач, используя накопленный опыт в других областях. Меня это жутко будоражит!
Perceiver IO: A General Architecture for Structured Inputs & Outputs
Jaegle et al. [DeepMind]
arxiv.org/abs/2107.14795

Новый "длинный" трансформер от DeepMind с простой архитектурой.

Идея: вместо того, чтобы в attention считать query = W @ x, заменим его на латентные (не зависящие от инпута x) обучаемые вектора query = Q. Тогда первый слой будет потреблять seq x queries времени и памяти, а все остальные queries x queries, делая трансформер линейным по длине последовательности в первом слое и константным в остальных слоях.

Проблема: теперь хиддены не соответствуют токенам и непонятно как делать какой-нибудь MLM. Решают так: на выходе из сети берут ещё одну латентную матрицу (например seq x hidden) и считают attention с ней. На выходе получаются вектора, которые можно ассоциировать с токенами, архитектура есть на картинке выше. Дальше с этими векторами можно делать то же, что мы делаем с аутпутом трансформера.

Так как это DeepMind, они широко поэкспериментировали с применениями: обучили BERT, Optical Flow, RL-агента StarCraft. Везде заменили трансформер на Perceiver IO. TL;DR - везде улушчения по качеству при меньших FLOPS и памяти.

Самый интересный для NLP результат, это что Perceiver IO можно применять на последовательностях символов/байтов и говорить что первый слой как бы выучивает токенизацию за нас.
Что нетипично для DeepMind, они ещё и код выложили. К сожалению он на Jax и Haiku, но зато написан довольно аккуратно.
Geometric Deep Learning

Курс по геометрическому Deep Learning от исследователей из ICL, NYU, DeepMind, Universiteit van Amsterdam, Qualcomm и других.

Что такое геометрический DL? Это обобщение нейросеток на более сложные стркутуры, такие как графы или какие-то другие вещи с внутренними симметриями. Я в основном видел его применения в социальных графах, молекулярном DL (а-ля alpha fold), и 3D-computer vision со всякими point clouds (означает: беспилотные автомобили).

Выглядит интересно, все записи лекций и слайды доступны бесплатно.

Курс: geometricdeeplearning.com/lectures/
Первая (вводная) лекция: https://youtu.be/PtA0lg_e5nA
Пару часов назад прошёл OpenAI Codex Challenge и я даже занял там 53 место 🎉

Мы уже обозревали Codex — модель для генерации кода от OpenAI несколько недель назад. Теперь хочется поговорить о впечатлениях после взаимодействия с моделью.

Во-первых Codex это реально магия. Многие задачки были специально сформулированы в довольно специфичной области (например задача парсинга python-кода) или на API, который ты постоянно забываешь (как работать с ISO-датами в pandas). В двух задачках после написания где-то половины решения, Codex завершал его за меня. В двух других задачках он написал весь код, после того, как я перекопировал условие задачи в docstring функции.

Но теперь о более интересном.

В одной из задачек, решение на 99% написанное Codex прошло почти все тесты. Ключевое слово тут "почти". Этот баг можно было бы спокойно незаметить и считать, что функция полностью работает. Он лишь проявлялся в одном из тест-кейсов и вроде бы этот тест-кейс даже не был заточен на этот баг. При этом сам баг был довольно простым и можно было бы поймать заранее, если бы я писал код с нуля.

Мораль: последние несколько лет мы всё чаще видим большие системы (Google, AWS, Cloudflare) падающие из-за мелких и редких багов. Если из-за Codex я упустил такой мелкий и редкий баг в 1 задаче из 5, насколько часто это будет случаться, когда подобными системами будет пользоваться большинство разработчиков (что, я думаю, неизбержно)?
Пример решения задачки с помощью Codex. Весь код сгененирован по названию функции и докстрингу.

https://twitter.com/DeadMoneyDuke/status/1425890180783906821/photo/1
Пример моего решения. Я ничего не знал про difflib. Нашёл один пример использования .get_opcodes на stackoverflow. Мой первый сабмишшен не прошёл (тк я не прочитал докстринг и не угадал семантику i1, i2, j1, j2), после этого я удалил всё что находится в цикле и попросил Codex сгенерировать решение. Оно прошло сразу же.
Сайт с хорошо (и красиво) аннотированными имплементациями трансформера, compressive transformer 🔥, KNN-LM и другими интересными архитектурами.

nn.labml.ai
Forwarded from эйай ньюз
Finetuned Language Models Are Zero-Shot Learners (FLAN)

Новая статейка от Google Research о языковой модели на 137-миллиардов параметров, которая превосходит GPT-3 (few-shot) на различных задачах в zero shot сценарии.

🗯Идея. Предлагается новый метод файнтьюнинга, называемый "instruction tuning". Тут авторы используют идею, что NLP задачи могут быть описаны человеческими словами. Например, “Is the sentiment of this movie review positive or negative?” или “Translate ‘how are you’ into Chinese.” Итак, берется предобученный трансформер на 137-миллиардов параметров (состоит только из декодера), и файнтьюнится на пачке задач с текстовыми инструкциями. После этого его тестируют на новых задачах, также описанных текстом.

✔️Результат. FLAN модель (137 миллиардов параметров) после "instruction tuning" уделывает GPT-3 (175 миллиардов параметров) на 19 из 25 новых языковых задачах.

Статья на arxiv. Кода пока нет, но должен появиться тут.