DS & ML
588 subscribers
1.17K photos
238 videos
240 files
1.41K links
Download Telegram
Forwarded from ExMuffin
This media is not supported in your browser
VIEW IN TELEGRAM
💃 HomeStylist v.1.0 🕺

Сегодня выкатили нейросеть, которая может не только менять позу, но и переодевать человека на фотографии. Код есть, а Колаба небыло. Я исправил это недоразумение. Сделал его удобным на столько, на сколько это вообще возможно, ибо чтобы завести эту нейросеть пришлось клонировать еще парочку, но оно того стоило. Качество синтезированного изображения на высоте. Разрешение, конечно, 512 по большей стороне, но те, кому нужно, прогонят дополнительно через какой-нибудь апскейлер.

https://colab.research.google.com/github/tg-bomze/collection-of-notebooks/blob/master/HomeStylist.ipynb
Forwarded from эйай ньюз
Ресерчеры из Meta AI масштабировали разреженные языковые модели до 1.1 триллиона параметров. Причем сделали это эффективно и показали, что они требует в 4 раза меньше ресурсов чем сравнимые по точности плотные (dense) модели.

Подробнее в статье Efficient Large Scale Language Modeling with Mixtures of Experts.
Forwarded from Big Data Science
🍏Bayesian statistics with PyMC3: brief overview
Frequency statistics rely on long-term event rates (data points) to calculate the desired variable. The Bayesian method can also work without a lot of events, even with a single data point. Frequency analysis gives a point estimate, while Bayesian analysis gives a distribution that can be interpreted as the confidence that the mean of the distribution is a good estimate for the variable. However, there is an uncertainty in the form of the standard deviation.
The Bayesian approach is useful in ML problems where estimates and validity are important. For example, today it could rain with a 60% chance.” The main formula underlying the Bayesian approach is Bayes' theorem, which allows you to calculate the posterior probability P(A|B ) of event A depending on event B.
• P(B|A) is called the probability that if event A happened, how likely is event B to happen?
• P(A) – probability of event A, a prior (initial) assumption about the variable of interest.
• P(B) is the probability of event B (evidence), which is usually difficult to calculate when estimating the posterior probability.
You can quickly calculate the Bayesian probability using the PyMC3 Python library https://docs.pymc.io/en/v3/. It allows you to write models using an intuitive syntax to describe the data generation process. PyMC3 allows you to tune an ML model with gradient-based MCMC algorithms like NUTS, with ADVI for fast approximate inference, including a mini-batch ADVI for scaling to large datasets, or with Gaussian processes to build Bayesian non-parametric models. PyMC3 includes a complete set of predefined statistical distributions that can be used as the building blocks of a Bayesian model.
This probabilistic programming package for Python allows users to fit Bayesian models using various numerical methods, most notably Markov Chain Monte Carlo (MCMC) and Variational Inference (VI). Instead of providing a basic model specification and fitting functions, PyMC3 includes functions for summarizing output and diagnosing the model.
PyMC3 aims to make Bayesian modeling as simple and painless as possible by allowing users to focus on their scientific problem rather than the methods used to solve it. The package uses Theano as a computational backend to quickly evaluate an expression, compute the gradient automatically, and perform computations on the GPU.
PyMC3 also has built-in support for modeling Gaussian processes, allowing you to generalize models and build graphs. There's model validation and convergence detection, custom stepwise methods, and unusual probability distributions. Bayesian models obtained using PyMC3 can be embedded in larger programs, and the results can be analyzed using any Python tools.
https://medium.com/@akashkadel94/bayesian-statistics-overview-and-your-first-bayesian-linear-regression-model-ba566676c5a7
Forwarded from эйай ньюз
Сбер выложил в открытый доступ увеличенные версии ruCLIP — моделей, которые умеют вычислять «смысловую» близость любого изображения и текста на русском языке. С помощью этих моделей можно классификации новые изображение из ранее невиданых классов без обучения (zero-shot). ruCLIP модели даже превосходят в качестве оригинальной английский CLIP от OpenAI вместе с русско-английским переводчиком на большинстве тестовых датасетов.

Все модельки обучались на 240 млн пар изображение-текст на русском языке на внутреннем датасете от Сбера.

>> Код и веса моделей есть на гитхабе.
Forwarded from эйай ньюз
This media is not supported in your browser
VIEW IN TELEGRAM
Explaining in Style: Training a GAN to explain a classifier in StyleSpace
Google Research

Статейка, где ученые прикрутили к StyleGAN2 классификатор и заставляют StyleGAN2 генерить картинки в зависимости от заданных лейблов (тогда как оригинальный StyleGAN2 генерит картинки из случайных классов). По факту сделали conditional генерацию (что не ново само по себе, но для StyleGAN2 такого пока никто не публиковал).

