[Из песочницы] Визуализация зависимостей и наследований между моделями машинного обучения

waeaypli95u5vcujv5t4psgavjs.png

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

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

Например, архитектурно GAN [1] состоит из генератора (GEN) и дискриминатора (DIS), Состязательный Автокодировщик (AAE) [2] состоит из Автокодировщика (AE) [3] и DIS,. Каждый компонент является отдельной вершиной в данном графе, поэтому для AAE у нас будет ребро с AE и DIS.

Шаг за шагом, я анализировал статьи, выписывал из каких методов они состоят, в какой предметной области они применяются, на каких данных они тестировались, и так далее. В процессе работы я понял сколько очень интересных решений остаются неизвестными, и не находят своего применения.
Машинное обучение разделено на предметные области, где каждая область пытается решить конкретную проблему, используя определенные методы. В последние годы границы были почти стерты, и практически трудно выделить компоненты применяемые только в определенной области. Эта тенденция в целом приводит к улучшению результатов, но проблема в том, что с ростом количества статей, многие интересные методы остаются незамеченными. Причин на это много, и популяризация крупными компаниями лишь определенных направлений играет в этом немаловажную роль. Поняв это, граф, который ранее разрабатывался как нечто сугубо личное, стал публичным и открытым.

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

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

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

Пример того что получилось по итогу представлен по ссылке.

Я надеюсь, что этот проект будет кому-нибудь полезен, хотя бы потому что он, возможно, позволит кому-то получить ассоциации, которые могут навести на новую интересную идею. Я был удивлен когда услышал как на чем основывается идея генеративных состязательных сетей. На MIT machine Intelligence podcast[4], Yan Goodfellow рассказал что идея состязательных сетей ассоциирована с «позитивной» и «негативной» фазой обучения Boltzman Machine[5].

Этот проект community-driven. Мне бы хотелось развивать его и мотивировать больше людей добавлять туда информацию о своих методах, или редактировать уже внесенную. Я верю что более точная информация о методах и лучшие технологии визуализации действительно помогут сделать это полезным инструментом.

Пространства для развития проекта очень много, начиная от улучшения самой визуализации, заканчивая возможностью построения индивидуального графа с возможностью получения рекомендаций методов для улучшения.

Некоторые технические подробности можно почитать по ссылке.

[1] Ian J.Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio. Generative Adversarial Nets.

[2] Alireza Makhzani, Jonathon Shlens, Navdeep Jaitly, Ian Goodfellow, Brendan Frey. Adversarial Autoencoders.

[3] Dana H. Ballard. Autoencoder.

[4] Ian J.Goodfellow: Artificial Intelligence podcast at MIT.

[5] Ruslan Salakhutdinov, Geoffrey Hinton. Deep Boltzmann Machines

© Habrahabr.ru