Об итогах конкурса MERC-2017: победители и комментарии
Подошел к концу и объявляется закрытым первый конкурс по машинному обучению MERC-2017 от Neurodata Lab, проведенный на собственной площадке Datacombats (вскоре мы представим обновленную, полноценную версию платформы). Время подвести некоторые итоги и прокомментировать результаты. С визуализацией статистики вы можете ознакомиться в предыдущем посте нашего блога.
Как возникла идея конкурса
Наша лаборатория — в силу природы и специфики эмоциональных данных, с которыми мы имеем дело, — занимается машинным обучением, а точнее — технологиями распознавания эмоций в аудио- и видеопотоках. Это не слишком изученная область — в год публикуется в среднем лишь от двух до пяти профильных статей, а точность state-of-the-art подходов далека от приемлемой. И если по изображениям (фотографиям) людей базовые эмоции распознаются в целом неплохо, то с речью всё на порядок сложнее. К тому же адекватных попыток использовать язык тела и движения глаз почти не было, хотя это весьма информативные источники. Не радует и проблема объединения нескольких каналов — не придумано ничего лучше наивного сведения воедино всех доступных фичей (признаков) или же предсказания отдельных моделей.
Другая актуальная для нас проблема состоит в том, что в реальной жизни не все данные нам доступны. Например, мы не можем видеть лицо человека за кадром, либо движения рук человека, снятого крупным планом, бывают и технические сбои: положим, барахлит микрофон, создавая серьезные помехи и шумы.
Обе проблемы предполагают огромное число гипотез, призванных помочь в их решении. Опробовать каждую физически затруднительно. Именно поэтому мы решили организовать конкурс и обратиться к коллективному разуму.
Постановка задачи и предложенные данные
У нас имеется собственный, лабораторного типа, размеченный эмоциональный датасет — RAMAS. Он состоит примерно из 7 часов видео, на которых различные пары актеров разыгрывают сценки из реальной жизни, контурно придерживаясь сценария, допускающего высокую степень импровизации и вариативности в подаче материала. Каждый этюд размечен внешними аннотаторами-психологами (по 5–6 человек min на один эпизод) на предмет проявления в нем каких-либо эмоций. Собственно, их и нужно было предсказывать по фичам, которые мы считали для видео.
Давать участникам сами видеофайлы мы не стали, дабы избежать возможной ситуации с заново проделанной ручной разметкой с их стороны, поэтому ограничились признаками. Здесь мы столкнулись с первым подводным камнем — нужно было объяснить людям, почему именно эти фичи мы считали и каким образом. Если в случае со звуком, телом и глазами можно сослаться на референтные статьи, что и было сделано, то с лицом требовался другой подход. У нас было два рабочих варианта. Первый состоит в выделении 68 ключевых точек на лице. В этом случае понятно, что за что отвечает, можно даже успешно визуализировать, и уж тем более легко объяснить, почему так, но наши внутренние эксперименты показали, что значительный объем информации при таком подходе теряется. Мы от него отказались в пользу следующей схемы: выделяем лица на всех кадрах в видео, прогоняем их через предобученную нейросеть, берем выход с предпоследнего полносвязного слоя, а затем снижаем размерность с помощью метода главных компонент. Более подробно этот и прочие технические аспекты мы осветили в описании конкурса.
Разумеется, мы хотели свести вероятность жульничества (брутфорса, гридсерча, подгона) к минимуму (а вот вероятность стакания деревьев к минимуму не свели, но об этом ниже). Для этого, проще говоря, мы переименовали таблички с фичами, чтобы участники не переобучались на конкретных актерах, ввели финальную проверку решений на недоступной в течение конкурса выборке и потребовали, чтобы модель на двух этапах была одной и той же.
Решения
К концу первого этапа мы получили около двадцати решений. Это довольно мало, причем среди них примерно половина преодолела 52.5% точности на публичной тестовой выборке (52.5% — это точность нашего решения, где мы все наивно сложили в lstm-сетку). На втором этапе мы выложили приватную часть тестовой выборки.
Мы просили участников прислать нам предсказания + саму модель + небольшой отчет с наводящими вопросами о том, из чего состоит модель, что делалось с фичами и т.п. Лидер на публичной части выборки довольно быстро выложил свое решение и по итогам конкурса сохранил свою позицию. Мы открывали полученный документ с надеждой узнать то, чего не знали сами.
Оказалось, что каналы объединять нужно в лоб, пропуски в данных заменять на медианное значение, а в качестве модели использовать xgboost с волшебным числом деревьев. Сразу проверили на обеих тестовых выборках, все сошлось. В собственных экспериментах мы, например, обучали генеративные сети предсказывать пропуски по остальным каналам (получилось сравнительно плохо), а ларчик просто открывался. Тем лучше. Так или иначе, работа с фичами и постпроцессингом была проделана немалая, но хотелось большего в плане работы с пропусками и объединения каналов.
На втором этапе из представленных решений два были заведомо неправильными, потому что метрики на публичном и приватном тестах различались на 0.3. Остальные составили нам компанию на ближайшую неделю, мы разобрали их полностью. Следовало проанализировать отчеты, запустить скрипты и сравнить результаты запуска на нашей стороне с присланными предсказаниями.
Проверка решений
Разбор методов не составил труда: решения отличались друг от друга препроцессингом признаков, архитектурами моделей и некоторыми мелочами. Почти все решения запустились «из коробки» ровно так, как нужно. Любопытно, что третья и четвертая позиции поменялись местами. В этом случае работа с признаками оказалась эффективнее оптимизации архитектуры нейросети. Занявший в итоге четвертое место участник, видимо, переобучился на публичной тестовой выборке, что привело к -6% на приватной.
Но самый сок заключался в проверке второго места. Решение команды состояло из ансамбля 22 тяжелых LSTM сеток. С первого раза повторить результаты не получилось, но примерно с пятого — пазл сложился. В следующий раз мы, конечно, добавим ограничение на скорость работы алгоритмов.
Финальный рейтинг и призы распределились так:
Забавно, что два совершенно разных подхода у первого и второго мест отличаются лишь в четвертом знаке после запятой. Это, само собой, случайность, а не признак высокой конкуренции, но тем не менее.
С другой стороны, наши ожидания о борьбе с пропусками и объединением каналов не оправдались. Участники почти не уделили этой проблеме внимания, оптимизируя обработку признаков и архитектуры. И всё же это бесценный опыт, который будет учтен во всех нюансах при подготовке наших следующих конкурсов.
Резюме по решениям-победителям:
I место: tEarth
Модель: lightXGB
Объединение каналов: feature-level
Обработка пропусков: заменены на среднее.
Особенности: для каждой секунды посчитаны медианы признаков, модель обучена на таких данных + постобработка предсказаний + обучение на очень согласованных данных (aas >= 0.8).
II место: 10011000
Модель: ансамбль lstm моделей, обученных с разными параметрами, всего 22 штуки
Объединение каналов: decision-level
Обработка пропусков: заполнены 0
Особенности: расчет предсказаний занимает более суток для каждого из тестов (в ~30 раз медленнее real time).
III место: lechatnoir
Модель: обычный lstm
Объединение каналов: объединены глаза и лицо, отбракованы некоторые фичи из кинекта, далее decision-level
Обработка пропусков: заполнены 0
Комментарий члена жюри
Алексей Потапов, д.т.н., профессор кафедры компьютерной фотоники и видеоинформатики НИУ ИТМО:
«Сперва отмечу, что простота использованных участниками методов (XGBoost, ансамбль LSTM) на деле относительна — какое-то время назад они могли бы показаться весьма сложными. Так что я бы сказал, что это просто современные, хорошо обкатанные методы, применение которых не требует излишних усилий на R&D, на что у участников не было времени в данных условиях. Даже на более длительных конкурсах такой результат достаточно типичен. В этом смысле он вполне закономерен, хотя могло свершиться и «чудо» в виде оригинальной модели. Стоит подчеркнуть, что полученный результат не означает того, что данные методы в такой конфигурации задачи действительно являются близкими к оптимальным (такое тоже не исключено, хоть и сомнительно).
Что касается примерно одинаковой точности у двух первых мест, — это любопытно, хотя отличие в четвертом знаке кажется всё же случайностью. Оно может быть связано со свойством самих данных — заметных улучшений добиться в принципе нельзя из-за неразделимости классов на предоставленных признаках. Но я в это априорно не верю. К примеру, на ImageNet лучшие решения до момента успешного применения сверточных сетей в 2012 году были очень близки, но потом глубокие сети побили все эти решения с большим отрывом. Мне кажется, в данной задаче также возможна аналогичная ситуация. Может быть, с помощью тех же генеративных моделей удастся такого достичь (хотя ожидать подобного прорыва в рамках месячного конкурса несколько оптимистично). Но почему столь разные модели все же дают близкие по качеству результаты, я пока затрудняюсь ответить.
Какие еще методы можно было использовать? Очевидно, что другие блоки рекуррентных сетей (GRU, псевдо-рекуррентные сети и т.д.); сверточные сети опять же, хотя, конечно, перспективнее было бы разрабатывать оригинальные модели».
Над текстом работал:
Григорий Стерлинг, математик, эксперт по машинному обучению и анализу данных Neurodata Lab