Size: a a a

gonzo-обзоры ML статей

2020 August 25
gonzo-обзоры ML статей
Свежая статья от одного из участников нашего чата и авторский TLDR

Self-Supervised Learning for Large-Scale Unsupervised Image Clustering
Evgenii Zheltonozhskii, Chaim Baskin, Alex M. Bronstein, Avi Mendelson
Paper: https://arxiv.org/abs/2008.10312
источник
gonzo-обзоры ML статей
https://opendatascience.slack.com/archives/C5VQ222UX/p1598357047094600

Pасскажу о нашей работе, заодно попробую вкратце обозреть self-supervised learning (сразу оговорюсь, что речь о vision, в NLP с bert это отдельная история). Как оказалось, self-supervised learning это отличный бейзлайн для fully unsupervised clustering того же ImageNet (39% accuracy с 1000 кластеров и 46% с 1500).

Сам по себе self-supervised learning в последнее время очень популярен, в первую очередь у больших компаний, которым собрать данные гораздо проще чем их разметить. В середине 2019 был дан довольно мощный буст результатам за счет рисерча именно из гугла и фейсбука. Особенно успешны сейчас подходы на основе contrasitive losses. За подробностями предлагаю обратиться к неплохим обзорам (https://lilianweng.github.io/lil-log/2019/11/10/self-supervised-learning.html и https://dyakonov.org/2020/06/03/%d1%81%d0%b0%d0%bc%d0%be%d0%be%d0%b1%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-self-supervision/), которые к сожалению устаревают неимоверно быстро.

Вкратце, существующие методы обозрены в прикрепленной таблице. Остановлюсь на подходах к измерению перформанса. Основных подхода два, с вариациями: либо обучить линейный классификатор на фичах которые извлекает сеть, либо файн-тюнить сеть (тут обычно берется либо 1-10% ImageNet, либо COCO и друзья). Проблема с первым подходом в том что хорошие фичи необязательно линейно разделимы, а со вторым что многое зависит от того как файн-тюнить (см. SimCLR v2). Я давно задавался вопросом, почему никто не пытается сделать fully unsupervised эвалюацию таких методов. После выхода статьи которая получила неплохие результаты на ImageNet, я понял что настало время написать код и проверить результаты. Так как большинство self-supervised методов выкладывают и код, и модели, получилось сделать довольно обширный обзор не потратив over9000 gpu-часов.

Для начала, метрики. Не буду задерживаться на них, но unsupervised learning оценивать сложнее. К счастью, у нас есть лейблы поэтому мы можем посчитать accuracy. Кроме этого, мы считаем пару метрик основанных на попарной точности (для каждой пары примеров positive если они в одном кластере и negative иначе). Кроме этого мы добавляем поправку на рандом, и получаем две основные метрики: adjusted Rand Index (ARI) и adjusted mutual information (AMI). Добавили так же MI без поправки, потому что использовался предшественниками.

Сам подход максимально прост (напоминаю, цель -- получить бейзлайн и сравнить методы): достаем фичи из трейнинга и валидации, прогоняем через PCA, тренеруем на этом k-means. Для подсчета точности считаем linear assignment. Этого оказалось достаточно чтобы получить около-sota. Заодно сравнили с топовыми supervised сетками. Результаты довольно неплохо коррелируют с точностью линейного классификатора (наверное это логично). Интересное исключение -- большие эмбеддинги работали плохо. Возможно это недостаток k-means, но может и нет.

Кроме ImageNet потестировали на ObjectNet. Оказалось, что после тренировки на ImageNet ничего дельного на нем не выхрдит, даже если использовать лейблы с валидации для назначения классов (исключение -- BigBiGAN). У supervised те же проблемы

Зато если тренировать k-means на самом ObjectNet, то какой-никакой сигнал есть (6.5% accuracy). Что интересно, для классов которые присутствуют в ImageNet и для тех которые отсутствуют, точность практически одинаковая.

Наконец, сделали небольшой ablation study. Проверили как влияет количество измерений инпута (после PCA) и количество кластеров (до 2000 лает неплохой буст даже label-independent метрикам).

По результатам статьи возникает немало вопросов на которые быстро ответить не удалось. Надеюсь впоследствии заняться ими более плотно, но там уже без миллиона GPU обойтись будет сложно.
источник
2020 September 20
gonzo-обзоры ML статей
Давно мы не постили чего-нибудь весёленького. Вот как раз свежачок двухнедельной давности:

Brain2Word: Decoding Brain Activity for Language Generation
Nicolas Affolter, Beni Egressy, Damian Pascual, Roger Wattenhofer
Статья: https://arxiv.org/abs/2009.04765


Старая добрая идея — давайте по скану мозга (fMRI) определим, что думает человек. Или более узко, какие слова читает человек.

Берётся датасет (https://osf.io/crwz7/ из статьи 2018 года https://www.nature.com/articles/s41467-018-03068-4) в котором содержатся fMRI сканы 15 человек, каждый из которых читал 180 различных слов, по одному в каждый момент времени. Чтобы убедиться, что все субекты фокусировались на одном и том же значении слова, оно показывалось тремя разными способами (через облако слов, в предложении и с картинками — подробности в статье https://www.nature.com/articles/s41467-018-03068-4).

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

Далее делаем декодер данных fMRI в вектор эмбеддинга слова (для более простой задачи попарной классификации, как было в статье 2018 года) или далее в вероятности по всем возможным 180 словам словаря (для более сложной задачи прямой классификации слова)

Для попарной классификации обучается регрессионный декодер. Берутся два разных слова (их соответствующие сканы), сеть генерит по ним 300-мерные вектора, а затем считаются корреляции между декодированными векторами и их текстовыми эмбеддингами (в работе 2018 года здесь были GloVe эмбеддинги) и если декодированные вектора более коррелируют с соответствующими им эмбеддингами слов, то зачёт. Лосс для обучения похож на triplet loss, стремящийся сделать выходной вектор близким к эмбеддингу целевого слова и далёким от всех других слов из словаря.

К GloVe эмбеддингам есть претензия, что в них закодировано много другой информации помимо семантики, например, частотность слов.

В прямой классификации обучается классификационный декодер и генерятся вероятности слов из словаря, затем считается top-1 или top-5 accuracy. Лосс обычный кросс-энтропийный.

Что важно, проверяются на субъектах, на которых вообще не обучались, то есть целятся в выучивание общих фич без всякой субъекто-специфичной предобработки (что по идее весьма сложная задача, потому что fMRI сканы у разных людей сильно разные).

В модель вводят несколько усложнений:

1. Сканы разбиты на тематические регионы (Regions of Interest, ROIs), каждый из которых ассоциирован с одной или более мозговыми функциями (взяты из атласа 2016 года, https://academic.oup.com/cercor/article/26/1/288/2367115). Их получается 333. Каждый регион обрабатывается отдельным полносвязным слоем.

2. Кроме задачи предсказания сеть пытается работать как автоэнкодер и восстановить исходные fMRI сканы. Оно же пригодится для предобучения, когда один этот лосс и можно заюзать, без всякой классификации. Что интересно, лосс для восстановления берётся косинусный, а не MSE или что-то такое. В этой работе вообще почти все лоссы (кроме кросс-энтропийного) с косинусами.

3. Делается нормализация отдельных слоёв, чтобы убрать субъекто-специфичность. Для этого активации должны быть близки к средним по всем субъектам для данного слова.

Результат? 15% top-5 accuracy и 6.29% top-1 accuracy на сложной задаче прямой классификации. С одной стороны низко, конечно, но с другой стороны для proof-of-concept неплохо и сильно лучше рандома (и предыдущей работы).

Из интересного, если к задаче прямой классификации добавляют дополнительный регрессионный лосс для эмбеддингов GloVe, то лучшая классификационная модель деградирует, из чего делается вывод, что GloVe эмбеддинги являются довольно шумной репрезентацией концепта.
источник
gonzo-обзоры ML статей
Из забавного есть вторая часть, когда по полученным эмбеддингам генерится текст языковой моделью (здесь GPT-2 small). Эмбеддинги используются для модификации вероятностей слов в языковой модели. Результат пока довольно бестолковый (и задача ставится своеобразная, с контекстом из сниппетов Гарри Поттера), но “This way, we contribute towards a real system for translating brain activities to coherent text.”

Закончу цитатой: “We are well-aware that there is still a long path before we can reliably turn thoughts into words, for example for coma patients. Nevertheless, we believe that our work provides new tools and ideas to make this possible one day.”
источник
gonzo-обзоры ML статей
Датасет
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2020 September 24
gonzo-обзоры ML статей
Activate or Not: Learning Customized Activation
Ningning Ma, Xiangyu Zhang, Jian Sun
Статья: https://arxiv.org/abs/2009.04759

Давно мы не писали про какие-нибудь хитрые функции активации, а вернее, кажется, вообще не писали ни разу. А тут и повод есть.

В 2017 году команда из Google Brain с помощью хитрого автоматического поиска, построенного на RNN-ках, нашла функцию активации Swish [f(x) = x · sigmoid(βx)], которая оказалась заметно лучше ReLU (https://arxiv.org/abs/1710.05941).

Поскольку никакой человек эту функцию не дизайнил, спросить RNN-ку, что она имела в виду, не получается. Работает и работает, а GPT-3 для объяснения результатов нейро-поиска ещё никто не прикручивал вроде.

Функция стала популярна, её часто можно встретить у тех, кто старается выжать последние проценты качества из имеющихся моделей. Затем подоспело ещё какое-то число свежих функций, например, Mish, которая вроде как ещё лучше (https://krutikabapat.github.io/Swish-Vs-Mish-Latest-Activation-Functions/).

И вот на днях появилось логическое продолжение под названием ACON.

В чём дело? Разберёмся!

Подход в общем классический. Давайте поймём как имеющиеся функции можно обобщить, а потом из этого обобщения предложим что-нибудь интересное. Заодно и интуицию обретём.

Логические шаги тут следующие:

1. Функцию max можно аппроксимировать гладким и дифференцируемым вариантом, который мы будем называть smooth maximum с параметром β, который когда стремится к бесконечности, даёт в пределе максимум, а когда стремится к нулю — арифметическое среднее.

S_β(x_1, ..., x_n) = sum(x_i*exp(β*x_i))/sum(exp(β*x_i))

2. ReLU это, как известно, max(x,0), а значит можно аппроксимировать этим нашим гладким максимумом о двух входах:

S_β(η_a(x), η_b(x))
и η_a(x) = x, η_b(x) = 0,

3. Swish тоже можно представить через эту функцию S_β(x, 0) = x * σ(β*x) и её мы называем ACON-A. А заодно Swish — это гладкая аппроксимация ReLU.

4. Если рассмотреть развития ReLU типа PReLU, Leaky ReLU и т.п., то можно прийти к функции ACON-B c n η_a(x) = x, η_b(x) = px.

5. Можно пойти ещё дальше и сделать ACON-C с η_a(x) = p_1*x, η_b(x) = p_2*x(p_1 != p_2). ACON-C в такой формулировке позволяет иметь обучаемые верхние и нижние границы для градиента (у Swish они фиксированы). Они определяются параметрами p_1 и p_2.

6. Ну и наконец параметр β тоже можно обучать и это даёт функцию Meta-ACON. Этот параметр называется switching factor и регулирует поведение нейрона: линейный (неактивный нейрон) или нелинейный режим работы (активный нейрон). Отсюда и название ActivateOrNot (ACON).

И вот эта последняя история открывает целое пространство для исследования, можно реализовывать разные функции, генерящие эту β по входным данным: можно иметь общий параметр на весь слой, можно на отдельные каналы, а можно и на пиксели.

Что вообще даёт вся эта эквилибристика? На редкость неплохие улучшения, единицы процентных пунктов в терминах top-1 ошибки. Для которых от вас по большому счёту ничего не требуется кроме замены функции активации.

Ну и заодно вроде понятнее стало, что такое Swish и вообще.
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2020 September 27
gonzo-обзоры ML статей
Tasks, stability, architecture, and compute: Training more effective learned optimizers, and using them to train themselves
Luke Metz, Niru Maheswaranathan, C. Daniel Freeman, Ben Poole, Jascha Sohl-Dickstein
Статья: https://arxiv.org/abs/2009.11243

Свежая работа по теме обучаемых оптимизаторов. А то типа безобразие, фичи научились выучивать и их больше подавать на вход не надо, а оптимизаторы у нас по-прежнему олдскульные сделанные человеком — SGD, моменты, Adam и вот это вот всё. Непорядок.

Такие работы периодически появляются, но какого-то суперпрогресса и перехода в практическую плоскость пока не случилось. Но должно.

В текущей работе команда из Google Brain предприняла масштабную попытку обучить оптимизатор, который желательно должен быть достаточно генерализованным.

Выбран датасет с тысячами разных задач (https://arxiv.org/abs/2002.11887, https://github.com/google-research/google-research/tree/master/task_set — это частично те же авторы). В обучающем датасете около 6000 разных задач: RNN, CNN, FCN, LM, VAE, masked autoregressive flows и т.д.

Задача по обучению такого оптимизатора обычно состоит из двух циклов: во внутреннем оптимизатор применяется к различным задачам, а во внешнем его параметры итеративно обновляются. Цель — получить лучший loss на этих задачах с обучаемым оптимизатором. Лосс для внешнего цикла (outer-loss) определяется как средний inner-loss посчитанный на inner-validation set.

Outer-loss даже дифференцируемый, но очень дорогой для вычисления, потому что задачу во внутреннем цикле надо развернуть на достаточно большое число шагов. Поэтому градиентными методами такую штуку обучать достаточно сложно (плюс она ещё и плохо обусловлена) и для внешнего цикла используются эволюционные стратегии. Когда обучение устаканивается, то переходят к Persistent Evolutionary Stragegies (PES, по ним статья ещё обещается). Обучается всё распределённо на 1024 многоядерных воркерах. Во внутреннем цикле обучают Adam’ом.

Архитектура оптимизатора является комбинацией FFN и LSTM. LSTM (64 ячейки) работает на уровне тензоров, на вход получает вычисленные по тензорам фичи + глобальные параметры (трейн и валидационный лоссы), и посчитанную по каждому тензору информацию отправляет в другие такие же LSTM’ки, а также в FFN, которая работает на уровне отдельных параметров. Эта же FFN (2 скрытых слоя и 32 нейрона) получает на вход инфу о градиентах и значениях параметров, а на выход отправляет апдейты для параметров.

Для обучения задействовали только CPU, для GPU и других современных железок такие задачи (обучение кучи маленьких сеточек) не очень заточены. Задействовали 60K ядер примерно на месяц, или около 5k CPU years. Потребили порядка 200 мегаватт-часов.

После обучения проверяют полученный оптимизатор на пачке задач из датасета, а также на MNIST и CIFAR-10. Обученная конструкция превосходит бейзлайновые оптимизаторы (вариации Adam) с фиксированными гиперпараметрами, а также затюненные на небольшом числе задач бейзлайны (обучаемому оптимизатору такой возможности не дают).

В модель оказывается неявно встроена регуляризация, так что при бесконечности равноценных вариантов на модельной квадратичной задаче, он выбирает решение с минимальной нормой.

Опитимизатор показывает генерализацию по некоторым осям задачи (размер датасета, размер батча, число скрытых нейронов). На больших задачах (резнеты поглубже) и снова CIFAR-10, а также уменьшенный ImageNet результаты вполне сравнимые с бейзлайнами.

Из красивого, полученный оптимизатор оказывается способен обучить самого себя (всё как с компиляторами) и в обучающем датасете похожей задачи не было. Получается сравнимо с Adam (правда после 10К итераций начинает ухудшаться). Тут так понимаю его таки поставили во внешний цикл вместо эволюционных стратегий.
источник
gonzo-обзоры ML статей
Вся эта движуха глобально очень правильная. Я бы ожидал на горизонте пары лет, что какая-нибудь большая компания потратит гигаватты на своих кластерах на обучение оптимизатора на более серьёзных сетях и задачах и выдаст таки нейросетевой оптимизатор, назову его NG (neural gradients), который все остальные смогут использовать по аналогии с BERT. И это будет ещё один шаг в сторону AutoML, умный оптимизатор без гиперпараметров, превосходящий всю эту текущую алхимию с разными оптимизаторами, их параметрами и хитрыми политиками прогрева и игрой с learning rate.

Сбер или Яндекс, не хотите? ;) В случае успеха будет мировой почёт и уважение.
источник
gonzo-обзоры ML статей
источник