Понимание статьи «Потеря круга: единая перспектива оптимизации парного сходства»

Вступление

Когда я читал статью о машинном обучении о новой функции потерь, Circle Loss, мне было трудно ее понять. Поиск более легкого объяснения в Medium также не дал мне результата ☹️, поскольку это недавняя статья, вышедшая только в этом месяце, июнь 2020 года. Поэтому я решил написать эту статью, чтобы предоставить более легкое объяснение другим людям, а также задокументировать мое обучение.

Таблица содержания

  1. Предпосылки
  2. Сиамская сеть
  3. Тройная потеря
  4. Потеря круга

Предпосылки

  1. Основы машинного обучения
  2. Сверточные нейронные сети (CNN)

Чтобы понять Circle Loss, было бы чрезвычайно полезно предыдущее знание нейронных сетей, CNN, Siamese Network и Triplet Loss. В этой статье я кратко объясню сиамскую сеть и тройную потерю, но не стесняйтесь читать больше о нейронных сетях и CNN в других статьях, поскольку я не буду здесь освещать эти темы.

Сиамская сеть

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

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

Сиамская сеть состоит из 2 идентичных сверточных сетей, отсюда и название «Сиамская», что означает однояйцевые близнецы. Идея состоит в том, что вместо того, чтобы давать одно изображение в качестве входных данных и пытаться предсказать класс, вы дадите сети пару изображений в качестве входных данных, обработайте их через ConvNets, которые затем предоставят вам карты функций или встраивание каждого изображения. Затем мы будем использовать функцию потерь, которая вычисляет разницу между этими двумя функциями, чтобы измерить оценку сходства. Контрастные потери - это один из примеров потерь, которые вычисляют косинусные расстояния между двумя вложениями. Наконец, мы используем сигмовидную функцию для преобразования показателя сходства в значение от 0 до 1.

Оценка сходства позволит вам определить, похожи ли два изображения или нет. 0 означает, что это другое изображение, а 1 означает похожее изображение. Это, в свою очередь, решает предыдущую проблему, так как вам изначально нужно только одно изображение для каждого класса, которое будет использоваться в качестве эталонного изображения.

Чтобы узнать больше и глубже понять Siamese Network, вы можете прочитать другую статью Харшала Ламбы здесь.



Тройная потеря

На протяжении многих лет Google представил функцию Triplet Loss для распознавания лиц в статье FaceNet: унифицированное встраивание для распознавания лиц и кластеризации.

В Triplet Loss во время обучения вместо двух входов будет использоваться три входа: якорь, положительный и отрицательный. Якорь будет эталонным входом, который может быть любым входом, положительный будет входом, который имеет тот же класс, что и якорь, а отрицательный должен быть введен с другим классом, чем якорь. Например, в случае распознавания лиц входные данные могут быть такими, как на изображении ниже, с привязкой и положительным изображением одного и того же человека и негативом, показывающим другого человека.

Затем мы вычислим вложение каждого изображения, передав их в один и тот же CNN (с одинаковыми весами). Затем мы передадим эти три вложения в функцию Triplet Loss. Ниже представлена ​​визуализация вложений.

Идея функции Triplet Loss состоит в том, что мы увеличиваем или увеличиваем расстояние между якорем и негативом, а также уменьшаем или минимизируем расстояние между якорем и позитивным вложением.

Для этого мы вычислим разницу между якорем и положительным элементом, используя некоторую функцию расстояния d, мы обозначим это как d (a, p), который в идеале должен быть низким, а также вычислить разницу между привязкой и отрицанием, мы обозначим это как d (a, n) который в идеале должен быть высоким. Следовательно, чтобы получить правильный прогноз, мы всегда хотим, чтобы значение d (a, p) было меньше, чем d (a, n) . Математически мы также можем обозначить это как, d (a, p) - d (a, n) ‹0. Однако, поскольку мы не хотим, чтобы наши убытки были отрицательными, мы сделаем их нулевыми, если они будут отрицательными. Следовательно, мы можем определить функцию потерь как max (d (a, p) - d (a, n), 0)

