Для специалиста по данным или инженера машинного обучения освоение проектирования систем машинного обучения является одной из ключевых компетенций. Это связующее звено между созданием моделей и внедрением решений, которые приносят реальные результаты для бизнеса.
Умение преобразовывать идеи машинного обучения в продуктивные системы, экономящие средства, увеличивающие доходы и генерирующие измеримую ценность, определяет долгосрочное развитие карьеры и уровень заработной платы.
В этом руководстве разбирается подход к проектированию систем машинного обучения.
Общая структура
Ниже представлена структура подхода к разработке системы машинного обучения:
Примечание: Это наиболее распространенный тип проектирования для прикладной системы машинного обучения в устоявшейся технологической компании. Существуют другие, более специфические варианты, такие как проектирование инфраструктуры и дизайн экспериментов в области исследований ИИ/МЛ..
Разберем эти этапы подробнее.
Бизнес-задача
Цель этого этапа заключается в следующем:
- Уточнение целей — В чем состоит бизнес- или пользовательская проблема, которую нужно решить, и как ее перевести в решение на базе машинного обучения?
- Определение метрик — Какие метрики используются: точность, F1-метрика, ROC-AUC, точность/полнота, RMSE и т.д., и как они влияют на бизнес-показатели.
- Ограничения и объем — Сколько вычислительных ресурсов доступно, нужны ли предсказания в реальном времени или пакетный вывод, действительно ли требуется машинное обучение?
- Высокоуровневый дизайн — Как будет выглядеть общая архитектура от данных до вывода предсказаний?
Данные
Этот раздел посвящен сбору и получению данных:
- Определение источников данных — Базы данных, API, логи или данные, генерируемые пользователями.
- Определение целевой переменной — Что представляет собой целевая переменная и как ее получить?
- Контроль качества — В каком состоянии данные? Есть ли юридические проблемы с их использованием?
Инженерия признаков
Создание новых признаков из данных для решения конкретной задачи:
- Важность признаков — Понимание, какие признаки, вероятно, влияют на целевую переменную.
- Очистка данных — Обработка пропущенных значений, выбросов и несогласованных записей.
- Представление признаков — One-hot кодирование, целевое кодирование, эмбеддинги и масштабирование данных.
- Сэмплирование и разделение — Учет несбалансированных наборов данных, предотвращение утечки данных и правильное разделение на обучающие и тестовые наборы.
Дизайн и выбор модели
Здесь демонстрируются теоретические знания о моделях машинного обучения:
- Бенчмарк — Начать с простой "глупой" модели или эвристики, затем постепенно наращивать сложность.
- Обучение — Кросс-валидация, настройка гиперпараметров, раннее остановка.
- Компромиссы — Учет компромиссов, таких как скорость обучения, скорость вывода, задержка и интерпретируемость.
Сервис и развертывание
Понимание оптимальных способов предоставления и развертывания модели в производственной среде.
- Инфраструктура — Выбор облака или локальной установки, настройка конвейеров CI/CD и обеспечение масштабируемости.
- Сервис — API-эндпоинт, модель на краю сети, пакетные предсказания против онлайн-предсказаний.
Оценка и мониторинг
Завершающий этап — настройка систем и фреймворков для отслеживания модели в производственной среде.
- Метрики — Какие метрики отслеживать для "онлайн" модели по сравнению с "оффлайн" моделью.
- Мониторинг — Настройка дашборда, мониторингового блокнота, оповещений в Slack.
- Эксперимент — Дизайн A/B-эксперимента.
Что изучать?
Проектирование систем машинного обучения — это не начальный уровень собеседования или навык.
Оно проверяется на средних и выше уровнях.
К этому моменту у специалиста уже будет прочная база знаний в машинном обучении и разработке ПО, а также, вероятно, специализация.
Тем не менее, если требуется полный, хотя и не исчерпывающий список, вот что необходимо освоить.
Теория машинного обучения
- Обучение с учителем — Классификация (логистическая регрессия, машины опорных векторов, деревья решений), регрессия (линейная регрессия, деревья решений, градиентно-усиленные деревья).
- Обучение без учителя — Кластеризация (k-means, DBSCAN), снижение размерности, латентный семантический анализ.
- Глубокое обучение — Нейронные сети, сверточные нейронные сети и рекуррентные нейронные сети.
- Функции потерь — Точность, F1-метрика, NDCG, точность/полнота, RMSE и т.д.
- Выбор признаков — Как выявлять ключевые признаки, например, анализ корреляций, рекурсивное исключение признаков, регуляризация, кросс-валидация и настройка гиперпараметров.
- Статистика — Байесовская статистика, проверка гипотез и A/B-тесты.
- Специализации — Временные ряды, компьютерное зрение, операции исследования, рекомендательные системы, обработка естественного языка и т.д. Достаточно 1–2.
Проектирование систем и инженерия
- Облачные технологии — Основная — AWS, следует знать S3, EC2, функции Lambda и ECS. Большинство инструментов — это просто обертки для хранения и вычислений.
- Контейнеризация — Docker и Kubernetes.
- Проектирование систем — Кэширование, сетевые взаимодействия, квантизация, API и хранение.
- Контроль версий — CircleCI, Jenkins, git, MLflow, Datadog, Weights and Biases.
- Фреймворки развертывания и оркестрации — Argo, Metaflow, Databricks, Airflow и Kubeflow.
Собеседования по проектированию систем ML
Планируется выпустить подробное видео о процессе собеседования по проектированию систем машинного обучения, но пока предоставляется обзор на высоком уровне с советами по подготовке.
Собеседования по проектированию систем машинного обучения обычно ориентированы на инженеров среднего и старшего уровней. В них часто предлагают широкую, открытую задачу, такую как проектирование рекомендательной системы или фильтра спама.
Если роль предполагает конкретную специализацию, например, компьютерное зрение, вопрос собеседования часто фокусируется на этой области.
Одна из главных трудностей собеседований по проектированию систем машинного обучения — отсутствие стандартизации. В отличие от собеседований по разработке ПО, которые имеют относительно последовательный формат, собеседования по ML-дизайну сильно различаются по структуре. Кроме того, охватывается множество тем: бесчисленные концепции, компромиссы и возможные пути решений.
Тем не менее, большинство менеджеров по найму оценивают кандидатов по нескольким ключевым аспектам:
- Перевод проблемы — Можете ли вы взять бизнес-задачу и сформулировать ее как решение на базе машинного обучения?
- Принятие решений — Распознаете ли вы компромиссы и обосновываете ли выборы в дизайне логически?
- Широта и глубина — Демонстрируете ли вы твердое понимание теории ML, разнообразие моделей и умение применять их эффективно в реальных сценариях?
Как подготовиться к собеседованиям
В плане подготовки рекомендуется одно ключевое действие.
Разбирайте прошлые задачи.
Вот ресурсы для поиска таких задач: