Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя
CTO Intento, ранее руководитель разработки Яндекс-...  · 18 февр 2022

Supermasks in Superposition

Mitchell Wortsman, Vivek Ramanujan, Rosanne Liu, Aniruddha Kembhavi, Mohammad Rastegari, Jason Yosinski, Ali Farhadi
Ещё про суперпозицию, но другого рода. И снова в контексте борьбы с catastrophic forgetting.
Начать стоит издалека. Уже давно в работе про Lottery Ticket Hypothesis (https://arxiv.org/abs/1803.03635) было показано, что в обученной сети есть подсети, которые дают такое же (или даже более высокое) качество, будучи натренированы с нуля с той же инициализации, что и большая сеть, в которой их нашли. Потом много чего было, например, работа про супермаски (и не только, https://arxiv.org/abs/1905.01067), где показали, что в рандомно инициализированной сети уже есть подсети с высоким качеством (и маска задаёт такую подсеть). Потом была работа “What's Hidden in a Randomly Weighted Neural Network?” (https://t.me/gonzo_ML/196), где авторы предложили алгоритм Edge-Popup для нахождения таких подсетей. Коллектив (почти) этих же авторов написал через год другую интересную работу (была принята на NeurIPS 2020).
Здесь также стоит отвлечься и вспомнить интересную работу про альтернативу файнтюнингу под названием “Piggyback: Adapting a Single Network to Multiple Tasks by Learning to Mask Weights” (https://arxiv.org/abs/1801.06519), где с помощью маскирования весов обученной сети добивались адаптации сети к новым задачам. У этого метода было преимущество в том, что оригинальные веса не трогались, соответственно не происходило забывания, свойственного файнтюнингу при обучении сети новым задачам.
Авторы текущей работы в каком-то смысле сочетают эти две. Они предложили метод под названием SupSup (Supermasks in Superposition), позволяющий в базовой рандомно инициализированной сети находить маски под разные задачи. Причём в том числе и для кейсов, когда конкретная задача в данный момент неизвестна и сеть должна догадаться, какая это задача была.
Первым делом авторы предложили таксономию сценариев continual learning и специальный трёхбуквенный код для описания. Используя буквы G (Given) и N (Not given) они описывают, известны ли id задач во время обучения (первая буква кода) и тестирования (вторая буква). И ещё есть третья буква, которая говорит, расшарены ли метки классов между задачами (s) или нет (u). Получаются разные варианты, но практически полезные среди них следующие: GG (самый лёгкий, id задач известны в трейне и тесте, а GGs и GGu эквивалентны, поэтому просто GG), GNs (id задачи известен в трейне и неизвестен в тесте, метки классов общие), GNu (то же, но метки раздельные, что оказывается более сложным, потому что эффективно надо предсказывать классов больше в число раз равное числу задач), и наконец NNs (потому что сценарий NNu невалиден).
Во всех сценариях мы работаем со случайно инициализированной сетью. Веса её заморожены и вообще не обучаются. Все bias термы установлены в 0, в параметры весов в ±c с равной вероятностью, где c — это стандартное отклонение соответствующего Kaiming normal distribution (про важность выбора распределения инициализации было в предыдущей их работе).
Для сценария GG всё просто — информация о задаче есть и в режиме обучения, и в режиме тестирования. Здесь для каждой новой задачи можно выучить новую бинарную маску (тем же Edge-Popup), при вычислении сети веса маски {0,1} перемножаются с соответствующими весами модели. Маску, кстати, можно хранить в разреженном формате, а веса сети можно вообще не хранить, а зная seed просто генерировать. Получается весьма мало места. И разреженность можно также регулировать, находя баланс между качеством и занимаемым местом.
Сценарии GNs и GNu хитрее — в обучении id задачи известен, но в режиме инференса этой информации нет и сеть должна сама что-то выбрать. Идея, как это можно сделать, основана на энтропии распределения выходных классов — мы считаем, что правильно выбранная маска должна генерировать распределение с низкой энтропией. Это, конечно, может быть проблемным местом, зная тенденцию к выдаче over-confident результатов.
Здесь в качестве маски берётся суперпозиция всех масок отдельных задач, взвешенных с коэффициентами alpha_i, а эти коэффициенты можно найти градиентным спуском, минимизируя энтропию (начинают с равномерного распределения). Альтернативно можно просто перебрать все маски и выбрать с наименьшей энтропией (но для этого надо k forward passes). Тут хочется иметь сублинейную сложность от количества масок и для этого предлагают два алгоритма One-Shot и Binary. В первом берётся задача, для координаты которой энтропия уменьшается сильнее всего и это можно посчитать по одному градиенту; во втором за log(k) шагов наподобие бинарного поиска отсеиваются задачи, где энтропия уменьшается минимально.
Для сценария NNs задача неизвестна даже при обучении и здесь, если алгоритм SupSup не уверен насчёт конкретной задачи (для этого в статье есть критерий, что распределение примерно равномерное), то вероятно это новая задача. В таком случае создаётся новая маска и их число k инкрементируется. Авторы сумели обучить сеть на 2500 задач (перестановки MNIST) без знания информации о задаче.
В процессе всех экспериментов авторы сравниваются с описанным в прошлый раз PSP (https://t.me/gonzo_ML/870) и с методом BatchEnsemble (https://arxiv.org/abs/2002.06715). SupSup рулит, обходя обоих конкурентов, а в сценарии NNs достигает сравнимого с GNu качества.
Есть отдельные интересные предложения про кодирование масок внутри сети Хопфилда (это называется методом HopSupSup). Получается резервуар фиксированного размера, где маски это аттракторы в сети.
Для сценария GNu HopSupSup нужно L*K выходных нейронов, в то время как SupSup обходится без такого количества и может использовать всего L. Что интересно, хотя в теории L обычному SupSup и достаточно, но добавление “излишних” (superfluous) нейронов (s-нейроны) на практике помогает.
В целом интересная работа. Я по-прежнему уверен, что тема со случайными большими сетями ещё недоисследована.
Оригинал: https://t.me/gonzo_ML/884
Машинное обучение+2