Size: a a a

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

2019 February 25
gonzo-обзоры ML статей
AET vs. AED: Unsupervised Representation Learning by Auto-Encoding Transformations rather than Data

Liheng Zhang, Guo-Jun Qi, Liqiang Wang, Jiebo Luo
(University of Central Florida, Huawei Cloud, University of Rochester)


https://arxiv.org/abs/1901.04596

#AE #unsupervised #representation_learning

Прикольная идея про выучивание произведённых над данными трансформаций вместо выучивания восстановления самих данных (как в обычном автоэнкодере, Auto-encoding Data, AED).

Идея в том, что мы сэмплим из некоторого заготовленного пространства возможных операций трансформации изображений, применяем выбранную трансформацию к изображению, и подаём на автоэнкодер исходное и трансформированное изображение. Автоэнкодер должен на выходе корректно восстановить трансформацию (отсюда название Auto-encoding Transformations, AET).

Обсуждаются три вида преобразований:
1) Параметрические преобразования (например, афинные — тогда функция ошибки это L2 от разности матриц параметров);
2) GAN-преобразования (с генератором, принимающим на вход изображение в дополнение к обычному шуму z — loss тогда это снова L2, но теперь от разности z);
3) Непараметрические (где loss это матожидание расстояния между двумя трансформированными изображениями).

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

Показывают, что AET выучивает классные фичи, с использованием которых потом простенькие классификаторы приближаются к результатам supervised моделей (на датасетах CIFAR-10, ImageNet, Places).
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2019 February 26
gonzo-обзоры ML статей
Large scale distributed neural network training through online distillation

Rohan Anil, Gabriel Pereyra, Alexandre Passos, Robert Ormandi, George E. Dahl, Geoffrey E. Hinton
(Google, DeepMind, Google Brain)


https://arxiv.org/abs/1804.03235

#SGD #distributed #distillation

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

В данной работе рассматривается ко-дистилляция, подразумевающая:
1) Одинаковую архитектуру всех моделей
2) Общий обучающий датасет
3) Дополнительный distillation loss во время обучения, не дожидаясь пока процесс полностью сойдётся.

Онлайн дистилляция происходит не отдельным этапом после обучения хорошей модели, а в процессе распределённого SGD (то есть происходит одновременное обучение студента и учителя).

Из практики известно, что синхронный SGD скейлится плохо (после какого-то момента), а асинхронный вообще плохо работает (отставшие градиенты всё портят).

Кодистилляция решает несколько проблем:
1) Отставшие предсказания не так страшны, как отставшие градиенты
2) В синхронном/асинхронном распределённом SGD надо обмениваться большим количеством данных, а в случае кодистилляции эти объёмы существенно меньше (и делать их можно реже)

В работе пробовали проверить лимиты асинхронного [распределённого] SGD, но не добились стабильности и сфокусировались на синхронном.

Нашли лимит после которого он неэффективен (в смысле обучение не ускоряется, оказалось 128 воркеров), попробовали кодистилляцию с двумя группами по 128 воркеров, а также ансамбль из двух сеток обученных на 128 воркерах. Кодистилляция сработала, обучается быстрее чем SGD на 128 воркерах, а качество близко к ансамблю. Profit!

В общем если у вас масштабы Гугла, то классная технология :)
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
Word Translation Without Parallel Data
Conneau A. Lample G. Ranzato M. et.al.
Facebook AI Research
et.al.
Facebook AI Research
статья: https://arxiv.org/abs/1710.04087
код: https://github.com/facebookresearch/MUSE

#unsupervised #NMT #NLP

Пусть у нас есть два корпуса на разных языках, они не выровнены, но примерно об одном и том же. У каждого корпуса есть словарь, у слов словаря есть эмбеддинги (или можем их построить). Задача: построить "выровненные" эмбеддинги, т.е. такие, чтобы эмбеддинги перевода слова в обоих языках имели похожие вектора.

Классический путь:
Для небольшого числа (5000) слов знаем пары (переводы), ищем матрицу поворота W, которая минимизирует невязку между парами. Матрицу можно искать среди ортогональных, тогда есть явное решение через SVD разложение (Procrustes solution).

Предлагаемый путь:
1) Делаем очень условное соответствие: инициализируем как-то W, строим дискриминатор, который отличает Wx от у.  На сигнале от дискриминатора учим такое W, которое его обманывает. Это приводит к тому, что облако Wx поворачивается так, чтобы его форма совпала с облаком y. Использование ортогональной матрицы, а также изменение только одной стороны гарантирует, что дискриминатор не схлопнет оба облака в неразличимые, но неинтересные нам вырожденные пятна.

