Это 3-й день моего участия в ноябрьском испытании обновлений, узнайте подробности события:Вызов последнего обновления 2021 г.
Сиамская сеть
Проще говоря, сиамская сетьОбщие параметрыДве нейронные сети
В сиамской сети выкладываем образНа вход получаем кодировку картинки. Затем мы вводим другое изображение без каких-либо обновлений параметров сети., и получить кодировку измененной картинки. Так как похожие картинки должны иметь схожие признаки (кодировки), по этому можно сравнивать и судить о сходстве двух картинок
Функция потерь сиамской сети
Использование традиционной сиамской сетиContrastive Loss(функция потери контраста)
вопределяется как евклидово расстояние между двумя входами сиамской сети, т.е.
- значение равно 0 или 1, еслиПара образцов принадлежит к одному классу, тогда,Напротив
- является предельным значением, т. е. когда,еслиирасстояние больше, чем, то не оптимизировать (экономя время и силы); еслиидистанция между, затем настройте параметры, чтобы увеличить расстояние до
Контрастный код потери
import torch
import numpy as np
import torch.nn.functional as F
class ContrastiveLoss(torch.nn.Module):
"Contrastive loss function"
def __init__(self, m=2.0):
super(ContrastiveLoss, self).__init__()
self.m = m
def forward(self, output1, output2, label):
d_w = F.pairwise_distance(output1, output2)
contrastive_loss = torch.mean((1-label) * 0.5 * torch.pow(d_w, 2) +
(label) * 0.5 * torch.pow(torch.clamp(self.m - d_w, min=0.0), 2))
return contrastive_loss
в,F.pairwise_distance(x1, x2, p=2)
Формула функции выглядит следующим образом
pairwise_distance(x1, x2, p)
Computes the batchwise pairwise distance between vectors , using the p-norm
Использование сиамских сетей
Проще говоря, прямое использование сиамской сети заключается в измерении того, насколько разные (или похожие) два входа. Отправьте два входа в две нейронные сети соответственно, получите их представление в новом пространстве, а затем используйте функцию потерь для вычисления степени их различия (или степени сходства).
- Анализ лексико-семантического подобия, сопоставление вопроса и ответа в QA
- Распознавание рукописного ввода также может использовать сиамскую сеть.
- Конкурс Quora's Question Pair на Kaggle, то есть на определение того, являются ли два вопроса одним и тем же вопросом.
Псевдосиамская сеть (псевдосиамская сеть)
Для псевдосиамской сети обе стороны могут бытьразличные нейронные сети(например, один lstm, другой cnn), и если это одна и та же нейронная сеть,не делитесь параметрамииз
Сценарии, в которых применимы соответственно сиамская сеть и псевдосиамская сеть
- Сиамская сеть подходит для обработки двух входовпохожийСлучай
- Псевдосиамская сеть, подходящая для обработки двух входовЕсть определенная разницаСлучай
Например, для вычисления смыслового сходства двух предложений или слов целесообразнее использовать Siamese Network; для проверки соответствия описания заголовка описанию текста (длина заголовка и текста очень отличается), или если текст описывает изображение (один - изображение, один - текст), следует использовать псевдо-сиамскую сеть
Тройная сеть
Если сиамские сети — это близнецы, то триплетные сети — это тройки. Его входов три: один положительный + два отрицательных или один отрицательный + два положительных. Цель обучения по-прежнему состоит в том, чтобы расстояние между одними и теми же классами было как можно меньше, а между разными классами — как можно больше. Triplet Network превосходит сиамскую сеть по наборам данных CIFAR и MNIST
Функция потерь определяется следующим образом:
- представляет якорное изображение
- Представляет положительный образ
- представляет собой негативный образ
мы надеемсяирасстояние должно быть меньшеирасстояние.это гиперпараметр, который выражаетикакая разница должна быть между, например, предположением,и,Такдолжно быть больше или равно