Кроме того, авторы представили метод, который автоматиччески находит размерности в стилевом векторе W, которые отвечают за признаки присущие объектам определенного класса. То есть теперь можно подвигать ползунок и поменять фото кота так, чтобы он стал больше похож на собаку.

>> Код >> Сайт проекта
Forwarded from эйай ньюз
Архитектура метода из статьи выше. Классификатор С предобучен заранее и его выходы (logits) конкатенируются к вектору W и скармливаются в энкодер.
Го тестить на что способна почти SOTA сверточная сеть в эпозу визуальных трансформеров.

Потестил на генерации DALL-E. Ну неплохо, но сгенерить такое, имхо, круче, чем классифицировать.

🤗 ConvNeXt Demo
😭 Сделал диаграмму ConvNeXt с поправкой на How to train your ViT? и на EfficientNetV2
🚀🗄 FAST DATA LOADER IS ALL YOU NEED: Fast Forward Computer Vision

Тут студенты из MiT собрали быстрейший даталоадер!

Все что нужно, так это заменить
from torch.utils.data import DataLoader на from ffcv.loader import Loader, OrderOption, и далее по примеру из картинки поста.

Такой подход позволяет затренить родным PyTorch модель ResNet на ImageNet всего за 35 минуут (1$ на AWS)

📮 FFCV 💻 Git 📚 Docs
Forwarded from Big Data Science
💥5 YOUTUBE channels for a data engineer from popular DS bloggers
• Ken Jee
https://www.youtube.com/c/KenJee1/videos - 183 thousand subscribers and about 200 videos about Data Science, big data engineering, ML and sports analytics
• Karolina Sowinska https://www.youtube.com/c/KarolinaSowinska/videos 30+ thousand subscribers and almost 60 great videos about AirFlow, AI, ETL and the career of a data engineer;
• Shashank Mishra https://www.youtube.com/c/LearningBridge/video 40+ thousand subscribers and more than 150 videos about everyday life data engineers, DS course reviews, interview recommendations and personal experience of the author who worked at Amazon , McKinsey&Company, PayTm and other large corporations, as well as startups.
• Seattle Data Guy https://www.youtube.com/c/SeattleDataGuy/videos almost 20 thousand subscribers and more than 100 videos about the soft and hard skills of a data engineer, life hacks for solving daily tasks of collecting and aggregating data using Python and not only, SQL best practices, introduction to R and much more
• Andreas Kretz https://www.youtube.com/c/andreaskayy/videos about 27 thousand subscribers and more than 500 videos vanilla and proprietary Hadoop, Spark, Kafka, AWS services and other cloud platforms, ETL basics, installation details and practical use different Big Data technologies and features of the data engineer profession.
Forwarded from Технологии | Нейросети | Боты
This media is not supported in your browser
VIEW IN TELEGRAM
data2vec: A General Framework for Self-supervised Learning in Speech, Vision and Language.

Meta рассказали о своем новом подходе к машинному обучению без учителя, назыается data2vec. Если очень сильно упрощать, это единая нейронная сеть, которая обобщает выводы об устройстве изображений, текстов, звуков, в некотором приближении чего угодно. И умеет, как и человеческий мозг, “достраивать” недостающие элементы.
Data2vec призван использовать общие “подходы” и переносить навыки по дополнению картины мира между разными областями. Впечатляет что этот подход уже сейчас показал лучшие результаты в классических задачах машинного обучения, обогнав всех и в распознавании речи и в определении изображения на картинке.

blog: https://ai.facebook.com/blog/the-first-high-performance-self-supervised-algorithm-that-works-for-speech-vision-and-text
github: https://github.com/pytorch/fairseq/tree/main/examples/data2vec
Forwarded from эйай ньюз
Как много приложений и возможностей открыл StyleGAN. Хотя были ганы и до этого, но именно StyleGAN воистину универсальная и прорывная штука.

С декабря 2018 года, когда его впервые опубликовали на архиве, статья набрала 3.5к цитирований. Бесчисленное множество прилог было построено на StyleGAN 1 и 2 за три года. Вот только StyleGAN3 все ещё не так сильно пошел в массы. Люди боятся теории что ли?

Всё-таки NVIDIA – красавчики.
Forwarded from Neural Shit
This media is not supported in your browser
VIEW IN TELEGRAM
Вот это выглядит реально заебцово.

Помните, как GPT-3 натаскивали писать код по краткому описанию? Тут обратный процесс: генерируется документация к выделенному куску кода. Особенно актуально для таких человеков как я, которые не комментируют свой код или комментируют так, что один хрен ничего не понятно. Ну и легаси-говнокод разбирать проще будет (при условии, если эту штуку довести до идеала и максимально снизить количество ложных определений). Поддерживается JavaScript, TypeScript и Python.

