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

Связь: @dropout05 (рекламы нет)
Download Telegram
Для тех кто не может прийти на ACL, также будем обсуждать Life After BERT на Munich NLP. Присоединяйтесь к дискорду, в пятницу 18 МСК будет презентация.
11
GPT-4chan
Yannic Kilcher
https://youtube.com/watch?v=efPrtcLdcdM

Для тех кто не может дождаться GPT-4 от OpenAI, Янник сделал GPT-4chan. Это зафайнтюненная моделька JPT-J 6B на датасете Raiders of the Lost Kek, который замайнили с Politically Incorrect board (/pol/) на 4chan.

Очень рекомендую видео к просмотру, но TL;DR — отличать ботов от людей на становится всё сложнее, и их выдаёт уже не то что они неконсистентны, или наоборот пишут слишком похожие твиты. То что выдало бота Янника — это что он часто отвечал пустыми постами и то что постил слишком часто. Обе эти вещи, к сожалению, легко пофиксить. Стало как-то не по себе, в особенности если думать про комментарии к политическим твитам.

Но теперь вернёмся к весёлому. Во-первых, моделька заметно обходит GPT-3 и оригинальный GPT-J на бенчмарке Truthful QA (кек). Во-вторых, она выложена на 🤗 Hub и вы можете с ней поиграться (если есть куда запихать 6 миллиардов параметров).


from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained(“ykilcher/gpt-4chan”)
model = AutoModelForCausalLM.from_pretrained(“ykilcher/gpt-4chan”)
🔥28👍3
🛋 BIG-Bench: встречам бенчмарк и пейпер «BEYOND THE IMITATION GAME»

Название пейпера «ПО ТУ СТОРОНУ ИГРЫ В ИМИТАЦЮ» отсылает нас к работе Тьюринга, и предоставляет актуальный на 2022 год бенчмарк, призванный количественно оценить большие языковые модели, такие как GPT-3 или PaLM.

Современная мейнстрим парадигма в NLP выглядит так: «не работает на 1.3B — попробуй 12B, не выходит на 12B, бери 175B, и т.д. Не нужно искать новые подходы — attention и параметры are all you need, как говорится..»

🤔 Но как оценивать эти огромные модели?

Чтобы решить эту проблему, 442 (WHAT?!) ресерчара из 132 организаций представили тест Beyond the Imitation Game (BIG-bench). Темы теста разнообразны, они связаны с лингвистикой, развитием детей, математикой, биологией, физикой, социальными предубеждениями, разработкой программного обеспечения и т. д.

BIG-bench фокусируется на задачах, которые, как считается, выходят за рамки возможностей текущих языковых моделей.

🪑 BIG-bench
⚗️ Colab для эвала T5
🧻 paper

@мишин лернинг
17👍3
High-Performance Large-Scale Image Recognition Without Normalization
Brock et al. [DeepMind], 2021
arxiv.org/abs/2102.06171

Внезапно статья по CV, ещё и старая, но давно хотел её прочитать. Вроде бы раз эту архитектуру использовали в Imagen.

Меня всегда очень захватывала тема нормализации в нейросетях. Каждый раз когда мы проходим BatchNorm рассказываю историю того как менялось наше представление о том почему он работает и вот сейчас нашёл хорошее саммари текущих представлений.

1. При использовании BN и skip-connections, BN уменьшает норму активаций и позволяет skip-connections лучше проходить в более глубокие слои.
1. Тк мы используем ассиметричные функции активации (ReLU, GELU) это вызывает кучу положительных значений, что делает скалярное произведение векторов разных примеров в батче очень большим. Другими словами — вектора разных примеров очень похожи друг на друга, что плохо. BN позволяет ренормализовать это и добавить отрицательных значений в вектора, что уменьшает эту проблему.
1. Некоторые верят что BN также работает как регуляризатор, тк in-batch статистики mean и var содержат шум.
1. BN увеличивает гладкость loss landscape позволяя использовать бОльшие lr, в особенности при больших размерах батча.

DeepMind решили избавиться от BN и для этого используют следующие трюки:
1. Residual блоки выглядят вот так: h_next = h_prev + a * f(h_prev / b), где f - аккуратно инициалзированный блок нейросети, а=0.02 и b = var(h_prev).
1. Scaled weight standardization, где веса нормализуют как (w - mu) / sqrt(N * var)
1. Adaptive gradient clipping, где градиенты клипают не на основе их нормы, а на основе отношения нормы градиента и нормы параметров слоя / блока.
1. Использовали слегка модифицированную архитектуру блока SE-ResNeXt-D

По результатам: хорошо улучшают скорость тренировки по сравнению с efficientnet, при лучшей финальной accuracy.
🔥19👍9
Techniques for Training Large Neural Networks
Блогпост от OpenAI с разбором основных способов параллелизации.

