Простое объяснение SimCLR в 1 предложении, 1 минуте и 5 минутах

SimCLR расшифровывается как Простаяплатформа для Cконтрастного Lполучения V. сильные>исуальные Rпредставления. Здесь нужно выполнить несколько шагов, а в оригинальной статье (в числе прочих авторов Тин Чен и Джеффри Хинтон) используются сложные слова, так что это может показаться пугающим, но как только вы понять это концепция довольно проста и интуитивно понятна. Итак, что такое SimCLR?

Резюме одного предложения

Если бы мне нужно было описать SimCLR одним предложением, я бы сказал что-то вроде:

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

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

Одноминутное резюме

Теперь я попытаюсь объяснить SimCLR так, как я бы, например, объяснил коллеге, возможно, примерно за одну минуту.

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

Платформа SimCLR состоит из четырех основных компонентов:

  1. Модуль увеличения данных, который случайным образом преобразует заданное изображение двумя способами, создавая два коррелированных вида одного и того же примера.
  2. Базовый кодировщик, такой как архитектура ResNet-50 (хотя вы можете использовать практически любой кодировщик), для извлечения векторов представления из примеров дополненных данных. Это модель, веса которой вы тренируете для последующей задачи.
  3. Проекционная головка, которая представляет собой MLP (с одним скрытым слоем), который просто уменьшает векторы представления перед функцией потерь.
  4. Функция контрастных потерь, которая является низкой, если два коррелированных вектора (из одного и того же исходного изображения) похожи друг на друга И отличаются от векторов из набора «отрицательных» примеров (все остальные примеров в мини-пакете, а не из одного и того же исходного примера) и высокий в противном случае.

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

Затем контрастные потери рассчитываются для каждой «положительной» пары векторов (из одного и того же входного изображения) путем сравнения их с одним «отрицательным» вектором представления из всех остальных изображений в мини-пакете. Общая потеря — это средняя потеря по всем положительным парам в мини-пакете.

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

Пятиминутное резюме

А теперь я расскажу подробнее. Представьте, если бы я разговаривал с кем-то, и у них было бы больше вопросов о том, что я объяснял.

Что такое самоконтролируемое обучение?

Позвольте мне рассмотреть сценарий, чтобы попытаться объяснить это.

Допустим, вы хотите обучить модель классифицировать изображения — например, классифицировать медицинские изображения как содержащие рак, так и нет. Если вы можете тренироваться только с использованием примеров изображений, которые уже были аннотированы или помечены человеком-врачом (как раковые или нераковые), то вы занимаетесь обучением под наблюдением, правильно ? Однако вы ограничены количеством помеченных примеров изображений. Если вы обучаете первоначальную модель, используя только обучение с учителем, и понимаете, что она не работает должным образом, вы можете решить, что вам нужно получить больше помеченных изображений для обучения. К сожалению, заставить опытного врача аннотировать достаточное количество изображений, чтобы ваша модель работала лучше, требуется очень много времени и денег.

Что вы можете сделать? Можете ли вы сделать что-то помимо контролируемого обучения?

Да, ты можешь! Здесь на помощь приходит обучение под самоконтролем.

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

Как правило, стратегии компьютерного зрения, в которых используется обучение с самоконтролем, включают выполнение двух задач: предтекстовой задачи и последующей задачи.

Нижестоящая задача — это реальная задача, которая вас волнует, например, классификация или обнаружение.

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

В сценариях с самоконтролем «метки» — это не те же ярлыки, что и в контролируемом обучении. Метки в обучении с учителем исходят от комментатора-человека, например врача, который просматривает кучу медицинских изображений и помечает каждое из них как наличие рака, так и отсутствие.

При обучении с самоконтролем «метки» присваиваются данным без какого-либо вмешательства человека. Например, в SimCLR у вас есть изображения, которые представляют собой дополненные представления друг друга из одного и того же исходного изображения, а также дополненные изображения, полученные из других исходных изображений. Таким образом, при сравнении двух дополненных изображений «метки» могут быть «из одного и того же исходного изображения» или «не из одного и того же исходного изображения».

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

И лучше всего то, что вам не нужны данные, аннотированные человеком, размечающим для задач с самоконтролем, таких как SimCLR — вы можете использовать полностью немаркированные наборы данных, что расширяет объем данных, которые вы можете использовать для обучения своей модели!

