Самообучение (Self-Supervision)

Сейчас расскажем о самообучении – способе многому научить модель без ручной разметки и, в некотором смысле, отказаться от глубокого обучения при настройке модели для решения нужной Вам задачи. Материал требует среднего уровня подготовки, даётся много ссылок на оригинальные работы.

SL

Как всем известно, существуют следующие виды обучения:

обучение по размеченным данным (Supervised Learning / SL) – обучающая выборка состоит из пар (x, y), где x – описание объекта, у – его метка, и необходимо обучить модель y=f(x), которая по описаниям получает метки. Часто такое обучение называют «обучением с учителем», но автор считает, что этот устоявшийся термин совсем неудачный, т.к. учитель (Teacher) имеет немного другой смысл в машинном обучении.

обучение с частично размеченными данными (Semi-Supervised Learning / SSL) – обучающая выборка состоит из данных с метками и без меток (последних, как правило, существенно больше), необходимо также обучить модель y=f(x), но здесь может помочь информация о том, как объекты располагаются в пространстве описаний, см. рис. 1.

обучение по неразмеченным данным (Unsupervised Learning / UL) – даны только объекты (без меток), необходимо эффективно описать, как они располагаются в пространстве описаний. Например, типичные задачи обучения по неразмеченным данным – кластеризация, понижение размерности, детектирование аномалий, оценка плотности и т.п.

pic1
Рис. 1 из работы https://arxiv.org/pdf/2002.08721.pdf

Мы пропустим описание базового вида обучения – с подкреплением (Reinforcement Learning) и сразу перейдём к описанию ставшего в последние годы популярным самообучения (Self-Supervised Learning). Здесь есть огромная неразмеченная выборка, необходимо сформировать для каждого объекта псевдо-метку (pseudo label) и решить полученную SL-задачу, но нас интересует не столько качество решения придуманной нами задачи (её называют pretext task), сколько представление (representation) объектов, которое будет выучено в ходе её решения. Это представление можно в дальнейшем использовать уже при решении любой задачи с метками (SL), которую называют последующей задачей (downstream task). Одна из главных причин самообучения – небольшой объём размеченных данных (в этом случае возникает соблазн использовать неразмеченные данные, возможно из другого домена). В отличие от обучения с частично размеченными данными в самообучении используются совершенно произвольные неразмеченные данные (не имеющие отношения к решаемой задаче).

Давайте приведём примеры самообучения, а потом опять вернёмся к определению. Современная обработка текста (NLP) где-то на 80% состоит из самообучения. Например, с помощью самообучения получаются почти все представления слов (а также текстов). Например, в классическом алгоритме word2vec берут неразмеченный (!) корпус текстов, затем сами придумывают задачу с метками (по соседним словам предсказать центральное слово или, наоборот, по центральному соседние с ним), обучают на этой задаче простую нейронную сеть, в результате получаются векторные представления слов (по сути, как веса обученной сети), которые уже используются в других, никак не связанных с предварительной, задачах. Часто такой подход называют также трансферным обучением (transfer learning). Вообще говоря, трансферное обучение более широкое понятие – когда модель, обученную для решения одной задачи, используют при решении другой. В самообучении важно, чтобы разметка в предварительной задаче (псевдо-метки) получалась автоматически (не была ручной разметкой).  Например, представления, полученные методом Cove, в котором используется кодировщик для задачи машинного перевода, будут трансферными, но не самообученными!

Вернёмся к определению самообучения и пробежимся по терминам:

Предварительная задача (pretext task) – задача с искусственно созданными метками (псевдо-метками), на которой обучается модель, чтобы выучить хорошие представления (representations) объектов.  Например, есть надежда, что в нейронной сети на предварительной задаче обучатся начальные и средние слои, их потом замораживают и обучают последние слои.

Псевдо-метки (pseudo labels) – метки, которые получаются автоматически, без ручной разметки, но обучение которым способствует формированию хороших представлений.

