Как обратное распространение работает в сиамской нейронной сети?


13

Я изучал архитектуру сиамской нейронной сети, представленной Янном ЛеКуном и его коллегами в 1994 году для распознавания подписей ( «Проверка подписи с использованием сиамской нейронной сети с временной задержкой». Pdf, NIPS 1994)

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

Изображение из «Вероятностной сиамской сети для изучения представлений» Чена Лю (Университет Торонто, 2013).

В этой архитектуре алгоритм вычисляет косинусное сходство между окончательными представлениями двух нейронных сетей. В документе говорится: «Требуемый выход для небольшого угла между выходами двух подсетей (f1 и f2), когда представлены подлинные подписи и большой угол, если одна из подписей является подделкой ".

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

Как вычисляется обратное распространение в сиамских нейронных сетях?


я не могу скачать газету .... у вас есть другой или Dropbox источник?
Brethlosze

Ответы:


11

Обе сети имеют одинаковую архитектуру, но они имеют одинаковый вес, как описано в разделе 4 [1].

Их цель - изучить особенности, которые минимизируют сходство косинусов между их выходными векторами, когда подписи являются подлинными, и максимизируют его, когда они подделаны (это также является целью backprop, но фактическая функция потерь не представлена).

cos(A,B)=ABABA,B

Вы не должны изменять выходной слой, он состоит из обученных нейронов с линейными значениями и его высокоуровневой абстракции вашего входа. Вся сеть должна быть обучена вместе. Оба выхода и пропускаются через функцию которая выводит их косинусное сходство ( если они похожи, и если нет). Учитывая это и то, что у нас есть два набора входных кортежей , примером простейшей функции возможных потерь, с которой вы могли бы тренироваться, может быть:O1O2cos(O1,O2)10XForged,XGenuine

L=(xA,xB)XForgedcos(xA,xB)(xC,xD)XGenuinecos(xC,xD)

После того, как вы обучили свою сеть, вы просто вводите две сигнатуры и получаете два выхода, передаете их в функцию и проверяете их сходство.cos(O1,O2)

Наконец, чтобы сохранить вес сети одинаковым, есть несколько способов сделать это (и они также используются в Recurrent Neural Networks); Общий подход заключается в усреднении градиентов двух сетей перед выполнением шага обновления «Градиентный спуск».

[1] http://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf


Я знаю, что цель состоит в том, чтобы минимизировать сходство косинусов, но я не могу понять, что я должен вставить в выходной слой моей нейронной сети. Когда я создаю нейронную сеть, я помещаю цели в последний выходной слой. Если это ценности, то все в порядке. Но если целью является функция, где я могу найти значения для заполнения? Спасибо
DavideChicco.it

Я обновил свой ответ. Ваш выходной слой будет просто другим нормальным слоем, который он выводит в функцию подобия косинуса. Две сети, соединенные функцией косинусного сходства, должны быть обучены друг другу по критерию потерь. Наконец, я предложил вам самую простую потерю, которую вы могли бы получить в этом случае.
Яннис Ассаэль

1
Спасибо. Я думаю, что понял свою проблему: это реализация этой архитектуры нейронной сети в Torch7. Здесь, перед обучением и тестированием, во время построения нейронной сети, я должен указать много вещей, включая значения входного набора данных и значения выходного целевого слоя . В прошлом я имел дело с контролируемыми проблемами, которые всегда имели фиксированные значения выходного целевого слоя (например, метки true / false или значения в интервале [0, 1]). Но на этот раз все по-другому: выходной слой - это функция, зависящая от двух значений, которые будут вычислены во время обучения. Это верно?
DavideChicco.it

Именно в этот раз у вас есть линейные значения в выходном слое, а не в двоичном (так что это просто выход нейрона). Кроме того, в этом случае у вас нет прямых выходных целевых значений, но у вас есть функция потерь для оптимизации. Наконец, выходной слой - это выход нейронов (количество единиц определяется архитектурой модели и упоминается в статье). Нейроны в зависимости от выбранной функции активации (tanh, сигмоид и т. Д.) Имеют линейные недвоичные активации [-1,1] или [0,1] соответственно. noutputnoutput
Яннис Ассаэль

Спасибо @iassael. Есть ли у вас какие-либо идеи о том, как реализовать это в Torch7?
DavideChicco.it
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.