Гитхаб проекта
Сайт проекта
Reward Augmented Maximum Likelihood for Neural Structured Prediction - статья 2016 года, дающая интересную связку RL и классического supervised learning в контексте генерации текстов.

Типичная постановка задачи seq2seq: обучить модель, которая бы по входному тексту x генерировала бы текст y (например, его перевод на другой язык). Обычно это модель условной вероятности: p(y|x).
Обычно при обучении таких моделей мы используем метод максимального правдоподобия (aka cross-entropy): для каждого x из обучающей выборки мы пытаемся максимизировать вероятность генерации соответствующего ему обучающего текста y – и, соответственно, минимизировать вероятность генерации любого другого текста. Математически это выражается как максимизация log p(y|x) на парах, взятых из обучающей выборки.

Проблема возникает, когда мы берём какой-то x не из обучающей выборки, и пытаемся сгенерировать какой-то текст, и он получается плохой (в каком-то смысле). А мы хотели бы генерировать только хорошие тексты, но при обучении модели никак этому не способствуем.
Одно из очевидных решений этой проблемы – обучение с подкреплением, но RL для текстов знаменито своей нестабильностью (потому что сигналы шумные, плюс обычно градиенты через текст не проходят) и медлительностью обучения (потому что на каждом шаге нужно сэмплировать ответы из модели, и желательно помногу). Собственно, авторы статьи предлагают метод обучения, альтернативный RL – более стабильный и быстрый.

