Фан фект – в статье к Perceiver неиронично есть ссылка на 'Критику чистого разума' Канта
Есть очень классное видео с объяснением того, как работает Perciever и в чем суть архитектуры. Perciever – это сетка, обученная для мультмодельных задач, то есть на вход может поступать много разных типов информации (текст, изображение, звук и т.д.), и сама нейронка не знает, что это именно за данные. Помимо того, что нужно уметь справляться с разными инпутами, в этом случае также встает проблема с размерностью, так как те же самые изображения, разбитые на пиксели, продуцируют такой размер входных данных, который классический транфсормер не особо может обработать (поэтому в предшествующих решениях картинку разбивают на патчи, например)
Если очень кратко суммировать:
1. Сначала создается latent array небольшого размера, такого, что классический self-attention может его обработать (условно, каким-то образом мы инициализируем вектор)
2. Берутся входные данные (например, картинка) и растягивается в byte array. Этот array может быть очень большой. Поскольку данные просто растягиваются, а не преобразовываются неким образом, сетка становится инвариантна с типу данных
3. Из этой входной информации получаются матрицы K и V, которые потом пойдут на вход в механизм аттеншена. Матрицу Q мы получаем из небольшого latent array, и она также имеет небольшую размерность –> после аттеншена мы получаем гораздо более короткую последовательность, чем входные данные.
Интуитивно можно понимать, что Q – это то, что мы хотим выучить на основе данных, а K и V – на что нам обращать внимание при этом (что каждый кусочек входных данных нам может сообщить в разрезе того, что мы хотим выучить)
4. Потом этот преобразованный после аттеншена вектор попадает в архитектуру трансформера, он выдает снова преобразованную последовательность, и мы снова 'добавляем' информацию из исходных данных на каждой такой итерации.
5. Архитектура в итоге работает как RNN – сначала мы инициализировали некий Q, получили K и V из данных, подали их в аттеншн и потом в трансформер, получили новый latent array, из которого снова достали Q, и снова получили K и V из данных. То есть на 2+ этапе Q уже содержит информацию о данных, и дальше мы ее 'уточняем'
Еще авторы позволяют weight sharing, чтобы снизить число параметров (получается сопоставимо с ResNet), и обучают на картинках, видео, аудио и 3D clouds. Результаты работы сетки можно посмотреть здесь, если не видели, они довольно впечатляющие
Как отмечают в коментах, подтверждается тезис Шмидхубера о том, что чем больше архитектура похожа на LSTM, тем она лучше
https://www.youtube.com/watch?v=P_xeshTnPZg
Если очень кратко суммировать:
1. Сначала создается latent array небольшого размера, такого, что классический self-attention может его обработать (условно, каким-то образом мы инициализируем вектор)
2. Берутся входные данные (например, картинка) и растягивается в byte array. Этот array может быть очень большой. Поскольку данные просто растягиваются, а не преобразовываются неким образом, сетка становится инвариантна с типу данных
3. Из этой входной информации получаются матрицы K и V, которые потом пойдут на вход в механизм аттеншена. Матрицу Q мы получаем из небольшого latent array, и она также имеет небольшую размерность –> после аттеншена мы получаем гораздо более короткую последовательность, чем входные данные.
Интуитивно можно понимать, что Q – это то, что мы хотим выучить на основе данных, а K и V – на что нам обращать внимание при этом (что каждый кусочек входных данных нам может сообщить в разрезе того, что мы хотим выучить)
4. Потом этот преобразованный после аттеншена вектор попадает в архитектуру трансформера, он выдает снова преобразованную последовательность, и мы снова 'добавляем' информацию из исходных данных на каждой такой итерации.
5. Архитектура в итоге работает как RNN – сначала мы инициализировали некий Q, получили K и V из данных, подали их в аттеншн и потом в трансформер, получили новый latent array, из которого снова достали Q, и снова получили K и V из данных. То есть на 2+ этапе Q уже содержит информацию о данных, и дальше мы ее 'уточняем'
Еще авторы позволяют weight sharing, чтобы снизить число параметров (получается сопоставимо с ResNet), и обучают на картинках, видео, аудио и 3D clouds. Результаты работы сетки можно посмотреть здесь, если не видели, они довольно впечатляющие
Как отмечают в коментах, подтверждается тезис Шмидхубера о том, что чем больше архитектура похожа на LSTM, тем она лучше
https://www.youtube.com/watch?v=P_xeshTnPZg
YouTube
Perceiver: General Perception with Iterative Attention (Google DeepMind Research Paper Explained)
#perceiver #deepmind #transformer
Inspired by the fact that biological creatures attend to multiple modalities at the same time, DeepMind releases its new Perceiver model. Based on the Transformer architecture, the Perceiver makes no assumptions on the modality…
Inspired by the fact that biological creatures attend to multiple modalities at the same time, DeepMind releases its new Perceiver model. Based on the Transformer architecture, the Perceiver makes no assumptions on the modality…
This media is not supported in your browser
VIEW IN TELEGRAM
У Rivers Have Wings как всегда нерельно красивый AI art, это вот только что вышедший StyleGAN3
Forwarded from Мишин Лернинг
This media is not supported in your browser
VIEW IN TELEGRAM
🧛♀️🐍 Colab StyleGAN3 + CLIP by Мишин Лернинг
Подготовил для вас отполированную и доведённую до ума версию colab для генерации арта по текстовому описанию!
🤖 Для гиков: за основу взял выложенный вчера вечером в твиттере nshepperd1 колаб StyleGAN3 + CLIP, с прикрученным интерфейсом от nn_for_science. Улучшил стабильность и качество генерации, перенеся идеи, которые считаю важными, из vqgan версии.
🎓 Что улучшено в версии от “Мишин Лернинг”:
▪️ Добавил дифференцируемые аугментации. Сильно накидывают в качестве
▪️ Увеличил размер батча для CLIP на каждом шаге оптимизации
▪️ Увеличил размер кропов в батче, на которые смотри CLIP
▪️Подобрал параметры оптимизатора и ema по z между шагами
🔮StyleGAN3 + CLIP by Мишин Лернинг colab
p.s.: prompt для анимации к посту: “A vampire woman with long hairs made of snakes in style of Gustav Klimt”
Подготовил для вас отполированную и доведённую до ума версию colab для генерации арта по текстовому описанию!
🤖 Для гиков: за основу взял выложенный вчера вечером в твиттере nshepperd1 колаб StyleGAN3 + CLIP, с прикрученным интерфейсом от nn_for_science. Улучшил стабильность и качество генерации, перенеся идеи, которые считаю важными, из vqgan версии.
🎓 Что улучшено в версии от “Мишин Лернинг”:
▪️ Добавил дифференцируемые аугментации. Сильно накидывают в качестве
▪️ Увеличил размер батча для CLIP на каждом шаге оптимизации
▪️ Увеличил размер кропов в батче, на которые смотри CLIP
▪️Подобрал параметры оптимизатора и ema по z между шагами
🔮StyleGAN3 + CLIP by Мишин Лернинг colab
p.s.: prompt для анимации к посту: “A vampire woman with long hairs made of snakes in style of Gustav Klimt”
Хороший лонгрид для тех, кто тоже сейчас страдает с поступленим в зарубежные маги. У автора специфичный выбор программ (не в смысле плохой, а в смысле критерии подбора могут распространиться не на всех), но имхо материал очень полезный. Пожалуй основная мысль в том, что да, если вы гений с кучей достижений и ачивок, это очень поможет вашему поступлению, но где-то 50% успеха все равно приходится на грамотный поиск и выбор подходящих программ и стипендий.
Еще статья неплохо может сориентировать в плане того, сколько документов в конечном итоге вам нужно будет подготовить, и с какими объемами бюрократии придется столкнуться (спойлер: с огромными). Очень понравилось, что там максимально подробные примеры с конкретным процессом подачи через разные студенческие сервисы из реального опыта, так что может быть кому-то еще тут будет полезно почитать:
Еще статья неплохо может сориентировать в плане того, сколько документов в конечном итоге вам нужно будет подготовить, и с какими объемами бюрократии придется столкнуться (спойлер: с огромными). Очень понравилось, что там максимально подробные примеры с конкретным процессом подачи через разные студенческие сервисы из реального опыта, так что может быть кому-то еще тут будет полезно почитать:
Вастрик.Клуб
Как я в магистратуру в Европу (и не только) поступал — Вастрик.Клуб
TL;DR: Это лонгрид о моем поступлении в магистратуру за рубеж из Украины с подробностями о процессе выбора университетов, программ, стипендий, написа…
Классный фреймворк для topic modeling – можно подрубить какие угодно эмбеддинги на ваш выбор (или оставить дефолтные), и кластеризировать тексты в zero-shot. По умолчанию это multilingual классификация, так что на инференсе модель справится с текстами и на тех языках, которые во время обучения она могла и не видеть
Помимо того, что это позволяет не тратить время на то, чтобы писать кластеризацию руками, у них есть хороший пайплайн для автоматического препроцессинга текстов. И еще есть прикольный сабмодуль для human-in-the-loop классификации (называется Kitty 🥺), где можно самому поразмечать лейблы для текстов и потом инференсить модель
Помимо того, что это позволяет не тратить время на то, чтобы писать кластеризацию руками, у них есть хороший пайплайн для автоматического препроцессинга текстов. И еще есть прикольный сабмодуль для human-in-the-loop классификации (называется Kitty 🥺), где можно самому поразмечать лейблы для текстов и потом инференсить модель
GitHub
GitHub - MilaNLProc/contextualized-topic-models: A python package to run contextualized topic modeling. CTMs combine contextualized…
A python package to run contextualized topic modeling. CTMs combine contextualized embeddings (e.g., BERT) with topic models to get coherent topics. Published at EACL and ACL 2021 (Bianchi et al.)....
Интересный папирус, в котором авторы воспроизводят увиденное человеком изображание по сканам активности мозга
• Сначала людям показывают видео нескольких категорий (абстрактные геометрические фигуры, лица людей, эктремальный спорт и тд)
• Проводят ЭЭГ и получают колебания активности мозга
• Получают эмбеддинг этих колебаний с помощью LSTM + Attention (так как это просто последовательность частот)
• Получают эмбеддинг картинки с помощью VGG
• Считают лосс между эмбеддингом активности мозга и картинкой, прибавляют к этому лосс между картинкой, восстановленной по ЭЭГ, и картинкой, восстановленной по эмбеддингу исходного изображения (декодер для картинок там один и тот же для обоих процессов)
Выше схема обучения вместе в примерами реконструкции, получается довольно неплохо
• Сначала людям показывают видео нескольких категорий (абстрактные геометрические фигуры, лица людей, эктремальный спорт и тд)
• Проводят ЭЭГ и получают колебания активности мозга
• Получают эмбеддинг этих колебаний с помощью LSTM + Attention (так как это просто последовательность частот)
• Получают эмбеддинг картинки с помощью VGG
• Считают лосс между эмбеддингом активности мозга и картинкой, прибавляют к этому лосс между картинкой, восстановленной по ЭЭГ, и картинкой, восстановленной по эмбеддингу исходного изображения (декодер для картинок там один и тот же для обоих процессов)
Выше схема обучения вместе в примерами реконструкции, получается довольно неплохо
Туториал про то, как заставить BERT принимать на вход категориальные и числовые параметры
Собственно сам метод довольно прост – такие параметры нужно обернуть в текст. Например, чтобы предсказать рейтинг товара по его отзыву и цене, нужно не передать его цену саму по себе, а вписать число в конструкцию типа
Решение вроде бы на поверхности (для той же GPT очень часто текст оборачивают в те или иные конструкции, чтобы она выполняла определенную задачу), но с бертом почему-то не приходило в голову сделать так же
Еще там внутри хороший такой код для подготовки данных и обучения берта с шедулером, можно себе заимствовать
Собственно сам метод довольно прост – такие параметры нужно обернуть в текст. Например, чтобы предсказать рейтинг товара по его отзыву и цене, нужно не передать его цену саму по себе, а вписать число в конструкцию типа
this item costs {amount}, и затем объединить с отзывом. Эксперимент автора показывает, что учет таких категориальных данных помогает сравнительно с предсказанием только на самом тексте, хоть изменение и инкрементально Решение вроде бы на поверхности (для той же GPT очень часто текст оборачивают в те или иные конструкции, чтобы она выполняла определенную задачу), но с бертом почему-то не приходило в голову сделать так же
Еще там внутри хороший такой код для подготовки данных и обучения берта с шедулером, можно себе заимствовать
В продолжение темы мультимодальности, есть репозиторий Multimodal Toolkit, который позволяет совмещать текстовые, категориальные и числовые данные для задач классификации и регрессии (для обработки текста там используются разные вариации BERT и XLM)
Тут уже можно выбрать кучу вариантов преобразования данных. Самое простое – просто сконкатенировать эбеддинг текста с остальными переменными (на удивление в некоторых задачах это работает хорошо). Или накрутить для табличных данных свои отдельные MLP, и потом конкатенировать вектора. Или суммировать эти вектора с обучаемыми весами на основе gated attention
Опять же, как показывают тесты авторов, учет метаинформации помимо текста помогает в некоторых задачах сильно забустить качество
Тут уже можно выбрать кучу вариантов преобразования данных. Самое простое – просто сконкатенировать эбеддинг текста с остальными переменными (на удивление в некоторых задачах это работает хорошо). Или накрутить для табличных данных свои отдельные MLP, и потом конкатенировать вектора. Или суммировать эти вектора с обучаемыми весами на основе gated attention
Опять же, как показывают тесты авторов, учет метаинформации помимо текста помогает в некоторых задачах сильно забустить качество
Forwarded from DL in NLP (Vlad Lialin)
DeepLearning.ai выпустили новый курс в Natural Language Processing Specialization, рассказывающий про трансформеры (да, каким-то обраозм трансформеров там до сих пор не было).
Я проглядел его по диагонали и курс выглядит довольно неплохо. Есть домашки по машинному переводу, суммаризации, QA и чатботам. На последней неделе даже проходят reformer (длинный трансформер работающий через LSH-attention). Если кто-то решит пройти, буду рад если поделитесь своими впечатленями в чате.
Я проглядел его по диагонали и курс выглядит довольно неплохо. Есть домашки по машинному переводу, суммаризации, QA и чатботам. На последней неделе даже проходят reformer (длинный трансформер работающий через LSH-attention). Если кто-то решит пройти, буду рад если поделитесь своими впечатленями в чате.
Coursera
Natural Language Processing with Attention Models
Offered by DeepLearning.AI. In Course 4 of the Natural ... Enroll for free.
Symbolic Knowledge Distillation: from General Language Models to Commonsense Models
https://arxiv.org/abs/2110.07178
Как известно, Трансформеры учатся на очень шумных данных (куче накроуленых текстов из интернета), поэтому часто страдают из-за логических противоречий и отсутствия здравого смысла при генерации. Чтобы обучить логичную и последовательную модель как правило используют графы знаний, составленные людьми. Например датасет ATOMIC содержит в себе наборы фактов и все следующие из них высказывания. i.e. Х доверяет Y -> X доверчивый (атрибут), X хочет иметь дела с Y (желание), до этого X нужно было подружиться с Y (необходимость) и так далее. Проблема в том, что собирать такие данные довольно дорого и долго. Поэтому авторы предлагают дистиллировать большую языковую модель:
• Семплят из ATOMIC высказывания и подают в GPT-3 через промты типа
Event <i>: X goes jogging
Prerequisites: For this to happen, X needed to wear running shoes.
При инференсе промт отбрасывается после 'For this to happen, '. Для каждого типа заданий свой промт, например, для генерации эффекта прописывается 'As a result, '
• Классификтором-критиком из получившегося корпуса дополнительно фильтруются нелогичные или просто кривые высказывания. В итоге их корпус получается в 10 раз больше оригинального, не теряя в качестве. При чем, при ручной валидации качество 'синтетического' датасета оказывается выше, чем у корпуса, составленного людьми
• На получившемся корпусе потом тренируют GPT-2 (она в 100 раз меньше в плане параметров, чем модель-учитель). На основе человеческой валидации, модель-ученик в итоге справляется лучше с генерацией commonsense knowledge
https://arxiv.org/abs/2110.07178
Как известно, Трансформеры учатся на очень шумных данных (куче накроуленых текстов из интернета), поэтому часто страдают из-за логических противоречий и отсутствия здравого смысла при генерации. Чтобы обучить логичную и последовательную модель как правило используют графы знаний, составленные людьми. Например датасет ATOMIC содержит в себе наборы фактов и все следующие из них высказывания. i.e. Х доверяет Y -> X доверчивый (атрибут), X хочет иметь дела с Y (желание), до этого X нужно было подружиться с Y (необходимость) и так далее. Проблема в том, что собирать такие данные довольно дорого и долго. Поэтому авторы предлагают дистиллировать большую языковую модель:
• Семплят из ATOMIC высказывания и подают в GPT-3 через промты типа
Event <i>: X goes jogging
Prerequisites: For this to happen, X needed to wear running shoes.
При инференсе промт отбрасывается после 'For this to happen, '. Для каждого типа заданий свой промт, например, для генерации эффекта прописывается 'As a result, '
• Классификтором-критиком из получившегося корпуса дополнительно фильтруются нелогичные или просто кривые высказывания. В итоге их корпус получается в 10 раз больше оригинального, не теряя в качестве. При чем, при ручной валидации качество 'синтетического' датасета оказывается выше, чем у корпуса, составленного людьми
• На получившемся корпусе потом тренируют GPT-2 (она в 100 раз меньше в плане параметров, чем модель-учитель). На основе человеческой валидации, модель-ученик в итоге справляется лучше с генерацией commonsense knowledge
This media is not supported in your browser
VIEW IN TELEGRAM
Тем временем кстати NVIDIA релизнули код для GANcraft
This media is not supported in your browser
VIEW IN TELEGRAM
еще один проклятый face swap накануне хеллоуина
я обучала одну модель
еще один проклятый face swap накануне хеллоуина
После публикации этого проклятого видоса админесса неиронично попала в аварию.... Будьте осторожны в этот хеллоуин и пристегивайтесь на задних сидениях
Forwarded from DL in NLP (nlpcontroller_bot)
Fast Model Editing at Scale
Mitchell et al., [Stanford]
Представьте себе, что вы ClosedAI, большая суперкорпорация по тренировке языковых моделей. Вы скачиваете весь интернет и тренируете ваш GPT-42, тратя миллиарды долларов на электричество. После чего вы спрашиваете у модели "Who is the prime minister of the UK?" и она отвечает вам "Theresa May". Это грустный, но релеалистичный сценарий.
Менять какие-то факты в классических knowledge graphs легко — меняете ссылку с сущности UK prime minister на другого человека. Но в нейросетках это нетривиальная задача. Если вы просто зафайнтюните модель на одном примере, модель просто переобучится и например всё ещё будет отвечать "Theresa May" на вопрос "Who is the UK PM?". Ещё модель может изменить свои ответы на вопросы, которые вообще с этим не связаны.
Исследователи из Стенфорда предлагают натренировать нейросеть, которая будет модифицировать градиенты файнтюнинга таким образом, чтобы модель действительно апдейтила своё знание — не влияя на несвязанные с этим вопросы, но изменяя ответ для всех связанных. Однако возникает проблема, что если у вас в модели 10B параметров, то даже линейный слой, для их модицикации будет 100B.
Авторы решают это тем, что представляют градиент параметров через downstream gradient слоёв. Если вы помните бэкпроп, то градиент в линейном слое равен X.T @ dL/d(out). Где out — это downstream gradient размера hidden,, что сильно меньше самого градиента размера hidden, hidden. Так как X.T мы знаем, то достаточно модифицировать dL/d(out). По-моему гениальное решение, я год назад занимался похожим проектом и не думаю, что когда-нибудь додумался бы до этого.
Этот трюк позволяет использовать подход даже для очень больших моделей, таких как T5-XXL 10B. При сравнении с альтернативными подходами, этот метод показывает себя лучше и в смысле генерализации на перефразирования вопроса и в смысле сохранения ответов на несвязанные вопросы.
Mitchell et al., [Stanford]
Представьте себе, что вы ClosedAI, большая суперкорпорация по тренировке языковых моделей. Вы скачиваете весь интернет и тренируете ваш GPT-42, тратя миллиарды долларов на электричество. После чего вы спрашиваете у модели "Who is the prime minister of the UK?" и она отвечает вам "Theresa May". Это грустный, но релеалистичный сценарий.
Менять какие-то факты в классических knowledge graphs легко — меняете ссылку с сущности UK prime minister на другого человека. Но в нейросетках это нетривиальная задача. Если вы просто зафайнтюните модель на одном примере, модель просто переобучится и например всё ещё будет отвечать "Theresa May" на вопрос "Who is the UK PM?". Ещё модель может изменить свои ответы на вопросы, которые вообще с этим не связаны.
Исследователи из Стенфорда предлагают натренировать нейросеть, которая будет модифицировать градиенты файнтюнинга таким образом, чтобы модель действительно апдейтила своё знание — не влияя на несвязанные с этим вопросы, но изменяя ответ для всех связанных. Однако возникает проблема, что если у вас в модели 10B параметров, то даже линейный слой, для их модицикации будет 100B.
Авторы решают это тем, что представляют градиент параметров через downstream gradient слоёв. Если вы помните бэкпроп, то градиент в линейном слое равен X.T @ dL/d(out). Где out — это downstream gradient размера hidden,, что сильно меньше самого градиента размера hidden, hidden. Так как X.T мы знаем, то достаточно модифицировать dL/d(out). По-моему гениальное решение, я год назад занимался похожим проектом и не думаю, что когда-нибудь додумался бы до этого.
Этот трюк позволяет использовать подход даже для очень больших моделей, таких как T5-XXL 10B. При сравнении с альтернативными подходами, этот метод показывает себя лучше и в смысле генерализации на перефразирования вопроса и в смысле сохранения ответов на несвязанные вопросы.