В последнее время по нескольким ключевым словам (Небольшой набор данных, неконтролируемый полуконтролируемый, сегментация изображения, модель SOTA), мы видели такую концепцию,Сиамская сеть, поэтому сегодня у меня есть время просмотреть соответствующие классические статьи и сообщения в блогах, а затем привести простой пример, чтобы укрепить свое понимание.
так этоВведение в двойную сеть, я решил разделить его на две части, первая часть посвящена теории модели, базовым знаниям и уникальной функции потерь двойной сети; следующая часть объясняет, как использовать код для переподключения простая двойная сеть.
1 Происхождение имени
Псевдоним сети близнецов будет умирать Siamese Net, а Siam — это название древнего Таиланда, так что Siamese — это на самом деле древнее название «тайского народа». Почему сиамский теперь означает «близнец» и «сиамский» на английском языке? Это происходит из аллюзии:
Пара сиамских близнецов родилась в Таиланде в 19 веке. Медицинские технологии того времени не могли разделить их двоих, поэтому двое упорно жили всю жизнь. Они были обнаружены британскими бизнесменами в 1829 году, поступили в цирк и выступили по всему миру.В 1839 году они посетили Северную Каролину в Соединенных Штатах, а позже стали столпами «Цирка Линлин» и, наконец, стали американскими гражданами. 13 апреля 1843 года он женился на двух британских сестрах, у Эн родилось 10 детей, а у Чанг — 12. Когда сестры ссорились, братья по очереди жили в доме каждой жены в течение трех дней. Эн умер от болезни легких в 1874 году, вскоре после этого умер еще один человек, оба скончались в возрасте 63 лет. Печень этих двоих до сих пор хранится в Музее Мэтта в Филадельфии. С тех пор «сиамские близнецы» стали синонимом сиамских близнецов, и из-за этих близнецов мир обратил внимание на это особое заболевание.
2 Структура модели
Эта картина имеет следующие моменты для понимания:
- Среди них Network1 и Network2, в профессиональном планеобщие права, грубо говоря, эти две сети на самом деле являются одной сетью, просто постройте сеть в коде;
- Для общих задач каждая выборка получает предварительное значение модели через модель, а затем предварительное значение и истинность основания используются для вычисления функции потерь, а затем получается градиент;Эта близнецовая сеть меняет эту структуру.Предполагая, что это задача классификации изображений, я ввожу изображение A в модель, чтобы получить результат pred1, а затем я ввожу изображение B в модель, чтобы получить другой вывод pred2, а затем я эту функцию потерь рассчитывается между pred1 и pred2.В общем случае модель запускается один раз и дает убыток, но в сиамской сети модель должна запускаться дважды, чтобы получить убыток.
- Я лично считаю, что общая задача состоит в измерении абсолютного расстояния, расстояния от образца до этикетки, но сиамская сеть измеряет расстояние от образца до образца.
2.1 Цель сиамской сети
Сиамская сеть измеряет взаимосвязь между двумя входными данными, то есть, похожи ли две выборки или нет.
Есть такая задача.На NIPS в 1993 году была опубликована статья "Проверка подписи с использованием 'сиамской' нейронной сети с временной задержкой" для проверки подписи на чеках США.Убедитесь, что подпись на чеке соответствует подписи, зарезервированной банком. В то время для проверки в работе использовалась сверточная сеть... Я в то время еще не родился.
После этого, в 2010 году, Хинтон опубликовал «Выпрямленные линейные единицы, улучшающие ограниченные машины Больцмана» на ICML, который использовался для проверки лица, и эффект был очень хорошим. На входе две грани, на выходеsame or different.
Вполне возможно, что сиамская сеть может выполнять задачи классификации.На мой взгляд, двойная сеть - это не сетевая структура, не сетевая структура, как реснет, а сетевая структура.Я могу думать о реснете как о магистральной сети двойной сети..
Поскольку хребтом сети-близнеца (назовем ее так, должно быть понятно) может быть CNN, то она может быть и LSTM, так чтоАнализ подобия семантики слов может быть достигнут.
Раньше на Kaggle проводилось соревнование пар вопросов. Это было соревнование, чтобы определить, задают ли два вопроса один и тот же вопрос. Решением TOP1 была сиамская сеть, структура этой двойной сети.
Позже, кажется, сеть на основе сиамскихалгоритм визуального слежения, я еще не понял этого, я взгляну на эту бумагу, если у меня будет возможность в будущем. «Полностью сверточные сиамские сети для отслеживания объектов». Сначала выкопайте яму.
2.2 Псевдосиамская сеть
Проблема в том, что у близнецовой сети вроде две сети, а на самом деле система разделяемого питания - это одна сеть. Предположим, мы действительно получим для него две сети, тогда одна может быть LSTM, а одна CNN уже может добиться сходства сравнения разных модальностей ?
Да, это называется псевдо-сиамская сеть, псевдо-близнецовая сеть.Один ввод — это текст, другой — изображение, чтобы определить, является ли текстовое описание содержанием изображения; один — короткий заголовок, другой — длинная статья, чтобы определить, является ли содержание статьи заголовком.. (Спаситель старшеклассников-композиторов, которые круглый год были не по теме. В будущем я скажу учителю, что этот алгоритм говорит, что моя статья не по теме. Вы хотите перестать читать? Учитель убьет меня)
Однако коды этой и следующей статей основаны на сиамской сети, а магистраль также расширена за счет сверточных сетей и изображений CNN.
2.3 Тройняшки
Поскольку есть сеть близнецов, конечно, есть и тройки, называемые тройной сетью «Глубокое метрическое обучение с использованием тройной сети». Говорят, что эффект лучше, чем у сиамской сети.Не знаю, бывают ли четверняшки и пятерняшки.
3 Функция потерь
В задаче классификации обычно используется softmax плюс перекрестная энтропия, но некоторые люди предположили, что модель, обученная этим методом, плохо работает в «межклассовой» дискриминации и не будет работать сразу, если используется атака состязательной выборки.Позже я объясню атаку состязательного образца, когда у меня будет время, а затем выкопаю яму.. Проще говоря, если предположить, что это распознавание лиц, то каждый человек является категорией, затем вы позволяете модели выполнять задачу из тысяч категорий, и когда в каждой категории очень мало данных, вы почувствуете это, когда будете думать об этом.Сложность дрессировки.
Для такой задачи в сиамской сети есть две относительно классические функции потерь:
- Contrastive Loss
- Triplte Loss
3.1 Contrastive Loss
- Предлагаемая статья: «Уменьшение размерности путем изучения инвариантного отображения».
Теперь мы знаем:
- Рисунок 1. После того, как модель получает pred1
- Рисунок 2 После того, как модель получает pred2
- Убыток, рассчитанный по pred1 и pred2
В работе приводится такая формула расчета:
Прежде всего, pred1 и pred2, полученные моделью, являются векторами Процесс эквивалентен извлечению признаков изображения через CNN, а затем получению неявного вектора, который является ощущением кодировщика.
Затем вычислите евклидово расстояние этих двух векторов, это расстояние (если модель обучена правильно) может отражать корреляцию между двумя входными изображениями. Вводим каждый раз по две картинки, нужно определить заранееНезависимо от того, относятся ли эти два изображения к одному типу или к разным, это похоже на метку, которая представляет собой Y в приведенной выше формуле. Если это класс, то Y равно 0, если нет, то Y=1
Подобно бинарной функции кросс-энтропийных потерь, нам нужно обратить внимание на:
- Когда Y=0, потери составляют:
- Когда Y=1, потери составляют:.
- в газетеявляется константой, по умолчанию 0,5 в документе
- я означает степень В статье и в обычно используемых контрастных потерях по умолчанию i = 2, что является квадратом евклидова расстояния.
- Для категории 1 (другой категории) мы, естественно, надеемся, что чем больше евклидово расстояние между pred1 и pred2, тем лучше. Так насколько это велико? Функция потерь движется в небольшом направлении, так что же нужно делать? Добавьте запас как максимальное расстояние. Если расстояние между pred1 и pred2 больше, чем запас, то расстояние между двумя выборками считается достаточно большим, а потеря считается равной 0. Итак, способ записи:.
- Я понимаю W на приведенном выше рисунке как вес нейронной сети, тогда, указывая на импортируемое исходное изображение.
Таким образом, функция потерь становится такой:
Подводя итог, следует отметить, что для двух разных картинок необходимо установить запас, и тогда расчетный проигрыш будет меньше запаса, а проигрыш больше запаса равен 0.
3.2 Contrastive Loss pytorch
# Custom Contrastive Loss
class ContrastiveLoss(torch.nn.Module):
"""
Contrastive loss function.
Based on: http://yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf
"""
def __init__(self, margin=2.0):
super(ContrastiveLoss, self).__init__()
self.margin = margin
def forward(self, output1, output2, label):
euclidean_distance = F.pairwise_distance(output1, output2)
loss_contrastive = torch.mean((1-label) * torch.pow(euclidean_distance, 2) + # calmp夹断用法
(label) * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0.0), 2))
return loss_contrastive
Единственное, о чем нужно говорить, может бытьtorch.nn.functional.pariwise_distance
,
Это для вычисления евклидова расстояния соответствующего элемента, например:
import torch
import torch.nn.functional as F
a = torch.Tensor([[1,2],[3,4]])
b = torch.Tensor([[10,20],[30,40]])
F.pairwise_distance(a,b)
Результат:
Затем посмотрите, является ли это число евклидовым расстоянием:
нет проблем
3.3 Triplte Loss
- Предлагаемый документ: «FaceNet: унифицированное встраивание для распознавания лиц и кластеризации».
В этой статье предлагается FactNet, а затем используется Triple Loss. Triplet Loss — это тройная потеря, мы расскажем о ней подробнее.
- Определение Triplet Loss: Минимизируйте расстояние между якорями и положительными образцами с одинаковыми идентификаторами и минимизируйте расстояние между якорями и отрицательными образцами с разными идентификаторами.На самом деле это должна быть функция потерь сети триплетов, вводящая три образца одновременно, изображение, затем изображение той же категории и другое изображение.
- Цель Triplet Loss: Цель Triplet Loss состоит в том, чтобы сделать признаки одной и той же метки как можно более близкими в пространственном положении, в то время как признаки разных меток находятся как можно дальше в пространственном положении, и при этом время, чтобы предотвратить агрегирование признаков выборок в очень маленьком пространстве.Для двух положительных примеров и одного отрицательного примера одного и того же класса отрицательный пример должен быть по крайней мере на запас дальше, чем положительный пример. Как показано ниже:
Как в этом случае построить функцию потерь? Зная, чего мы хотим:
- Пусть евклидово расстояние векторов, полученных якорем и положительным, будет как можно меньше;
- Пусть евклидово расстояние вектора, полученного с помощью якоря и отрицания, будет как можно больше;
Поэтому ожидайте, что следующая формула будет выполняться:
- Проще говоря, расстояние между якорем и позитивом меньше, чем расстояние между якорем и негативом, а зазор должен быть как минимум больше.Личное мнение состоит в том, что T здесь представляет собой набор троек. Для набора данных часто можно построить много троек, поэтому я лично считаю, что эта задача обычно используется в задачах со многими категориями и небольшим объемом данных, иначе количество троек резко возрастет.
3.4 Triplte Loss keras
Вот код тройной потери Кераса
def triplet_loss(y_true, y_pred):
"""
Triplet Loss的损失函数
"""
anc, pos, neg = y_pred[:, 0:128], y_pred[:, 128:256], y_pred[:, 256:]
# 欧式距离
pos_dist = K.sum(K.square(anc - pos), axis=-1, keepdims=True)
neg_dist = K.sum(K.square(anc - neg), axis=-1, keepdims=True)
basic_loss = pos_dist - neg_dist + TripletModel.MARGIN
loss = K.maximum(basic_loss, 0.0)
print "[INFO] model - triplet_loss shape: %s" % str(loss.shape)
return loss
использованная литература:
[1] Momentum Contrast for Unsupervised Visual Representation Learning, 2019, Kaiming He Haoqi Fan Yuxin Wu Saining Xie Ross Girshick
[2] Dimensionality Reduction by Learning an Invariant Mapping, 2006, Raia Hadsell, Sumit Chopra, Yann LeCun