Однако проблема с предыдущим уравнением заключается в том, что, когда положительный или отрицательный элемент имеют одинаковое расстояние с якорем или когда положительный элемент лишь немного ближе к якору, чем отрицательный, потери будут равны нулю, и будет никакой коррекции, даже если он все равно должен притягивать позитив еще ближе и отталкивать негатив еще дальше от якоря. Чтобы решить эту проблему, мы просто добавим некоторую константу к d (a, p) - d (a, n) и назовем эту константу маржей. Следовательно, мы можем наконец определить функцию потерь триплета, как показано ниже.

Используя формулу, мы можем разделить тройки на 3 типа:

  • Простые тройки: тройки, потери которых равны 0, поскольку d (a, p) + margin ‹d (a, n)
  • Жесткие тройки: тройки, в которых отрицательное значение ближе к привязке, чем положительное, то есть d (a, n) ‹d (a, p) d (a, n)‹ d (a, p).
  • Полужесткие тройки: тройки, в которых отрицательный элемент не ближе к точке привязки, чем положительный, но все же имеют положительную потерю: d (a, p) ‹d (a, n)‹ d (a , p) + маржа

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

Чтобы глубже понять Triplet Loss, я рекомендую прочитать объяснение Оливера Моиндро здесь.

Подождите, а зачем нам использовать тройную потерю? Вместо контрастных потерь в предыдущей сиамской сети (где вы просто вычисляете расстояние / разницу между привязкой и другим изображением). В Contrastive loss вы только обновляете веса, чтобы минимизировать сходство другого класса или максимизировать сходство того же класса. С другой стороны, при использовании Triplet Loss модель будет одновременно подтягивать положительный вход к привязке, а также отталкивать негативное изображение от привязки.

Потеря круга

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

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

Sp - это оценка сходства внутри класса, а Sn - оценка сходства между классами. Обратите внимание, что показатель сходства обратно пропорционален расстоянию.

Однако это не очень оптимально. Когда положительное уже достаточно близко к якорю, мы хотели бы больше сосредоточиться на отталкивании отрицательного, а когда и положительное, и отрицательное уже далеко, мы хотим больше сосредоточиться на притяжении положительного ближе к якору. Это то, что сделала Circle Loss.

Circle Loss обеспечивает более гибкую оптимизацию, давая различную силу штрафа для каждой оценки сходства, Sn и Sp. Следовательно, мы обобщаем (Sn - Sp) на (αn * Sn - αp * Sp), где αn и αp - независимые весовые коэффициенты, позволяющие sn и sp учиться с разной скоростью

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

В этом примере и T, и T ’имеют одинаковую маржу, другие потери, такие как тройной убыток, сочтут это неоднозначным. Однако Circle Loss предпочел бы T и создал определенную цель для конвергенции. Граница решения также изменилась с sp - sn = m на (αnsn - αpsp) = m и, следовательно, создала форму круга и получила название Circle Loss.

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

Затем, учитывая метки уровня класса, это приведет к потере классификации.

Тогда, учитывая парную метку, она выродится в проигрыш Triplet.

Наконец, предлагаемая потеря круга будет ниже.

Где

Обратите внимание, что у нас есть 5 гиперпараметров: Op, On, γ, ∆p, ∆n. Однако мы уменьшаем гиперпараметры, полагая Op = 1 + m, On = −m, ∆p = 1 − m и ∆n = m. Следовательно, нам нужно только установить масштабный коэффициент γ и поле m.

Результат

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

Для меток уровня класса потеря круга оценивалась в задачах распознавания лиц и повторной идентификации человека.

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

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

Заключение

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

P.S: Я закончил писать еще одну статью об AM-Softmax Loss, когда писал ее и пытался понять Circle Loss. Проверьте это!



Ссылка

[1] Сунь, Ю., Ченг, К., Чжан, Ю., Чжан, К., Чжэн, Л., Ван, З., и Вэй, Ю. (2020). Потеря круга: единая перспектива оптимизации парного сходства. В Proceedings of the IEEE / CVF Conference on Computer Vision and Pattern Recognition (pp. 6398–6407).

[2] https://towardsdatascience.com/one-shot-learning-with-siamese-networks-using-keras-17f34e75bb3d

[3] https://omoindrot.github.io/triplet-loss