Лучшие доклады про машинное обучение с ICML 2018 по версии сотрудников Яндекса

С 10 по 15 июля в Стокгольме прошла конференция ICML, одна из крупнейших в мире в области машинного обучения. В этом году ее посетило рекордное количество участников — 7000. Среди них были и сотрудники Яндекса, которые представляли технологии CatBoost и DeepHD, сервисы Толока, Дзен и Переводчик, направление беспилотных автомобилей и другие продукты. Сегодня они поделятся с читателями Хабра подборкой докладов, которые запомнились им больше всего.

dinw0-7n4w0qychmluy33lbn_44.jpeg

Кстати, на фото выше шутка организаторов — это статистика по словам из писем тех, кто отправлял свой доклад на конференцию. Точнее, из писем с ответами на критику рецензентов, которые привели к приёму доклада. Тут же приведен «идеальный» ответ, с точки зрения машинного обучения. Но мы отвлеклись, переходим к обзору пяти лучших докладов (все заголовки кликабельны и ведут на работы докладчиков).


Один из самых интересных докладов на конференции про генеративные модели и обучение представлений.

Предыстория

Вариационные автокодировщики (VAE) пытаются моделировать распределение наблюдаемых данных $ p(x) $ следующим процессом:

1. Вначале из некоторого априорного распределения $ p(z)$ выбирают «скрытую» переменную $ z$.
2. Затем с помощью нейросети-декодера c параметрами $ \theta$ из нее получают параметры распределения $ p(x|z)$.
3. Из полученного распределения $ p(x|z)$ выбирают очередной объект.

Такая формулировка позволяет строить из простых кирпичиков весьма сложные модели и хорошо интерпретируемые представления. Например, если $ p(z)$ — это двумерное нормальное распределение, а $ p(x|z)$ — 724-мерный бернуллевский вектор, VAE удачно выучивает многообразие цифр MNIST.

Если в полученном пространстве $ z$ на месте точек нарисовать матожидание соответствующих распределений $ p(x|z)$, мы увидим, что модель аккуратно уложила многообразие цифр на плоскость.

qq_d-jkxeournen0nnmignhcd_m.jpeg

А если для каждого класса цифр из тестового набора нарисовать апостериорное распределение $ p(z|x)$ отдельным цветом, мы увидим, что скрытые переменные выучивают очень полезные представления: на таких двухмерных признаках куда проще научить классификатор, и ему точно не понадобится много размеченных данных.

d3o4ownqhxoxz69ztiymq9mk0ia.jpeg

Правдоподобие наблюдаемых данных $ X$ в такой модели записывается в виде:

$ p(X) = \prod_{x \in X} p(x) = \prod_{x \in X}\int p(x|z)p(z) dz$

Если $ p(x|z)$ задается глубокой нейросетью, у нас нет никаких шансов взять этот интеграл аналитически, поэтому прямая максимизация правдоподобия оказывается невозможной. Вместо этого используют так называемый вариационный байесовский вывод:

— Для каждого объекта обучающей выборки вводится вспомогательное распределение $ q(z|x)$, описываемое параметром $ \phi_x$. Задача $ q$ — как можно точнее аппроксимировать апостериорное распределение $ p(z|x)$. Другими словами, оно предсказывает из каких $ z$ был получен наблюдаемый объект $ x$.

— Записывается нижняя оценка на логарифм правдоподобия выборки:

$ \log p(X) \geq \sum_{x \in X} \int q(z|x) \left(\log p(x|z) + \log \frac{q(z|x)}{p(z)} \right) dz$

Эта нижняя оценка также называется ELBO (Evidence Lower Bound) — нижняя граница обоснованности. Она в точности равна логарифму правдоподобия если $ q(z|x) = p(z|x)$.

— Полученная оценка максимизируется по $ \phi$ и $ \theta$ стохастическим градиентным спуском, при этом стохастический градиент внутреннего интеграла получается либо с помощью reparametrization trick, либо с помощью log-derivative trick (он же score function estimator, он же REINFORCE).

Поскольку хранить и оптимизировать параметры $ q(z|x)$ для каждого объекта выборки слишком дорого, вводится дополнительная нейросеть-энкодер, которая принимает на вход $ x$ и возвращает $ \phi_x$. Такой подход называется амортизированным вариационным выводом. Именно использование амортизированного вывода позволило учить сложные иерархические вероятностные модели на больших данных.

Слишком умный декодер

Когда мы ограничиваем $ p(x|z)$ простым семейством распределений (например нормальными распределениями с диагональными матрицами ковариации), $ z$ выучивает полезные представления данных. Простой арифметикой в пространстве $ z$ можно менять прическу у человека на фотографии или смешивать мелодии.

