tl;dr:

Сиамская нейронная сеть (SNN) — это классификатор подобия, который использует отличительные признаки для обобщения неизвестных категорий в заданном распределении. SNN можно использовать в качестве извлекателя признаков, а другие механизмы машинного обучения можно подключить после него, чтобы получить вероятность и/или метку класса. Архитектура сети, вдохновленная сиамскими близнецами, может похвастаться множеством идентичных сверточных нейронных подсетей (CNN), которые имеют одинаковые веса и смещения. Во время обучения CNN создает встраивания, которые обрабатываются слоем расстояния. Затем потери вычисляются с помощью встраивания расстояния и обновляются с помощью стохастического градиентного спуска с обратным распространением. Во время логического вывода CNN создает вложения, которые может использовать машина опорных векторов (SVM).

Эта статья является первой в серии из двух частей, в которой основное внимание уделяется предоставлению читателю общего обзора того, как можно использовать SNN в качестве извлекателя признаков. читатель с учебным пособием по python, в котором объясняется, как предварительно обученная SNN, обученная на наборе данных Omniglot, может использоваться для точной классификации образцов изображений из набора данных MNIST.

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

SNN — это классификатор подобия, который использует отличительные признаки для обобщения неизвестных категорий в данном распределении. Его архитектура, вдохновленная сиамскими близнецами, может похвастаться множеством идентичных сверточных нейронных подсетей (CNN), которые имеют одинаковые веса и смещения. Подсети взаимодействуют с разными входными изображениями для создания сопоставимых выходных векторов, называемых встраиваниями. Значение потери рассчитывается с использованием встраивания, которые вычисляются для каждого соответствующего изображения. Наконец, значение потерь используется для одновременного обновления весов и смещений подсетей CNN, чтобы подсети оставались идентичными. Как и большинство традиционных моделей глубокого обучения, эта модель оптимизирована с помощью стохастического градиентного спуска с обратным распространением.

Плюсы SNN

  • SNN изучают функцию сходства и могут использоваться, чтобы различать, относятся ли два изображения к одному классу или нет. Таким образом, этот тип нейронной сети можно использовать для задач классификации изображений.
  • Традиционные нейронные сети учатся предсказывать классы; это проблема, когда необходимо добавить/удалить класс. После обучения SNN ее можно использовать для классификации данных по классам, которые модель никогда не «видела».
  • SNN можно использовать для K-Shot Classification.Вообще говоря, k-shot Классификация изображений предназначена для обучения классификаторов только с k-изображениями для каждого класса. Более того, SNN более устойчивы к дисбалансу классов по сравнению с традиционными методами глубокого обучения

Минусы SNN

  • Конечным результатом SNN является значение сходства, а не вероятность. Если потребуется вероятность, SNN может быть реализована как извлекатель признаков, а другие механизмы машинного обучения могут быть подключены к нейронной сети.
  • Архитектура нейронной сети более сложная. В зависимости от используемой функции потерь может потребоваться создание пользовательского цикла обучения (при условии, что нет доступного репозитория кода, которым можно было бы воспользоваться), чтобы можно было вычислить потери ивыполнить обратное распространение. Если SNN следует рассматривать как извлекатель признаков, тогда необходимо будет добавить дополнительные механизмы машинного обучения, например, полностью/плотно связанные слои, жесткие/мягкие машины опорных векторов ), и т. д.
  • Требует больше времени на обучение по сравнению с традиционными архитектурами нейронных сетей, поскольку для создания точной модели требуется большое количество комбинаций обучающих выборок, необходимых для механизма обучения SNN.

Реальные приложения SNN

Примеры включают, но не ограничиваются:

  • Распознавание лиц
  • Проверка подписи
  • Обнаружение мошенничества с банкнотами
  • Аудио Классификация