Последующая задача (downstream task) – задача на которой проверяют качество полученных представлений. Почти во всех экспериментах в статьях по самообучению на полученных признаковых представлениях в последующих задачах обучают простые модели: логистическую регрессию или метод ближайшего соседа. Таким образом, самообучение – это направление в глубоком обучении, которое стремится сделать глубокое обучение процедурой предварительной обработки данных, т.е. сети нужны для формирования признаков, они обучаются на дешёвой разметке больших наборов изначально неразмеченных данных, а сама задача решается простой моделью.

Дальше расскажем об истории развития самообучения. В основном, с примерами из обработки изображений. На первом этапе развития этой области экспериментировали, в основном, с постановками предварительных задач. Главная цель здесь – придумать, как автоматически проставить метки, чтобы при обучении получались хорошие представления. Например, в свёрточных нейронных сетях для обработки изображений обучались первые и средние слои, отвечающие, как известно, за детектирование рёбер, углов и каких-то абстрактных форм.

1. Предсказание контекста / Predicting (spatial) context

Выбирается случайный патч (прямоугольный участок изображения), у него есть восемь соседних патчей, см. рис. 2, выбирается один из них. Естественно, человек по паре («центральный патч», «соседний») легко определит, как расположен соседний относительно центрального. Если это научится определять нейросеть, то значит она понимает, как устроены объекты нашего реального мира (колёса у грузовика ниже кабины, а шляпа у человека выше лица и т.д.) Интуитивно кажется, что когда сеть обучается этой задаче, то её нижние слои должны научиться идеально детектировать рёбра, углы и т.п.

pic2
Рис 2 из работы [2].
[2] Doersch, A. Gupta, and A. A. Efros.   Unsupervised visual representation learning by context prediction.  In International Conference on Computer Vision (ICCV), 2015

В реализации метода есть несколько «хаков», которые мы здесь опишем, поскольку они часто применяются в самообучении. На рис. 2 видно, что патчи расположены с зазором и случайным смещением. Связано это с тем, чтобы усложнить задачу, поскольку человек может из кусочков собрать пазл совершенно не задумываясь о смысле изображённого (смотря на то, как согласуются стыки), а нам бы хотелось, чтобы нейросеть научилась не находить похожие стыки, а именно «понимать», что изображено. Другой приём – в подобных методах «сильно портят цвета», например, здесь два случайных канала забивались шумом. Связано это с законами оптики (см. хроматическая аберрация): все современные снимки сделаны с помощью фото/видео-оборудования и у них наблюдается смещения разницы средних по RGB-каналам при переходе от центра к краям (например, можно натренировать сеть, которая довольно точно будет определять, из какой части изображения вырезан патч). Чтобы сеть не использовала эту особенность при решении предварительной задачи, как раз и портят каналы.

2. Определение поворота / Predicting image rotation

Ещё одна задача, легко решаемая человеком, и метки в которой получаются автоматически – определение по изображению угла, на которое оно было повёрнуто, см. рис. 3. Берётся изображение поворачивается на случайный угол и этот угол объявляется меткой полученного изображения. Эксперименты показали, что поворачивать лучше на угол кратный 90 градусам и, таким образом, решать задачу с 4 классами. Интересно, что сеть в предварительной задаче обращает внимание на то, где находится голова у изображённого человека или животного или глаза / рот, если голова изображена крупно, т.е. придумав искусственную задачу с поворотами мы, сами того не желая, научили сеть детектировать голову! Заметим, что не со всеми данными проходит такой приём (иногда у изображений нет объективной правильной ориентации).

pic3
Рис. 3 из работы [3].

[3] Gidaris, P. Singh, and N. Komodakis. Unsupervised representation learning  by  predicting  image  rotations.   In International Conference on Learning Representations (ICLR), 2018.

3. Образец / Exemplar

Это название группы методов, в которых используются патчи с изображения. В одной из первых статей из изображений выделялись «интересные фрагменты» (не будем уточнять как), потом аугментировались. Необходимо было по аугментированному патчу определить номер изначального. Иногда так называют метод, в котором по паре патчей надо определить, взяты они из одного изображения или из разных.

