Rethinking Positional Encoding in Language Pre-training
Ke, He, and Liu, [Microsoft]
arxiv.org/abs/2006.15595
Последнее время видно всё больше статей, которые пытаются разобраться в том, как работает / как улучшить positional encoding в трансформерах. В этой статье авторы рассуждают, что трансформер улавливает корреляции между словами и между позициями слов. Предлагают модифицировать архитекутуру, чтобы явно разделить эти две штуки. Если по классике на вход в attention приходит word emb + pos emb, то авторы предлагают считать два attention: число для word и чисто для pos, а потом их скоры (перед софтмаксом) складывать. Второй хак, который придумали авторы: это убрать из векторов CLS-токена информацию об абсолютных позициях: просто заменив в positional scores скоры CLS на выучиваемую константу.
По результатам: обучили BERT с такой архитектурой, улучшили GLUE, красивые виуализации positional scores.
Было бы интересно сравнить картинки word scores с attention scores в обычном BERT, но такого в статье нету =(
Ke, He, and Liu, [Microsoft]
arxiv.org/abs/2006.15595
Последнее время видно всё больше статей, которые пытаются разобраться в том, как работает / как улучшить positional encoding в трансформерах. В этой статье авторы рассуждают, что трансформер улавливает корреляции между словами и между позициями слов. Предлагают модифицировать архитекутуру, чтобы явно разделить эти две штуки. Если по классике на вход в attention приходит word emb + pos emb, то авторы предлагают считать два attention: число для word и чисто для pos, а потом их скоры (перед софтмаксом) складывать. Второй хак, который придумали авторы: это убрать из векторов CLS-токена информацию об абсолютных позициях: просто заменив в positional scores скоры CLS на выучиваемую константу.
По результатам: обучили BERT с такой архитектурой, улучшили GLUE, красивые виуализации positional scores.
Было бы интересно сравнить картинки word scores с attention scores в обычном BERT, но такого в статье нету =(
FNet: Mixing Tokens with Fourier Transforms
Lee-Thorp et al., [Google]
arxiv.org/abs/2105.03824
Заменяем self-attention на обычное преобразование Фурье (хоть прямо
За наводку спасибо @Liehtman
Lee-Thorp et al., [Google]
arxiv.org/abs/2105.03824
Заменяем self-attention на обычное преобразование Фурье (хоть прямо
torch.fft
) и трансформер продолжает (хорошо) работать. Ускорение в 8 раз на GPU и в 2 раза на TPU. На GLUE показывает заметно худшие результаты чем обычных трансформер, но обходит старые подходы типа GPT-1 и ELMo. На Long-Range Arena близок к трансформеру. Пожалуй это самая безумная но одновременнно и эффектная альтернатива self-attention, которую я видел за последний год. Вангую, что attention не заменит, но это хороший прогресс в поиске новых архитектур.За наводку спасибо @Liehtman
👍1
Rethinking Skip Connection with Layer Normalization in Transformers and ResNets
arxiv.org/abs/2105.07205
Liu et al.
Авторы анализируют различные комбинации skip connection и batch/layer norm. Показывают, что нормализация критична для того, чтобы градиенты не взрывалась/затухали. Также предлагают новый блок, в котором мы применяем skip и LN несколько раз подряд, где skip всегда идёт от оригинального инпута (параметры LN зашарены).
Показывают стабильное небольшое улучшение на нескольких языках WMT-14 и на CIFAR.
arxiv.org/abs/2105.07205
Liu et al.
Авторы анализируют различные комбинации skip connection и batch/layer norm. Показывают, что нормализация критична для того, чтобы градиенты не взрывалась/затухали. Также предлагают новый блок, в котором мы применяем skip и LN несколько раз подряд, где skip всегда идёт от оригинального инпута (параметры LN зашарены).
Показывают стабильное небольшое улучшение на нескольких языках WMT-14 и на CIFAR.
Forwarded from PDP-11🚀
🏋🏼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
🥴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
Unsupervised Speech Recognition
ai.facebook.com/research/publications/unsupervised-speech-recognition
FAIR придумал как обучать системы распознавания речи без размеченных данных 🤯
Для этого звуки кластеризуют на фонемы, обучают что-то типа BERT на этих фонемах, после чего выполняют процедуру adversarial алайнмента между фонемами и текстом а-ля MUSE.
На самом деле дьявол в деталях, оч рекомендую прочитать статью.
ai.facebook.com/research/publications/unsupervised-speech-recognition
FAIR придумал как обучать системы распознавания речи без размеченных данных 🤯
Для этого звуки кластеризуют на фонемы, обучают что-то типа BERT на этих фонемах, после чего выполняют процедуру adversarial алайнмента между фонемами и текстом а-ля MUSE.
На самом деле дьявол в деталях, оч рекомендую прочитать статью.
Facebook
Unsupervised Speech Recognition | Meta AI Research
Despite rapid progress in the recent past, current speech recognition systems still require labeled training data which limits this technology to a small...
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 (да и вообще к применимым на практике) решениям.
В общем вывод стандартный: размечайте данные (хотя бы небольшую валидационную выборку), это единственый надёжный метод получить хорошую модель.
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 (да и вообще к применимым на практике) решениям.
В общем вывод стандартный: размечайте данные (хотя бы небольшую валидационную выборку), это единственый надёжный метод получить хорошую модель.
Forwarded from эйай ньюз
Китайцы очень любят делать объёмные обзоры той или иной подобласти машинного обучения с перечислением основных работ и главными прорывными идеями. Статей выходит очень много каждый день, и невозможно все прочесть. Поэтому такие обзоры ценны (если качественно написаны, конечно, что довольно редко).
Недавно вышла очень неплохая статья-обзор различных вариантов Трансформеров с фокусом на моделировании языка (NLP). Это мастр-рид для всех, кто начинает работать с NLP и интересуется Трансформерами. В статье рассматриваются базовые принципы работы self-attention и такие подробности современных вариантов Трансформеров как модификации архитектуры, претрейнинг и их приложения.
Статья: A Survey of Transformers.
Недавно вышла очень неплохая статья-обзор различных вариантов Трансформеров с фокусом на моделировании языка (NLP). Это мастр-рид для всех, кто начинает работать с NLP и интересуется Трансформерами. В статье рассматриваются базовые принципы работы self-attention и такие подробности современных вариантов Трансформеров как модификации архитектуры, претрейнинг и их приложения.
Статья: A Survey of Transformers.
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 почти до нуля.
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 почти до нуля.
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-размерности, т.е.
На удивление показыает неплохие результаты на задачах с парой текстов: SST (схожесть текстов), MNLI (логческое следствие) и SQuAD.
Главная грусть в том, что число параметров матрицы
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 с этим не помогает и даже делает хуже.
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
Я не особый фанат Хинтона (не фанат биологических аналогий), но у Vinyals очень много классных (и более приземленных) статей. Думаю их обсуждение может быть весьма интересным.
https://www.crowdcast.io/e/fireside-chat-with-7
OpenAI Triton — новый язык программирования (ну почти), заточенный под нейросетки.
Основная мотивация: если ваш кастомный слой в нейросетке очень кастомный, вам сейчас приходится либо страдать от его низкой скорости, либо писать на CUDA (и страдать от CUDA). Причём вариант с кудой не очень классный, потому что если потом захотите портировать на iphone/android/edge/... , то будете страдать снова.
Triton это такой "Си с тайлами". Сверху языка С добавлена абстракция Tile, которая по факту — тензор. Под капотом много оптимизаций для того, чтобы всё это эффективно считалось на GPU.
Из документации видно, что сейчас язык больше продвигают как альтернативу TorchScript. То есть, вы пишете на питоне, добавляете несколько декораторов к вашим функциям и 🧙 делает ваш говнокод не лучше, но быстрее.
Проект ещё в очень ранней фазе и исходники выглядят не шибко приятно, но если он уменьшит число CUDA kernels в этом мире, я буду рад.
Основная мотивация: если ваш кастомный слой в нейросетке очень кастомный, вам сейчас приходится либо страдать от его низкой скорости, либо писать на CUDA (и страдать от CUDA). Причём вариант с кудой не очень классный, потому что если потом захотите портировать на iphone/android/edge/... , то будете страдать снова.
Triton это такой "Си с тайлами". Сверху языка С добавлена абстракция Tile, которая по факту — тензор. Под капотом много оптимизаций для того, чтобы всё это эффективно считалось на GPU.
Из документации видно, что сейчас язык больше продвигают как альтернативу TorchScript. То есть, вы пишете на питоне, добавляете несколько декораторов к вашим функциям и 🧙 делает ваш говнокод не лучше, но быстрее.
Проект ещё в очень ранней фазе и исходники выглядят не шибко приятно, но если он уменьшит число CUDA kernels в этом мире, я буду рад.
GitHub
GitHub - triton-lang/triton: Development repository for the Triton language and compiler
Development repository for the Triton language and compiler - triton-lang/triton