2) Теперь хотим уточнить наше приближение. Попробуем учесть тот факт, что вектора частотных слов более точные. Берём наиболее частотные слова в обоих датасетах, оставляем из них только такие пары (x,y), что:
- х частотное слово в первом языке,
- у частотное слово во втором языке,
- y -- ближайший сосед к Wx,
- Wx -- ближайший сосед к y.
Получаем опорное множество слов -- они частотные, их немного, и мы достаточно уверены в их соответствии. Ищем для них уточнённое W с помощью классического Procrustes solution. Применяем это W ко всем словам в Х.

3) Ближайшие соседи в многомерных пространствах довольно хитрая штука,  часто образуются хабы, которые являются ближайшим соседом к большому числу других вершин, это будет мешать матчингу слов. Для борьбы с этим вводим модифицированное расстояние CSLS(Wx, y), локально искривляющее пространство вокруг частотных слов путём штрафа за перенаселённые окрестности (вычитаем среднее косинусное расстояние от Wx до KNN Wx в эмбеддингах первого языка и среднее косинусное расстояние от y до KNN y в эмбеддингах первого языка).

Бонус: в репозитории выкладывают кучу выровненных словарей для разных языков.
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2019 February 27
gonzo-обзоры ML статей
SC-FEGAN: Face Editing Generative Adversarial Network with User's Sketch and Color
Youngjoo Jo, Jongyoul Park (ETRI, South Korea)

Статья: https://arxiv.org/abs/1902.06838
Код: https://github.com/JoYoungjoo/SC-FEGAN

#GAN

Авторы собрали сетку для редактирования фотографий лиц (512x512). На вход принимает изображение, маску (в каком месте надо поправить), а также внутри этой маски скетч и цвета. После этого модифицирует фотографию должным образом. Выглядит весьма круто.