pic4
Рис. 4 из работы [4].

[4] Dosovitskiy, J.  T.  Springenberg,  M.  Riedmiller,  and T. Brox  Discriminative unsupervised feature learning with convolutional neural networks. In Advances in Neural Information Processing Systems (NIPS), 2014.

4. Решение головоломки (Jigsaw)

На рис. 5 показана основная идея – берётся случайный патч с соседями, потом 9 полученных патчей перемешиваются. Человеку нетрудно восстановить порядок. От нейросети требуют того же — по упорядоченному списку патчей определить номер перестановки, которую нужно применить, чтобы правильно их отсортировать. Здесь применяются те же трюки, что и в методе 1 (ещё и независимая нормализация патчей).

pic5
Рис. 5 из работы 5.

[5] Noroozi and P. Favaro. Unsupervised learning of visual representations by solving jigsaw puzzles. In European Conference on Computer Vision (ECCV), 2016.

Есть различные обобщения описанного метода, например, в головоломку подмешивают «лишние» патчи (взятые из другого изображения).  Или, как показано на рис. 6, ставится совсем амбициозная предварительная задача: сложить обесцвеченную неполную головоломку, раскрасить её элементы, дорисовать недостающий фрагмент.

pic6
Рис. 6 из работы [6].

[6] Kim, D., Cho, D., Yoo, D., and Kweon, I. S. Learning Image Representations by Completing Damaged Jigsaw Puzzles. In WACV 2018, 2018.

5. Глубокая кластеризация (DeepCluster)

Известно, что если случайно инициализировать AlexNet и настраивать веса только последнего слоя (т.е. решать задачу фактически логистической регрессией), то качество на ImageNet-е  будет 12% (напомним, что в задаче 1000 классов), поэтому даже случайная сеть порождает неплохое признаковое пространство. В методе DeepCluster в этом пространстве делается k-means-кластеризация, номера кластеров объявляются метками и обучается сеть для полученной SL-задачи классификации, потом процедура повторяется – опять кластеризуем и делаем несколько шагов обучения. Установлено, что в таком подходе хороша перекластеризация (overclustering) – число кластеров должно быть довольно большим, например при самообучении на ImageNet – в 10 раз больше числа «объективных классов».

[7] Caron, P. Bojanowski, A. Joulin, and M. Douze. Deep clustering for unsupervised learning of visual features. European Conference on Computer Vision (ECCV), 2018.

6. Контекстные кодировщики (Context Encoder)

Из изображения удаляется патч (или даже область произвольной формы) и обучается нейросеть, которая его восстанавливает, см. рис. 8, на котором, в частности, показано, что художник неплохо справляется с этой задачей.

pic7
Рис. 7 из работы [8].

[8] Pathak, P.  Krahenbuhl,   J.  Donahue,   T.  Darrell,   and A. Efros.  Context encoders: Feature learning by inpainting. In Conference on Computer Vision and Pattern Recognition (CVPR), 2016.

7. Восстановление каналов

В качестве предварительной задачи можно выбрать раскраску изображений. Взять коллекцию изображений, каждое переводить в градации серого и по «обесцвеченному» изображению учить нейросеть получать цветное, точнее восстанавливать значения каналов a, b в кодировке Lab.

[9] Zhang, P. Isola, and A. A. Efros. Colorful image colorization. In European Conference on Computer Vision (ECCV), 2016.

В более продвинутом варианте можно обучать т.н. расщеплённый автокодировщик (Split-brain  autoencoder), который по одним каналам восстанавливает другие и наоборот.

pic8
Рис. 8 пример расщеплённого кодировщика из [10].

[10] Zhang, P.  Isola,  and  A.  A.  Efros.    Split-brain  autoencoders:  Unsupervised learning by cross-channel prediction. In Conference on Computer Vision and Pattern Recognition(CVPR), 2017.