mp4le4_jeipwscv9lsziq-yt9vg.png

Однако, простые модели, в которых все элементы вектора $ x$ независимы при условии $ z$, не очень хорошо справляются со сложными данными, например с текстами или изображениями в высоком разрешении. Разумно пытаться использовать в качестве $ p(x|z)$ сложные «нейросетевые» распределения: авторегрессионные сети, такие как WaveNet или PixelCNN, нормализующие потоки, например, RealNVP, вложенные VAE, или даже $ \alpha$-GAN.

При попытке обучить VAE с такими декодерами исследователи сталкиваются с большими трудностями: «слишком умный» декодер сам «съедает» всю энтропию в данных и вообще перестает смотреть на скрытую переменную. $ z$ и $ x$ оказываются независимыми, и получить полезные представления из скрытой переменной не получается. В разных статьях были предложены способы обойти эту проблему, но в основном они сводятся либо к упрощению декодера, либо к разным хакам при обучении. Авторы рассматриваемой статьи предлагают первое фундаментальное объяснение причин этого эффекта и способы борьбы с ним.

Главные идеи статьи

— Аппарат из Information Bottleneck Theory применяется к задаче обучения представлений. Авторы предлагают рассмотреть взаимную информацию между $z$ и $ x$. Когда взаимная информация равна $ H(x)$, скрытая переменная сжимает данные без потерь: мы получаем идеальный автокодировщик. Когда взаимная информация равна нулю, скрытая переменная независима от данных, декодер «сожрал» всю энтропию. Для того чтобы обучить полезные представления, мы хотим получить вариант посередине: скрытая переменная должна описать важную информацию об объекте (например, форма лица, цвет глаз, …) и выбросить детали (цвета конкретных пикселей, текстуры).

— Предлагается смотреть на VAE с альтернативной позиции: пусть теперь основная часть модели $q(z|x)$, а $p(x|z)$ и $p(z)$ — аппроксимации для $q(x|z)$ и маржинального распределения $ E_x[q(z|x)]$.

— Для фиксированного $q(z|x)$ рассматриваются нижняя и верхняя оценки на взаимную информацию, зависящие от $ p(z)$ и $ p(z|x)$:

$ H - D \leq I(x, y) \leq R$

где $ H$ — энтропия данных, $ D$ — потери при сжатии и $R$ — KL-дивергенция между $ p(z)$ и $ E_x[q(z|x)]$

maicrtgdzminnjrorcvhrk1ckga.png

Каждому семейству моделей соответствует выпуклое множество точек в RD пространстве, форма этого множества зависит от «баланса сил» между энкодером и декодером.

— Показано, что оптимизация ELBO эквивалента минимизации $D + R$, то есть поиску точки с коэффициентом касательной $ \beta = 1$ на границе множества. Если декодер достаточно гибкий и $ p(z)$ не в состоянии хорошо аппроксимировать $ E_x[q(z|x)]$, модели не выгодно вкладывать дополнительную информацию в латентную переменную: с точки зрения ELBO дешевле выучить ее декодером.

— Для построения наиболее полезных представлений, авторы предлагают оптимизировать $D + \beta R$, где $\beta$ — гиперпараметр, отвечающий за баланс между энкодером и декодером.

— Авторы экспериментально показали, что варьируя $\beta$, можно выучивать представления с разным уровнем абстракции: от автоэнкодера ($\beta = 0$), который сжимает данные без потерь, до «автодекодера» ($\beta = \infty$), который полностью игнорирует данные. Подобрав значение $\beta$, можно получить «семантический энкодер», который кодирует только общую форму объекта, или «синтаксический энкодер», который способен восстановить мелкие детали. При этом все эксперименты проводились с супермощным авторегрессионным PixelCNN++ декодером, который до этого не удавалось применять в VAE.

p2s-vfxulk-71vewsvhokms7eee.png


Авторы ставят перед собой задачу отображения музыки (как последовательности символов) в адекватное скрытое пространство с сохранением семантики. Это позволит решать задачу продолжения музыкальной последовательности и автоматического создания плавных «переходов» между разными фрагментами. Предлагается использовать VAE.

Основная проблема VAE состоит в том, что декодер очень быстро забывает «скрытый» код (latent code). Авторы предлагают бороться с этим через иерархический декодер. Выходная последовательность разбивается на небольшие кусочки (в статье музыку разбивали на такты). «Скрытый» код подается на вход верхнеуровневому декодеру, который возвращает эмбеддинг для такта. А затем LSTM нижнего уровня предсказывает ноты внутри такта. Формально такой подход не решает проблему забывания, но на практике оказывается, что полученные последовательности гораздо лучше соответствуют исходному кусочку.

