Блог

Команда Sberbank AI — о создании нейросети и покорении Kaggle

Команда Sberbank AI — о создании нейросети и покорении Kaggle

В современном информационном пространстве появляется все больше данных, и, как следствие, задач. Именно поэтому сегодня специалисты Data Science востребованы по всему миру. Сбербанк — не исключение. Талантливым профессионалам в области анализа данных всегда найдется место в нашем коллективе.

Например, в команде Лаборатории искусственного интеллекта Sberbank AI, занявшей второе место на международных соревнованиях Kaggle в области Data Science. О том, как это было, и что привело к победе, рассказали руководители направлений и исследователи данных Лаборатории AI, грандмастер Kaggle Александр Рыжков и мастер Kaggle Антон Вархушев.


Kaggle — это онлайн-площадка, сообщество которой насчитывает более 93 000 аналитиков данных. На этой платформе любая компания может устроить соревнование и получить решение той или иной прикладной бизнес-задачи. Каждая задача — реальный бизнес-кейс. Как правило, конкурсы на Kaggle устраивают достаточно крупные компании.

Соревнование, в котором участвовали сотрудники Сбербанка, организовала ведущая компания по геонауке — TGS. Конкурсантам TGS Salt Identification Challenge нужно было создать алгоритмы для поиска залежей соли. Исследователи из Лаборатории AI, выступившие в составе команды «Tim & Sberbank AI Lab», создали нейросеть, анализирующую изображения разрезов земной коры.

За победу боролись более 3 000 команд. По итогам соревнования Александр Рыжков стал грандмастером Kaggle (этим званием владеют всего 125 человек по всему миру), переместившись на 70-е место в общем мировом рейтинге, а его напарник и коллега Антон Вахрушев получил золотую медаль и еще на шаг приблизился к статусу грандмастера (став 132-м в общем рейтинге)!


Что нужно было делать

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

Представьте, насколько это волнительный момент: секунда, и ты можешь увидеть как эпический взлет, так и невероятное падение

Для обучения модели можно было использовать около 4 тысяч изображений, которые были размечены специалистами-геологами: к каждому изображению прилагалась маска (правильный ответ), где было видно реальное расположение соли. Для тестирования алгоритмов использовался более крупный набор изображений (около 18 тысяч).

Смысл отдельного тестового датасета в том, чтобы мы придумали собственное уникальное решение, предсказания которого Kaggle сравнит с правильными ответами. Самое интересное, Kaggle разбивает оценку результатов на две части:

  • В течение всего соревнования ты отправляешь свои предсказания в проверяющую систему. Например, если картинок всего сто, то на этом этапе оцениваются только случайные 50. Эти подсчеты отображаются в таблице участников (Public Leaderboard) и видны всем участникам.
  • В конце соревнования Kaggle вычисляет результат на оставшихся 50 картинках, независимо от промежуточных результатов. Итоги финального подсчета оглашают сразу же после окончания соревнования (это происходит в 0:00 UTC — 3 часа ночи по московскому времени). Теперь представьте, насколько это волнительный момент: секунда, и ты можешь увидеть как эпический взлет, так и невероятное падение.

Нейронная сеть

На фото ниже показана мозаика, собранная из 102 исходных изображений вертикальных срезов горной породы (маленьких квадратов). Цветами обозначена различная разметка наличия или отсутствия соли:

  • Зеленым показаны правильные маски из исходных данных
  • Синим отражены уверенные предсказания построенного алгоритма
  • Градиентом красного — неуверенные предсказания

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

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

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

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

Мы вложили логику человека в алгоритм постпроцессинга — и это дало нам существенное преимущество для продвижения на лидерборде

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

Как удалось победить

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

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

Но важнее количества сеток — количество разных людей с разными подходами

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

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

Когда чувствуешь, что запас идей иссякает, хочется прорыва, рождения каких-то новых подходов к задаче — именно тогда ты принимаешь решение объединиться в команду еще с кем-то

К концу соревнования мы шли восьмыми и, хоть и были очень довольны проделанной работой, на призовое место не рассчитывали — это был для нас приятный сюрприз. Фактически все соревнование мы участвовали вдвоем — в таком составе нам удалось добраться до ТОП-20 команд. Мы строили различные нейросети, используя достаточно большое количество вычислительных мощностей (домашние ПК, сервера на Amazon). Это оборудование существенно помогло в решении такого рода задач, поскольку создание нейронных сетей требует задействования существенных вычислительных ресурсов.