8. Разметка из видео

Если у нас есть коллекция не изображений, а видео-роликов, то здесь гораздо больше простора для постановки предварительных задач. Например, можно брать соседние кадры и по первому пытаться определить пиксели, которые изменят своё положение на втором, см. рис. 11. Обычно на видео перемещаются объекты, причём целиком, это позволяет сети сразу учиться решению задачи сегментации без ручной разметки. На практике такая автоматическая разметка очень шумная, см. рис. 11, но даже она в итоге позволяет неплохо выучивать сеть находить на изображениях объекты.

pic9
Рис. 9 из работы [11].

[11] Pathak, R. B. Girshick, P. Dollar, T. Darrell, and B. Hariharan. Learning features  by  watching  objects  move.    In Conference  on  Computer  Vision  and  Pattern  Recognition(CVPR), 2017.

Другой интересный подход к постановке предварительной задачи предложен в работе [12]. Берём два последовательных кадра, второй обесцвечиваем, обучаем нейросеть его  раскрашивать по первому цветному и второму обесцвеченному. Причём раскраска происходит следующим образом: CNN-сеть формирует описания локаций и локация окрашивается цветом наиболее похожей раскрашенной локации с первого изображения, т.е. сеть фактически выучивается сопоставлять пиксели на двух последовательных кадрах.

[12] Carl Vondrick, Abhinav Shrivastava, Alireza Fathi, Sergio Guadarrama, Kevin Murphy «Tracking Emerges by Colorizing Videos»

9. Подсчёт примитивов (counting visual primitives)

Допустим, мы считаем что-то на изображениях, например, глаза. Если разбить изображение на части, то сумма числа глаз на частях равна числу глаз на всём изображении, а если взять случайное изображение, то, скорее всего, на нём будет другое число глаз. Эти идеи заложены в архитектуру сети, которая изображена на рис. 10, именно её обучают в предварительной задаче.

pic10
Рис. 10 из работы [13].

[13] Noroozi, H. Pirsiavash, and P.  Favaro.   Representation learning by learning to count.   In International Conferenceon Computer Vision (ICCV), 2017.

10. Ансамбли в самообучении

В работе [14] решаются сразу несколько предварительных задач, точнее обучается одна нейронная сеть с несколькими выходными головками, каждая из которых решает одну из предварительных задач. Как и в других областях машинного обучения ансамбли оказываются лучше своих отдельных компонент.

[14] Carl Doersch, Andrew Zisserman «Multi-task Self-Supervised Visual Learning»

Современные тренды в самообучении

В последние годы гораздо меньше работ по выбору предварительных задач, поскольку основным направлением в самообучении стало сравнительное обучение (Contrastive Learning). На вход нейросети подаётся пара объектов и она определяет, похожи они или нет. В качестве объекта здесь подается аугментированный патч из изображения, похожи должны быть патчи из одного изображения, а не похожи – из разных. В качестве оптимизируемых функций используется взаимная информация или связанные с ней функции, например, её нижняя оценка InfoNCE:

pic11

здесь x – выбранный патч, называемый якорным, x+ – похожий на него, xj – непохожий (их N-1 штука), f( ) – кодировщик объекта (представление его в виде вещественного вектора). Такая функция ошибки почти превращается в Triplet Loss, если использовать только 1 негативный пример.

Под такую схему попадают современные методы:

Invariant Information Clustering (IIC) – оптимизируется взаимная информация, используется сеть, осуществляющая мягкую (soft) классификацию.

[15] Ji, J.  F.  Henriques,  and  A.  Vedaldi.   Invariant information clustering for unsupervised image classification and segmentation.  In Proceed-ings  of  the  IEEE  International  Conference  onComputer Vision, pages 9865–9874, 2019.

Deep InfoMax (DIM) – оптимизируется MI (может быть реализовано разными способами, например через InfoNCE) между входом нейросети (подаём изображение) и выучиваемым высоко-уровневым представлением. Чтобы представление удовлетворяло определённым статистическим свойствам используется adversarial learning. Кроме того, получаются представления отдельных патчей изображения (они образуют сетку N×N), которые конкатенируются с глобальным представлением для оптимизации InfoNCE.

