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 и вообще.
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 и вообще.
krutikabapat.github.io
Swish Vs Mish: Latest Activation Functions
In this blog post we will be learning about two of the very recent activation functions Mish and Swift. Some of the activation functions which are already in the buzz. Relu, Leaky-relu, sigmoid, tanh are common among them. These days two of the activation…
❤1
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К итераций начинает ухудшаться). Тут так понимаю его таки поставили во внешний цикл вместо эволюционных стратегий.
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К итераций начинает ухудшаться). Тут так понимаю его таки поставили во внешний цикл вместо эволюционных стратегий.
GitHub
google-research/task_set at master · google-research/google-research
Google Research. Contribute to google-research/google-research development by creating an account on GitHub.
👍1
Вся эта движуха глобально очень правильная. Я бы ожидал на горизонте пары лет, что какая-нибудь большая компания потратит гигаватты на своих кластерах на обучение оптимизатора на более серьёзных сетях и задачах и выдаст таки нейросетевой оптимизатор, назову его NG (neural gradients), который все остальные смогут использовать по аналогии с BERT. И это будет ещё один шаг в сторону AutoML, умный оптимизатор без гиперпараметров, превосходящий всю эту текущую алхимию с разными оптимизаторами, их параметрами и хитрыми политиками прогрева и игрой с learning rate.
Сбер или Яндекс, не хотите? ;) В случае успеха будет мировой почёт и уважение.
Сбер или Яндекс, не хотите? ;) В случае успеха будет мировой почёт и уважение.
👍1🔥1