Сиамская нейронная сеть

Материал из MachineLearning.

Версия от 12:12, 12 июля 2026; Daniil Nikolaev (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Статья написана с использованием LLM DeepSeek-V3 и проверена участником Д. Николаев 15:11, 12 июля 2026 (MSD)


Содержание

Сиамская нейронная сеть (англ. Siamese neural network, twin neural network) — архитектура искусственной нейронной сети, состоящая из двух (или более) идентичных подсетей с общими весами, которые работают параллельно и совместно обрабатывают два входных вектора для вычисления их схожести. Выходом сети является мера сходства между представлениями входных объектов в некотором признаковом пространстве. Сиамские сети относятся к классу метрических и сравнительных моделей и широко применяются в задачах, где число классов велико, неизвестно заранее или количество обучающих примеров на класс крайне мало.

Историческая справка

Архитектура сиамской нейронной сети была впервые предложена Джейн Бромли (Jane Bromley), Изабель Гийон (Isabelle Guyon), Янном ЛеКуном (Yann LeCun) и соавторами в 1993 году для задачи верификации подписей, вводимых на сенсорной панели[1]. В оригинальной работе использовалась сеть с временной задержкой (time-delay neural network, TDNN) в качестве подсети. Название «сиамская» было выбрано по аналогии с сиамскими близнецами — двумя идентичными структурами, соединёнными вместе.

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

Архитектура

Сиамская нейронная сеть состоит из следующих компонентов:

  • Две (или более) идентичные подсети (англ. subnetworks, branches). Каждая подсеть представляет собой полносвязную, свёрточную или рекуррентную нейронную сеть, которая преобразует входной вектор x в некоторое встраивание (представление) f(x) в пространстве признаков.
  • Разделяемые веса (англ. weight sharing). Все подсети имеют одинаковые архитектуру и набор весовых коэффициентов, которые обновляются синхронно в процессе обучения.
  • Модуль сравнения (англ. comparison module, joining neuron), который вычисляет расстояние или меру сходства между двумя встраиваниями f(x_1) и f(x_2).

В простейшем случае сиамская сеть принимает на вход пару объектов (x_1, x_2) и возвращает скалярное значение d(x_1, x_2), интерпретируемое как расстояние или степень схожести.

Математическая постановка

Пусть задана нейронная сеть f_\theta: \mathcal{X} \to \mathbb{R}^d с параметрами \theta, отображающая входное пространство \mathcal{X} в d-мерное евклидово пространство. Сиамская сеть определяет функцию расстояния:

D_\theta(x_1, x_2) = |f_\theta(x_1) - f_\theta(x_2)|_2,

где |\cdot|_2евклидова норма. В общем случае расстояние может вычисляться как косинусное расстояние, расстояние Махаланобиса или любая другая дифференцируемая метрика.

Цель обучения — найти такие параметры \theta, чтобы расстояние между объектами одного класса было малым, а между объектами разных классов — большим. Функции потерь

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

Контрастная функция потерь (англ. contrastive loss) была предложена в оригинальной работе Бромли и соавторов[1]. Для пары примеров (x_1, x_2) с меткой y \in {0, 1}, где y = 1 означает, что примеры принадлежат одному классу (положительная пара), а y = 0 — разным классам (отрицательная пара), функция потерь имеет вид:

\mathcal{L}{\text{contrastive}}(\theta) = y \cdot D\theta^2(x_1, x_2) + (1 - y) \cdot \max(0, m - D_\theta(x_1, x_2))^2,

где m > 0 — гиперпараметр маржи (запаса), задающий минимальное расстояние, на которое должны быть разнесены отрицательные пары. Триплетная функция потерь

Триплетная функция потерь (англ. triplet loss) была предложена позднее и оперирует тройками примеров: якорь (anchor) x_a, положительный пример (positive) x_p (того же класса, что и якорь) и отрицательный пример (negative) x_n (другого класса). Функция потерь записывается как:

\mathcal{L}{\text{triplet}}(\theta) = \max\left(0, D\theta^2(x_a, x_p) - D_\theta^2(x_a, x_n) + \alpha\right),

где \alpha > 0 — гиперпараметр маржи, обеспечивающий зазор между расстояниями до положительного и отрицательного примеров.

Триплетная функция потерь часто даёт более высокое качество в задачах few-shot learning и распознавания лиц, однако требует более тщательной стратегии формирования триплетов (triplet mining). Обучение

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

Важной особенностью является то, что сиамская сеть не обучается непосредственно классификации, а учится выстраивать метрическое пространство, в котором схожие объекты оказываются близкими, а различные — далёкими. Это позволяет использовать сеть для one-shot и zero-shot обучения, когда для новых классов доступно лишь один или ни одного примера. Применения

Сиамские нейронные сети находят применение в широком спектре задач:

  • Верификация и распознавание лиц — одна из наиболее известных областей применения. Сиамские сети позволяют сравнивать два изображения лица и принимать решение о их принадлежности одному человеку.
  • Верификация подписей— исходная задача, для которой архитектура была разработана.
  • Поиск изображений и извлечение изображений (англ. image retrieval).
  • Отслеживание объектов на видео (англ. visual object tracking) — сиамские сети являются доминирующим подходом в этой области.
  • Обнаружение изменений на спутниковых снимках.


Связь с другими подходами

Сиамские сети тесно связаны с:

  • Метрическим обучением (англ. metric learning) — сиамская сеть является одной из реализаций идеи обучения метрики на основе нейросетевых встраиваний.
  • Сравнительным обучением (англ. comparative learning) — классом методов, в которых модель обучается на парах или тройках примеров.

Программные реализации

Сиамские сети могут быть реализованы с использованием большинства популярных библиотек глубокого обучения, включая TensorFlow, PyTorch и Keras. Типовая реализация включает:

  • Определение базовой подсети (base network) с разделяемыми весами.
  • Создание двух (или более) экземпляров подсети, принимающих различные входы.
  • Вычисление расстояния между выходами подсетей.
  • Определение контрастной или триплетной функции потерь.
  • Стандартный цикл обучения с использованием Adam или SGD.

Критика и ограничения

Несмотря на широкую распространённость, сиамские сети имеют ряд ограничений:

  • Высокие вычислительные затраты — обучение на парах или тройках примеров требует \mathcal{O}(n^2) или \mathcal{O}(n^3) сравнений соответственно, что может быть проблематично для больших наборов данных.
  • Чувствительность к выбору отрицательных примеров — при использовании триплетной функции потерь качество модели сильно зависит от стратегии формирования триплетов (hard negative mining).
  • Проблема коллапса встраиваний — без правильной регуляризации сеть может вырождаться в тривиальное решение, где все объекты отображаются в одну точку.
  • Сложность интерпретации — как и другие модели глубокого обучения, сиамские сети часто рассматриваются как «чёрные ящики».

См. также

Литература

Личные инструменты