Одна из распространенных проблем индустрии интернет-рекламы - это мошенничество. Несмотря на то, что методы мошенничества различаются на разных рынках, во всем мире есть много общего.

В этом посте мы встретимся:

  • Мошенники, меняющие имидж
  • Вложения, которые помогают находить расстояния, чтобы мы могли быстрее отличать изображения друг от друга.
  • Сиамская сеть с Triplet Loss объяснена простым языком
  • Уловки и хаки - чтобы мы могли лучше обучать сеть

Возможные атаки

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

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

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

Вот и вложение, которое нам поможет.

Что такое встраивание?

Встраивание - это относительно низкоразмерное пространство, в которое вы можете переводить многомерные векторы - в нашем случае изображения.

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

Вложения и расстояния

Итак, как выглядит процесс определения дубликата?

  • Когда новое изображение загружается в базу данных, вычисляются расстояния между внедрением загруженного изображения и встраиванием изображений, уже сохраненных в базе данных.
  • Если расстояние меньше порогового значения «Несомненно дубликат», мы можем сразу отметить листинг как мошенничество.
  • Если это расстояние больше порога «Несомненно оригинальное», мы можем передать изображение на сайт.
  • Если это расстояние находится между этими двумя порогами, то на помощь приходят модераторы - они могут определить, является ли изображение дубликатом или нет.

Таким образом, к любой системе поиска дубликатов предъявляется еще одно требование - она ​​должна не только правильно пометить дубликат, но и найти наиболее похожее на него изображение.

Встречайте сиамскую сеть с Triplet Loss

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

Это означает, что через ту же нейронную сеть, которую мы будем называть базовой сетью, мы запускаем первое изображение, затем аналогичное изображение (например, расширение, как в нашем случае!) И другое изображение. Давайте проверим, что мы будем делать дальше, с помощью приведенной ниже формулы (не волнуйтесь, мы скоро ее объясним!):

Здесь мы находим расстояние между исходным и похожим изображением (‖A - P‖) и расстояние между оригиналом и несходным изображением (‖A - N‖), так что одно расстояние намного меньше другого.

Что такое альфа?

А теперь давайте попробуем пойти на один уровень глубже - откуда взялась альфа и зачем она нужна? Это просто: поскольку задача обратного распространения - минимизировать потери, наиболее эффективным способом обучения этой нейронной сети с потерями без альфы было бы обнуление всех весов. Тогда расстояния были бы равны 0, а расстояние между расстояниями - тоже 0! Нейронная сеть довольна нулевыми потерями, но мы, наоборот, недовольны, потому что независимо от того, что мы делаем, на выходе всегда будут нули.

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

Генерация триплетов

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

Действительно, имея одно изображение, с помощью аугментаций можно сгенерировать несколько положительных примеров и выбрать несколько отрицательных примеров. Эти примеры могут быть любыми разными изображениями, но есть также некоторые методы выбора подходящего негативного примера, которые будут обсуждаться позже. Оказывается, одно изображение трансформируется в несколько (или даже много!) Триплетов, а многие триплеты означают лучше обученную сеть.

Легкие, полутвердые и твердые тройни

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

  • легкие тройки: ‖A - P‖ + α ‹‖A −N‖
  • полутвердые тройки: ‖A - P‖ ‹‖A - N‖‹ ‖A - P‖ + α
  • жесткие тройки: ‖A - N‖ ‹‖A − P‖

Как обычно, A - исходное изображение, P - подобное изображение (позитив), N - отличное изображение (негатив).

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

1. Оцените несколько случайных партий.

2. Выберите несколько троек с наибольшим проигрышем.

3. Смешайте случайные тройки с этими и получите, таким образом, партию для обучения.

И последнее, но не менее важное - трансферное обучение.

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

Использование сети

Сеть обучена, осталось только встраивать. Для этого нужно просто пропустить изображение через базовую сеть (без использования триплетов!), И на выходе будет конечный вектор. Как писалось раньше, теперь с ним можно делать что угодно - сразу использовать как отображение изображения, или преобразовать в хеш - это зависит только от задачи. Главное, что эта технология поможет быстро и эффективно выявить мошенников, пытающихся изменить изображение в рекламе.

Заключение

Сегодня мы узнали:

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