Изменения

Перейти к: навигация, поиск

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

135 байт добавлено, 19:40, 28 декабря 2020
м
Исправлены мелкие ошибки
'''Сиамская нейронная сеть''' (англ. Siamese neural network) — это разновидность [[Нейронные сети, перцептрон|искусственной нейронной сети]] (англ. neural network), которая состоит из двух идентичных нейронных подсетей с одинаковыми наборами весов. Данный вид сетей позволяет сравнить вектора признаков двух объектов с целью выделить их семантическое сходство или различие. Сиамская нейронная сеть представляет собой нелинейное [[Отображения|отображение]] данных с целью приблизить друг к другу схожие объекты и разнести различные объекты на максимально возможное расстояние различные объекты. Сиамские сети получили свое название от сиамских близнецов, физически приросших друг к другу, из-за использования сразу двух подсетей, разделяющих один набор весов. Эти подсети могут быть представлены многослойными [[Нейронные сети, перцептрон|перцептронами]] (англ. multilayer perceptron), [[Сверточные нейронные сети|сверточными нейронными сетями]] (англ. convolutional neural network) и другими.
== Мотивация ==
Рассмотрим следующую ситуацию: некоторая компания хочет создать систему, которая, основываясь на фотографии лица человека, могла бы установить, является ли он ее сотрудником. В этом случае она, инапример, если это так, разрешить разрешает ему доступ на территорию предприятия. Для этого может быть обучена сверточная нейронная сеть, которая, например, основываясь на входной фотографии человека, пыталась бы классифицировать его как одного из сотрудников предприятия или как не сотрудника. Если Пусть в компании работает <math>n</math> сотрудников, такая сеть могла бы возвращать вектор размерности человек. Тогда может быть выделено <math>n+1</math>, который бы представлял один из указанных выше классов (<math>n</math> классов сотрудников и один класс не сотрудника) записанный . Каждый из этих классов может быть записан в форме вектора длины <math>n+1</math> с помощью one-hot кодирования. Для решения задачи классификации фотографии в один из выделенных <math>n+1</math> классов может быть использована сверточная нейронная сеть, возвращающая класс сотрудника в векторной форме. Однако число сотрудников компании может меняться, старые работники могут увольняться, а на их место приходить новые. Каждое такое изменение потребовало бы переобучения всей сети, что может быть накладно для крупных компаний. Более того, не все сотрудники имеют большое количество своих фотографий (необходимое для обучения сверточной нейронной сети), или не желают делиться большей их частью.
Решением данной проблемы может быть обучение сети не распознавать каждого отдельного сотрудника, а находить сходство между фотографией фотографиями двух людей. В качестве таких фотографий могут быть использованы фотография человека, который пытается попасть на территорию предприятия, и фотографией фотография одного из сотрудников компании. Например, мы можем задаться некоторым пределом <math>\tau</math> и обучить сеть так, чтобы она возвращала значение <math>\phi < \tau</math>, если фотографии похожи, и <math>\phi \geq \tau</math>, если они разные. В таком случае нам будет достаточно попарно сравнить с помощью нашей сети фотографию посетителя с фотографиями сотрудников компании, и, если выходное значение для одной из пар будет меньше <math>\tau</math>, мы можем с высокой уверенностью сказать, что наш посетитель является сотрудником компании. Такое решение может быть реализовано с помощью сиамских нейронных сетей, которые рассмотрены ниже.
== Сиамская нейронная сеть ==
[[Файл:Siamese neural net architecture types.png|thumb|300px| Рисунок 2 — основные типы архитектур сиамской нейронной сети.]]
Зададимся набором данных <math>\{(x_i, y_i), i = 1, \dots, n\}</math>, состоящим из <math>n</math> векторов признаков <math>x_i \in R^m</math> размера <math>m</math> с метками <math>y_i \in \{1, 2, \dots, C\}</math>. Создадим обучающий набор данных <math>S = \{(x_i, x_j, z_{ij}), (i= 1, \dots,n; j) = 1, \in Kdots, n\}</math>, состоящих из пар <math>(x_i</math> и <math>, x_j)</math> с бинарными метками <math>z_{ij}</math>. Если оба вектора признаков <math>x_i</math> и <math>x_j</math> принадлежат к одному и тому же классу, то <math>z_{ij} = 0</math>, иначе <math>z_{ij} = 1</math>. Разделим обучающий набор данных <math>S</math> на два подмножества: одно — со схожими парами (или с <math>z_{ij} = 0</math>), другое — с различающимися парами (или с <math>z_{ij} = 1</math>). Будем подавать наши пары векторов на вход сиамской подсети.
В общем случае сиамская сеть состоит из двух подсетей, выходы которых подаются на вход другого модуля, который генерирует конечный выход. Рассмотрим Рис. 1, на котором <math>x_i</math> и <math>x_j</math> — это входы, <math>W</math> — общие веса/параметры, а <math>h_i \in R^D</math> и <math>h_j \in R^D</math> — выходы обеих подсетей. Сиамская сеть представляет собой отображение <math>h_i = f(x_i)</math>, для которого Евклидово расстояние <math>d(h_i, h_j)</math> максимально мало́ при <math>y_i=y_j</math> и максимально велико при <math>y_i \neq y_j</math>. Сеть возвращает оценку <math>o_W</math> того, насколько различны <math>x_i</math> и <math>x_j</math>.
Третья архитектура полезна для детального сравнения двух объектов, необходимого, например, при отслеживании пешеходов<ref name="pedestrian">L. Leal-Taixé, C. Canton-Ferrer and K. Schindler, "Learning by Tracking: Siamese CNN for Robust Target Association," 2016 IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW), Las Vegas, NV, 2016, pp. 418-425, doi: 10.1109/CVPRW.2016.59.</ref>. Первые две архитектуры показывают хорошие результаты при классификации.
Существует много различных [[Функция потерь и эмпирический риск|функций потерь]] (англ. loss function) для обучения сиамских нейронных сетей. Рассмотрим две наиболее популярные из них. Первая — contrastive loss function — использует пары объектов <math>(x_i, x_j)</math>, которые могут принадлежать как одному, так и разным классам:
<math>l(x_i, x_j, z_{ij}) = (1-z_{ij})||h_i-h_j||_2^2+z_{ij}\max(0, \tau-||h_i-h_j||_2^2)</math>,
14
правок

Навигация