Глубокое обучение на множествах. Часть 1 | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Python Developer. Professional
-3%
Разработчик на Spring Framework
-5%
iOS Developer. Professional
-8%
Golang Developer. Professional
-6%
Базы данных
-12%
Agile Project Manager
-5%
Android Developer. Professional
-11%
Microservice Architecture
-5%
C++ Developer. Professional
-5%
Highload Architect
-6%
JavaScript Developer. Basic
-8%
Kotlin Backend Developer
-9%
C# Developer. Professional
-9%
Team Lead
-6%
Алгоритмы и структуры данных Разработчик программных роботов (RPA) на базе UiPath и PIX Unity Game Developer. Basic Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер NoSQL Супер-практикум по использованию и настройке GIT Symfony Framework iOS Developer. Basic Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool"
Инфраструктура
DevOps практики и инструменты
-12%
Базы данных
-12%
Network engineer. Basic
-10%
Network engineer
-4%
Экcпресс-курс «ELK»
-10%
Инфраструктурная платформа на основе Kubernetes
-6%
Administrator Linux.Basic
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Дизайн сетей ЦОД
-13%
PostgreSQL
-8%
Разработчик программных роботов (RPA) на базе UiPath и PIX Reverse-Engineering. Professional Внедрение и работа в DevSecOps Administrator Linux. Advanced Infrastructure as a code in Ansible Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Экспресс-курс «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Глубокое обучение на множествах. Часть 1

ML_Deep_16.11_site-5020-26ee71.png

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

В первой заметке мы поговорим о ситуации, когда исследуемый объект у нас один, а вот в качестве предсказаний модели мы ожидаем увидеть множество. Примером такой задачи может быть задача тегирования, когда одному изображению нужно поставить в соответствие набор описывающих его ключевых слов или тегов. А во второй заметке речь пойдет об обратной задаче — по набору тегов выбрать наиболее подходящее изображение.

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

Итак, начнём!

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

Проблемы с таким подходом довольно очевидны: огромный размер последних слоёв сети, большая разрежённость, независимость тегов друг от друга и вопросы к выбору отсечки или количества тегов. ML1-20219-61bc67.jpgСтатья «DeepSetNet: Predicting Sets with Deep Neural Networks», опубликованная в 2017 году на ICCV (международная конференция по компьютерному зрению), решает последнюю из этих проблем.

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

Какой ещё возможен подход?

Другой подход, позволяющий избежать проблем с большим размером выходного вектора, разрежённостью и определением количества тегов, заключается в использовании рекуррентных сетей. Чтобы провернуть этот трюк, достаточно представить набор тегов, описывающих изображение, в виде последовательности и заменить последние слои сети из предыдущего решения на рекуррентную сеть, порождающую тег за тегом. Причём одним из элементов словаря в данном случае будет тег типа <хватит>, появление которого на выходе рекуррентной сети должно останавливать процесс порождения новых тегов.

Такой подход тоже не решает всех проблем, связанных с «предсказанием» множеств, но зачастую работает существенно лучше предсказания вероятностей для каждого слова. Одна из основных проблем — порядок тегов. Так как мы теперь работаем со множеством тегов как с последовательностью, нам надо установить порядок элементов в этой последовательности.

Одно из возможных решений этой проблемы я разберу на курсе в лекции, посвящённой генеративным рекуррентным моделям.

Следите за новостями и не забывайте оставлять комментарии!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
🔥 Только до 28.02
Успейте приобрести курсы февраля на выгодных условиях! Подробности в чате.