gonzo-обзоры ML статей – Telegram
gonzo-обзоры ML статей
24K subscribers
2.75K photos
2 videos
3 files
1.36K links
Авторы:
Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика.
Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Download Telegram
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

В общем классные результаты, редактирование фоток (пока лиц) неподготовленным пользователем потенциально сильно упрощается. Ждём продуктов на базе этой технологии. Писать дальше нечего, надо смотреть картинки или играться с кодом :)
👍1
Face editing
Face restoration
Face restoration (with only sketch and color)
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://news.1rj.ru/str/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
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 к ним -- это может повысить эффективность обучения на практике.
🔥7
Regularizing and Optimizing LSTM Language Models
Stephen Merity, Nitish Shirish Keskar, Richard Socher
Salesforce Research

#LM #regularization #NLP #ICLR #2018

Статья: https://arxiv.org/abs/1708.02182
Пара пересказов: https://yashuseth.blog/2018/09/12/awd-lstm-explanation-understanding-language-model/, https://medium.com/@bingobee01/a-review-of-dropout-as-applied-to-rnns-72e79ecd5b7b
Родной код на pytorch: https://github.com/salesforce/awd-lstm-lm

Довольно упоротая работа, также известна под кодовым названием AWD-LSTM. Суть статьи в том, как из уже известных костылей можно собрать SOTA для LM. Правда SOTA это было в 2017 году, но как обзор регуляризационных техник -- довольно полезно. Ну и оно всё ещё используется, например, ULMFiT на нём собран.

База такая:
- архитектура -- стандартный LM на базе RNN
- ядро -- многослойный LSTM или GRU или QRNN
- используют tie weights (синхронизация весов эмбеддингов в энкодере и декодере)

Дропауты:
- обычный Dropout.
- Locked Dropout (аналог variational dropout) -- dropout элементов, статичный на всё время обработки батча, используется между слоями RNN.
- DropConnect aka WeightDrop -- это Locked Dropout, но для весов на связях сети, а не активаций, используется на скрытом состоянии между тактами RNN.
- Embedding Dropout -- при обработке батча dropout на эмбеддинги делается так, что у всех слов синхронно дропаются одни и те же координаты.

Работа с градиентом:
- используют схему переключения между SGD и average SGD, утверждают, что для задач типа LM это лучше чем Adam или momentum SGD
- используют weight decay
- для каждого батча делают BPTT рандомизированной длины, при этом делают поправку на LR в зависимости от этой длины.
- используют обычный gradient clipping
- Activation Regularization (AR) -- дополнительная регуляризация на число активированных нейронов
- Temporal Activation Regularization (AR) -- аналогично, но на первую производную числа активированных нейронов

Приводят сравнительныей анализ эффективности этих методов, см табличку:
Identity Crisis: Memorization and Generalization under Extreme Overparameterization
Chiyuan Zhang, Samy Bengio, Moritz Hardt, Yoram Singer
Google AI

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

#CNN, #FCN, #FFNN, #optimization, #memorization, #generalization, 2019

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

Для этого рассматривается эксперимент в любопытной постановке:
- Возьмём достаточно большую (overparametrized) сеть (рассматривались полносвязные сети и СNN).
- Будем учить её выдавать вход на выход, MSE; но будем учить её только на одном примере А, N(А) = А.
- У такой задачи могут быть различные решения, в частности, есть два крайних случая: сеть выучивает константу N(X) = A, и сеть выучивает тождественную функцию N(X) = X. На практике получается что-то промежуточное. При этом авторы утверждают, что константа соответствует запоминанию, а тождественная функция -- обобщению.
- Далее, в режиме теста на примерах В, отличных от А, можно, сравнивая Corr(B, N(B)) и Corr(A, N(B)), понять, к чему ближе результат обучения -- к константе или к тождественной функции.

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

Дальше детальнее разбирают зависимость результата в случае CNN от разных факторов.
Understanding and Improving Interpolation in Autoencoders via an Adversarial Regularizer
David Berthelot, Colin Raffel, Aurko Roy, Ian Goodfellow
Google Brain

#AE, #VAE, #representation, #ICLR 2019

Статья: https://arxiv.org/abs/1807.07543
Родной код на tf: https://github.com/brain-research/acai
Неродной код на pytorch: https://gist.github.com/kylemcdonald/e8ca989584b3b0e6526c0a737ed412f0

В статье рассматривается архитектура AE. В простейшем виде она сопоставляет каждому кодируемому объекту вектор в некотором фиксированном пространстве, но никаких дополнительных свойств этого пространства не гарантирует. Всякие модификации архитектуры (DAE, VAE, AAE, VQ-VAE) фактически накладывают на это пространство дополнительные ограничения, что даёт дополнительные удобства при его использовании.

Авторы предлагают архитектуру Adversarially Constrained Autoencoder Interpolation (ACAI), призванную строить более непрерывные, гладкие пространства представлений. Достигается это за счёт достаточно простого и красивого трюка:
- возьмём случайно два реальных объекта из обучающей выборки x1, x2, построим их свёртки l1 = E(x1), l2 = E(x2)
- возьмём случайное значение alpha (0 .. 0.5) и построим интерполяцию между свёртками l3 = alpha*l1 + (1-alpha)*l2
- декодируем объект из этого интерполированного представления y3 = D(l3)
- пусть критик (с архитектурой, такой же как у энкодера) пытается угадать alpha по y3, т.е. alpha_critic = C(y3)
За успех критика будем штрафовать энкодер и декодер, т.е. АЕ будет стараться делать так, чтобы критик предсказывал всегда нулевое значение alpha. Такая регуляризация приводит к тому, что области латентного пространства между представлениями реальных объектов гладко заполняются правдоподобными объектами. На практике (в коде) вся эта конструкция подпёрта ещё парой костылей, но общий смысл остаётся прежним.

Гладкость тестируют числено и органолептически на модельных задачах + оценивают качество на downstream задачах классификации и кластеризации. Сравниваются с другими АЕ-моделями, почти везде выигрывают (на втором месте обычно VAE).