Обычно задача RL формулируется так: имея функцию награды R(x, y), измеряющую хорошесть текстов, нужно максимизировать E(R(x, y)) + b*H(p(y|x), то есть матожидание награды плюс энтропию условного распределения с каким-то небольшим коэффициентом b (параметром). Матожидание берётся по x из обучающей выборки, и по y, посэмпленным из p(y|x) (которая меняется в ходе обучения). Энтропия максимизируется, чтобы из модели можно было сэмплировать разнообразные тексты, иначе модель не сможет методом проб и ошибок обнаружить путь к хорошим текстам. Обычный RL решает это методом policy gradient: сэмплирует x из обучающей выборки, потом сэмплирует y из модели (т.е. из p(y|x)), потом делает градиентный шаг по вышеупомянутой функции потерь, причём E(R(x, y)) в градиентном шаге заменяется на log p(y|x) R(x,y), так как при дифференцировании логарифма там вылезает множитель p, который как раз и даёт градиент матожидания.

Авторы статьи предлагают вместо этого решать двойственную задачу: максимизировать просто log p(y|x) (как при обычном обучении с учителем), но при этом y сэмплировать из распределения Q(y|x), пропорционального exp(R(y,x)/b), то есть такого распределения, что чем лучше текст, тем выше его вероятность. Оказывается, эта задача математически эквивалентна поставленной выше задаче RL, но при этом оптимизируется она гораздо проще: во-первых, не надо сэмплировать ничего из модели во время обучения, во-вторых, убирается шаг с шумным градиентом log p(y|x) R(x,y). Один вопрос: а можно ли вообще научиться сэмплировать тексты из Q?

Ответ: нельзя. Но можно приблизить это методом importance sampling: генерировать тексты из какого-то простого распределения S, и каждому тексту придавать вес, равный Q(y|x)/S(y|x). Чтобы этот метод работал, нужно, чтобы в S хотя бы иногда попадались "хорошие тексты". Если у нас есть обучающая выборка, добиться этого несложно: мы можем брать обучающие примеры y (ожидается, что они – хорошие, иначе мы бы на них не обучались) и вносить в них некоторое количество простых случайных правок (замены, перестановки, удаления слов или букв). Вероятность этих правок и будет S. И порождать их гораздо быстрее, чем генерировать тексты нейросеткой.

Получается, вместо сложного и медленного RL можно применять старое доброе обучение с учителем, но не на исходной обучающей выборке, а на аугментированной, причём примерам из этой выборки надо придать веса, для каждого х пропорциональные exp(R(x,y)/b)/S(x,y). В пределе, при b->0, это означает, что для каждого х надо оставить только наилучший у, который удалось насэмплить.
Reinforcement Learning (обучение с подкреплением) - это один из способов машинного обучения, суть которого лежит в двух понятиях, а именно агент и окружение.
Смысл RL заключается в том, чтобы научить агента верно действовать в некоторой среде благодаря сигналам о том, насколько хорошо или плохо у него это получается.
Иными словами, агент воздействует на среду, а среда воздействует на агента.

Таким образом, лично я бы выделил два популярных метода обучения такой нейросети.
А именно Q-обучение и Нейроэволюция.

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

Для работы с алгоритмом нейроэволюции, в Python есть популярная библиотека NEAT.
А для работы с Q-обучением, можно применить PyTorch.

Также, у нас на канале был ролик про создание простого перцептрона на Python.
И про использование библиотеки NEAT чтобы обучить игру играть в саму себя.
На этой неделе проходил зимнюю школу ALPS, очень понравилось, на следующий год рекомендую всем, кто изучает NLP всерьёз.
И на этой школе мне посоветовали статью A Distributional Approach to Controlled Text Generation, которая, как оказалось, подошла к задаче из моего предыдущего поста совершенно с другой стороны. Они назвали свой подход GDC (generation with distributional control).

Напомню, что типичный RL для генерации текстов предлагает выучивать такое распределение текстов p(y), которое максимизирует взвешенную сумму E R(y) + a*H(p): матожидание награды плюс бонус за разнообразность распределения. Метод RAML вместо этого предлагает минимизировать D(p, Q), где Q~exp(R(y)/b), где D() - это дивергенция Кульбака-Лейблера между двумя распределениями (и её минимизация эквивалентна просто минимизации кросс-энтропии между ними).

А в новой статье предлагают ещё одну постановку задачи: минимизировать D(p, A) при условии, что E R(y) = m. Здесь A - целевое распределение, на которое мы хотим сделать p максимально похожим, но так, чтобы среднее значение R было равно m. Заметим, что если в качестве целевого распределения использовать равномерное, то минимизация D(p, A) означает просто максимизацию`H(p), потому что у равномерного распределения энтропия самая большая. И ещё можно заменить, что для любого значения`a из RL-постановки можно подобрать такое значение m из новой постановки задачи, чтобы их оптимальные решения совпадали. Иными словами, максимизацию взвешенной суммы двух функций можно свести к максимизации одной функции при ограничении на другую, и наоборот.

Что всё это может означать на практике? Представим, что мы обучили крутую нейросетевую болталку A, которая порождает очень человекоподобные ответы, но в 10% разговоров хамит пользователям. А нам по продуктовым соображениям хочется иметь болталку p, которая вела бы себя максимально похоже на A, но хамила только в 1% случаев (потому что если вообще не хамить, будет скучно). Здесь функция`R` - это индикатор хамства, и его матожидание как раз означает долю хамства. Ну а в общем виде функция R и константа m (требуемое значение) могут быть векторами, т.е. мы будем предъявлять сразу несколько разных требований к болталке.

В статье используют теорему о том, что оптимальное распределение p(y) должно быть пропорционально P(y) = A(y) exp <λ, R(y)>: здесь λ - это неизвестный вектор slack variable, который можно подобрать градиентным спуском: сэмплируем выборку из A, перевзвешиваем пропорционально экспонентам, и подбираем λ так, чтобы средневзвешенное значение R(y) было поближе к m. После того, как мы подберём лямбду, то искомое распределение p нам будет известно с точностью до константы (потому что P - не нормализованное), но напрямую сэмплировать из него мы не сможем - и чтобы сделать это, нам придётся обучить нейросетку.

Но как обучить нейросетку воспроизводить нужное нам распределение, мы уже знаем: importance sampling. Берём любое распределение s, сэмплим из него выборку, перевзвешиваем примеры пропорционально P(x)/s(x), и учим нашу нейросетку предсказывать эти примеры с заданными весами. Собственно, в качестве s можно взять эту же нейросетку с весами, замороженными в начале эпохи, и тогда с каждой эпохой распределение s будет становиться всё более и более пропорциональным P – и должно скорее рано, чем поздно к нему сойтись.
Авторы применяют всю эту теорию к GPT-2, заставляя нейросеть генерировать тексты на определённые темы, с определённым сентиментом, или просто с конкретными словами. Все эти задачи приблизительно удаются и методу GDC, и другим бейзлайнам, использующим разного рода RL или подобные алгоритмы. Но GDC, за счёт максимальной близости к распределению A (исходной GPT-2 до оптимизации), генерирует наиболее разнообразные тексты, тогда как бейзлайны или слишком далеко отходят от ограничений, или дают вырожденые распределения с кривыми или однообразными текстами. Правда, доля текстов, в которых нужные слова/темы/классы таки действительно встречаются, у GDC вышла дальше всего от 100%: похоже, если ограничения очень трудновыполнимые, то подход заводится тяжело. Зато когда с помощью GDC модель обучали перебалансировать доли (типа генерировать 50% текстов про женщин или 40% текстов про искусство), это получалось довольно неплохо.

Получается, в этой статье решили проблему катастрофического забывания генеративных нейросетей при адаптации к новым (мягким) ограничениям. Причём решили принципиальным способом: сначала определили "на бумажке", каким должно быть новое распределение, а потом обучили модель воспроизводить именно его. Плюсы: получается стабильно и красиво. Минусы: кажется, это работает хорошо, только если исходная модель A уже и так удовлетворяет ограничения достаточно часто, чтобы параметры λ не уходили в бесконечность при попытке её перевзвесить. А если исходная модель справляется с ограничениями крайне редко, возможно, нам нужно больше изоленты.