Энкодер представляет собой bidirectional LSTM. Скрытые слои $\overrightarrow h_T$ и $\overleftarrow h_T$ конкатенируются и используются для предсказания параметров распределения $z$:

$\mu = W_{h\mu} h_T + b_\mu$

$\sigma = log\left(exp\left(W_{h\sigma} h_T + b_\sigma\right)\right)$


Общая схема сети выглядит так:

0ntvmtd3hv06iftpynmoc3xjg6o.png

Для оценки качества используется Lakh MIDI Dataset, в котором содержится примерно полтора миллиона midi-файлов. Авторы использовали только треки с размером 4/4. На коротких последовательностях (предсказание следующих двух тактов) качество MusicVAE сравнимо с классическим VAE. Однако уже на предсказании 16 тактов, доля ошибок классического VAE более 27%, а для иерархического метода в интервале 5–11%. Также показано, что иерархический метод дает более плавную интерполяцию между фрагментами музыки.

На закуску: над latent code векторами можно производить арифметические действия. Например, авторы построили вектора для 5 музыкальных характеристик (C diatonic membership, note density, average interval, 16th and 8th note syncopation). К сэмплируемым векторам можно с некоторыми весами прибавлять вектора характеристик, и итоговая последовательность, получаемая на выходе декодера, будет в зависимости от веса более или менее соответствовать заданной характеристике.


При обучении VAE важно выбрать правильную форму $q(z|x)$, поскольку от его выразительности зависит точность нижней оценки правдоподобия. Хорошее семейство должно удовлетворять следующим свойствам:

— Оно достаточно гибкое (в идеале — может аппроксимировать любое распределение).
— Из него можно быстро получать выборку.
— У полученной выборки легко посчитать правдоподобие.
— Сложность этих операций растет линейно с увеличением размерности.

Один из подходов к построению таких семейств — нормализующие потоки. Они основываются на формуле замены переменных: если случайную величину $\varepsilon$ трансформировать с помощью обратимой дифференцируемой функции $f$, плотность величины $f(\varepsilon)$ равна $p(\varepsilon) \det(J^{-1})$, где $J$ — якобиан функции $f$. Выбрав семейство функций, у которых можно эффективно считать определитель якобиана, можно получать сложные распределения, трансформируя гауссовский шум.

gxdm1qxww8u6chqln5mviz9sp5u.png

В предыдущем подходе (Inverse Autoregressive Flow) каждый элемент вектора $\varepsilon$ подвергается аффинному преобразованию, параметры которого задает авторегрессионная нейросеть (например, MADE или PixelCNN), смотрящая на предыдущие элементы $\varepsilon_j$, $j < i$.

fckprmrwudjnawyh2pqjkqskqh8.png

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

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

Основные идеи авторов статьи

— Вместо аффинного преобразования в IAF использовать миниатюрную нейронную сеть с положительными весами и строго монотонными активациями.

h4bbksl0ytkqh-5_35bxkh56w2s.png

— Получившийся нормализующий поток является универсальным аппроксиматором для распределений.

vkb0hw_hfjopiqrmfsisqipg7w0.png

— Предложены две архитектуры трансформирующих сетей и описан механизм масштабирования на большие размерности с помощью conditional batch normalization.

— Эксперименты показывают, что NAF действительно может выучивать мультимодальные вещи.

2aieetj6h_rqy53jp8q_zu4el-c.png

Если одной фразой — это super-resolution без GAN’ов.

Классический подход к задаче super-resolution (получение чистой картинки из более зашумленной) заключается в том, чтобы на вход алгоритму подавать зашумленные изображения и учить предсказывать чистое изображение. Но что делать, если у нас нет чистых изображений? Это актуально для обработки фотографий с телескопов, снимков МРТ и других подобных задачах. Предложенная в статье идея — это учить сеть на зашумленных изображениях. Но нужно, чтобы шум на изображениях был в среднем нулевой. Авторы делают вывод:»…we can, in principle, corrupt the training targets of a neural network with zero-mean noise without changing what the network learns». На датасетах, которые они рассматривают, результаты не сильно хуже, а иногда и лучше, чем state of the art. К тому же скорость работы и скорость обучения намного выше.

rjwe7o6ht8usyklgs6dmop4dgro.png

Авторы пробовали работать с кадрами из видео, однако, сделать super-resolution видео у них пока не очень получилось — восстановленное изображение «прыгает».


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

