Активное обучение
Активное обучение
Залог успеха любого ИИ-продукта - это данные. Особенно это актуально, если вы работаете в каком-то специфическом домене - например, в медицине =) Количество и качество открытых медицинских датасетов до сих пор остается на весьма посредственном уровне, поэтому без создания собственных наборов данных не обойтись.
При разметке данных для обучения нейросеток есть три ключевых аспекта:
- количество данных - на паре тысяч снимков вряд ли получится обучить точную, генерализуемую модель
- качество данных - несмотря на относительную робастность сеток к шумной разметке, принцип “garbage in - garbage out” обмануть трудно
- стоимость данных - можно создать крутые, большие датасеты, но быстро разориться =)
Качество данных - тема, достойная отдельного поста. Под качеством здесь стоит понимать не просто их достоверность, полноту, актуальность и консистентность, но в первую очередь способность с помощью этих данных решать поставленную бизнес-задачу. Про это мы еще как-нибудь поговорим подробнее, а сегодня я хочу обсудить стоимость разметки.
Общие затраты на разметку складываются из многих факторов - например, менеджмент команды разметки. Процедура отбора разметчиков, написание гайдлайнов, выбор удобной платформы разметки, автоматизация дата-пайплайнов, коммуникация с разметчиками - всё это влияет на скорость разметки, а как следствие и на её итоговую стоимость. Но есть и ещё одна очень важная история - выбор данных на разметку. Предположим, у нас есть пул из ста тысяч неразмеченных снимков, но бюджета разметки хватит только на разметку пяти тысяч. Как выбрать самые ценные снимки, которые максимально поднимут метрики вашей сетки? Тут-то нам на помощь и приходит активное обучение.
Активное обучение по сути и является процессом ранжирования и сэмплинга неразмеченных данных по их ожидаемой ценности для улучшения качества сетки. Методы такого сэмплирования делятся на три больших группы - diversity-based, uncertainty-based и random. Подробнее о них можно почитать в замечательной книге Human-in-the-Loop Machine Learning, а в этом посте я раскрою их основную суть.
- Uncertainty. При использовании этих методов мы пытаемся найти исследования, в предсказании которых наша текущая модель не уверена. Самый простой способ - использовать предсказанные вероятности классов и, например, посчитать их энтропию или разницу между топ-2 предсказанными классами. Есть и более хитрые штуки - к примеру, дополнительная голова сети, которая пытается предсказать лосс сети на конкретном примере. Эти методы с небольшими твиками отлично адаптируются и под более нестандартные задачи типа детекции или сегментации.
- Diversity. Суть этой группы методов - сэмплирование данных, которые отсутствуют или недопредставлены в нашей обучающей выборке. В случае медицины это могут быть снимки с редкими заболеваниями, исследования с других рентген-аппаратов, пациенты с определенными демографическими характеристиками и другие необычные дата-пойнты. Находить такие данные можно по-разному - по эмбеддингам или предиктам самой нейронки, по мета-данным пациентов или по свойствам входных изображений. Да даже руками в некоторых случаях.
- Random. Старый добрый рандом, хотя он может быть, например, стратифицированным. Здесь важно помнить, что ваш изначальный пул неразмеченных данных может уже не быть рандомным =)
При использовании активного обучения нужно придерживаться нескольких правил:
- Тестовый сет должен очень рекомендуется создавать до всех экспериментов с активным обучением, иначе дата-лика не избежать. Главный тестовый сет должен быть репрезентативен тем данным, на которых будет использоваться система. Валидационные сеты нужно обновлять, желательно иметь их несколько штук - например, (a) аналогичный тестовому, (b) засэмпленный из новой разметки и (с) рандомнно засэмпленный из неразмеченных данных.
- Всегда рекомендуется включать в разметку рандомный сэмпл данных, помимо выбранных хитрым способом активного обучения. Это позволит контролировать эффективность ваших методов сэмплинга и даст какое-то количество адекватных данных в случае полного факапа ваших методов.
- Разные методы можно и нужно комбинировать для достижения наилучшего результата. Например, можно засэмплить данные с помощью diversity-based метода и дополнительно отфильтровать их по uncertainty.
Мы уже давно используем несложные методы отбора данных на разметку, но как раз сейчас находимся на стадии полноценного внедрения автоматизированных пайплайнов активного обучения. Если тема зайдёт, расскажу об этом в одном из следующих постов =)