LoCo: Local Contrastive Representation Learning
Yuwen Xiong, Mengye Ren, Raquel Urtasun
Статья:
https://arxiv.org/abs/2008.01342 Попахивает серьёзным прорывом. Локальный (!) метод unsupervised representation learning, сравнимый с полноценными end-to-end (не-локальными) вариантами, и заодно превосходящий качество supervised end-to-end аналогов на ImageNet.
Как так? Разберёмся!
Недавно мы писали про SimCLRv2 (
https://t.me/gonzo_ML/324), довольно простой по сути метод unsupervised representation learning, дающий офигенное качество и превосходящий supervised бейзлайны (что уже неимоверно круто). Метод, как вы помните, основан на contrastive learning, выучивающий такие представления, что у трансформаций одной и той же картинки они близкие, а у разных — далёкие.
Contrastive learning в этом году наступает по всем фронтам, вполне можно назвать его одной из “Технологий года”. Различных примеров его применения множество, результаты хорошие, наверняка будут ещё. Например, про применение его к программному коду мы писали совсем недавно (
https://t.me/gonzo_ML/330).
SimCLR прекрасен, но одна проблема — он end-to-end, обучать такое дорого (и по времени, и по памяти), градиенты с верхнего слоя должны дойти до нижнего. Ну то есть не то, чтобы прям проблема, все практически сети сейчас так обучаются, но давно уже зреет убеждение, что эта история далека от biological plausibility, мозг работает не так, не ходят там градиенты через 100500 слоёв (а если и ходят, то никто пока не нашёл, где и как; но всё равно вряд ли). Все больше верят в local learning — правила, которые работают локально, по типу правила Хебба (“Fire together, wire together”) или STDP.
Попыток создать рабочие варианты локальных методов обучения множество. В прошлом году появился метод под названием Greedy InfoMax (
https://arxiv.org/abs/1905.11786), использующий локально contrastive learning для каждого блока. Он показал интересные результаты (правда на сравнительно маленьком датасете STL-10). Но как показывают авторы текущей статьи, до end-to-end self-supervised фреймворков (подразумеваем SimCLR ещё v1, не более новый v2) он не дотягивает, разница в итоговом качестве заметная.
Хочется сделать локальный метод с качеством end-to-end метода (SimCLR). Оказывается, это возможно. Встречайте LoCo — Local Contrastive Representation Learning!
LoCo отличается от Greedy InfoMax (GIM) тем, что в последнем InfoNCE (классический contrastive loss) добавлялся к каждому блоку ResNet’а, а в LoCo блоки объединяются в группы по два, и каждый блок в одной группе выступает “верхним” (с которого идут градиенты), а в другой “нижним” (куда идут градиенты от лосса). Веса при этом у них зашарены. По гипотезе авторов это должно было дать недостающий фидбек с верхних уровней сети, а также сделать более глубоким декодер (помните, SimCLRv2 тоже отличался от первой версии тем, что там классификаторы стали более глубокими).
И это работает!
Проверяются на двух архитектурах: ResNet-50 и ShuffleNet v2-50. Обучают на ImageNet-1K, в качестве downstream задач берут также Mask R-CNN на Cityscapes и COCO и проверяют на задачах object detection и instance segmentation.
Результат сопоставим с не-локальным SimCLR и ощутимо превосходит GIM! И (как и сам SimCLR) на большом количестве эпох ощутимо бьёт supervised бэйзлайн.
В общем выглядит это всё офигенно. Получается, не нужно ждать сигнала с самого верха сети, чтобы выучивать качественные представления (хотя косвенно через шаринг весов, наверное, всё-таки получается такая связь есть — проверялись разные стратегии шаринга, полноценный шаринг работает лучше всех). С такими методами должно стать сильно проще делать model parallelism — разносить разные части модели на разные вычислительные устройства и считать это всё впараллель.
Как практический бонус, это также даёт какую-то экономию памяти — не надо хранить кучу активаций для обновления каждого блока.
Короче, очень интересная движуха! Продолжаем наблюдение.