Делайте больше с меньшими объемами данных! - Одноразовое обучение с помощью сиамских нейронных сетей

Авторы: Кирти Нингегоуда, Кенни Чакола, Варннита Венугопал, Риа Томас и Випин Дас

Этот блог создается и поддерживается студентами программы профессионального магистра в Школе компьютерных наук Университета Саймона Фрейзера в рамках их кредита на курс. Чтобы узнать больше об этой уникальной программе, посетите {sfu.ca/computing/pmp}.

Начнем с новостной статьи, которая может вас немного напугать. Не волнуйся! Позже мы покажем вам хорошие новости!

Не менее четырех месяцев назад студент Университета искусства и дизайна Эмили Карр потерял 600 долларов со своего банковского счета из-за поддельных чеков. В этом случае самым удивительным фактором было то, что деньги были списаны через полдюжины чеков на сумму 100 долларов каждый, и ни у одной из них не было совпадающих подписей. Конечно, мы должны винить сотрудников банка в авторизации платежей без точной проверки подписей. Но если вы банковский служащий, которому приходится иметь дело с сотнями проверок чеков в день, выполнение должной осмотрительности с большей точностью может оказаться утомительной задачей.

Как решить эту проблему?

Разве не было бы замечательно, если бы модные слова «ИИ» и «Глубокое обучение» 21 века могли решить эту проблему с минимальным вмешательством человека?

У нас для вас хорошие новости! Одноразовое обучение с помощью сиамских нейронных сетей может помочь решить эту проблему!

Что такое сиамские нейронные сети?

Сиамская нейронная сеть - это искусственная нейронная сеть, которая использует особый способ сортировки входных данных в зависимости от их сходства. Прежде чем погрузиться в архитектуру, подумайте о том, какая сеть подходит для различения двух изображений. Если бы только у нас были две сверточные сети с предопределенными параметрами, которые измеряют разницу в них, чтобы определить, насколько они похожи (о, как ни странно!). Угадай, что? Именно так работает сиамская сеть!

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

Но это же нейронная сеть! В целом нейронная сеть требует большого обучающего набора изображений для построения полезной модели. Итак, если мы возьмем случай подписей, эти сети требуют большого количества копий подписей на человека, что невозможно. Что с этим делать?

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

Как выглядит рабочий процесс этого алгоритма?

Давайте теперь углубимся в модель. На рисунке ниже показан принцип работы типичной сиамской сети:

Как эта блок-схема применима к нашей проблеме проверки подписи?

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

ЯКОРЬ - исходная подпись
ПОЛОЖИТЕЛЬНАЯ - та же исходная подпись
ОТРИЦАТЕЛЬНАЯ - подпись, которая не совпадает

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

  • Сверточная сеть. Каждая сверточная нейронная сеть состоит из сверточного слоя 11x11, сверточного слоя 5x5 и два сверточных слоя 3x3, чтобы получить несколько карт объектов, каждая из которых включает в себя определенный элемент изображения. Используемая функция активации - ReLU. Он генерирует неограниченные значения активации от сетевых устройств, которые можно обрабатывать с помощью нормализации локального отклика. Выполнение нормализации повышает чувствительность возбужденного нейрона по сравнению с его соседством и ослабляет область нейронов, если активация обычно высока для этого соседства. Три 2x2 макс. Слоя пула используются для уменьшения размера карт объектов без включения в них отличительных особенностей. Выпадение с коэффициентом 0,3 и 0,5 также используется для минимизации чрезмерной подгонки путем исключения случайных единиц в скрытых слоях. Последний слой - это полностью связанный слой, объединенный линейно со всеми элементами входного изображения.

  • Расчет убытков -

Функции потерь необходимы для корректировки весов этой сети во время обучения и выполняются двумя способами:

  1. Парные контрастные потери - этот метод расчета потерь использует контраст между двумя парами для оценки потерь в каждой тренировочной точке. Точки обучения будут иметь форму (привязка, положительная) или (привязка, отрицательная). Функция потерь вычисляет евклидово расстояние (D) между двумя обучающими изображениями (s1, s2) с изученными весами (w1, w2)

Вы можете заметить, что y - это метка, присутствующая в наборе данных. Если y = 0, это означает, что (s1, s2) принадлежат тем же классам. Таким образом, потери от таких похожих пар будут равны D² (s1, s2). Если y = 1, это означает, что (s1, s2) принадлежат разным классам. Таким образом, потери, вносимые такими разнородными парами, будут max (0, α-D) ².

Одно из возможных осложнений, которое может произойти во время обучения, заключается в том, что нейронная сеть может пытаться кодировать все изображения одинаково, что приводит к тривиальным решениям (потери всегда будут нулевыми). Итак, гиперпараметр 'α', называемый маржой, добавляется, чтобы показать разницу между положительным (s1, s2 = положительным) и отрицательным (s1, s2 = отрицательным) пары. Значение этого гиперпараметра обычно устанавливается в диапазоне от 1,0 до 2,0.

