Русский
Русский
English
Статистика
Реклама

Loss function

Тестируем комплементарную кросс-энтропию в задачах классификации текста

27.11.2020 20:16:23 | Автор: admin
Ранее в этом году И. Ким совместно с соавторами опубликовали статью [1], в которой предложили новую функцию потерь для задач классификации. По оценке авторов, с её помощью можно улучшить качество моделей как в сбалансированных, так и в несбалансированных задачах классификации в сочетании со стандартной кросс-энтропией.

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

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



Предварительный анализ


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

В статье комплементарная кросс-энтропия определяется следующим образом:



а полная функция потерь, используемая в обучении модели это сумма со стандартной кросс-энтропией:



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

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

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

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

Проектирование эксперимента


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

Мы будем использовать простой классификационный датасет с Kaggle [2]. Он подразумевает задачу классификации тональности с пятью классами. Однако крайние классы (очень негативные и очень положительные) и их более умеренные аналоги обычно приписываются очень похожим текстам (см. рис. 1 для примера). Вероятно, это связано с определенной процедурой генерации этого набора данных.



Рис. 1. Примеры однотипных текстов, отнесенных к разным классам.

Чтобы упростить задачу, мы переназначим классы и сделаем три: отрицательный, нейтральный, положительный.

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

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



Таблица 1. Классовые пропорции, используемые в экспериментах. Коэффициенты даны относительно количества отрицательных примеров.

Мы сравним комплементарную кросс-энтропию со стандартной кросс-энтропией без весов классов. Мы также не будем рассматривать другие подходы к решению классового дисбаланса, такие как upsampling и downsampling, и добавление синтетических и/или дополненных примеров. Это поможет нам сохранить эксперимент емким и простым.

Наконец, мы разделили данные на train, validation и test сеты в пропорции 0.7 / 0.1 / 0.2.

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

Детали проекта


Исходный код нашей реализации, включая предварительную обработку данных, функцию потерь, модель и эксперименты, доступны на GitHub [3]. Здесь мы просто рассмотрим его ключевые моменты.

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

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

Предварительная обработка данных включает в себя стандартную токенизацию при помощи модели en из SpaCy.

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

Детали процесса обучения: batch size 256, learning rate 3e-4, размер эмбеддингов 300, размер LSTM 128, уровень dropout 0,1, обучение в течение 50 эпох с остановкой после 5 эпох без улучшения качества на валидации. Мы используем одни и те же параметры как для экспериментов с комплементарной, так и для экспериментов со стандартной кросс-энтропией.

Результаты экспериментов





Таблица 2. Результаты экспериментов. CE для эксперимента со стандартной кросс-энтропией и ССЕ для комплементарной.

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

Ещё одну проблему комплементарной кросс-энтропии можно увидеть на графиках функции потерь (рис. 2).



Рис. 2. Графики потерь для степеней дисбаланса 1 / 0.2 / 0.2 (оранжевый) и 1 / 0.5 / 0.5 (зеленый).

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

В заключение


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

Примечания


[1] Y. Kim et al, 2020. Imbalanced Image Classification with Complement Cross Entropy. arxiv.org/abs/2009.02189
[2] www.kaggle.com/c/sentiment-analysis-on-movie-reviews/overview
[3] github.com/simbirsoft/cce-loss-text
Подробнее..

Не царская у тебя физиономия! Функции потерь для задачи распознавания лиц

08.12.2020 10:15:01 | Автор: admin

Кадр из фильма "Иван Васильевич меняет профессию"


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


Под катом мы рассмотрим различные модификации кросс-энтропии для задачи распознавания лиц.


Немного терминологии в контексте нашей задачи:


  • Бэкбон (backbone) некий черный ящик, сверточная сеть, входом которой является изображение лица, а выходом вектор, представляющий лицо. Примером может быть бэкбон из известного в узких кругах InsightFace Open Source решения для распознавания лиц с достаточно высоким качеством работы.
  • Вектор лица (embedding) вектор, представляющий лицо в многомерном пространстве. Размерность пространства обычно находится в пределах от 128 до 512. В нашей статье зафиксируем размерность вектора константой, равной 512. К векторам лиц мы предъявляем следующее требование: мы хотим их удобно сравнивать на основе некого расстояния между векторами. Другими словами, мы хотим, чтобы расстояние между векторами лиц одного человека было маленьким, а между векторами разных людей большим. Для этого требуем, чтобы скалярное произведение двух нормализованных векторов лиц (расстояние между векторами) одного и того же человека было бы как можно ближе к 1, а разных к -1 (ну или хотя бы 0).
  • Embedding-слой полносвязный слой, является последним и выходным слоем бэкбона, его размерность (количество нейронов) равна размерности вектора лица.
  • Слой классификации полносвязный слой, который иногда (зависит от функции потерь) следует за бэкбоном, его цель из вектора лица получить вектор вероятностей для классов, где каждый класс один человек. В общем случае его результат это $W^TX + b$, где $X$ вектор лица (выход бэкбона), $W$ веса полносвязного слоя, а $b$ свободный член. Переход от значений слоя к вероятностям обычно делается оператором softmax.

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


