Reformer: The Efficient Transformer
Nikita Kitaev, Łukasz Kaiser, Anselm Levskaya
Статья: https://arxiv.org/abs/2001.04451
Код: https://github.com/google/trax/tree/master/trax/models/reformer
Больше трансформеров, хороших и разных! Łukasz Kaiser, кстати, соавтор оригинальной работы, а также работы про Universal Transformer, да и многого другого по теме (https://scholar.google.ru/citations?hl=en&user=JWmiQR0AAAAJ&sortby=pubdate).
Реформер -- это по сути техническая оптимизация оригинального трансформера, чтобы он занимал меньше памяти и быстрее считался.
Проблема обычного трансформера, что он большой и тяжёлый, плюс сложность механизма внимания квадратичная. Из-за всего этого обучать трансформеры (особенно на длинных последовательностях) становится невозможно без кластера. И даже файнтюнить не всегда можно на одном GPU.
Например, в одной из больших конфигураций трансформера (не из оригинальной работы, а из более навороченной https://arxiv.org/abs/1811.02084, которая конечно не про типичный трансформер, а скорее про историю типа Мегатрона от Нвидии), число параметров в слое может достигать полумиллиарда. И слоёв таких много.
Плюс для обучения надо сохранять активации, плюс feed-forward слои в трансформере ещё большую размерность эмбеддингов имеют.
Соответственно в работе предлагаются три техники для облегчения этих проблем.
1. Reversible layers по типу как здесь https://arxiv.org/abs/1707.04585. Позволяют сократить на хранении активаций в N раз (N -- число слоёв).
2. Работа с активациями feed-forward слоёв блоками уменьшает потребление памяти ff-слоями.
3. Приближённое вычисление внимания через механизм Locality-sensitive hashing (LSH) сокращает сложность в этом месте с квадратичной O(L^2) до O(L*logL) (L -- размер последовательности).
Из всего этого самое интересное, кажется, LSH. Идея которого в том, что, во-первых, в расчёте внимания есть softmax, а в нём доминируют обычно несколько больших (наиболее близких к исходному) элементов. Так что достаточно считать его на этих самых наиболее близких. И, во-вторых, чтобы попроще найти эти наиболее близкие, надо использовать LSH, который сразу и положит их в один бакет. Так что включаем LSH и работаем только внутри бакета. На потенциальные промахи забиваем.
В чём-то идейно похоже на Sparse Transformer от OpenAI, только через LSH.
В экспериментах показывается, что всё это добро не ухудшает качество трансформера.
Query и Keys в трансформере можно считать одной матрицей, а не раздельными. Это ок, хуже не становится (иногда даже чуть лучше).
Обратимые слои тоже ок, тоже хуже не становится.
LSH делает чуть хуже, если хешей мало (скажем 2), но если сделать их побольше (8 или 16), то в целом тоже ок.
Ну и профит.
Если взглянуть шире, то за последнее время накопилось несколько интересных улучшений, которые выглядят ортогональными друг другу. Я бы занёс сюда:
* ALBERT (или как альтернатива ему Universal Transformer) от Гугла
* Compressive Transformer (как более продвинутый вариант Transformer-XL) от DeepMind
* Adaptive attention span от Фейсбука
* Ещё были оптимизации от Фейсбука про All-attention layer (https://ai.facebook.com/blog/making-transformer-networks-simpler-and-more-efficient/)
* Reformer вот теперь
* Наверное, если подумать, ещё что-то можно сюда добавить.
Коммьюнити ждёт своих героев, которые [имеют под рукой кластер или суперпомпьютер и] соберут все эти улучшения вместе и создатут новый супер-трансформер, а потом сделают на нём новый супер-BERT и супер-GPT2.
А если ещё это всё отдистиллировать…
Ам!
Nikita Kitaev, Łukasz Kaiser, Anselm Levskaya
Статья: https://arxiv.org/abs/2001.04451
Код: https://github.com/google/trax/tree/master/trax/models/reformer
Больше трансформеров, хороших и разных! Łukasz Kaiser, кстати, соавтор оригинальной работы, а также работы про Universal Transformer, да и многого другого по теме (https://scholar.google.ru/citations?hl=en&user=JWmiQR0AAAAJ&sortby=pubdate).
Реформер -- это по сути техническая оптимизация оригинального трансформера, чтобы он занимал меньше памяти и быстрее считался.
Проблема обычного трансформера, что он большой и тяжёлый, плюс сложность механизма внимания квадратичная. Из-за всего этого обучать трансформеры (особенно на длинных последовательностях) становится невозможно без кластера. И даже файнтюнить не всегда можно на одном GPU.
Например, в одной из больших конфигураций трансформера (не из оригинальной работы, а из более навороченной https://arxiv.org/abs/1811.02084, которая конечно не про типичный трансформер, а скорее про историю типа Мегатрона от Нвидии), число параметров в слое может достигать полумиллиарда. И слоёв таких много.
Плюс для обучения надо сохранять активации, плюс feed-forward слои в трансформере ещё большую размерность эмбеддингов имеют.
Соответственно в работе предлагаются три техники для облегчения этих проблем.
1. Reversible layers по типу как здесь https://arxiv.org/abs/1707.04585. Позволяют сократить на хранении активаций в N раз (N -- число слоёв).
2. Работа с активациями feed-forward слоёв блоками уменьшает потребление памяти ff-слоями.
3. Приближённое вычисление внимания через механизм Locality-sensitive hashing (LSH) сокращает сложность в этом месте с квадратичной O(L^2) до O(L*logL) (L -- размер последовательности).
Из всего этого самое интересное, кажется, LSH. Идея которого в том, что, во-первых, в расчёте внимания есть softmax, а в нём доминируют обычно несколько больших (наиболее близких к исходному) элементов. Так что достаточно считать его на этих самых наиболее близких. И, во-вторых, чтобы попроще найти эти наиболее близкие, надо использовать LSH, который сразу и положит их в один бакет. Так что включаем LSH и работаем только внутри бакета. На потенциальные промахи забиваем.
В чём-то идейно похоже на Sparse Transformer от OpenAI, только через LSH.
В экспериментах показывается, что всё это добро не ухудшает качество трансформера.
Query и Keys в трансформере можно считать одной матрицей, а не раздельными. Это ок, хуже не становится (иногда даже чуть лучше).
Обратимые слои тоже ок, тоже хуже не становится.
LSH делает чуть хуже, если хешей мало (скажем 2), но если сделать их побольше (8 или 16), то в целом тоже ок.
Ну и профит.
Если взглянуть шире, то за последнее время накопилось несколько интересных улучшений, которые выглядят ортогональными друг другу. Я бы занёс сюда:
* ALBERT (или как альтернатива ему Universal Transformer) от Гугла
* Compressive Transformer (как более продвинутый вариант Transformer-XL) от DeepMind
* Adaptive attention span от Фейсбука
* Ещё были оптимизации от Фейсбука про All-attention layer (https://ai.facebook.com/blog/making-transformer-networks-simpler-and-more-efficient/)
* Reformer вот теперь
* Наверное, если подумать, ещё что-то можно сюда добавить.
Коммьюнити ждёт своих героев, которые [имеют под рукой кластер или суперпомпьютер и] соберут все эти улучшения вместе и создатут новый супер-трансформер, а потом сделают на нём новый супер-BERT и супер-GPT2.
А если ещё это всё отдистиллировать…
Ам!
GitHub
trax/trax/models/reformer at master · google/trax
Trax — Deep Learning with Clear Code and Speed. Contribute to google/trax development by creating an account on GitHub.
❤2
R-Transformer: Recurrent Neural Network Enhanced Transformer
Zhiwei Wang, Yao Ma, Zitao Liu, Jiliang Tang
Статья: https://arxiv.org/abs/1907.05572
Код: https://github.com/DSE-MSU/R-transformer
Ещё вариация на тему трансформера -- химера с RNN.
Трансформер, как известно, хорош возможностью ловить глобальные зависимости (ну, в пределах своего attention span, конечно), но в целом не очень умеет эффективно моделировать локальные структуры. Рекуррентные сетки хороши в моделировании последовательностей вообще (в трансформеры для этого приходится добавлять позиционные эмбеддинги, иначе ему пофиг про порядок, он смотрит на всё) и локальной структуры в частности (по идее для этого и свёрточные тоже хороши, а у трансформера также есть вариант с относительными позиционными эмбеддингами).
Решение простое: давайте постороим гибрид, где сначала будет left-to-right RNN с ограниченным окном (здесь она называется LocalRNN), а поверх её эмбеддингов будет уже работать трансформер (никаких позиционных эмбеддингов уже не используем). LocalRNN имеет шаринг весов для всех позиций.
В работе рассматривают не полный кейс с seq2seq, а моделирование последовательности (смотрим только влево на предыдущий контекст, вправо не смотрим).
По мне, честно говоря, непонятно, почему здесь нельзя точно так же было свёртки вставить, и авторы пишут, что это в общем аналогично одномерной свёртке, но свёртка, мол, игнорирует информацию о последовательности внутри окна (что мне кажется, фигня). Как минимум было бы интересно проверить. Плюс, свёртки быстрее будут считаться.
Построили, получили более хороший результат, чем у обычного трансформера.
Среди прочего сравниваются со свёрточной TCN (temporal convolutional network, малоизвестная, но с хорошими способностями, она отсюда: https://arxiv.org/abs/1803.01271) Про ней пишут, что TCN тоже локальную информацию о последовательности игнорирует. Спорно, мне кажется.
Следующим гибридом просится CNN-RNN-Transformer. Ибо гибриды CNN-LSTM вполне хорошо работают.
Zhiwei Wang, Yao Ma, Zitao Liu, Jiliang Tang
Статья: https://arxiv.org/abs/1907.05572
Код: https://github.com/DSE-MSU/R-transformer
Ещё вариация на тему трансформера -- химера с RNN.
Трансформер, как известно, хорош возможностью ловить глобальные зависимости (ну, в пределах своего attention span, конечно), но в целом не очень умеет эффективно моделировать локальные структуры. Рекуррентные сетки хороши в моделировании последовательностей вообще (в трансформеры для этого приходится добавлять позиционные эмбеддинги, иначе ему пофиг про порядок, он смотрит на всё) и локальной структуры в частности (по идее для этого и свёрточные тоже хороши, а у трансформера также есть вариант с относительными позиционными эмбеддингами).
Решение простое: давайте постороим гибрид, где сначала будет left-to-right RNN с ограниченным окном (здесь она называется LocalRNN), а поверх её эмбеддингов будет уже работать трансформер (никаких позиционных эмбеддингов уже не используем). LocalRNN имеет шаринг весов для всех позиций.
В работе рассматривают не полный кейс с seq2seq, а моделирование последовательности (смотрим только влево на предыдущий контекст, вправо не смотрим).
По мне, честно говоря, непонятно, почему здесь нельзя точно так же было свёртки вставить, и авторы пишут, что это в общем аналогично одномерной свёртке, но свёртка, мол, игнорирует информацию о последовательности внутри окна (что мне кажется, фигня). Как минимум было бы интересно проверить. Плюс, свёртки быстрее будут считаться.
Построили, получили более хороший результат, чем у обычного трансформера.
Среди прочего сравниваются со свёрточной TCN (temporal convolutional network, малоизвестная, но с хорошими способностями, она отсюда: https://arxiv.org/abs/1803.01271) Про ней пишут, что TCN тоже локальную информацию о последовательности игнорирует. Спорно, мне кажется.
Следующим гибридом просится CNN-RNN-Transformer. Ибо гибриды CNN-LSTM вполне хорошо работают.
arXiv.org
R-Transformer: Recurrent Neural Network Enhanced Transformer
Recurrent Neural Networks have long been the dominating choice for sequence modeling. However, it severely suffers from two issues: impotent in capturing very long-term dependencies and unable to...
Improving Deep Neuroevolution via Deep Innovation Protection
Sebastian Risi, Kenneth O. Stanley
Статья: https://arxiv.org/abs/2001.01683
Что-то давненько не писали мы про нейроэволюцию. А тут прикольная свежая работа как раз.
Авторы (один из которых -- это, кажется, главный сейчас по нейроэволюции, Kenneth Stanley из Uber AI) предложили метод под названием Deep Innovation Protection (DIP), который улучшает end-to-end обучение сложных world models (архитектура от David Ha и любимого нами Юргена Шмидхубера, World Models, https://arxiv.org/abs/1803.10122) с помощью эволюционных методов.
Идея world models (WM), если вы её пропустили, заключалась в том, что архитектура агента состоит из трёх компонентов:
1). Визуальный модуль, который маппит картинку в низкоразмерный код. Здесь использовался VAE.
2). Модуль памяти, который пытается предсказать будущие состояния среды (в виде низкоразмерного кода). Для этого использовалась LSTM с Mixture Density Network (MDN)
3). Контроллер, который берёт данные от визуального модуля и памяти и выдаёт следующее действие.
Оригинальная WM обучалась по частям: сначала визуальный модуль бэкпропом на роллаутах случайной полиси, потом MDN-RNN тоже бэкпропом, а потом уже контроллер через эволюционную стратегию (CMA-ES). Ну то есть нифига не end-to-end. Но работало уже весьма интересно и давало богатую пищу для размышлений.
Примерно полгода назад Стэнли и Риси (авторы текущей статьи) уже реализовали обучение WM end-to-end (Deep Neuroevolution of Recurrent and Discrete World Models, https://arxiv.org/abs/1906.08857) с помощью генетических алгоритмов и добились сравнимого с оригинальной WM результата на 2D car racing.
Но та работа про нейроэволюцию не очень работала на сложных средах с 3D типа WizDoom, и вот наконец текущая работа устраняет эту проблему.
Идея работы в том, что оптимизацию такой гетерогенной сети как WM надо рассматривать как коэволюцию различных подсистем. И если в одной из систем происходит какая-то инновация, то другим системам ещё надо успеть под неё подстроиться, потому что краткосрочно это приводит к деградации. Но вдруг после подстройки новый вариант всех порвёт? Соответственно надо защищать такие свежемутированные варианты, снижая давление отбора на них, тем самым давая время на эту подстройку.
Собственно в этом и идея. Мы трансформируем задачу в задачу многокритериальной оптимизации. Вторым критерием добавляется возраст решения. Если два индивида демонстрируют одинаковый перформанс, то преимущество отдаётся тому, у кого меньше возраст. А возраст сбрасывается в ноль для всех индивидов, у которых мутировала VAE или MDN-RNN (то есть визуальная система или система памяти).
Надо заметить, это заметно отличается от традиционного использования возраста индивида в эволюционных вычислениях, где оно обычно используется для увеличения разнообразия популяции, трекая как долго кто тут уже сидит. Текущий подход тоже в принципе влияет на разнообразие, но здесь возраст используется для подсчёта, сколько времени было у контроллера на подстраивание к изменившимся частям в апстриме.
Теперь и VAE, и MDN-RNN оптимизируются вместе генетическим алгоритмом, не оцениваясь по отдельности. VAE больше не оптимизируется на предмет более качественного восстановления исходной картинки, а модуль памяти больше не натаскивается на предсказание следующего состояния.
В общем в целом подход работает, выживать в среде VizDoom:Take Cover агент научается, DIP профит даёт.
Отдельный интересный вопрос, какие репрезентации сформирует агент для такой постановки, без явной оптимизации на реконструкцию или предсказание будущего. Ну что-то осмысленное вроде как выучивается. Похоже на то, что агент научается предсказывать попадёт в него fireball или нет (что безусловно оч.полезно для выживания в этой среде).
В общем, интересная работа, дальнейшие развития просятся.
#RL, #EVO
Sebastian Risi, Kenneth O. Stanley
Статья: https://arxiv.org/abs/2001.01683
Что-то давненько не писали мы про нейроэволюцию. А тут прикольная свежая работа как раз.
Авторы (один из которых -- это, кажется, главный сейчас по нейроэволюции, Kenneth Stanley из Uber AI) предложили метод под названием Deep Innovation Protection (DIP), который улучшает end-to-end обучение сложных world models (архитектура от David Ha и любимого нами Юргена Шмидхубера, World Models, https://arxiv.org/abs/1803.10122) с помощью эволюционных методов.
Идея world models (WM), если вы её пропустили, заключалась в том, что архитектура агента состоит из трёх компонентов:
1). Визуальный модуль, который маппит картинку в низкоразмерный код. Здесь использовался VAE.
2). Модуль памяти, который пытается предсказать будущие состояния среды (в виде низкоразмерного кода). Для этого использовалась LSTM с Mixture Density Network (MDN)
3). Контроллер, который берёт данные от визуального модуля и памяти и выдаёт следующее действие.
Оригинальная WM обучалась по частям: сначала визуальный модуль бэкпропом на роллаутах случайной полиси, потом MDN-RNN тоже бэкпропом, а потом уже контроллер через эволюционную стратегию (CMA-ES). Ну то есть нифига не end-to-end. Но работало уже весьма интересно и давало богатую пищу для размышлений.
Примерно полгода назад Стэнли и Риси (авторы текущей статьи) уже реализовали обучение WM end-to-end (Deep Neuroevolution of Recurrent and Discrete World Models, https://arxiv.org/abs/1906.08857) с помощью генетических алгоритмов и добились сравнимого с оригинальной WM результата на 2D car racing.
Но та работа про нейроэволюцию не очень работала на сложных средах с 3D типа WizDoom, и вот наконец текущая работа устраняет эту проблему.
Идея работы в том, что оптимизацию такой гетерогенной сети как WM надо рассматривать как коэволюцию различных подсистем. И если в одной из систем происходит какая-то инновация, то другим системам ещё надо успеть под неё подстроиться, потому что краткосрочно это приводит к деградации. Но вдруг после подстройки новый вариант всех порвёт? Соответственно надо защищать такие свежемутированные варианты, снижая давление отбора на них, тем самым давая время на эту подстройку.
Собственно в этом и идея. Мы трансформируем задачу в задачу многокритериальной оптимизации. Вторым критерием добавляется возраст решения. Если два индивида демонстрируют одинаковый перформанс, то преимущество отдаётся тому, у кого меньше возраст. А возраст сбрасывается в ноль для всех индивидов, у которых мутировала VAE или MDN-RNN (то есть визуальная система или система памяти).
Надо заметить, это заметно отличается от традиционного использования возраста индивида в эволюционных вычислениях, где оно обычно используется для увеличения разнообразия популяции, трекая как долго кто тут уже сидит. Текущий подход тоже в принципе влияет на разнообразие, но здесь возраст используется для подсчёта, сколько времени было у контроллера на подстраивание к изменившимся частям в апстриме.
Теперь и VAE, и MDN-RNN оптимизируются вместе генетическим алгоритмом, не оцениваясь по отдельности. VAE больше не оптимизируется на предмет более качественного восстановления исходной картинки, а модуль памяти больше не натаскивается на предсказание следующего состояния.
В общем в целом подход работает, выживать в среде VizDoom:Take Cover агент научается, DIP профит даёт.
Отдельный интересный вопрос, какие репрезентации сформирует агент для такой постановки, без явной оптимизации на реконструкцию или предсказание будущего. Ну что-то осмысленное вроде как выучивается. Похоже на то, что агент научается предсказывать попадёт в него fireball или нет (что безусловно оч.полезно для выживания в этой среде).
В общем, интересная работа, дальнейшие развития просятся.
#RL, #EVO
🔥2
Understanding and Improving Interpolation in Autoencoders via an Adversarial Regularizer
David Berthelot, Colin Raffel, Aurko Roy, Ian Goodfellow
Статья: https://arxiv.org/abs/1807.07543
Код: https://github.com/brain-research/acai
А вот про автоэнкодеры. Которые умеют интерполировать в латентном пространстве.
Вроде как считается, что VAE отличается от обычного автоэнкодера именно этим. За счёт хитрых лоссов его латентные коды получаются непрерывными и более-менее любая точка из этого пространства генерит что-то похожее на реальность. В то время как обычный автоэнкодер ничего такого не гарантирует.
Но не всё так просто.
Если хочется уметь интерполировать в латентном пространстве так, чтобы любая комбинация вида alpha*z1 + (1-alpha)*z2 между двумя точками в этом пространстве z1 и z2 давала что-то хорошее, то VAE не так уж и хорош. На картинке с модельным примером с линиями хорошо видно. Каждый кадр нормальный, но нет непрерывности при движении по траектории в латентном пространстве. Другие автоэнкодеры тоже не очень. Например, сильно мылят или пытаются интерполировать в пространстве данных, между пиксельными картинками. Выглядит плохо.
Чтобы автоэнкодер соответствовал таким представлениям о прекрасном, авторами (среди которых есть и Гудфеллоу, автор GAN) в процедуру обучения вводится adversarial loss в лице critic network, в которую подаются интерполяции существующих примеров из данных, а критик должен определить, с каким коэффициентом alpha они были замешаны (либо ноль, если это не смесь). Получается ACAI, Adversarially Constrained Autoencoder Interpolation.
По сути, ACAI добивается того, чтобы интерполированные точки выглядели реалистично. Никаких ограничений на скрытые репрезентации не накладывается и структура этого пространства не задаётся (нет KL-лосса за несоответствие нормальному распределению, например, как в VAE). ACAI также не пытается отличать “настоящие” картинки от “ненастоящих”. Только предсказывает коэффициент интерполяции. И через стимулирование более качественной интерполяции влияет на скрытое представление.
Для численной оценки качества интерполяции предлагается простой бенчмарк с линиями (с часовой стрелкой если угодно), где всё понятно как мерять.
Сравниваются разные автоэнкодеры: обычный, denoising, VAE (не beta-VAE), adversarial autoencoder (AAE), vector quantizer VAE (VQ-VAE) и ACAI.
И картинки, и числа показывают, что ACAI работает лучше остальных перечисленных. Заодно получаем какую-то интересную интуицию про остальные автоэнкодеры на такой задаче.
Также проверяем качество representation learning’а — годные ли получаются фичи для downstream задач: классификации и кластеризации. Годные, ACAI рулит. Эпизодически также рулят другие автоэнкодеры, например Denoising AE на SVHN.
В общем, прикольная модель. Кажется полезной.
David Berthelot, Colin Raffel, Aurko Roy, Ian Goodfellow
Статья: https://arxiv.org/abs/1807.07543
Код: https://github.com/brain-research/acai
А вот про автоэнкодеры. Которые умеют интерполировать в латентном пространстве.
Вроде как считается, что VAE отличается от обычного автоэнкодера именно этим. За счёт хитрых лоссов его латентные коды получаются непрерывными и более-менее любая точка из этого пространства генерит что-то похожее на реальность. В то время как обычный автоэнкодер ничего такого не гарантирует.
Но не всё так просто.
Если хочется уметь интерполировать в латентном пространстве так, чтобы любая комбинация вида alpha*z1 + (1-alpha)*z2 между двумя точками в этом пространстве z1 и z2 давала что-то хорошее, то VAE не так уж и хорош. На картинке с модельным примером с линиями хорошо видно. Каждый кадр нормальный, но нет непрерывности при движении по траектории в латентном пространстве. Другие автоэнкодеры тоже не очень. Например, сильно мылят или пытаются интерполировать в пространстве данных, между пиксельными картинками. Выглядит плохо.
Чтобы автоэнкодер соответствовал таким представлениям о прекрасном, авторами (среди которых есть и Гудфеллоу, автор GAN) в процедуру обучения вводится adversarial loss в лице critic network, в которую подаются интерполяции существующих примеров из данных, а критик должен определить, с каким коэффициентом alpha они были замешаны (либо ноль, если это не смесь). Получается ACAI, Adversarially Constrained Autoencoder Interpolation.
По сути, ACAI добивается того, чтобы интерполированные точки выглядели реалистично. Никаких ограничений на скрытые репрезентации не накладывается и структура этого пространства не задаётся (нет KL-лосса за несоответствие нормальному распределению, например, как в VAE). ACAI также не пытается отличать “настоящие” картинки от “ненастоящих”. Только предсказывает коэффициент интерполяции. И через стимулирование более качественной интерполяции влияет на скрытое представление.
Для численной оценки качества интерполяции предлагается простой бенчмарк с линиями (с часовой стрелкой если угодно), где всё понятно как мерять.
Сравниваются разные автоэнкодеры: обычный, denoising, VAE (не beta-VAE), adversarial autoencoder (AAE), vector quantizer VAE (VQ-VAE) и ACAI.
И картинки, и числа показывают, что ACAI работает лучше остальных перечисленных. Заодно получаем какую-то интересную интуицию про остальные автоэнкодеры на такой задаче.
Также проверяем качество representation learning’а — годные ли получаются фичи для downstream задач: классификации и кластеризации. Годные, ACAI рулит. Эпизодически также рулят другие автоэнкодеры, например Denoising AE на SVHN.
В общем, прикольная модель. Кажется полезной.
GitHub
GitHub - brain-research/acai: Code for "Understanding and Improving Interpolation in Autoencoders via an Adversarial Regularizer"
Code for "Understanding and Improving Interpolation in Autoencoders via an Adversarial Regularizer" - brain-research/acai
What's Hidden in a Randomly Weighted Neural Network?
Vivek Ramanujan, Mitchell Wortsman, Aniruddha Kembhavi, Ali Farhadi, Mohammad Rastegari
Статья: https://arxiv.org/abs/1911.13299
Из серии “про суть вещей”.
Случайно инициализированные сетки содержат подсети, которые демонстрируют хорошее качество вообще без обучения. Например, в рандомно инициализированном Wide ResNet-50 содержится подсетка со случайными весами, которая _без обучения_ достигает качества _обученного_ на ImageNet ResNet-34. Предлагается алгоритм для эффективного нахождения таких подсеток.
В каком-то смысле продолжение истории про Lottery Ticket Hypothesys (https://arxiv.org/abs/1803.03635). Если кто не помнит, то это история про то, что большие сети содержат разреженные подсети, которые можно эффективно натренировать до такого же качества, что и большие родительские сети, если установить им ту самую “правильную инициализацию”, которая была у них внутри большой модели.
Затем была работа (https://arxiv.org/abs/1905.01067), показавшая, что существуют т.н. Supermasks — маски, наложенные на _необученную_ случайно инициализированную сеть, дающие результирующую сеть с качеством намного выше, чем случайное угадывание (86% on MNIST, 41% on CIFAR-10). Маска здесь в смысле бинарной маски, зануляющей часть весов.
Теперь авторы текущей работы выдвигают свою ещё более сильную гипотезу и подтверждают её фактами.
В терминах красивых фраз они “validate the unreasonable effectiveness of randomly weighted neural networks for image recognition“.
Для нахождения таких подсетей авторы предложили алгоритм edge-popup, суть которого в том, что для каждого веса в сети мы учим дополнительное число (popup score), по которому мы дальше оставляем топ-k% весов. В данной процедуре сами веса сети не обучаются и остаются случайными, как в начале процесса, обучаются градиентным спуском только popup scores, по которым дальше генерится подсеть.
Также авторы показывают, что распределение, из которого сэмплят веса, очень важно, и качество найденных алгоритмом сетей существенно проседает при “неправильной” инициализации.
В общем на подходе алгоритмы совсем нового типа: которые не обучают неделями большие сети бэкпропом, а генерят огромные случайные сети и начинают их по-умному урезать.
(to be continued…)
Vivek Ramanujan, Mitchell Wortsman, Aniruddha Kembhavi, Ali Farhadi, Mohammad Rastegari
Статья: https://arxiv.org/abs/1911.13299
Из серии “про суть вещей”.
Случайно инициализированные сетки содержат подсети, которые демонстрируют хорошее качество вообще без обучения. Например, в рандомно инициализированном Wide ResNet-50 содержится подсетка со случайными весами, которая _без обучения_ достигает качества _обученного_ на ImageNet ResNet-34. Предлагается алгоритм для эффективного нахождения таких подсеток.
В каком-то смысле продолжение истории про Lottery Ticket Hypothesys (https://arxiv.org/abs/1803.03635). Если кто не помнит, то это история про то, что большие сети содержат разреженные подсети, которые можно эффективно натренировать до такого же качества, что и большие родительские сети, если установить им ту самую “правильную инициализацию”, которая была у них внутри большой модели.
Затем была работа (https://arxiv.org/abs/1905.01067), показавшая, что существуют т.н. Supermasks — маски, наложенные на _необученную_ случайно инициализированную сеть, дающие результирующую сеть с качеством намного выше, чем случайное угадывание (86% on MNIST, 41% on CIFAR-10). Маска здесь в смысле бинарной маски, зануляющей часть весов.
Теперь авторы текущей работы выдвигают свою ещё более сильную гипотезу и подтверждают её фактами.
В терминах красивых фраз они “validate the unreasonable effectiveness of randomly weighted neural networks for image recognition“.
Для нахождения таких подсетей авторы предложили алгоритм edge-popup, суть которого в том, что для каждого веса в сети мы учим дополнительное число (popup score), по которому мы дальше оставляем топ-k% весов. В данной процедуре сами веса сети не обучаются и остаются случайными, как в начале процесса, обучаются градиентным спуском только popup scores, по которым дальше генерится подсеть.
Также авторы показывают, что распределение, из которого сэмплят веса, очень важно, и качество найденных алгоритмом сетей существенно проседает при “неправильной” инициализации.
В общем на подходе алгоритмы совсем нового типа: которые не обучают неделями большие сети бэкпропом, а генерят огромные случайные сети и начинают их по-умному урезать.
(to be continued…)