Привет, Хабр! Если кратко, приглашаем всех поучаствовать в необычном конкурсе по машинному обучению Black Box Challenge, который проходит при поддержке DCA.


Условия просты: нужно написать бота, который умеет играть в игру с неизвестными правилами. Победители получат ценные призы: от Xbox One до 300 тыс. рублей за первое место и возможность попасть в крутые компании на позицию специалиста по машинному обучению.

Ниже мы расскажем о соревновании в формате вопрос-ответ.

Что за соревнование?


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

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

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

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

В чем отличие от Kaggle?


Kaggle — это самая известная международная платформа для соревнований по машинному обучению. Все соревнования на Kaggle устроены примерно следующим образом:

  • Участник скачивает данные
  • Обучает у себя какую-либо модель (например, классификатор) по этим данным
  • Делает с помощью своей модели предсказания для неизвестных данных и создаёт статичный файл с ответами
  • Заливает файл с ответами на сервер Kaggle, где проверяется качество его предсказаний. Побеждает тот, чей файл с ответами точнее.

Наше соревнование устроено иначе:

  • Участник скачивает игровой симулятор и тренировочные уровни
  • Обучает бота играть на тренировочных уровнях
  • Заливает исходник своего бота на наш сервер, где проверяется, сколько очков он набирает на неизвестном для него уровне. Побеждает тот, чей бот набирает больше очков.

Иными словами, решение задачи на Kaggle это статичный файл с ответами. Решение в нашем соревновании — это обученный агент, взаимодействующий с неизвестной ему игровой средой.

Тогда в чем отличие от Russian AI Cup?


Если кратко, то тем, что правила неизвестны. Ежегодно наш партнёр Mail.ru проводит открытое соревнование по программированию искусственного — Russian AI Cup. Например, в прошлом году нужно было создать программу для управления одним или группой кодемобилей.

Если вы внимательно посмотрите на прошлогодних победителей Russian AI Cup, то окажется, что все их решения использовали априорные знания человека об устройстве игры и вообще не использовали машинное обучение.

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

Чтобы поспособствовать этому мы создали игру с неизвестными правилами.

Кто-то уже умеет учить машины играть в игры?


Да, эта область машинного обучения называется Reinforcement Learning. Не так давно гугловская компания Deep Mind (та самая, что которая создала AlphaGo) выпустила отличную статью «Playing Atari with Deep Reinforcement Learning», в которой научила программу играть в десятки игр Atari 2600 на человеческом уровне. Некоторые участники пытаются использовать их идеи для нашей игры, но, судя по чату в Telegram, пока не очень успешно :)

Как сейчас обстоят дела у участников?


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

Результат этого бота (2090 очков на валидационной выборке) мы считаем базовым уровнем для участников. На данный момент из более чем 850 зарегистрированных участников, 42 смогли преодолеть этот уровень, это оказалось не так просто, как нам казалось.

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

Что нужно, чтобы начать участвовать?


Достаточно иметь Python с установленным модулем numpy и уметь на нём программировать.

Если у вас почему-то нет питона, то рекомендуем установить Anaconda последней версии. Anaconda — это Python со множеством полезных библиотек для машинного обучения и анализа данных.

На каких языках можно писать?


Мы поддерживаем только Python. Ещё недавно можно было использовать только Python 2.7, но мы решили, что нет смысла противиться будущему и сделали поддержку Python 3.5.

Если у вас что-то не работает, не стесняйтесь, сразу же пишите нам. Стараемся всем помочь.

Какие призы?


Призовой фонд составляет более 600,000 рублей.

Эти средства будут распределены следующим образом:

1 место: 300,000 рублей
2 место: 170,000 рублей
3 место: 125,000 рублей

Кроме того, следующие 5 лучших участников получат Microsoft Xbox One.

А что там было про вакансии?


Партнёры соревнования — Data-Centric Alliance, Mail.ru, Skyeng постоянно ищут продвинутых специалистов по машинному обучению и анализу данных.

Участники, хорошо выступившие на нашем соревновании и предложившие нетривиальные подходы, будут приглашены на собеседования. А это значит, что впереди маячит карьера с ещё более интересными задачами в сфере машинного обучения.

Какие сроки?


30 мая 2016, 23:59 по Москве: крайний срок загрузки решений.
10 июня 2016: определение победителей.

Как следить за новостями?


У нас есть форум, где мы постим новости о соревновании, отвечаем на вопросы, и на котором участники делятся идеями. Также у нас есть два канала в Telegram для обсуждений: англоязычный и русскоязычный.

Задавайте свои вопросы в комментариях, мы с радостью ответим!

