Потому что чаще всего вы получите именно это.

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

Это серьезная проблема: у многих организаций нет нужных вам данных.

Как мы можем создавать прототипы и проверять идеи машинного обучения без самого необходимого сырья? Как мы можем эффективно получать и создавать ценность с помощью данных при нехватке ресурсов?

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

1. Поймите, что ваша модель не так хорошо обобщает.

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

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

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

2: Постройте хорошую инфраструктуру данных.

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

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

Если введение новых данных в вашу систему происходит быстро и легко, вы получите больше данных.

3: Сделайте некоторое увеличение данных.

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

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

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

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

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

4: Сгенерируйте синтетические данные.

Если вы исчерпали все возможности пополнения реальных данных, вы можете начать думать о создании фальшивых данных. Генерация синтетических данных также может быть отличным способом охватить некоторые крайние случаи, которых нет в вашем реальном наборе данных.

Например, многие системы обучения с подкреплением для робототехники (например, OpenAI Dactyl) обучаются в смоделированных трехмерных средах, прежде чем они будут развернуты на реальных роботах. Для систем распознавания изображений вы можете аналогичным образом создавать 3D-сцены, которые могут предоставить вам тысячи новых точек данных.

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

Иногда можно комбинировать подходы: Apple нашла очень хитрый способ использовать GAN для обработки изображений лиц, смоделированных в 3D, чтобы они выглядели более фотореалистично. Отличная техника для расширения вашего набора данных, если у вас есть время.

5. Остерегайтесь удачных сплитов.

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

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

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

6. Используйте трансферное обучение.

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

При переносе обучения вы берете модели, созданные другими (обычно это другие, например, Google, Facebook или крупный университет), и настраиваете их в соответствии с вашими конкретными потребностями .

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

Недавно я работал над прототипом обнаружения объектов для клиента с требованием высокой точности. Я смог значительно ускорить разработку, настроив MobileNet Single Shot Detector, который был обучен на открытых изображениях Google v4 »(~ 9 миллионов помеченных изображений!). После дня обучения я смог создать довольно надежную модель обнаружения объектов с тестовой картой 0,85 с использованием ~ 1500 изображений с метками.

7. Попробуйте ансамбль «слабых учеников».

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

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

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

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