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

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

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

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

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

Необходимость увеличения данных

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

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

  • Шум транспортного средства (автомобиль/поезд/самолет и т. д.)
  • Голоса других людей
  • Фоновая музыка
  • Шум, характерный для места (библиотека/кафе/ресторан)
  • Шум машины и т. д.,

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

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

Мы предположили, что шумы, основанные на местоположении, более похожи друг на друга, чем шумы транспортных средств. Следовательно, мы изобразили их далеко друг от друга на оси. После этого мы можем увидеть как HLP, так и производительность модели на этих входных данных и определить, что мы можем улучшить модель, когда у нас будет больше входных данных в кафе или ресторанах.

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

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

Увеличение данных

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

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

Ниже приведен пример контрольного списка, который может быть полезен:

  • Звучит реалистично?
  • Является ли отображение x→y точным? (маркировка и могут ли люди распознавать речь?)
  • Алгоритм в настоящее время плохо работает на нем?

Для изображений аугментация включает в себя такие шаги, как:

  • Изменение яркости/контрастности изображения.
  • Случайное вращение объекта в диапазоне углов.
  • Искусственно редактируйте изображения с помощью внешних инструментов, таких как Photoshop.
  • Мы также можем использовать сложные модели, такие как GAN, для создания желаемых изображений, что в большинстве случаев излишне.

Может ли добавление дополнительных данных повредить производительности?

Чтобы ответить на этот вопрос, нам сначала нужно вспомнить, почему мы добавляем данные в модель в первую очередь. Мы добавляем данные, потому что определенная нами модель имеет большое смещение, и модель не может дать хороших результатов с существующими данными. В этом случае мы добавляем больше данных, чтобы уменьшить смещение.

Теперь, когда мы уже достигли низкого смещения и все еще добавляем данные, мы должны быть осторожны с тем, какие данные мы добавляем. Например, в многоклассовой задаче, говорит более раннее распознавание речи, мы пытаемся добавить данные к одному конкретному классу, скажем шумы кафе, так, чтобы существующее количество звуков шума кафе увеличилось с 10 до 20% данных. до 40–50% данных. Остальные данные недостаточно велики, чтобы модель не запуталась, а добавление данных вредит модели. Поэтому мы должны быть более осторожными при добавлении данных.

Помимо этого, есть только конкретные примеры, когда сопоставления ввода-вывода двух разных классов очень близки друг к другу, что сбивает с толку даже людей. Рассмотрим маленькую букву «l» (L) и заглавную I (i) в некоторых распространенных шрифтах, таких как Arial, для справки. Это нормально для текстовых моделей, но говорит о том, что мы каким-то образом работаем с изображениями, содержащими текст, и нам нужно помочь модели различать их. Другой случай будет между неоднозначными 1 и Is, как показано на следующем рисунке.

Data-Centric подход к проблемам со структурированными данными.

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

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

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

В таком случае мы можем обнаружить, что модель предсказывает известные невегетарианские рестораны вегетарианским пользователям только потому, что больше людей в его местности высоко оценили конкретный невегетарианский ресторан. Эту проблему можно решить разными способами. Один из способов — синтетически создать данные о вегетарианцах, аналогичные предыдущей модели распознавания речи. Другой способ — взять больше данных от существующих пользователей и попытаться найти закономерности, используя новые данные.
Для нашей задачи практичнее использовать последний метод, так как проще собрать больше данных от существующих пользователей. чем синтетически генерировать новые данные для всех районов города. Некоторые из новых данных могут включать в себя логическую функцию, указывающую на предпочтение человека к вегетарианству или невегетарианству, или это может быть функция о ресторане и его эффективности в отношении вегетарианских блюд.
Теперь мы можем использовать эти дополнительные функции и обучить модель рекомендовать лучшие рестораны пользователям-вегетарианцам.
⚠️ За последние несколько лет мы наблюдаем переход от совместной фильтрации к фильтрации на основе контента, когда мы рекомендуем ресторан на основе его меню, описания, и другая информация. В этом могут помочь даже относительно новые рестораны, о которых почти никто не знает.

Отслеживание экспериментов

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

  • Управление версиями алгоритма/кода (сохранение обученных моделей)
  • Используемый набор данных
  • Гиперпараметры
  • Полученные результаты

Эти аспекты можно отслеживать в текстовых файлах, электронных таблицах, общих электронных таблицах и других формальных системах отслеживания экспериментов (веса и смещения, Comet, MLflow, SageMaker studio и т. д.). Выбор используемых инструментов зависит от желаемых особенностей проекта. Некоторые были бы,

  • Воспроизводимость результатов эксперимента, полученных с помощью инструмента
  • Инструменты, которые помогают нам легко понять результаты. (Сводные показатели/анализ)
  • Мониторинг ресурсов, Визуализация ошибок и т.д.,

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

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

Затем мы сделаем еще один шаг назад и рассмотрим этап «Данные» жизненного цикла проекта машинного обучения. Надеюсь, вам понравилась статья. Если вы это сделали, ознакомьтесь с другими статьями из этой серии или других!

Спасибо за чтение до сих пор! Хорошего дня!

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







Примечания по MLOps – 1: Жизненный цикл машинного обучения
Мое путешествие по «специализации MLOps
от DeepLearning.AI. В этой статье описывается жизненный цикл машинного обучения вместе с…pub.towardsai.net»