Data Parallel (DP) — держать полную копию сети на каждой карточке, обрабатывать несколько батчей параллельно. Проблема в том, что ты можешь упереться в то что даже batch size = 1 перестаёт помещаться в одну карточку.
Pipeline Parallel (PP) — распилить нейросеть послойно (т.е. вертикально) и держать её на разных карточках. При наивной имплементации работает очень неэффективно. Представьте себе что у вас 10 слойная сеть и вы держите по 1 слою на каждой карточке, если вы просто выполняете forward и backward одного батча на них, то в каждый момент времени у вас 9 видеокарт простаивают. Если нарисовать картинку то у вас есть некий "bubble of idle time". Для того, чтобы этого избежать, можно распилить наш минибатч на микробатчи и начать делать forward pass следующего микробатча (MPS) ещё до того как forward текущего микробатча досчитался. Отсюда и название — pipeline parallel (PP).
Tensor Parallel (TP) — альтернативный способ разделения сети на несколько GPU. Если PP разделяет сетку вертикально, то TP делает это горизонтально. То есть ваши тензоры параметров и активаций теперь могут быть попилены на несколько GPU и одно матричное умножение может считаться на нескольких GPU одновременно. Понятно, что такой подход сильно увеличивает требования по скорости коммуникации между GPU, но при эффективной имплементации (и infiniband + nvlink) это не так медленно как кажется.
Mixture of Experts (MoE) — мы уже рассказывали про MoE, идея состоит в том чтобы вместо одного FCN после attention использовать несколько FCN-экспертов (например 128) и использовать только часть из них (например 4) при каждом forward pass. Для того чтобы выбрать эти 4, добавляется специальный router-слой, который по сути считает attention между экспертами и hidden. Так как на каждом проходе используется только малая часть экспертов можно добиться огромного числа параметров в нейросети. Именно это используют все сетки в 1 триллион и более параметров.

Ещё в статье очень вскользь упомянули ZeRo, который имплементирован в DeepSpeed, которы сейчас становится всё более и более популярен во многом благодаря тому что он позволяет тренировать довольно большие модели (вплоть до 10-20B) в почти DataParallel режиме с помощью разделения на несколько GPU стейта оптимизатора (Stage 1) и рассчёта градиентов (Stage 2). Также есть Stage 3, который по сути tensor parallel, да и практически все остальные способы параллелизации.

Кроме этого, все эти методы можно комбинировать. Например BLOOM от BigScience (176B) тренируется с DP=8, PP=12 (MPS 2), TP=4. Для всего этого используется чуть-чуть модифицированный DeepSpeed.

Сам блогпост даёт неплохое введение в методы параллелизации, и там куча ссылок на релевантные статьи и имплементации, но честно ожидал увидеть в нём что-то большее, тк OpenAI все-таки первопроходцы в этой области. В качестве продолжения (или даже вместо) я бы предложил почитать How To Fit a Bigger Model и Model Parallelism от HuggingFace, они тоже делают отличное введение в эти методы и на мой вкус более техничны.
👍282
😁82🔥11👍1
Пара интересных новых фишек в 🤗 Transformers 4.20

1. Big model inference🔥 — позволяет очень просто инферить большие модели (10B+) на каком угодно железе. По возможности распараллелит по всем GPU, если не их хватает — кусок модели будет держаться в памяти процессора и подгружаться в GPU когда надо. Если даже CPU памяти не хватает, будет подгружать веса с диска кусками.
1. Добавили BLOOM 🌸 от BigScience — одновремено с этим выложены чекпоинты от 0.3B до 6B. Главная модель в 176B должна подоспеть через месяц.
1. Добавили GPT-NeoX-20B, Wav2Vec2-Conformer, Trajectory Transformer, LongT5 (кстати его надо бы на днях разобрать) и ещё несколько интереных моделей.
🔥50👍12👎2
😁17🤔6🤮6👎3
GitHub Copilot теперь доступен всем
https://github.blog/2022-06-21-github-copilot-is-generally-available-to-all-developers

1. 60 дней пробный период
1. $10/мес или $100/год
1. Бесплатно для студентов и меинтейнеров популярного opensource 🎉

По-моему весьма адекватная цена, я использую копайлот где-то с сентября и он очень крут. Очень помогает писать всякий boilerplate и другой простой код. Также matplotlib стало возможно использовать без постоянного поиска команд в гугле/документации. Но самое главное: зачастую помогает придумать название переменной 😂

Пока доступен только индивидуальным разработчикам, продукт для больших компаний обещают later this year. Интересно, появится ли когда-нибудь on-premise решение, а то без этого кажется в больших компаниях типа FAANG он будет запрещен всегда 😞
🔥13👍8🤯3😁1
В статье на хабре про YALM отлично описывают как сейчас тренировать большие модели. Fp16 vs bf16 vs ft32, ZeRo, фьюзинг с помощью jit, отключение дропаута (внезапно ускорение аж на 15%), много про стабилизацию тренировки. 🔥🔥🔥