Генератор полностью свёрточный в стиле U-net. Использует gated convolution (из https://arxiv.org/abs/1806.03589) и, что неожиданно, LRN (я думал, оно совсем неэффективно и померло). Обучается с кучей разных loss’ов: per-pixel, perceptual, style, total variance плюс обычный GAN loss.

Дискриминатор по типу Spectral-Normalized Markovian Discriminator (SN-PatchGAN, тоже из указанной выше статьи, считает GAN loss по каждому элементу выходного feature map’а и усредняет), использует spectral normalization (SN) convolution layer (из https://arxiv.org/abs/1802.0595) и также WGAN-GP loss (из https://arxiv.org/abs/1704.00028).

Для обучения нужна хитрая разметка (картинка + маска + скетч + цвет + шум), и авторы сумели также собрать пайплайн по подготовке её из датасета CelebA-HQ.

Что ещё интересно, обучали на машине с IBM Power9 + NVIDIA Tesla V100. Power9 это такая замечательная система, где NVLink 2.0 есть между процессором и картой. То есть теоретически скорость обмена данными может быть до 150 GB/s против 15.75 GB/s для видеокарты на PCIe v3 x16. На этой системе есть также PCIe v.4 с в два раза большей пропускной способностью чем v3, но на фоне NVLink это уже неинтересно. Подробности тут: https://blog.inten.to/hardware-for-deep-learning-part-3-gpu-8906c1644664  

В общем классные результаты, редактирование фоток (пока лиц) неподготовленным пользователем потенциально сильно упрощается. Ждём продуктов на базе этой технологии. Писать дальше нечего, надо смотреть картинки или играться с кодом :)
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
Face editing
источник
gonzo-обзоры ML статей
Face restoration
источник
gonzo-обзоры ML статей
Face restoration (with only sketch and color)
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
Unsupervised Machine Translation Using Monolingual Corpora Only
Lample G. Denoyer L. Ranzato M.
Facebook AI Research

Статья: https://arxiv.org/abs/1711.00043
Пост с упрощённым пересказом: https://buzzrobot.com/machine-translation-without-the-data-21846fecc4c0
Чужой код (pytorch): https://github.com/IlyaGusev/UNMT

#unsupervised #NMT #NLP #ICLR #2018

Первая относительно успешная попытка сделать полноценный перевод на непараллельном корпусе (т.е. без пар сопоставленных предложений).
Идея такая:
0. Пусть есть два корпуса, для языков А и В.
1. Делаем одной сеткой AE предложений текста на одном языке А. Используем пословный seq2seq with attention, в encoder 3-уровневый biLSTM, в decoder 3-уровневый LSTM.
2. Делаем той же сеткой АЕ текста на втором языке В -- веса сетей в (1) и (2) пошарены, но embedding lookup делается в разных таблицах (отдельная таблица на каждый язык). Т.е. по сути мы выбираем языковую пару при каждом использовании сети путём выбора таблиц эмбеддингов -- отдельно для энкодера и декодера.
3. Делаем предобучение этой сети на DAE, т.е. учим восстанавливать зашумлённый вход. Используется два вида шумов:
 - word dropout -- случайное выкидывание слова с некоторой вероятностью,
 - input shuffling -- перемешивание слов в некотором окне с некоторой вероятностью.
4. Делаем дополнительный loss на потерях при A-(prev)->B-(current)->A и B-(prev)->A-(current)->B, где для первого перевода используется сетка с прошлой итерации.
5. Делаем дискриминатор, который пытается различать латентные вектора предложений из А и В, если он успешен -- штрафуем основную сеть.

Для первой инициализации используем эмбеддинги слов, построенные с помощью MUSE (Word Translation Without Parallel Data, описано выше https://t.me/gonzo_ML/9).
Для первого расчёта loss в схеме A-(prev)->B-(current)->A вместо "предыдущей версии" перевода используем пословный перевод по ближайшим словам на базе тех же эмбеддингов MUSE.
Авторы утверждают, что необходимость иметь изначально выровненные эмбеддинги -- это принципиальный момент для успеха всего мероприятия.

В сумме работает такая связка: таргет на DAE зашумлённого предложения в исправленное предложение на том же языке + таргет на то, чтобы перевод туда-обратно совпал с оригиналом, при этом перевод туда делаем предпоследней версией сетки и результат считаем зашумлённым + таргет на то, чтобы латентные вектора предложений (на выходе энкодера) для разных языков были плохо различимы дискриминатором. В итоге получаем таблицы эмбеддингов для каждого языка и одну сетку, которая умеет сворачивать предложения разных языков в общее латентное пространство (и разворачивать обратно).

На тестах показывают, что на непараллельных корпусах по 15М предложений такой метод даёт такое же качество, что обычный NMT на корпусе из 100К параллельных предложений.

UPD:
Другая версия статьи, попавшая на EMNLP 2018, добавили вариант с PBSMT, других особых принципиальных отличий я не заметил: https://arxiv.org/abs/1804.07755
И родной код к ней: https://github.com/facebookresearch/UnsupervisedMT
источник
gonzo-обзоры ML статей
источник
gonzo-обзоры ML статей
источник
2019 February 28
gonzo-обзоры ML статей
The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks
Jonathan Frankle, Michael Carbin
CSAIL MIT

Статья: https://arxiv.org/abs/1803.03635

#CNN, #FFNN, #optimization, #pruning, #ICLR 2019

Статья немного про природу вещей. Рассматривают dense feed-forward neural networks, полносвязные и/или CNN. Известно, что методы network pruning позволяют эффективно ужать уже обученную сеть -- выкинуть заметную часть параметров (связей) без потерь качества (в ряде случаев удаётся снизить объём на 90%). Известно, кроме того, что сразу научить такую уменьшенную сеть до того же качества не выходит.

Авторы выдвигают гипотезу "лотерейного билета": любая случайно инициализированная плотная сеть, обучаемая на заданный таргет, содержит некоторую подсеть, которая, будучи обученной на тот же таргет, даст качество не хуже за то же или меньшее число итераций обучения. В целом, это утверждение имеет как минимум тривиальное подтверждение, но авторы утверждают, что это эффективная подсеть обычно существенно меньше основной. Такие эффективные подсети называют "winning tickets".

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

Проводят серию экспериментов для подтверждения этой гипотезы:
1) Возьмём большую случайно инициализированную сеть Х, сохраним её копию С.
2) Обучим Х, применим к ней pruning, получим редуцированную обученную сеть У (размером 10-20% от Х).
3) Вернёмся к сохранённой копии С, редуцируем её до тех же параметров, что остались в У, но веса оставим случайными (из С) -- это будет сеть Z.
4) Обучим Z и сравним сходимость с Х. Качество должно получиться не хуже, а сходимость -- не медленнее.
5) Затем вернёмся к Z и вновь переинициализируем её случайным образом, пусть это будет сеть R. Опять сравним с X и Z. Если гипотеза верна, всё должно ухудшиться.
6) Ещё можно сравниться со случайным подграфом Х того же размера что Z.

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

Общие выводы:
- текущая схема обучения сетей не очень эффективна, есть куда улучшаться, например, в сторону более эффективной начальной инициализации (но не очень понятно как),
- можно попробовать определять winning tickets на ранних стадиях обучения большой сети и делать ранний pruning к ним -- это может повысить эффективность обучения на практике.
источник
gonzo-обзоры ML статей
источник