Возьмем задачу обнаружения мошенничества с банкнотами. Сейчас существует множество различных номиналов банкнот для данной валюты. Точно так же существует множество поддельных номиналов банкнот для данной валюты. Для обучения традиционных нейронных сетей Image Classification потребуется большое количество реальных и поддельных номиналов банкнот, чтобы обеспечить точное обнаружение мошенничества с банкнотами. Фактически, традиционная нейронная сеть должна была бы видеть каждое реальное достоинство банкноты для каждой валюты и большое количество связанных с ними подделок. Для сравнения, для этой задачи можно использовать SNN, и для этого потребуется меньше данных. Вот один из способов использования SNN для обнаружения мошенничества с банкнотами:

  1. Возьмите несколько номиналов банкнот из каждой валюты - не обязательно все.
  2. Обучить* SNN на комбинациях выбранных номиналов банкнот и связанных с ними подделок для каждой валюты
  3. Возьмите остальные номиналы банкнот для каждой валюты и протолкните их через SNN, чтобы получить встраивания.
  4. Найдите и запишите центроиды (вектор, определяющий среднее значение всех вложений для данного кластера) для каждого кластера номинала для каждой валюты. Можно использовать несколько мягких SVM для создания метки класса.
  5. Протолкните изображение номинала банкноты через обученный SNN и оцените расстояние Embedding, которое возвращается к каждому из центроидов.
  6. Если банкнота настоящая, она должна иметь небольшое расстояние между соответствующим центроидом реального номинала. Он также должен иметь большие расстояния между другими центроидами реального номинала валюты.
  7. Если банкнота фальшивая, она должна иметь большое расстояние между соответствующим центроидом реального номинала. Он также должен иметь большие расстояния между другими центроидами реального номинала валюты.

Как выглядит архитектура SNN?

Как указывалось ранее, SNN можно использовать в качестве извлекателя признаков, а другие механизмы машинного обучения можно монтировать позже, чтобы получить вероятность и/или метку класса. В этой статье SNN будет объяснено так, как если бы это был извлекатель признаков, и для создания метки класса будет добавлена ​​одна аппаратная SVM. Feature Extractor SNN, описанный в этой статье, демонстрирует тройную сеть, то есть имеет три идентичные подсети CNN.

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

SNN как средство извлечения признаков:

Сверточная нейронная сеть (CNN)

  • Создает встраивания, которые фактически представляют собой просто сглаженные одномерные карты объектов.
  • В режиме обучения встраивания передаются на слой расстояния.
  • В режиме Inference Embeddings передаются в SVM.
  • CNN (часто называемая моделью внедрения, кодировщиком или магистралью) может быть выбрана из предварительно созданной «фабрики магистральных сетей» для данного приложения, и, таким образом, можно использовать перенос обучения. например, VGG16/Resnet50/InceptionV3 обучен на наборе данных ImageNet

Слой расстояния

  • Он вычисляет расстояние между встраиваниями. Для тройной сети (определяемой потерей триплета) встраивания расстояния являются:
    - положительное встраивание расстояния (привязка и положительное встраивание )
     — Негативное встраивание по расстоянию (привязка и негативные встраивания)
  • Расстояние рассчитывается с использованием квадрата Евклида (также называемого нормой L2).

Функция потери

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

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

SVM как классификатор

Линейный SVM — это метод обучения с учителем, который позволяет категоризировать/классифицировать данные путем разделения данных линейной гиперплоскостью (или линией, если данные двумерные). Если данные не являются линейно разделимыми, точки данных могут быть сопоставлены с пространствами объектов более высокой размерности, пока SVM не сможет разделить классы. SVM пытается оптимизировать положение (положение и ориентацию) гиперплоскости, чтобы обеспечить наибольшую разницу между точками данных разных классов. Точки данных для каждого класса, лежащие на самом большом поле (определяемом как перпендикулярное расстояние между точками данных разных классов), называются опорными векторами. Некоторые ключевые особенности SVM, но не ограничиваются ими:

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

Спасибо, что прочитали. Пожалуйста, подпишитесь и/или поддержите меня финансовоhttps://gofund.me/c397684d