[16] D. Hjelm, A. Fedorov, S. Lavoie-Marchildon,K. Grewal, P. Bachman, A. Trischler, and Y. Bengio. Learning deep representations by mutual information estimation and maximization. In International Conference on Learning Representations, 2019.

Augmented Multiscale Deep InfoMax (AMDIM)

Продвинутая реализация предыдущего подхода.

[17] Bachman, R.  D.  Hjelm,  and  W.  Buchwalter. Learning representations by maximizing mutualinformation across views. In Advances in Neural Information  Processing  Systems,  p. 15509–15519, 2019.

Contrastive Predictive Coding (CPC)

Этот подход обобщается на различные форматы данных, на рис. 11 показано его применение для звуковых данных. Мы обучаем кодировщик, который аудио-фрагмент превращает в описание zt, а потом описание подаём в рекуррентную сеть, которая предсказывает описания следующих фрагментов. Опять же здесь оптимизируется InfoNCE-loss – прогноз должен быть похож на продолжение и не похож на случайно взятые аудио-фрагменты. Аналогично, CPC применяется к изображениям, которые разбиваются на сетку из 49 патчей (размера 7×7) по описанию верхней части изображения мы предсказываем описания нижней. Также CPC применяется для текстовых данных и в обучении с подкреплением (там пытаемся предсказать описание состояния среды, при этом CPC является дополнительным штрафом к основному).

pic12
Рис. 11 из работы [18].

[18] v. d.  Oord,  Y.  Li,  and  O.  Vinyals. Representation learning with contrastive predictive coding

Есть последняя реализация метода из работы [18b], в которой проделано много экспериментов (с архитектурами, способами нормализации и т.п.), в итоге качество самообучения превзошло качество обычного обучения по размеченным данным на ImageNet (96.5% Top-5 точности против 95.2%).

[18b] Olivier J. Henaff, Ali Razavi, Carl Doersch, S. M. Ali Eslami, Aaron van den Oord «Data-Efficient Image Recognition with Contrastive Predictive Coding»

Momentum Contrast (MoCo)

В сравнительном обучении чем больше негативных примеров, тем лучше. Обычно это число ограничивается размером батча. В методе MoCo поддерживается динамическая очередь отрицательных примеров (когда поступает очередной батч примеров, очень старый батч удаляется из очереди). Одна из фишек метода – способ обновления параметров кодировщиков (через большую очередь пропускать градиенты слишком долго).

[19] Kaiming He, Haoqi Fan, Yuxin Wu, Saining Xie, Ross Girshick «Momentum Contrast for Unsupervised Visual Representation Learning»

Есть более свежая версия алгоритма, которая опубликована недавно, она позаимствовала некоторые фишки из следующего подхода.

[20] Xinlei Chen, Haoqi Fan, Ross Girshick, Kaiming He «Improved Baselines with Momentum Contrastive Learning»

SimCLR: A Simple Framework for Contrastive Learning of Visual Representations

Этот метод опубликован несколько месяцев назад, на самом деле, это просто хорошая библиотека, в которой всё правильно реализовано: берётся стандартная схема сравнительного обучения, кодировщик на базе ResNet, представление пропускается ещё через двуслойную сеть для получения векторов над которыми уже измеряется Contrastive loss (именно в наличии такой сети состоит основная новизна). Проведены эксперименты с разными аугментациями. Из особенностей – эффективная реализация, например берём N изображений, из каждого выделяем 2 аугментированных патча, каждый может выступить как якорный, у него будет 1 позитивный и 2N-2 негативных.

[21] Ting Chen, Simon Kornblith, Mohammad Norouzi, Geoffrey Hinton «A Simple Framework for Contrastive Learning of Visual Representations»

Практика применения