Существующие подходы к задаче распознавания лиц


Исторически в глубоких сверточных нейросетях существует два основных подхода к задаче распознавания лиц: обучение метрики (metric learning) и классификация.


Обучение метрики


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


$Loss = \sum_{i=0}^N[||f_{i}^a - f_{i}^p||_{2}^2 - [||f_{i}^a - f_{i}^n||_{2}^2 + \alpha],$


где:


  • $f^a$ anchor, вектор лица человека, с ним сравниваются два других вектора;
  • $f^p$ positive, вектор другого изображения того же человека;
  • $f^n$ negative, вектор лица другого человека;
  • $\alpha$ некая константа, которая отвечает за минимальное расстояние между позитивной и негативной парами.

Таким образом, мы хотим, чтобы расстояние между фотографиями одного человека было как минимум на $\alpha$ меньше расстояния между фотографией того же человека и какого-то другого.


Классификация


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


Идея Triplet Loss красивая и напрямую соответствует нашей задаче, а классификация отдает немного кашей из топора, но так вышло, что качество второго подхода лучше, все SotA обучены этим подходом, и основное развитие идей пошло по этому пути. Однако, Triplet Loss до сих пор можно использовать для дообучения (fine-tuning) модели. Так как нам интересен подход с лучшим качеством, рассмотрим подробней второй вариант и проследим историю развития идей.


Классификация в контексте распознавания лиц


Рассмотрим подробнее, что происходит, когда мы обучаем модель классифицировать людей, и почему потом можно использовать вектора лиц из, по сути, промежуточного слоя. На верхнем уровне путь от изображения лица до предсказания человека выглядит так:
Классификация
Веса слоя классификации это двумерная матрица, где первая размерность отвечает за вектор лица (в нашем случае 512), а вторая за количество классов (зависит от датасета, обычно десятки или сотни тысяч). Другими словами для каждого класса (человека) есть некий вектор, размерность которого равна размерности вектора лица. Этот вектор обычно называется центроид, то есть некий средний вектор конкретного человека. Весь процесс обучения теперь выглядит так: дай мне такой вектор фотографии, чтобы ближайшим из всех центроидов оказался центроид, соответствующий человеку на фотографии. Центроиды не фиксированы и изменяются в процессе обучения. Если рассматривать веса слоя классификации, то это будет выглядеть примерно так:



У классификации есть огромный плюс: каждое изображение мы сравниваем за один раз с десятками тысяч других изображений, а минус заключается в том, что это не то чтобы изображения, а некоторая обучаемая нами усредненная сущность человека. Несмотря на это, полученная модель хорошо учится отличать именно лица. Более того, время обучения остается контролируемым, в отличие от Triplet Loss когда имеем дело с уже неплохой моделью, становится крайне сложно искать тройки изображений, на которых сеть ошибается (hard sampling), поэтому обучение сети стремительно замедляется.


Просто посчитать дистанции от входного изображения до каждого из центроидов недостаточно непонятно, как нам за это штрафовать, поэтому для полноты картины нам не хватает двух типичных для классификации составляющих: Softmax для перехода от расстояний к вероятностям предсказаний и Cross Entropy для вычисления штрафа. В литературе они часто идут вместе и называются объединённо Softmax Loss.


Softmax Loss


Начнем с Softmax, который переводит полученные дистанции в вероятности предсказания. Введем обозначения:


  • $W$ веса слоя классификации (центроиды)
  • $X$ выход embedding-слоя, вектор входного изображения
  • $b$ bias, свободный член

Таким образом, выход слоя классификации (ни у него, ни у embedding-слоя нет активаций): $z =W^TX + b$. Функция Softmax($\sigma$) выглядит следующим образом:


$\sigma(z)_j = \frac{e^{z_j}} {\sum_{i=0}^C e^{z_i} }$


Следующий шаг добавить Cross Entropy, итоговый Softmax Loss имеет следующий вид:


$L_{Softmax} = - \frac {1}{N} \sum_{i=1}^N log\frac {e^{W^T_{y_i}x_i + b_{y_i}}}{\sum_{j=1}^C e^{W_j^Tx_i + b_j}}, $


Где $y_i$ индекс центроида нашего класса. Например, если на входе у нас фото Гарольда, и индекс класса Гарольда 42, то мы берем 42-ю строку в весах слоя классификации.


Все это классика и известно давно, а дальше самое интересное.


Подгоняем действительное под желаемое


Еще раз посмотрим на выход слоя классификации: $W^TX + b$ Чтобы свободный член не мешался уберем его: $b = 0$, получаем $W^TX$. Данное произведение является не чем иным, как скалярным произведением вектора лица на каждый из центроидов. Разберемся с размерностями:


  • $X$ имеет размерность $F\times B$, где $B $ размер батча (сколько изображений подаем на вход сети за одну итерацию), $F $ размерность вектора лица (у нас 512).
  • $W$ имеет размерность $F\times C$, где $C$ количество классов.

После умножения $W^T$ на $X$ получаем матрицу размером $C\times B$, то есть результат умножения каждого входного изображения на каждый из центроидов.


Теперь вспомним, как выглядит формула косинуса угла между двух векторов:


$cos(\theta) = \frac {dot(u,v)}{||u||||v||}$


Это как раз то, что нам нужно: угол между конкретным центроидом и вектором лица это скалярное произведение, деленное на две нормы. Нам мешают нормы векторов, чтобы это исправить, сделаем норму каждого центроида равной единице ($||W_i|| = 1$), а норму $X$ приравняем к некоторой константе s (scale), таким образом:


$W^TX = s*cos(\theta)$


Scale наш первый из двух гиперпараметров. Фиксирование его для всех векторов приводит к тому, что они теперь располагаются на гиперсфере. В 2D варианте это выглядит примерно так (один цвет один класс):

Изображение из статьи ArcFace, игрушечный пример для демонстрации: каждый класс выделен своим цветом, каждая точка на окружности отдельно взятое изображение, средний вектор каждого класса соединен с центром для наглядности. Обратим внимание, что классы соединены "без зазоров".


Перепишем Softmax Loss (теперь это называется Normalized Softmax Loss, N-Softmax) с учетом этих наблюдений:

$L_{N Softmax} = - \frac {1}{N} \sum_{i=1}^N log\frac {e^{s*cos(\theta_{y_i})}}{e^{s*cos(\theta_{y_i})} + \sum_{j=1, j\neq y_i}^C e^{s*cos(\theta_j)}}$


Мы разделили сумму в знаменателе на два слагаемых для удобства дальнейшего объяснения. На основе N-Softmax основаны все основные функции потерь для распознавания лиц.


Margin-Based Loss


Итак, у нас есть некие центроиды и текущий вектор лица, а после слоя классификации косинусы углов между ними. Если мы будем обучать с обычным softmax loss, то сети будет достаточно просто разделить классы между собой. Другими словами, у каждого человека есть свое пространство (decision boundary), в которое должны попадать все вектора его лиц (в идеальном случае). Границы этих пространств могут быть близки друг к другу. Почему это проблема? Потому что расстояние (угол) между изображениями на границах близких классов может быть меньше, чем расстояние между некоторыми изображениями одного класса. Тут возникает идея давайте добавим между этими пространствами некоторую пустую область (decision margin). Размер этой области margin второй главный гиперпараметр наших функций потерь, о первом мы говорили ранее: scale норма вектора лица. Графически на нашей 2D гиперсфере это выглядит так (рисунок из статьи ArcFace):



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


Так как мы говорим об углах между векторами, margin (обозначим для краткости $m$) можно добавить в три места в функцию потерь:


  1. Домножить на угол. То есть для позитивного случая вместо $cos(\theta)$ будет $cos(m*\theta)$. Этот метод используют две работы: Large-Margin Softmax Loss и SphereFace. Этот подход не хватает звезд с неба, и интересен скорее с исторической точки зрения, так как был первым вариантом Margin-based loss. Функция потерь выглядит следующим образом:


    $L_{SphereFace} = - \frac {1}{N} \sum_{i=1}^N log\frac {e^{s*cos(m*\theta_{y_i})}}{e^{s*cos(m*\theta_{y_i})} + \sum_{j=1, j\neq y_i}^C e^{s*cos(\theta_j)}}$


  2. Отнять margin от косинуса угла. Теперь вместо $cos(\theta)$ у нас $cos(\theta) - m$ для позитивного случая. Про это тоже две основных работы: AM-Softmax и CosFace , что порождает некоторую путаницу, так как встречаются оба названия, но обе статьи про одно и то же. Функция потерь:


    $L_{CosFace} = - \frac {1}{N} \sum_{i=1}^N log\frac {e^{s*cos(\theta_{y_i}) - m}}{e^{s*cos(\theta_{y_i}) - m} + \sum_{j=1, j\neq y_i}^C e^{s*cos(\theta_j)}}$


  3. Прибавить margin непосредственно к углу: $cos(\theta)$ $cos(\theta + m)$. Эта идея показана в ArcFace. Функция потерь ArcFace имеет следующий вид:


    $L_{CosFace} = - \frac {1}{N} \sum_{i=1}^N log\frac {e^{s*cos(\theta_{y_i}+m) }}{e^{s*cos(\theta_{y_i}+m) } + \sum_{j=1, j\neq y_i}^C e^{s*cos(\theta_j)}}$


  4. Хочется отметить еще один вариант, он является развитием идеи ArcFace и называется AirFace. Margin так же, как и у ArcFace, добавляем к углу, но уходим от косинуса угла непосредственно к самому углу ($arccos(cos(\theta)) = \theta$). Чем дальше векторы друг от друга, тем больше угол, а нас это не особо устраивает (почему будет ниже), поэтому авторы добавляют немного эвристики, и теперь у нас не просто $\theta$, а $(\pi - 2\theta)/\pi$, и итоговая функция потерь имеет следующий вид:


    $L_{AirFace} = - \frac {1}{N} \sum_{i=1}^N log\frac {e^{s*(\pi - 2(\theta_{y_i}+m))/\pi}}{e^{s*(\pi - 2(\theta_{y_i}+m))/\pi} + \sum_{j=1, j\neq y_i}^C e^{s*(\pi - 2\theta_j)/\pi}}$



Три разновидности добавления margin добавление к углу, к косинусу угла и домножение на угол легли в основу многих модификаций (особенно ArcFace).


Margin & Scale


Мы более-менее разобрались, в чем идея развития функций потерь для распознавания лиц, но у нас есть два гиперпараметра scale (s) и margin (m), влияние которых пока не очевидно. Например, в статье AM Softmax предлагается брать $s = 30$, а $m = 0.35$, в ArcFace $s = 64$, a $m = 0.5$, а в CosFace (напомним, идея та же, что и AM Softmax) $s = 64$, a $m = 0.35$. В каждой статье приведены теоретические обоснования, почему параметры такие, но в целом это скорее подобрали эмпирически, о чем авторы честно пишут.


Тут на сцену выходит еще одна работа AdaCos, основная идея которой исследовать влияние scale и margin на предсказанную вероятность позитивного случая. Основные постулаты следующие:


  • Margin и scale зависят от количества классов вполне логичное умозаключение, о чем в предыдущих работах не особо упоминалось.
  • Авторы делают вывод о зависимости параметров scale и margin, фиксируют margin и смотрят влияние scale.
  • Предлагается формула для вычисления scale в зависимости от количества классов.
  • Авторы предлагают два варианта обучения с фиксированным и изменяемым scale
    В статье есть красивые графики для 2 тысяч и для 20 тысяч классов, приведем их без изменений, по оси Y у нас предсказание вероятность, что фото относится к своему классу, а по X угол между центроидом и вектором лица. Чем меньше вероятность, тем больше штраф, если вероятность равна единице, то штрафа нет:

    В верхнем ряду показано влияние scale (у авторов явно не указано, но можно предположить, что margin фиксирован и равен 0), в то время как в нижнем margin при scale=30. Как видно, чем больше scale, тем резче ступенька, а margin двигает ее вдоль оси X. Очевидно, что одинаково плохи граничные случаи слишком большие и слишком малые scale и margin, и истина где-то посередине, но где? В AdaCos предлагается выбор scale на основе количества классов (на графиках выше изображено пунктиром). Пропуская вывод, к которому есть вопросы: $s = \sqrt{2}*\ln{(C-1)}$, где $C$ количество классов. На основе этой формулы для большинства задач распознавания лиц s попадает примерно в диапазон [10, 25], что значительно меньше предлагаемых ранее.

    Последнее нововведение работы AdaCos динамичное изменение scale. В основном, scale уменьшается, формула пересчета основана на среднем угле в батче. В результатах, приведенных в статье, это улучшает качество.

    Сравнение функций потерь


    Мы можем двигать margin куда и как угодно, но как это работает, и почему у нас есть разница между вариантами, и есть ли вообще? Разберем академический подход и построим зависимость целевого значения от угла для позитивного случая. По оси X берем угол между центроидом и вектором лица, а по оси Y полученное значение функции с учетом наших манипуляций (для обычного N-softmax это будет $cos(\theta)$):

    Из интересного: CosFace ожидаемо просто сдвигает N-softmax вниз, а ArcFace влево. SphereFace, согласно оригинальной идее имеет смысл в пределах $\frac {\pi}{margin}$, в нашем случае до $\frac{\pi}{3}$. У ArcFace есть неприятный хвостик с увеличением угла увеличивается target logit, что не очень хорошо, так как на этом участке чем больше угол, тем лучше. Другими словами, мы отдаляем фотографии человека от его центроида, если они в зоне этого хвоста (угол больше $\frac{5\pi}{6}$). Про этот момент в оригинальной статье не особо сказано, но при этом в реализациях (например, тут) есть небольшой интересный кусок кода, который его исправляет:

    # cosine - cos(theta)# phi - cos(theta + m)# th - cos(math.pi - m)# mm - sin(math.pi - m) * mif easy_margin:  phi = torch.where(cosine > 0, phi, cosine)  else:  phi = torch.where(cosine > th, phi, cosine - mm)
    


    Нечто под названием easy_margin и его антагонист направлены именно на устранение хвоста, графически это выглядит так:



    Easy margin заменяет поведение во всей зоне, где угол между вектором текущего лица и центроида больше $\frac{\pi}{2}$ на обычный N-Softmax ($cos(\theta)$), а not easy margin меняет только проблемный кусок. Однако, как показывает практика, даже случайная инициализация приводит к тому, что медиана углов находится в $\frac{\pi}{2}$, и даже негативные кейсы очень редко попадают в зону хвоста, а позитивные так и вовсе в качестве исключения, так что это дополнение мало сказывается на результате, но учесть это будет не лишним.


    Численные оценки качества приведены в каждой из работ, но для чистоты возьмем только независимые обзоры. Если коротко "в среднем" побеждает ArcFace. Например, в обзорной статье показано (таблицы 4 и 8 в работе):


    Loss LFW MegaFace, Rank1 @ $10^6$ MegaFace, Tar @ Far $10^{-6}$
    AM-Softmax/CosFace 99.33 0.9833 0.9841
    ArcFace 99.83 0.9836 0.9848
    SphereFace 99.42 0.9743 0.9766

    В другом обзоре тенденция та же (рисунок 3 в работе), тесты на LFW, заголовок столбца бэкбон-тренировочный датасет:


    Loss Resnet50-MSC MobileNet-MSC Resnet50-Casia MobileNet-Casia
    AM-Softmax/CosFace 99.3 97.65 99.34 98.46
    ArcFace 99.15 98.43 99.35 99.01
    SphereFace 99.02 96.86 99.1 97.83

    Авторы приходят к выводу, что ArcFace является SotA в вопросе функций потерь.


    Заключение


    Мы рассмотрели основные варианты функций потерь для задачи распознавания лиц. Все они заключается в добавлении дополнительного пространства между классами (margin) к предсказаниям сети, что позволяет значительно повысить качество. Из существующих вариантов стоит отметить AM Softmax (за счет простоты и очевидности) и ArcFace (лучшие результаты по большинству тестов). Для небольших сетей, где важна скорость, и не так важны десятые процента точности, можно рассмотреть AirFace.


    Литература


    Функции потерь:


    SphereFace https://arxiv.org/abs/1704.08063
    AM Softmax https://arxiv.org/abs/1801.05599
    CosFace https://arxiv.org/abs/1801.09414
    ArcFace https://arxiv.org/abs/1801.07698
    AirFace https://arxiv.org/abs/1907.12256


    Обзоры:


    Deep Face Recognition: A Survey https://arxiv.org/abs/1804.06655
    A Performance Evaluation of Loss Functions for Deep Face Recognition https://arxiv.org/abs/1901.05903

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru