cover

Focal loss and Average Precision

November 12, 2018 2 min read

A simple loss function for multiclass classification with multiple classes that beautifully deals with class imbalance

I've joined a Kaggle competition on classification of protein locations on photographs. Разибрался в 2 метриках, которые часто используют для классификации со множеством классов как у нас (например, на одной фотографии клетки белок может быть и в цитоплазме, и в лизосомах, и в аппарате Голдьжи - 3 класса присутствуют) - Focal Loss и Mean Average Precision (mAP) / Average Precision (AP).

Идея Focal Loss такая: для задач онлайн-классификации объектов используют 2 подхода.

  1. Более старый R-CNN (2014-2016) делает 2 прохода по видео: сначала сканирующий для выделения потенциальных объектов, а потом основной со сверточной нейронкой. Работает точно, но долго: https://youtu.be/4eIBisqx9_g?t=553
  1. Более новый подход YOLO (2016-2017) "You Look (Live, кхе-кхе) Only Once" гораздо быстрее, делает только 1 проход. Но проблема в том, что у него AP где-то процентов на 10-20 ниже, что плохо: https://youtu.be/4eIBisqx9_g?t=669

Авторы статьи про Focal Loss (https://arxiv.org/pdf/1708.02002.pdf) заметили, что основная проблема с точностью в YOLO возникает из-за class imbalance - редкие и сложные классы - это там, где он сыпется. Поэтому в феврале 2018 они придумали свою loss function под названием Focal Loss, которая гораздо сильнее штрафует за ошибки в редких классах.

Она устроена так:

Начинаем с бинарного классификатора: пусть вероятность, что данный москвич - мужчина p(Y=1)=0.45. Давайте посчитаем loss function нашего классификатора мужчина/женщина как cross entropy:

    CE(p, Y=1) = -log(0.45),
    CE(p, Y=0) = -log(0.65).
  

Теперь допустим у нас есть более важный признак: негр ли он? Негры в Москве редки, частота, положим, 0.001 но мы хотим не ошибаться в этом классе. Тогда давайте усложним нашу обычную лосс-функцию, чтобы больше штрафовать за ошибку в цвете коже и меньше - за ошибку мужчина/женщина. Чтобы получить Focal Loss (FL), домножим CE на (1-p)^gamma, где gamma - произвольный параметр, например, 2.

    FL(p=0.001, негр=1) = -(1-p)^gamma * log(p) = -0.999^2 * log(0.001) = (-1) *(-7)
  

в то время как для мужчины/женщины

    FL(p=0.45, мужчина=1) = -(1-0.45)^gamma * log(p) = -0.65^2 * log(0.45) = (-0.62) * (-0.8)
  

Благодаря домножению на (1-p)^gamma получаются худо-бедно величины одного порядка, в то время как обычная кросс-энтропия неграми бы пренебрегла.

Отличное объяснение AP/mAP на 2 странички A4 вот тут, даже пересказывать не буду.

  • http://fastml.com/what-you-wanted-to-know-about-mean-average-precision/
  • https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173

Boris Burkov

Written by Boris Burkov who lives in Moscow, Russia, loves to take part in development of cutting-edge technologies, reflects on how the world works and admires the giants of the past. You can follow me in Telegram