Следовательно, для M обучающих выборок общие потери будут:

2. Триплетная потеря - если вы используете тройную потерю, вам необходимо убедиться, что данные должны быть предварительно обработаны, чтобы иметь структуру (привязка, положительное, отрицательное). Потеря для одного тренировочного очка определяется как:

где 'α' - это поле, s1 обозначает привязку 1, s2 обозначает положительную сигнатуру и s ₃ обозначает отрицательный / не соответствующая подпись. Веса обновляются с использованием стандартного алгоритма обратного распространения ошибки с градиентным спуском.

  • Проверка сходства. После обучения модели пороговое значение ‘d’ используется для определения принадлежности изображения к тому же классу. Выбор порога зависит от индекса несходства, который получается путем вычисления евклидова расстояния тестового набора (то есть сигнатуры привязки и тестовой сигнатуры). Более низкий индекс несходства означает, что изображения похожи, тогда как более высокий индекс несхожести означает, что изображения не совпадают. Выбор порога должен быть компромиссом между обоими случаями, которые необходимо выявить методом проб и ошибок.

Как лучше всего выбрать тренировочные точки для этой модели?

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

  1. Случайная выборка - выбор входных выборок случайным образом.
  2. Жесткая выборка - выберите образцы, в которых привязка и негативное изображение выглядят достаточно близко, но имеют небольшие различия.

Практическая модель должна иметь правильное сочетание как случайных, так и жестких выборок. Вам интересно, зачем нам нужны твердые образцы?

Рассмотрим пример очевидной положительной пары s1, s2:

Поскольку кодирование s1 и s2 будет одинаковым, D (s1, s2) ≥ 0. Потеря таких очевидных обучающих пар будет быть близким к 0.

Рассмотрим пример очевидной отрицательной пары s1, s2:

Поскольку кодировка s1 и s2 будет сильно отличаться, D (s1, s2) будет иметь положительное значение, превышающее маржу. Итак, max (0, α - D (s1, s2)) будет 0. Такие очевидные положительные и отрицательные пары возвращают нулевые потери и препятствуют градиентному спуску.

Следовательно, выберите s1, s2 таким образом, чтобы s1 и s2 были почти «похожими», но не одинаковыми. Эти ситуации похожи на сравнение настоящих подписей с поддельными подписями, и мы хотим, чтобы наша модель отражала эти ситуации.

Рассмотрим пример, описывающий вышеуказанную ситуацию:

В этом случае s1 и s2 почти одинаковы, но не одинаковы. Такие образцы называются жесткими выборками и возвращают потерю α - D (s1, s2) с D (s1, s2) ‹α, добавляемым к общей потере и лучше учиться.

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

  • Deep Siamese Network используется в качестве инструмента для профориентации и найма за счет уменьшения семантического расстояния между похожими резюме и описаниями должностей и отдельными несоответствующими друг другу. Но если вам интересно, как эта модель будет изучать новую должность, которая встречается редко, здесь можно применить однократное обучение.
  • Как насчет робота, который идентифицирует вас по вашему голосу и без того, чтобы вы представлялись? Непосредственная идентификация динамика для сервисного робота с использованием универсального верификатора на основе CNN »- захватывающая тема, которая реализует эту идею с помощью однократного обучения.
  • Отслеживание нескольких человек из многолюдной среды представляет собой серьезную проблему из-за отсутствия или ложного обнаружения. Learning by Tracking адаптирует сиамский CNN »вместе с усилением градиента для захвата сцены из видео и отслеживания изображений людей, используя местоположение пешехода и формируя траектории во времени. Двойная сеть изначально обучается изучению сходства двух кадров одинакового размера и их контекстной особенности (записывает геометрию и положение).

Прежде чем мы закончим, как насчет имитации проверки подписи с помощью PyTorch?

Приведенный ниже код поможет вам настроить сиамскую нейронную сеть для ваших учебных целей.

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

использованная литература

[1]. SigNet: сверточная сиамская сеть для независимой автономной проверки подписи писателей. Авторы: Соунак Дейя, ∗∗, Анжан Дуттаа, Дж. Игнасио Толедоа, Суман К. Гоша, Хосеп Лядоша, Умапада Палб

[2]. Сиамские нейронные сети для мгновенного распознавания изображений. Авторы Грегори Кох, Ричард Земель, Руслан Салахутдинов

[3]. Https://hackernoon.com/one-shot-learning-with-siamese-networks-in-pytorch-8ddaab10340e

[4]. Https://innovationincubator.com/siamese-neural-network-with-pytorch-code-example/

[5]. Маркус Ливицки, Майкл Блюменштейн, Элиза ван ден Хёвел, Чарльз Э. Бергер, Рейноуд Д. Стул, Брайан Фаунд, Сяохун Чен, Мухаммад Имран Малик. SigComp11: Соревнование по проверке подписи для квалифицированных подделок онлайн и офлайн, Proc. 11-е межд. Конференция по анализу и распознаванию документов, 2011 г.