Комментарии (20)


  1. kraidiky
    18.04.2016 17:41
    +2

    Жаль, что такие правила. Мои сети на C# написаны, соответственно у вас не пойдут, даже если будут всех разрывать в клочья.


    1. sanblch
      18.04.2016 18:08
      +2

      Не столь сложно в питон конвертнуть, как нуля написать


      1. kraidiky
        18.04.2016 19:32

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


  1. GNC
    18.04.2016 17:57
    +5

    Определенно интересный челендж.
    Особенно полезна тут наблюдательность и находчивость.
    Нажиматели на кнопки в найропрограммах и фреймворках практически в полном составе потерпели крах.
    Банальные подходы, в т.ч. Q-learning/Deep Q learning, без тонкой настройки, оказались не очень-то эффективны в победе над черным ящиком.
    В общем, если вы интересуетесь Reinforcement Learning, смело принимайте участие.


    1. l27_0_0_1
      18.04.2016 20:50

      А что, кто-то настроил deep q learning так что у него заработало? Спрашиваю потому что сам попробовал и из того что я понял даже если хорошо настроить вряд ли что дельное выйдет.


  1. facha
    18.04.2016 18:33

    Не пойму, в чем принципиальное отличие от Kaggle. В том, где исполнятется код (у меня дома или организаторов)? Но суть самой «игры» ведь та же…


    1. Assargadon
      19.04.2016 11:58

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

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

      Такую задачу в Kaggle не запихнёшь.


  1. buriy
    18.04.2016 18:36

    А сколько у вас точек, в которых нужно предсказать значение, и сколько тренировочных данных с известными значениями?


    1. buriy
      18.04.2016 19:45
      +10

      Ага, нашёл. Поправьте меня пожалуйста, если я ошибаюсь:
      Если я правильно понимаю, то у вас 1200000 значений на уровень, сыграны только 2 стохастических уровня (ответы мы знаем на один из них?). И эти 1200000 значений нужно выдать за 240 секунд, т.к. со средней скоростью 5000 состояний в секунду.
      И на проверочном сервере, как я понимаю, нет GPU.
      В общем, компьютерным интеллектом тут и не пахнет — не пройдёт по скорости.
      Нужно просто максимально угадать правила игры и потом запрограммировать под них рефлекторного уровня агента.
      Говорите, машинное обучение?


      1. bbchallenge
        19.04.2016 16:28

        Пользователям доступны два уровня.
        Никаких ответов к уровням нет (как и к уровню в игре Марио, например, нет правильных ответов).
        Лимит времени на проверку на двух уровнях — Test & Validation — 1200 секунд.

        Говорите, машинное обучение?
        — мы приветствуем все подходы. Будет интересно, если у вас получится решить задачу без него.


  1. kenoma
    18.04.2016 20:14
    +5

    Установка уже радует:
    Sorry, but your python version is not supported!
    Please make sure you have numpy >= 1.10! Your version is 1.11.0


    1. bbchallenge
      19.04.2016 00:07

      Очень странно, напишите, пожалуйста, детали в ЛС.


  1. slonopotamus
    18.04.2016 21:10
    +16

    И опять статья с вопросом в заголовке, на который она не отвечает. Вы там сговорились что ли?


  1. Bronx
    18.04.2016 22:28
    +7

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

    А потом можно поменять абстрактные действия {0, 1, 2, 3} на конкретные «hold», «buy», «sell», и «sell all» :))


  1. ZlodeiBaal
    19.04.2016 00:21
    +6

    Партнёры соревнования — Data-Centric Alliance, Mail.ru, Skyeng постоянно ищут продвинутых специалистов по машинному обучению и анализу данных.
    Участники, хорошо выступившие на нашем соревновании и предложившие нетривиальные подходы, будут приглашены на собеседования. А это значит, что впереди маячит карьера с ещё более интересными задачами в сфере машинного обучения.

    Ребят. Сейчас рынок ML перегрет. Найти дельного специалиста, который что-то умеет — очень сложно. И тут не специалисты в очередь выстраиваются к «mail.ru» и прочим «крутым компаниям», а компании выстраиваются за специалистами которые хоть что-то умеют. И да, специалисты идут в первую очередь не в «крутые компании», где обычно очень стандартный набор скучных и рутинных задач, а в компании которые предлагают классные инновационные проекты лежащие на границу современного знания. В России они есть и их много.
    Так что такая постановка «крутой вакансии» — забавляет:)


    1. BelBES
      19.04.2016 11:33
      +3

      Тише-тише, не расстраивайте mail.ru раньше времени) Попытка то хорошая...;)


  1. Assargadon
    19.04.2016 11:52
    +3

    Вроде бы очевидный вопрос, но явного ответа я на него не нашёл.

    Есть ли гарантия, что игра, которая скачивается в качестве примера — это та же игра, которая идёт в зачет, пусть с другими данными?

    Не получится ли так, что тренировочная игра — это, допустим, предсказание погоды по данным метеостанций, а зачётная игра — это ориентирование по трёхмерному лабиринту, а сотояние — это проходимость близлежащих вокселей?

    Иными словами, нужно

    1) натренировать правильные рефлексы у бота, пользуясь тестовыми данными, и сложность состоит в том, чтобы научить бота игре (генерализация), а не конкретным уровням (оверфиттинг)

    или

    2) научить бота обучаться по ходу дела, а тестовые данные — это просто для ознакомления с интерфейсом игры?


    1. bbchallenge
      19.04.2016 14:52

      Да, есть гарантия, что игра, которая скачивается в качестве примера — это та же игра, которая идёт в зачет, пусть с другими данными.

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


    1. Randl
      22.04.2016 23:23

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


  1. Michael134096
    19.04.2016 13:00

    Напомнило задачку про сортировку по японски
    http://acm.timus.ru/problem.aspx?num=1546&locale=ru
    Где присутствовала black box:
    http://acm.timus.ru/Supplement/BlackBox/BlackBox.aspx