На тему самообучения я недавно делал доклад на финальном мероприятии онлайн-хакатона, который был посвящён задаче из области Финтеха. Поэтому в докладе я привёл несколько иллюстраций, когда за последние годы самообучение успешно применялось в бизнес-проектах финансовых организаций.

Во-первых, при кодировании категориальных признаков, а они часты в описании клиентов и операций (MCC-коды транзакций, профессия, номер филиала и т.п.), успешно применяется техника аналогичная word2vec.

На транзакциях здорово применять восстановление масок, аналогично тому, как это делается в BERT, архитектура Трансформера здесь тоже подходит (только применять надо не в лоб, например позицианальное кодирование токенов для транзакций более хитрое, чем для слов в предложении, ведь у каждой транзакции есть время).

На транзакциях хорошо работает самообучение рекуррентной сети с предварительной задачей «правильный ли порядок транзакций дан на вход».

Ещё один приём, который работает как раз в финансовых данных, использование «плохих» данных для самообучения. Дело в том, что распределение значений признаков описаний клиентов сильно меняется со временем, поэтому обучаться нельзя на всех данных – они распределены по другому, нежели данные, на которых алгоритму придётся работать. Выборку для обучения специально подбирают из массива всех имеющихся данных, а вот данные, которые не попали в обучение могут пригодиться для самообучения.

Очень классный приём самообучения по данным видеокамер в офисах – решать для них задачу с разметкой, задаваемой сопутствующими записями звука. Идею можно посмотреть здесь. После такого самообучения задачи типа детектировать нештатную ситуацию, большие очереди или скандалы решаются по небольшой размеченной выборке.

Тут описаны очень неплохие приёмы для самообучения в бизнес-кейсах, например, последний может сэкономить много времени и позволить решить задачу с небольшой разметкой, но я не описывал их подробно, а в самообучении очень много тонкостей правильной реализации (например, выше мы говорили о приёмах типа зашумления RGB-каналов).

Ссылки

Следить за прогрессом в этой области можно на paperswithcode (но только для классификации изображений).

Хорошие обзоры

Коллекции статей по этой теме:

Привожу также видео моего небольшого доклада по самообучению (к сожалению, было мало времени, чтобы рассказать всё).

 

 

 

 

 

 

 

 

 

 

Самообучение (Self-Supervision): 10 комментариев

  1. 👏 супер
    А где можно подробнее про финансовые транзакции почитать/посмотреть?

      • Да, именно поэтому интересно посмотреть/почитать все, что вы видели из материалов, доступных в открытом доступе.

  2. «Прочти во всех экспериментах в статьях по самообучению на полученных признаковых представлениях в последующих задачах обучают простые модели: логистическую регрессию или метод ближайшего соседа.»
    опечатка в первом слове

  3. Александр, спасибо за интересную статью!

    Экспериментировали ли Вы с самообучением на табличных данных (строка таблицы = наблюдение, транзакции не отношу к этому случаю)?

    Что думаете про перспективы применения самообучения когда размеченные и не размеченные данные имеют разные распределения?

    • Здравствуйте!

      Да, это своеобразная форма стекинга, когда, например, вы предсказываете значения каждого признака по остальным, а потом эти предсказания добавляете к основным признакам. Есть и более интересные формы самообучения на табличных данных, с частичным использованием целевого признака.

      Проблема разных распределений это не проблема конкретно самообучения, т.е. его можно применять, но смещение распределений Вам нужно будет побеждать стандартными средствами.

  4. Спасибо за интересную статью! Хотел спросить нет ли материалов/кейсов по самообучению на табличных данных? Я видел как делали Embeddings для категорий, возможно можно ещё как-то это реализовать?

    • Здравствуйте! Есть вариант с кодированием категорий. Есть со специальной формой стекинга, когда мы обучаем алгоритмы, восстанавливающие признаки по другим, и добавляем ответы этих алгоритмов как метапризнаки. Всё это, как правило, очень «бедные формы» самообучения. Я не видел материалов, где бы это было собрано.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s