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 подхода.
- Более старый R-CNN (2014-2016) делает 2 прохода по видео: сначала сканирующий для выделения потенциальных объектов, а потом основной со сверточной нейронкой. Работает точно, но долго: https://youtu.be/4eIBisqx9_g?t=553
- Более новый подход 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
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