Допустим, мы хотим решить некоторую задачу на графе. Задача достаточно абстрактная, чтобы описать ее в терминах формальной логики. Например, нам дан граф связи пользователей, а мы хотим детектировать в нем аномалии (бот-сети, фрод) или выявить связи с сообществами людей.
Для этих и многих других задач при обучении моделей, связанных с графами, хорошо подойдет выделение сущностей, называемых k-core.

Важно заметить, что интересует не только подход к извлечению этих k-core, но и возможность делать это эффективно, распределенно, а во возможности еще и на потоке. Именно такие реализации и были сразу же представлены в этом докладе.

Определения

Пусть $G = (V, E)$ — неориентированный граф с $|V | = n$ вершинами и $|E| = m$ ребрами, $H$ — подграф $G$. Для каждой вершины $v ∈ G$ мы обозначим через $d(v)$ степень этой вершины, а для $v ∈ H$ обозначим как $dH (v)$ — степени $v$ в подграфе $H$.

$k$-Core — максимальный подграф $H ∈ G$, такой что для $∀v ∈ H$ имеем $dH(v) ≥ k$, иными словами — степень любой вершины не превосходит $k$. Так же такой граф называют называют $k$-вырожденным.

Говорят, что вершина $v$ имеет coreness number $CG(v) = k$, если она принадленжит $k$-core, но не принадлежит $(k + 1)$-core.

Core labeling графа $G$ — граф, где каждая вершина помечена своим coreness number. Стоить отметить, что core labeling уникален и определяет иерархическое разложение $G$.

$1−ε$ Approximate $k$-core — подграф $H$ в $G$ такой, что $inline$∀v ∈ H dH (v) ≥ (1 − ε)k$inline$.

На рисунке ниже примеры 3−core и $2/3$-approximate 3-core.

ptzpe0yv-jzcok8npkagrqxbnbq.png

Идея алгоритма

Основная идея лежит в том, чтобы более уверенно выкидывать ребра в плотных областях и менее уверенно в разреженных.

Краткое описание алгоритма:

— выкидываем ребра из графа с вероятностью $p$;
— для каждой вершины определяем ее coreness number, то есть делаем core labeling, находим максимальный $k$-core, и добавляем все его вершины в множество $S$;
— удаляем из $G$ все ребра, оба конца которых находятся в $S$;
— проделываем все то же самое, увеличивая $p$ в два раза, пока возможно.

Псевдокод:

gxhtywhtykjkuhh-lj_0wm9a6ee.png

Разберем, как можно реализовать данный алгоритм в идеологии MapReduce для параллельных вычислений.

Утверждается, что при стартовой вероятности $p_0 = 12log(n)/ε^2n$ алгоритм выполняется не более $2log(n)$ итераций. На первой итерации путем выкидывания ребер мы получаем некоторый подграф $H_0$. На второй итерации на каждой машине делаем core labeling $H_0$. Сохраним вершины с наибольшим core number в некотором сете $S$. На третьей итерации посылаем всем машинам сет $S$ и параллельно выкидываем из $H_0$ ребра, оба конца которых есть в $S$, получаем $H_1$. Далее с вероятностью $p_1 = 2p_0$ проделываем то же самое $2log(n)$ раз.

Псевдокод:

ftifntjgcnn8bkunoxlo1aymjvu.png

Примечание

Вернемся к поиску сообществ на графе. Рассмотрим граф социальных связей. Например, граф, где вершины соответствуют пользовательским страницам в социальной сети, а ребра показывают, что пользователи добавили друг друга в друзья. Так же мы знаем о каком-то подмножестве страниц информацию о том, где данный пользователь учится (город, университет, факультет, специальность, группа).

В таком случае выявленную нами иерархию с $k$-core можно интерпретировать следующим образом: ядра более высокого порядка отображают группу, в которой учится студент, — сообщество достаточно узкое, но с высокой плотностью связей в нем. Ядро порядка ниже отразит сообщество-специальность данного пользователя — связей в целом меньше, но они достаточно плотные. Двигаясь дальше по иерархии находим сообщества и факультета, и университета.

Эксплуатация данной идеи для спам аналитики выглядит менее явной, но похожа по сути. Если у нас есть представление, о том какие ядра считать хорошими, то использование факторов вроде «максимальный порядок $k$-core, которому принадлежит пользователь», «плотность $k$-core пользователя», а так же соотношение с ближайшими сущностями могут хорошо помогать при детектировании подозрительных узлов и выявлению паттерна бот-сетей.

Вместо эпилога


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

© Habrahabr.ru