Итак, что такое самоконтроль в отношении SimCLR? В заключение:

SimCLR — это самоконтролируемая стратегия использования немаркированных данных для обучения вашей модели созданию хороших визуальных представлений перед реальной последующей задачей.

Сведения о модуле расширения данных

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

  • случайная обрезка (и изменение размера до исходного размера)
  • случайное искажение цвета
  • случайное размытие по Гауссу

Авторы выбрали эти три, перепробовав множество различных аугментаций, и нашли эту комбинацию лучшей.

Сведения о базовом кодировщике

Базовый кодировщик извлекает векторы представления (также иногда называемые векторами признаков) из дополненных изображений. Если вы когда-нибудь читали/слышали, как кто-то говорил о «преобразовании изображения в пространство более низкого измерения», то это то, что делает этот базовый кодировщик.

Проще говоря:

  • Вход: одно из дополненных изображений из предыдущего шага (например, входное изображение может иметь размер 256 * 256 пикселей и иметь 3 цветовых канала, всего 256 * 256 * 3 = 196 608 чисел на изображение)
  • Выход: вектор, который каким-то образом представляет входное изображение, но с использованием меньшего количества чисел (например, вектор выходных признаков ResNet-50 состоит из 2048 чисел).

В идеале с SimCLR выходные векторы для похожих изображений должны быть похожими, а выходные векторы для непохожих изображений должны быть >непохожие.

Насколько хорошо Base Encoder выполняет это, зависит от того, насколько хорошо обучены веса — по сути, в этом весь смысл SimCLR (и обучения моделей глубокого обучения в целом).

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

В исходной статье используется широко используемая архитектура ResNet-50 (без последнего слоя) для базового кодировщика, но отмечается, что можно использовать практически любую модель, которая берет изображение и выдает выходной вектор.

Детали проекционной головки

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

  • Вход: вектор представления, который является выходом базового кодировщика (длина 2048).
  • Выход: другой вектор представления (длина 128).

После обучения с SimCLR вы удаляете проекционную головку и используете базовый кодировщик только для последующей задачи.

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

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

Детали функции контрастных потерь

Формула(ы) для функции конструктивных потерь выглядит следующим образом:

Я знаю, что это выглядит очень сложно, но на самом деле главное понять следующее:

Потери низки, если два коррелированных вектора (из одного примера) похожи друг на друга И не похожи на векторы из набора "отрицательных" примеры (все остальные примеры в мини-пакете, а не из того же исходного примера).

В противном случае потери большие.

В любом случае, я все равно попытаюсь объяснить подробнее.

Шаг 1:

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

Шаг 2:

Следующим шагом является определение фактической функции контрастных потерь. Чтобы быть точным, функция контрастных потерь в SimCLR называется NT-Xent (нормализованная кросс-энтропийная потеря в температурном масштабе). Формула следующая:

Числитель (верхняя часть дроби) является мерой того, насколько похожи сравниваемые текущие векторы. Если они взяты из одного и того же исходного изображения, мы хотим, чтобы сходство было высоким (максимальное значение сходства равно 1,0).

Знаменатель (нижняя часть дроби) представляет собой сумму сходства других векторов. Обычно это больше числителя, поэтому дробь меньше 1,0. Таким образом, чтобы сделать дробь выше (ближе к 1,0), вы хотите, чтобы значение знаменателя было низким. Но это сумма множества значений, так как же она может быть низкой? Вы хотите, чтобы все эти значения были низкими.

В лучшем случае, когда i и j взяты из одного и того же исходного изображения (что всегда должно быть из-за третьего уравнения), у вас есть сходство 1,0 и i по сравнению с любым другим вектором имеет сходство 0,0. Таким образом, общая доля будет равна 1,0 — это максимальное число, которое может быть, и, поскольку мы берем отрицательный журнал, это наименьшая потеря, которую вы можете получить (0,0).

Шаг 3.

Третий шаг – фактически подсчитать и суммировать все потери.

Как я упоминал ранее, мы рассчитываем потери только для случаев, когда i и j (во втором уравнении) взяты из одного и того же изображения (поскольку ( 2k)th и (2k-1)th — два соответствующих вектора представления одного и того же исходного изображения). И мы делаем это для всех исходных изображений и суммируем все потери, чтобы получить общие потери.

Вот и все! Я надеюсь, что все это поможет кому-то там!