Сиамская нейронная сеть — различия между версиями
м (Исправлены мелкие ошибки) |
|||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | '''Сиамская нейронная сеть''' (англ. Siamese neural network) — это разновидность [[Нейронные сети, перцептрон|искусственной нейронной сети]] (англ. neural network), которая состоит из двух идентичных нейронных подсетей с одинаковыми наборами весов. Данный вид сетей позволяет сравнить вектора признаков двух объектов с целью выделить их семантическое сходство или различие. Сиамская нейронная сеть представляет собой нелинейное [[Отображения|отображение]] данных с целью приблизить друг к другу схожие объекты и разнести различные объекты на максимально возможное расстояние. Сиамские сети получили свое название от сиамских близнецов, физически приросших друг к другу, из-за использования сразу двух подсетей, разделяющих один набор весов. Эти подсети могут быть представлены многослойными [[Нейронные сети, перцептрон|перцептронами]] (англ. multilayer perceptron), [[Сверточные нейронные сети|сверточными нейронными сетями]] (англ. convolutional neural network) и другими. | + | '''Сиамская нейронная сеть''' (англ. Siamese neural network) — это разновидность [[Нейронные сети, перцептрон|искусственной нейронной сети]] (англ. artificial neural network), которая состоит из двух идентичных нейронных подсетей с одинаковыми наборами весов. Данный вид сетей позволяет сравнить вектора признаков двух объектов с целью выделить их семантическое сходство или различие. Сиамская нейронная сеть представляет собой нелинейное [[Отображения|отображение]] данных с целью приблизить друг к другу схожие объекты и разнести различные объекты на максимально возможное расстояние. Сиамские сети получили свое название от сиамских близнецов, физически приросших друг к другу, из-за использования сразу двух подсетей, разделяющих один набор весов. Эти подсети могут быть представлены многослойными [[Нейронные сети, перцептрон|перцептронами]] (англ. multilayer perceptron), [[Сверточные нейронные сети|сверточными нейронными сетями]] (англ. convolutional neural network) и другими. |
== Мотивация == | == Мотивация == | ||
Строка 5: | Строка 5: | ||
Рассмотрим следующую ситуацию: некоторая компания хочет создать систему, которая, основываясь на фотографии лица человека, могла бы установить, является ли он ее сотрудником. В этом случае она, например, разрешает ему доступ на территорию предприятия. Пусть в компании работает <math>n</math> человек. Тогда может быть выделено <math>n+1</math> классов (<math>n</math> классов сотрудников и один класс не сотрудника). Каждый из этих классов может быть записан в форме вектора длины <math>n+1</math> с помощью one-hot кодирования. Для решения задачи классификации фотографии в один из выделенных <math>n+1</math> классов может быть использована сверточная нейронная сеть, возвращающая класс сотрудника в векторной форме. Однако число сотрудников компании может меняться, старые работники могут увольняться, а на их место приходить новые. Каждое такое изменение потребовало бы переобучения всей сети, что может быть накладно для крупных компаний. Более того, не все сотрудники имеют большое количество своих фотографий (необходимое для обучения сверточной нейронной сети), или не желают делиться большей их частью. | Рассмотрим следующую ситуацию: некоторая компания хочет создать систему, которая, основываясь на фотографии лица человека, могла бы установить, является ли он ее сотрудником. В этом случае она, например, разрешает ему доступ на территорию предприятия. Пусть в компании работает <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>, мы можем с высокой уверенностью сказать, что наш посетитель является сотрудником компании. Такое решение может быть реализовано с помощью сиамских нейронных сетей, которые рассмотрены ниже. |
== Сиамская нейронная сеть == | == Сиамская нейронная сеть == | ||
Строка 13: | Строка 13: | ||
[[Файл:Siamese neural net architecture types.png|thumb|300px| Рисунок 2 — основные типы архитектур сиамской нейронной сети.]] | [[Файл: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, \dots, n\}</math>, состоящих из пар <math>(x_i, 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>). Будем подавать наши пары векторов на вход сиамской | + | Зададимся набором данных <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>C</math> — число классов. Создадим обучающий набор данных <math>S = \{(x_i, x_j, z_{ij}), i = 1, \dots, n; j = 1, \dots, n\}</math>, состоящих из пар <math>(x_i, 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>. | В общем случае сиамская сеть состоит из двух подсетей, выходы которых подаются на вход другого модуля, который генерирует конечный выход. Рассмотрим Рис. 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>. | ||
Строка 23: | Строка 23: | ||
Третья архитектура полезна для детального сравнения двух объектов, необходимого, например, при отслеживании пешеходов<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>. Первые две архитектуры показывают хорошие результаты при классификации. | Третья архитектура полезна для детального сравнения двух объектов, необходимого, например, при отслеживании пешеходов<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>, которые могут принадлежать как одному, так и разным классам: | + | Существует много различных [[Функция потерь и эмпирический риск|функций потерь]] (англ. 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>, | <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>, | ||
− | где <math>\tau</math> — это заранее заданный предел. Вторая функция потерь — triplet loss function — | + | где <math>\tau</math> — это заранее заданный предел. Вторая функция потерь — '''triplet loss function''' — использует объект рассматриваемого класса (или якорь, англ. anchor) <math>h_i</math>, с которым будет проводиться сравнение, а также два других объекта: один принадлежащий к тому же классу (англ. neighbor) <math>h_j</math>, и один не принадлежащий к этому классу (англ. distant) <math>h_k</math>: |
<math>l(x_i, x_j, x_k) = \max(0, ||h_i-h_j||_2^2 - ||h_i-h_k||_2^2 + \alpha)</math>, | <math>l(x_i, x_j, x_k) = \max(0, ||h_i-h_j||_2^2 - ||h_i-h_k||_2^2 + \alpha)</math>, | ||
− | где <math>\alpha</math> — это заранее заданный предел. Обе функции стремятся приблизить похожие объекты | + | где <math>\alpha</math> — это заранее заданный предел. Обе функции стремятся приблизить похожие объекты и увеличить расстояние между разными объектами. В некоторых случаях возможно их совместное применение для достижения наилучшего результата<ref name="both">X. Di and V. M. Patel. Deep tattoo recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops, pages 51–58, 2016.</ref>. Тогда [[Функция потерь и эмпирический риск|эмпирический риск]] (англ. error function) равен |
<math>L(W) = \sum l + \mu R(W)</math>, | <math>L(W) = \sum l + \mu R(W)</math>, | ||
− | где <math>R(W)</math> — это член, регуляризующий обобщающую способность сети, <math>W</math> — это матрица параметров нейронных подсетей, а <math>\mu</math> — это гиперпараметр, отвечающий за степень регуляризации. Для минимизации этой функции обычно применяется [[Стохастический градиентный спуск|градиентный спуск]] (англ. gradient descent). | + | где <math>\sum l</math> — это результат суммирования значений функции потерь по всему обучающему набору данных, <math>R(W)</math> — это член, регуляризующий обобщающую способность сети, <math>W</math> — это матрица параметров нейронных подсетей, а <math>\mu</math> — это гиперпараметр, отвечающий за степень регуляризации. Для минимизации этой функции обычно применяется [[Стохастический градиентный спуск|градиентный спуск]] (англ. gradient descent). |
== Сеть триплетов == | == Сеть триплетов == | ||
Строка 41: | Строка 41: | ||
[[Файл:Triplet neural net.png|thumb|300px| Рисунок 3 — обобщенная архитектура сети триплетов.]] | [[Файл:Triplet neural net.png|thumb|300px| Рисунок 3 — обобщенная архитектура сети триплетов.]] | ||
− | '''Сеть триплетов''' (англ. Triplet network) (см. Рис. 3) представляет собой модификацию сиамской сети с тремя сверточными нейронными подсетями с общими параметрами. В центральную подсеть подается объект <math>x_i</math> класса <math>y</math> | + | '''Сеть триплетов''' (англ. Triplet network) (см. Рис. 3) представляет собой модификацию сиамской сети с тремя сверточными нейронными подсетями с общими параметрами. В центральную подсеть подается объект <math>x_i</math> рассматриваемого класса <math>y</math>. В одну из двух оставшихся подсетей подается объект <math>x_j</math> того же класса <math>y</math> (положительный пример), а в другую — объект <math>x_k</math>, не принадлежащий к классу <math>y</math> (негативный пример). Сочетание центральной подсети с каждой из двух других подсетей образует сиамскую сеть. Выходы <math>o_W^{(0)}</math> и <math>o_W^{(1)}</math> обеих сиамских сетей подаются на последний слой-компаратор. Было отмечено, что при обучении сети триплетов в качестве функции потерь удобнее использовать среднеквадратическую ошибку<ref name="triplet">Elad Hoffer, Nir Ailon, "Deep metric learning using Triplet network", 2018.[https://arxiv.org/abs/1412.6622]</ref>. |
Как сиамская сеть, так и сеть триплетов показывают хорошие результаты при сравнении изображений. Однако, в отличие от сиамской сети, сеть триплетов не требует нормализации данных. | Как сиамская сеть, так и сеть триплетов показывают хорошие результаты при сравнении изображений. Однако, в отличие от сиамской сети, сеть триплетов не требует нормализации данных. | ||
Строка 49: | Строка 49: | ||
Сиамские нейронные сети нашли широкое применение в области [[Компьютерное зрение|компьютерного зрения]], [[Распознавание речи|распознавания речи]] и [[Обработка естественного языка|обработки естественных языков]]. Были предложены модели для распознавания манеры ходьбы<ref name="gait">C. Zhang, W. Liu, H. Ma and H. Fu, "Siamese neural network based gait recognition for human identification," 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Shanghai, 2016, pp. 2832-2836, doi: 10.1109/ICASSP.2016.7472194.</ref>, поведения пользователя в интернете<ref name="userid">Y. Qiao, Y. Wu, F. Duo, W. Lin and J. Yang, "Siamese Neural Networks for User Identity Linkage Through Web Browsing," in IEEE Transactions on Neural Networks and Learning Systems, vol. 31, no. 8, pp. 2741-2751, Aug. 2020, doi: 10.1109/TNNLS.2019.2929575.</ref>, множественного трекинга пешеходов<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>, и т.д.<ref name="bamknote">M. E. Hossain, A. Islam and M. S. Islam, "A Proficient Model to Classify Bangladeshi Bank Notes for Automatic Vending Machine Using a Tıny Dataset with One-Shot Learning & Siamese Networks," 2020 11th International Conference on Computing, Communication and Networking Technologies (ICCCNT), Kharagpur, India, 2020, pp. 1-4, doi: 10.1109/ICCCNT49239.2020.9225405.</ref><ref name="parkinson">S. Bhati, L. M. Velazquez, J. Villalba and N. Dehak, "LSTM Siamese Network for Parkinson’s Disease Detection from Speech," 2019 IEEE Global Conference on Signal and Information Processing (GlobalSIP), Ottawa, ON, Canada, 2019, pp. 1-5, doi: 10.1109/GlobalSIP45357.2019.8969430.</ref><ref name="vehicle">I. O. de Oliveira, K. V. O. Fonseca and R. Minetto, "A Two-Stream Siamese Neural Network for Vehicle Re-Identification by Using Non-Overlapping Cameras," 2019 IEEE International Conference on Image Processing (ICIP), Taipei, Taiwan, 2019, pp. 669-673, doi: 10.1109/ICIP.2019.8803810.</ref> Данный вид сетей также может быть использован для снижения размерности. | Сиамские нейронные сети нашли широкое применение в области [[Компьютерное зрение|компьютерного зрения]], [[Распознавание речи|распознавания речи]] и [[Обработка естественного языка|обработки естественных языков]]. Были предложены модели для распознавания манеры ходьбы<ref name="gait">C. Zhang, W. Liu, H. Ma and H. Fu, "Siamese neural network based gait recognition for human identification," 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Shanghai, 2016, pp. 2832-2836, doi: 10.1109/ICASSP.2016.7472194.</ref>, поведения пользователя в интернете<ref name="userid">Y. Qiao, Y. Wu, F. Duo, W. Lin and J. Yang, "Siamese Neural Networks for User Identity Linkage Through Web Browsing," in IEEE Transactions on Neural Networks and Learning Systems, vol. 31, no. 8, pp. 2741-2751, Aug. 2020, doi: 10.1109/TNNLS.2019.2929575.</ref>, множественного трекинга пешеходов<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>, и т.д.<ref name="bamknote">M. E. Hossain, A. Islam and M. S. Islam, "A Proficient Model to Classify Bangladeshi Bank Notes for Automatic Vending Machine Using a Tıny Dataset with One-Shot Learning & Siamese Networks," 2020 11th International Conference on Computing, Communication and Networking Technologies (ICCCNT), Kharagpur, India, 2020, pp. 1-4, doi: 10.1109/ICCCNT49239.2020.9225405.</ref><ref name="parkinson">S. Bhati, L. M. Velazquez, J. Villalba and N. Dehak, "LSTM Siamese Network for Parkinson’s Disease Detection from Speech," 2019 IEEE Global Conference on Signal and Information Processing (GlobalSIP), Ottawa, ON, Canada, 2019, pp. 1-5, doi: 10.1109/GlobalSIP45357.2019.8969430.</ref><ref name="vehicle">I. O. de Oliveira, K. V. O. Fonseca and R. Minetto, "A Two-Stream Siamese Neural Network for Vehicle Re-Identification by Using Non-Overlapping Cameras," 2019 IEEE International Conference on Image Processing (ICIP), Taipei, Taiwan, 2019, pp. 669-673, doi: 10.1109/ICIP.2019.8803810.</ref> Данный вид сетей также может быть использован для снижения размерности. | ||
− | Однако наиболее популярное применение | + | Однако наиболее популярное применение сиамских сетей — это распознавание лиц. Первые автоматизированные решения в этой области появились еще в 1960-е годы. Однако свою популярность распознание лиц приобрело после публикации метода eigenface<ref name="eigenface">M. Turk and A. Pentland, “Eigenfaces for recognition,” Journal of cognitive neuroscience, vol. 3, no. 1, pp. 71–86, 1991.</ref>, использующего алгоритмы снижения размерности (например, [[Метод главных компонент (PCA)|PCA]]) для компактного представления признаков. Позже, данное решение было улучшено с помощью применения сверточных нейронных сетей. Сиамские нейронные сети являются усовершенствованием над нейронными сетями и часто используются в задачах, когда фактическое число классов велико или не известно во время обучения, а количество объектов в классах мало. |
== См. также == | == См. также == | ||
Строка 68: | Строка 68: | ||
* Coursera. Convolutional Neural Networks [https://www.coursera.org/learn/convolutional-neural-networks/home/welcome]. | * Coursera. Convolutional Neural Networks [https://www.coursera.org/learn/convolutional-neural-networks/home/welcome]. | ||
− | [[Категория:Нейронные сети]] | + | [[Категория:Нейронные сети]] [[Категория:Глубокое обучение]] |
Текущая версия на 11:20, 1 сентября 2022
Сиамская нейронная сеть (англ. Siamese neural network) — это разновидность искусственной нейронной сети (англ. artificial neural network), которая состоит из двух идентичных нейронных подсетей с одинаковыми наборами весов. Данный вид сетей позволяет сравнить вектора признаков двух объектов с целью выделить их семантическое сходство или различие. Сиамская нейронная сеть представляет собой нелинейное отображение данных с целью приблизить друг к другу схожие объекты и разнести различные объекты на максимально возможное расстояние. Сиамские сети получили свое название от сиамских близнецов, физически приросших друг к другу, из-за использования сразу двух подсетей, разделяющих один набор весов. Эти подсети могут быть представлены многослойными перцептронами (англ. multilayer perceptron), сверточными нейронными сетями (англ. convolutional neural network) и другими.
Содержание
Мотивация
Рассмотрим следующую ситуацию: некоторая компания хочет создать систему, которая, основываясь на фотографии лица человека, могла бы установить, является ли он ее сотрудником. В этом случае она, например, разрешает ему доступ на территорию предприятия. Пусть в компании работает
человек. Тогда может быть выделено классов ( классов сотрудников и один класс не сотрудника). Каждый из этих классов может быть записан в форме вектора длины с помощью one-hot кодирования. Для решения задачи классификации фотографии в один из выделенных классов может быть использована сверточная нейронная сеть, возвращающая класс сотрудника в векторной форме. Однако число сотрудников компании может меняться, старые работники могут увольняться, а на их место приходить новые. Каждое такое изменение потребовало бы переобучения всей сети, что может быть накладно для крупных компаний. Более того, не все сотрудники имеют большое количество своих фотографий (необходимое для обучения сверточной нейронной сети), или не желают делиться большей их частью.Решением данной проблемы может быть обучение сети не распознавать каждого отдельного сотрудника, а находить сходство между фотографиями двух людей. В качестве таких фотографий могут быть использованы фотография человека, который пытается попасть на территорию предприятия, и фотография одного из сотрудников компании. Например, мы можем выбрать некоторый предел
и обучить сеть так, чтобы она возвращала значение , если фотографии похожи, и , если они разные. В таком случае нам будет достаточно попарно сравнить с помощью нашей сети фотографию посетителя с фотографиями сотрудников компании, и, если выходное значение для одной из пар будет меньше , мы можем с высокой уверенностью сказать, что наш посетитель является сотрудником компании. Такое решение может быть реализовано с помощью сиамских нейронных сетей, которые рассмотрены ниже.Сиамская нейронная сеть
Зададимся набором данных
, состоящим из векторов признаков размера с метками , где — число классов. Создадим обучающий набор данных , состоящих из пар с бинарными метками . Если оба вектора признаков и принадлежат к одному и тому же классу, то , иначе . Разделим обучающий набор данных на два подмножества: одно — со схожими парами (или с ), другое — с различающимися парами (или с ). Будем подавать наши пары векторов на вход сиамской сети.В общем случае сиамская сеть состоит из двух подсетей, выходы которых подаются на вход другого модуля, который генерирует конечный выход. Рассмотрим Рис. 1, на котором
и — это входы, — общие веса/параметры, а и — выходы обеих подсетей. Сиамская сеть представляет собой отображение , для которого Евклидово расстояние максимально мало́ при и максимально велико при . Сеть возвращает оценку того, насколько различны и .Существует три главных вида структуры сиамских нейронных сетей (см. Рис. 2):
- Входы и подаются на две параллельные подсети, представляющие собой две отдельные сети с одними и теми же весами и смещениями. Для выходов и этих сетей подсчитывается метрика расстояния , которая подается на выходной слой, оценивающий схожесть между входами подсетей.
- Несколько последних слоев подсетей объединены, за ними следуют несколько дополнительных слоев. На последнем слое применяется softmax-преобразование. Данная архитектура известна под названием In-network stacking.
- Оба входа и конкатенируются и подаются на вход единой сети, завершающейся слоем с softmax-преобразованием.
Третья архитектура полезна для детального сравнения двух объектов, необходимого, например, при отслеживании пешеходов[1]. Первые две архитектуры показывают хорошие результаты при классификации.
Существует много различных функций потерь (англ. loss function) для обучения сиамских нейронных сетей. Рассмотрим две наиболее популярные из них. Первая — contrastive loss function — использует пары объектов , которые могут принадлежать как одному, так и разным классам:
,
где
— это заранее заданный предел. Вторая функция потерь — triplet loss function — использует объект рассматриваемого класса (или якорь, англ. anchor) , с которым будет проводиться сравнение, а также два других объекта: один принадлежащий к тому же классу (англ. neighbor) , и один не принадлежащий к этому классу (англ. distant) :,
где [2]. Тогда эмпирический риск (англ. error function) равен
— это заранее заданный предел. Обе функции стремятся приблизить похожие объекты и увеличить расстояние между разными объектами. В некоторых случаях возможно их совместное применение для достижения наилучшего результата,
где градиентный спуск (англ. gradient descent).
— это результат суммирования значений функции потерь по всему обучающему набору данных, — это член, регуляризующий обобщающую способность сети, — это матрица параметров нейронных подсетей, а — это гиперпараметр, отвечающий за степень регуляризации. Для минимизации этой функции обычно применяетсяСеть триплетов
Сеть триплетов (англ. Triplet network) (см. Рис. 3) представляет собой модификацию сиамской сети с тремя сверточными нейронными подсетями с общими параметрами. В центральную подсеть подается объект [3].
рассматриваемого класса . В одну из двух оставшихся подсетей подается объект того же класса (положительный пример), а в другую — объект , не принадлежащий к классу (негативный пример). Сочетание центральной подсети с каждой из двух других подсетей образует сиамскую сеть. Выходы и обеих сиамских сетей подаются на последний слой-компаратор. Было отмечено, что при обучении сети триплетов в качестве функции потерь удобнее использовать среднеквадратическую ошибкуКак сиамская сеть, так и сеть триплетов показывают хорошие результаты при сравнении изображений. Однако, в отличие от сиамской сети, сеть триплетов не требует нормализации данных.
Применение
Сиамские нейронные сети нашли широкое применение в области компьютерного зрения, распознавания речи и обработки естественных языков. Были предложены модели для распознавания манеры ходьбы[4], поведения пользователя в интернете[5], множественного трекинга пешеходов[1], и т.д.[6][7][8] Данный вид сетей также может быть использован для снижения размерности.
Однако наиболее популярное применение сиамских сетей — это распознавание лиц. Первые автоматизированные решения в этой области появились еще в 1960-е годы. Однако свою популярность распознание лиц приобрело после публикации метода eigenface[9], использующего алгоритмы снижения размерности (например, PCA) для компактного представления признаков. Позже, данное решение было улучшено с помощью применения сверточных нейронных сетей. Сиамские нейронные сети являются усовершенствованием над нейронными сетями и часто используются в задачах, когда фактическое число классов велико или не известно во время обучения, а количество объектов в классах мало.
См. также
Примечания
- ↑ 1,0 1,1 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.
- ↑ X. Di and V. M. Patel. Deep tattoo recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops, pages 51–58, 2016.
- ↑ Elad Hoffer, Nir Ailon, "Deep metric learning using Triplet network", 2018.[1]
- ↑ C. Zhang, W. Liu, H. Ma and H. Fu, "Siamese neural network based gait recognition for human identification," 2016 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Shanghai, 2016, pp. 2832-2836, doi: 10.1109/ICASSP.2016.7472194.
- ↑ Y. Qiao, Y. Wu, F. Duo, W. Lin and J. Yang, "Siamese Neural Networks for User Identity Linkage Through Web Browsing," in IEEE Transactions on Neural Networks and Learning Systems, vol. 31, no. 8, pp. 2741-2751, Aug. 2020, doi: 10.1109/TNNLS.2019.2929575.
- ↑ M. E. Hossain, A. Islam and M. S. Islam, "A Proficient Model to Classify Bangladeshi Bank Notes for Automatic Vending Machine Using a Tıny Dataset with One-Shot Learning & Siamese Networks," 2020 11th International Conference on Computing, Communication and Networking Technologies (ICCCNT), Kharagpur, India, 2020, pp. 1-4, doi: 10.1109/ICCCNT49239.2020.9225405.
- ↑ S. Bhati, L. M. Velazquez, J. Villalba and N. Dehak, "LSTM Siamese Network for Parkinson’s Disease Detection from Speech," 2019 IEEE Global Conference on Signal and Information Processing (GlobalSIP), Ottawa, ON, Canada, 2019, pp. 1-5, doi: 10.1109/GlobalSIP45357.2019.8969430.
- ↑ I. O. de Oliveira, K. V. O. Fonseca and R. Minetto, "A Two-Stream Siamese Neural Network for Vehicle Re-Identification by Using Non-Overlapping Cameras," 2019 IEEE International Conference on Image Processing (ICIP), Taipei, Taiwan, 2019, pp. 669-673, doi: 10.1109/ICIP.2019.8803810.
- ↑ M. Turk and A. Pentland, “Eigenfaces for recognition,” Journal of cognitive neuroscience, vol. 3, no. 1, pp. 71–86, 1991.
Источники информации
- Lev V. Utkin, Maxim S. Kovalev, Ernest M. Kasimov, "An explanation method for Siamese neural networks", 2019. [2]
- A. Nandy, S. Haldar, S. Banerjee and S. Mitra, "A Survey on Applications of Siamese Neural Networks in Computer Vision," 2020 International Conference for Emerging Technology (INCET), Belgaum, India, 2020, pp. 1-5, doi: 10.1109/INCET49848.2020.9153977.
- H. Wu, Z. Xu, J. Zhang, W. Yan and X. Ma, "Face recognition based on convolution siamese networks," 2017 10th International Congress on Image and Signal Processing, BioMedical Engineering and Informatics (CISP-BMEI), Shanghai, 2017, pp. 1-5, doi: 10.1109/CISP-BMEI.2017.8302003.
- Coursera. Convolutional Neural Networks [3].