Внезапно веса модели распространяются по Apache 2.0, то есть вы можете запихать их в свой коммерческий проект 🤔
🔥23❤‍🔥7
DL in NLP pinned «В статье на хабре про YALM отлично описывают как сейчас тренировать большие модели. Fp16 vs bf16 vs ft32, ZeRo, фьюзинг с помощью jit, отключение дропаута (внезапно ускорение аж на 15%), много про стабилизацию тренировки. 🔥🔥🔥 Внезапно веса модели распространяются…»
Forwarded from Институт AIRI
Исследователи AIRI обучили нейросетевую модель на самой полной на сегодняшний день сборке генома человека 🧬

Модель GENA_LM, выложена в open source и доступна биологам по всему миру. В данный момент в мире уже представлен набор достаточно хороших моделей для последовательностей белков (например, ESM), но для последовательностей ДНК публично доступна только разработанная коллективом ученых из США модель DNABERT.

GENA_LM – первая в мире языковая модель ДНК, обученная на самой полной версии генома человека (T2T-CHM13), которая была опубликована в конце марта 2022 года. Она может обрабатывать последовательности в 6 раз длиннее, чем DNABERT.

Опубликованная модель – это первый шаг исследования. Впереди эксперименты по применению трансформерных архитектур с памятью, которые позволят увеличить размер входной последовательности ещё в несколько раз.

Репозитории с моделью GENA_LM:
👾 Hugging Face
👾 GitHub
👍14
The last months be like
🤯10😁5👍1👏1
#чтивонаночь

Ладно, подеградировали пора и поработать.

Bpe — byte pair encoding — почему модель генерит украинский/вообще что то левое.

Да, это все он, великий и могучий. Какая идея — если мы будем кормить в эмбединг модель character level (побуквенно, то есть), то мы
1) Хуй обучим на нормальную длину,
2) Хуй что обучим в принципе, модели шумят.

Если мы будем кормить по словам, ситуация станет лучше, но отчасти. Слов много, пользователи безграмотны, можно очень легко ловить out of vocabulary и прочие прелести жизни. Есть всякие хаки с поиском ближайших слов, но это не всегда работает и вообще тяжелая штука.

Что делать?
Коды Хаффмана.
Вообще, штука простая до нельзя - это жадный алгоритм префиксного кодирования с минимальной избыточностью. Или по-русски — "как закодировать последовательность в минимальное количество подпоследовательностей".

Алгоритм

1) Символы входного алфавита образуют список свободных узлов. Каждый лист имеет вес, который может быть равен либо вероятности, либо количеству вхождений символа в сжимаемое сообщение.
2) Выбираются два свободных узла дерева с наименьшими весами.
3) Создается их родитель с весом, равным их суммарному весу.
4) Родитель добавляется в список свободных узлов, а два его потомка удаляются из этого списка.
5) Одной дуге, выходящей из родителя, ставится в соответствие бит 1, другой — бит 0. Битовые значения ветвей, исходящих от корня, не зависят от весов потомков.
6) Шаги, начиная со второго, повторяются до тех пор, пока в списке свободных узлов не останется только один свободный узел. Он и будет считаться корнем дерева.

BPE
Идея очень похожа, но упрощена в угоду скорости работы (чем больше данных мы прогоним, тем эффективнее научимся кодировать текст).

Так же не будет проблемы если слова нет в словаре, с некоторой эффективностью(не всегда эффективно) оно все равно закодируется.

Обучение BPE

1) Слово = последовательность токенов (пока символов, изначально использовались unicode-символы),
2) Словарь = все токены (на нулевой итерации — символы),
3) Повторять пока не достигли ограничения на размер словаря.
Назначаем новым токеном объединение двух существующих токенов, которое встречается чаще других пар в корпусе (имеется в виду "встречаются вместе").

Читать про BPE

Почитать про разные токенайзеры в том числе про word piece и sentence piece можно в блоге на huggingface.
👍18🤬12🤔1
Новости NLP одной строкой

1. Тренировка BLOOM - 176B модели от BigScience почти завершена. А ещё Optimum уже поддерживает BLOOM🔥🔥🔥
1. Отличный тред о том как CodeParrot искал ошибки в тренировке своей большой модели
1. Minerva - языковая модель от гугл которая может решать математические задачи
1. Named Tensor 2.0 в пайторче с поддержкой einsum
🔥11👍3
DALL-E Mini Is the Internet's Favorite AI Meme Machine
wired.com/story/dalle-ai-meme-machine

Вот мы и дошли до того что я даю ссылки на Wired в постах...
Сейчас переехал в новых город 🗽 и знакомлюсь с кучей новых людей, из них почти все не из диплернинга. И довольно быстро я понял что несмотря на весь хайп который создаёт вокруг себя OpenAI, довольно мало людей знает про DALL-E или GPT-3.

Но буквально на днях встретил несколько людей которые почти ничего не знают про OpenAI, но знают про DALL-E Mini/Crayon. Всё-таки мемы - лучший способ продвижения.

В статье собственно обсуждают саму модельку, немного её истории, и что она умеет и не умеет. Рекомендую запомнить её и показывать своим недиплернинговым знакомым.
👍11