Примерно за месяц до конца соревнований мы дошли до ТОП-20, но дальше прорваться не удавалось: так и плясали от 16 к 20 месту. Когда чувствуешь, что запас идей иссякает, хочется прорыва, рождения каких-то новых подходов к задаче — именно тогда ты принимаешь решение объединиться в команду еще с кем-то. Обмен опытом, техниками и даже просто усреднение решений разных людей дает существенный профит. В итоге мы объединились с магистром технического института в Карлсруэ (Германия) — сейчас он проходит стажировку по беспилотным автомобилям в Volkswagen Research (в этой сфере, кстати, тоже может пригодиться ИИ). Стоит отметить, что он существенно помог успеть реализовать те идеи, которые были у нас в голове.

Немного о рейтинговой системе

У Kaggle работает рейтинговая система, стимулирующая участников. Во-первых, ты получаешь очки за каждое соревнование и продвигаешься в рейтинге международного сообщества Data Science. Кроме того, ты получаешь медали. Например, если попадаешь в ТОП-10 — тебе дают золотую, за чуть менее значимые заслуги — серебряную, затем — бронзу, далее идут просто очки.

Заслуги котируются не только на соревнованиях, но и в профессиональном сообществе

Заслуги котируются не только на соревнованиях, но и в профессиональном сообществе. Это существенно повышает шансы при трудоустройстве — в описаниях многих вакансий сейчас часто пишут: «участие в конкурсах Kaggle будет плюсом». Стоит только указать свою позицию в мировом рейтинге Kaggle в резюме, как на собеседовании с тобой начинают общаться совершенно по-другому.

Для того, чтобы получить уровень мастера Kaggle необходимо получить одну золотую и одну серебряную медали, а для звания грандмастера — уже целых пять золотых медалей, при этом одна из них должна быть завоевана при участии в одиночку. Сообщество участников соревнований на Kaggle насчитывает около 100 тысяч пользователей по всему миру, из них порядка десяти тысяч активны практически постоянно. Мастеров — около 1400 человек, а грандмастеров — всего 129.

Почему Сбербанк

Для того, чтобы двигаться вперед и создавать инновации, необходима сильная команда. В Лаборатории ИИ Сбербанка сейчас собрались очень компетентные и открытые люди. Взаимовыручка — одно из главных качеств нашего коллектива: всегда есть те, кто готов тебя выслушать и подсказать решение. Кроме того, наша команда разносторонне развита: каждый сотрудник обладает своим уникальным опытом и специализируется на чем-то своем. Это позволяет очень быстро найти ответ практически на любой вопрос.

Взаимовыручка — одно из главных качеств нашего коллектива

Еще одной немаловажной деталью является наличие вычислительных мощностей. Лаборатория искусственного интеллекта очень здорово оснащена — есть и что считать, и на чем. Это дает огромные возможности проводить эксперименты над всем, что придет в голову! В такие моменты начинаешь чувствовать, что развиваешь не только компанию, но и науку по всему миру, не говоря уже об интересных задачах.

Полезные советы начинающим

  • Старайтесь всегда работать с людьми, которые в чем-то сильнее вас — их опыт поможет вам стать лучше
  • Участвуйте в соревнованиях. Нет лучше способа научиться решать задачу, чем пробовать ее решать на практике руками. На курсах дают инструкции, в состязании вы принимаете вызов
  • Любую задачу изначально стоит попробовать решить самому, не применяя заранее заученный алгоритм — это позволит развиться в плане генерации идей
  • Прежде, чем пойти на Kaggle, подготовьтесь: пройдите курсы или почитайте научную литературу. Самым эффективным подходом с точки зрения получения начального опыта будет анализ предыдущих соревнований
  • Зайдите на форум того или иного соревнования — и вы почерпнете для себя много полезных идей
  • Также не стоит забывать о Kaggle Kernels — кусках кода или даже полноценных решениях, которые участники выкладывают в ходе состязания. Там можно найти, например, более быстрый способ считывания данных, который вы сможете применить в другой задаче
  • Решать, решать и, еще раз, решать. Чем больше ты решаешь, тем больше ты видел различных идей и решений — тем больше у тебя опыта. В дальнейшем тебе достаточно будет просто взглянуть на исходные данные, чтобы понять, что и как именно здесь можно применить

Поделись статьей с друзьями!