Size: a a a

2021 May 27
DL in NLP
🏋🏼Google finally released TPU v4, it will be avaliable for customers later this year.
🥴The previous v3 version was unveiled in 2018 and the v4 is claimed to be twice as fast.
🌽TPU v4 combines in a 4096 chips sumercomputer that reaches 1 exaFLOPs (10**18) of performance

Read more on [hpcwire] and watch the video Google I/O ‘21
источник
DL in NLP
Unsupervised Speech Recognition
ai.facebook.com/research/publications/unsupervised-speech-recognition

FAIR придумал как обучать системы распознавания речи без размеченных данных 🤯
Для этого звуки кластеризуют на фонемы, обучают что-то типа BERT на этих фонемах, после чего выполняют процедуру adversarial алайнмента между фонемами и текстом а-ля MUSE.

На самом деле дьявол в деталях, оч рекомендую прочитать статью.
источник
DL in NLP
источник
2021 May 31
DL in NLP
True Few-Shot Learning with Language Models
Perez et al.
arxiv.org/abs/2105.11447

Мы буквально несколько недель назад восхищались PET, iPET, ADAPET и другими штуками, например ещё "how many data points is a prompt worth". Perez et al в своей новой статье указывают на один косяк во всех предыдущих статьях по few-shot — наличие валидационного сета, который далеко не few-shot и на котором вы тюните ваши гиперпараметры и подбираете промты.
В статье показывают, что качество ADAPET очень сильно зависит от всего этого и в случае, когда у вас действительно мало размеченных (валидационных) данных вы можете быть очень далеко от близких к SOTA (да и вообще к применимым на практике) решениям.

В общем вывод стандартный: размечайте данные (хотя бы небольшую валидационную выборку), это единственый надёжный метод получить хорошую модель.
источник
2021 June 12
DL in NLP
Китайцы очень любят делать объёмные обзоры той или иной подобласти машинного обучения с перечислением основных работ и главными прорывными идеями. Статей выходит очень много каждый день, и невозможно все прочесть. Поэтому такие обзоры ценны (если качественно написаны, конечно, что довольно редко).

Недавно вышла очень неплохая статья-обзор различных вариантов Трансформеров с фокусом на моделировании языка (NLP). Это мастр-рид для всех, кто начинает работать с NLP и интересуется Трансформерами. В статье рассматриваются базовые принципы работы self-attention и такие подробности современных вариантов Трансформеров как модификации архитектуры, претрейнинг и их приложения.

Статья: A Survey of Transformers.
источник
DL in NLP
источник
2021 July 08
DL in NLP
Charformer: Fast Character Transformers via Gradient-based Subword Tokenization
Tay et al. [Google]
arxiv.org/abs/2106.12672

Задача токенизации выглядит решённой (используйте BPE), однако последнее время я стал замечать больше статей, которые придумают новые методы. В этой статье сновная идея такая: учить метод токенизации одновременно с нейросетью. Для этого применяют следующий алгоритм:

1. Строку размера L разбивают на непересекающиеся n-граммы байтов начиная с n=1 и до n=M (см картинку для M=4). Эти n-gram называют блоками.
2. У каждого байта свой эмбеддинг, всего их 256 (байт=8 бит, 2^8=256). Эмбеддинг блока получается пулингом эмбеддингов соответствующей ему последовательности байтов.
3. Подсчитываются block stores — к каждому эмбеддингу блока применяется линейный слой, который оценивает "полезность" блока.
4. К скорам применяется softmax по размерности соответствующей размеру блока (сложно описать словами, на картинке это вертикальная линия). Дальше блоки складываются согласно этим скорам.
5. Обратите внимание, что наша последовательность всё ещё размера L. Теперь мы хотим уменьшить её длину, в чём и есть главная цель токенизации. Для этого применяется обычный mean-pooling с размером кернела и страйдом = d. На выходе получаем последовательность псевдотокенов в d раз меньше, чем оригинальаня последовательность.
7. Теперь эти псевдо-токены кормятся в обычный трансформер.

Такая хитрая токенизация показыает заметное улушчение в мультиязычных датасетах, где ты тренируешься на английском, а эвалюируешься на других языках. На чисто английских задачах (GLUE) улучшает результаты Byte-level T5 и сокращает отрыв от BERT почти до нуля.
источник
DL in NLP
источник
2021 July 15
DL in NLP
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) и только на такой длине и работаем.
источник
DL in NLP
источник
2021 July 23
DL in NLP
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 с этим не помогает и даже делает хуже.
источник
DL in NLP
источник
2021 July 26
DL in NLP
Во вторник будет Fireside chat with Geoffrey Hinton and Oriol Vinyals

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

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

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

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

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

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

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

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

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

Выглядит так, что наш мир состоит из неких информационных структур, имеющих что-то общее даже если рассмотреть совсем разные задачи. Это довольно интересная гипотеза, и судя по всему, мы движемся к какой-то универсальной "нейронной сети", которая сможет решать много разных задач, используя накопленный опыт в других областях. Меня это жутко будоражит!
источник
DL in NLP
источник
2021 August 05
DL in NLP
источник
DL in NLP
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 можно применять на последовательностях символов/байтов и говорить что первый слой как бы выучивает токенизацию за нас.
источник