https://www.amazon.com/Machine-Learning-Design-Patterns-Preparation/dp/1098115783

Общие проблемы при создании систем машинного обучения:
1. Качество данных
2. Полнота данных
3. Непротиворечивость данных

Методы масштабирования данных:
Линейное масштабирование — масштабирование минимум-максимум, отсечение для удаления выбросов и последующего масштабирования до [-1,1], нормализация Z-показателя и Winsorizing, при котором используется эмпирическое распределение в наборе обучающих данных для вырезания data tp Диапазон [P10-P90].
Нелинейное масштабирование — логарифмическое, сегментация

Шаблон проектирования 1: хешированная функция –для решения проблем, связанных с категориальными функциями, такими как неполный словарный запас (разные OHE в обучающем и тестовом наборах), размер модели из-за количества элементов (сотни категорий) и холодный запуск (функция недоступно сейчас, но может появиться в будущем)

Решение: Чтобы построить хешированную категориальную функцию с использованием n сегментов, например, для 347 аэропортов, в среднем 35 аэропортов получат одинаковый код хэш-сегмента, если мы хэшируем в 10 сегментов. категориальные переменные.

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

Шаблон проектирования 2: встраивание. Решает проблему плотного представления данных с высокой кардинальностью (текст/изображения) в более низком измерении путем передачи входных данных через слой встраивания, который имеет обучаемые веса. В Keras есть вспомогательная функция pad_sequence для обеспечения общей размерности.

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

Шаблон проектирования 3: Перекрестные функции –помогает моделировать отношения между входными данными быстрее, комбинируя функции. Это синтетическая функция, образованная путем объединения двух или более функций, чтобы зафиксировать взаимодействие между ними, например, для поездки на такси комбинация дня и времени будет отличать 17:00 понедельника от 17:00 пятницы. Имеет высокую кардинальность и, как правило, не используется с необработанными числовыми функциями. Мощность может быть скорректирована регуляризацией L1.

Шаблон проектирования 4: мультимодальный ввод — сочетание числовых, графических и текстовых функций, например, сбор взвинчивания цен с использованием имени товара и изображения.

Шаблон дизайна 5: несколько ярлыков –назначение нескольких ярлыков , например ранжированный жанр. Для мультикласса достаточно Softmax, который предсказывает изображение как [0.9,0.08,0.02] как [Кошка, Собака, Кролик], и argmax может быть выполнен для окончательного предсказания.
В этом случае используется сигмовидная функция активации. в выходном слое, каждое отдельное значение в сигмовидном массиве находится между [0,1]. Основное различие в выводе между сигмовидной моделью здесь и примером softmax в разделе «Проблема» заключается в том, что массив softmax гарантированно содержит три значения, сумма которых равна 1. , тогда как сигмовидный вывод будет содержать три значения, каждое от 0 до 1.
Также можно создать Иерархические метки, например, Действие -> Супергерой -> Бэтмен, которые будут обрабатываться:
1. Используйте плоский подход и поместите каждую метку в один и тот же выходной массив независимо от иерархии, убедившись, что у вас достаточно примеров каждой метки "конечного узла".
2. Создайте одну модель для определения меток более высокого уровня. На основе классификации высокого уровня отправьте пример в отдельную модель для более конкретной задачи классификации.

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

Шаблон проектирования 6: Ансамбли — продемонстрировано в пакетировании, бустинге и стекинге. Методы усреднения моделей, такие как бэггинг, работают, потому что, как правило, отдельные модели, составляющие модель ансамбля, не все будут соответствовать те же ошибки на тестовом наборе. В идеальной ситуации каждая отдельная модель ошибается на случайную величину, поэтому при усреднении их результатов случайные ошибки компенсируются, и прогноз становится ближе к правильному ответу. Короче говоря, в толпе есть мудрость. Повышение работает хорошо, потому что модель все больше и больше наказывается в соответствии с остатками на каждом шаге итерации. С каждой итерацией ансамблевая модель становится все лучше и лучше в предсказании этих труднопредсказуемых примеров. Стэкинг работает, потому что он сочетает в себе лучшее от бэггинга и бустинга. Вторичную модель можно рассматривать как более сложную версию усреднения модели.

Шаблон проектирования 7: ребалансировка. Для несбалансированных данных PR более информативен, чем AUC, поскольку он уделяет больше внимания тому, сколько прогнозов модель получила правильно из общего числа, назначенного для положительного вызова. Это дает больший вес положительному классу, в отличие от AUC, который придает одинаковое значение обоим.
Способы обработки несбалансированных данных для моделей машинного обучения:
1. Понижающая выборка: уменьшение класса большинства
2. Повышение частоты дискретизации: увеличение класса меньшинства с помощью синтетической передискретизации меньшинства (SMOTE)
3. Взвешенные классы: придает большее значение положительному классу меньшинства во время обучения. classs_weights в keras и scale_pos_weight в xgboost.

Шаблон проектирования 8: контрольные точки (обеспечивает устойчивость). Здесь мы периодически сохраняем полное состояние модели, чтобы у нас были доступны частично обученные модели. Эти частично обученные модели могут служить конечной моделью (в случае ранней остановки) или отправными точками для дальнейшего обучения (в случаях отказа машины и тонкой настройки).
Проблема: чем сложнее модель то есть, чем больше времени это занимает. Если цикл обучения прерывается по какой-либо причине, мы можем вернуться к сохраненному состоянию модели и перезапустить его. Однако при этом мы должны убедиться, что сохранено промежуточное состояние модели,а не только модель, по следующим причинам:
1. Экспортированная модель не содержит указание эпохи и партии. номер, который модель в настоящее время обрабатывает.
2. Чтобы эффективно выполнять градиентный спуск, оптимизатор может изменять скорость обучения по расписанию. Это состояние скорости обучения отсутствует в экспортируемой модели.
3. Кроме того, в модели может быть стохастическое поведение, например отсев. Это также не фиксируется в экспортированном состоянии модели.
4. Такие модели, как рекуррентные нейронные сети, включают историю предыдущих входных значений. Как правило, полное состояние модели может во много раз превышать размер экспортируемой модели.

Для игровой площадки модели и наблюдения за тем, как результат зависит от скрытых слоев, функций активации, скорости обучения, регуляризации и т. д.
https://bit.ly/3D0l4gf

Этапы обучения:
1. Между этапами (a) и © модель изучает высокоуровневую организацию данных.
2. Между этапами и © и (e) модель изучает детали .
3. Этап (f), переоснащение модели

Компромиссы и преимущества контрольных точек:
1. Ранняя остановка. Модель может прекратить обучение, когда ошибка проверки начнет расти. Однако нередки случаи, когда валидация поднимается, а затем снова падает, что может быть зафиксировано как этап постобработки, если имеются контрольные точки модели.
Выбор между ранней остановкой и выбором контрольной точки в зависимости от стоимости (предпочтительнее ES) или точность модели (предпочтительнее выбор контрольной точки)

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

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

Слой узкого места концептуально подобен встраиванию с основным отличием в том, что веса в слое встраивания можно обучать, тогда как все слои, предшествующие слою узкого места и включая его, имеют замороженные веса.
В типичной сверточной нейронной сети (CNN) обучение носит иерархический характер. Первые слои учатся распознавать края и формы, присутствующие в изображении. В примере с кошкой это может означать, что модель может идентифицировать области изображения, где край тела кошки встречается с фоном. Следующие слои в модели начинают понимать группы ребер — возможно, есть два ребра, которые сходятся к верхнему левому углу изображения. Затем последние слои CNN могут собрать воедино эти группы ребер, развивая понимание различных особенностей изображения.

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

Параллелизм данных. Существует метод, с помощью которого разные работники могут вычислять градиенты и обмениваться этой информацией для обновления параметров модели. Это гарантирует, что все рабочие процессы согласованы, и каждый шаг градиента работает для обучения модели.
Синхронное обучение: при синхронном обучении рабочие процессы параллельно тренируются на разных срезах входных данных и значениях градиента. суммируются в конце каждого шага обучения. Это выполняется с помощью алгоритма all-reduce. Это означает, что каждый рабочий процесс, обычно GPU, имеет копию модели на устройстве, и для одного шага стохастического градиентного спуска (SGD) мини-пакет данных разделяется между каждым из отдельных рабочих процессов. Каждое устройство выполняет прямой проход со своей частью мини-пакета и вычисляет градиенты для каждого параметра модели. Эти локально вычисленные градиенты затем собираются с каждого устройства и агрегируются (например, усредняются) для получения одного обновления градиента для каждого параметра. Центральный сервер хранит самую последнюю копию параметров модели и выполняет шаг градиента в соответствии с градиентами, полученными от нескольких рабочих процессов. Как только параметры модели обновляются в соответствии с этим агрегированным шагом градиента, новая модель отправляется обратно рабочим вместе с другим разделением следующего мини-пакета, и процесс повторяется.

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

Основное различие между синхронным и асинхронным обучением заключается в том, что сервер параметров не выполняет все-reduce. Вместо этого он периодически вычисляет новые параметры модели на основе обновлений градиента, полученных с момента последнего вычисления. Как правило, асинхронное распределение достигает более высокой пропускной способности, чем синхронное обучение, потому что медленный рабочий процесс не блокирует выполнение шагов обучения.Если один рабочий процесс дает сбой, обучение продолжается, как и планировалось, с другими рабочими процессами, в то время как этот рабочий процесс перезагружается. В результате некоторые фрагменты мини-пакета могут быть потеряны во время обучения, что затрудняет точное отслеживание того, сколько эпох данных было обработано.
Синхронное обучение особенно уязвимы к медленным устройствам или плохому сетевому соединению, потому что обучение зависает в ожидании обновлений от всех рабочих. Это означает, что синхронное распределение предпочтительнее, когда все устройства находятся на одном хосте и есть быстрые устройства (например, TPU или GPU) с сильными связями. С другой стороны, асинхронная раздача предпочтительнее, если много маломощных или ненадежных воркеров. Если один рабочий процесс дает сбой или останавливается при возврате обновления градиента, цикл обучения не останавливается. Единственным ограничением являются ограничения ввода-вывода.

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

Шаблон проектирования 11: настройка гиперпараметров. Может выполняться с помощью поиска в сетке, случайного поиска, гипероптимизации AutoML, байесовской оптимизации и т. д.
Вместо обучения нашей модели каждый раз, когда мы пробуем новую комбинацию гиперпараметров, Байесовская оптимизация определяет новую функцию, которая эмулирует нашу модель, но гораздо дешевле в использовании. Это называется суррогатной функцией — входными данными для этой функции являются значения ваших гиперпараметров, а выходными данными — ваша метрика оптимизации. Суррогатная функция вызывается гораздо чаще, чем целевая функция, с целью найти оптимальное сочетание гиперпараметров до завершения тренировочного прогона вашей модели. При таком подходе на выбор гиперпараметров для каждого испытания тратится больше вычислительного времени, чем при поиске по сетке.
Мы также можем использовать генетический алгоритм, который имеет фитнес-функцию, которая измеряет качество конкретного пробная версия и обычно может определяться метрикой оптимизации вашей модели (точность, ошибка и т. д.). После определения фитнес-функции вы случайным образом выбираете несколько комбинаций гиперпараметров из области поиска и запускаете пробную версию для каждой из этих комбинаций. Затем вы берете гиперпараметры из испытаний, которые показали наилучшие результаты, и используете эти значения для определения нового пространства поиска. Это пространство поиска становится вашей новой «популяцией», и вы используете его для создания новых комбинаций значений для использования в следующем наборе испытаний. Вы продолжаете этот процесс, сокращая количество испытаний, которые вы проводите, пока не получите результат, удовлетворяющий вашим требованиям.

Шаблоны проектирования для отказоустойчивого обслуживания

Шаблон проектирования 12: функция обслуживания без сохранения состояния (используется для онлайн-прогнозирования) —позволяет рабочей системе машинного обучения синхронно обрабатывать от тысяч до миллионов запросов прогнозирования в секунду (обнаружение мошенничества, фильтрация BOT). ). Производственная система машинного обучения разработана на основе функции без сохранения состояния, которая фиксирует архитектуру и вес обученной модели.
Функция без сохранения состояния — это функция, выходные данные которой определяются исключительно ее входными данными. Эта функция, например, не имеет состояния:

def stateless_fn(x):
    return 3*x + 15

Другой способ представить функцию без состояния — это неизменяемый объект, в котором веса и смещения хранятся как константы:

class Stateless:
    def __init__(self):
        self.weight = 3
        self.bias = 15
    def __call__(self, x):
        return self.weight*x + self.bias

Функция, которая поддерживает счетчик количества вызовов и возвращает другое значение в зависимости от того, является ли счетчик нечетным или четным, является примером функции с отслеживанием состояния, а не без него.
Потому что компоненты без сохранения состояния не имеют никакого состояния, они могут совместно использоваться несколькими клиентами.Жизненный цикл компонентов без сохранения состояния должен управляться сервером. Например, их нужно инициализировать при первом запросе и уничтожить, когда клиент завершает работу или истекает время ожидания. Из-за этих факторов компоненты без сохранения состояния легко масштабируются, тогда как компоненты с отслеживанием состояния дороги и сложны в управлении.
Например, веб-приложения часто разрабатываются для работы на основе REST API, и они включают передачу состояния от клиента. на сервер при каждом вызове. В модели машинного обучения во время обучения фиксируется большое количество состояний. Такие вещи, как номер эпохи и скорость обучения, являются частью состояния модели и должны быть запомнены, потому что обычно скорость обучения снижается с каждой последующей эпохой. Утверждая, что модель должна быть экспортирована как функция без сохранения состояния, мы требуем от создателей каркаса модели отслеживать эти переменные с состоянием и не включать их в экспортируемый файл. Когда используются функции без состояния, это упрощает серверный код и делает он более масштабируемый, но может усложнить клиентский код. Например, некоторые функции модели по своей природе имеют состояние. Модель исправления орфографии, которая берет слово и возвращает исправленную форму, должна иметь состояние, потому что она должна знать несколько предыдущих слов, чтобы исправить слово вроде «там» на «их» в зависимости от контекста.

Проблемы с вызовом model.predict() в функциях без сохранения состояния:
1. Необходимо загрузить в память всю модель keras, которая может быть довольно большой, например, вложения для полного словаря английских слов.
2. Отключение между языками (Python) и разными языками для Android или iOS
3. Предыдущая архитектура накладывает ограничения на задержку, которая может быть достигнута, поскольку вызовы метода predict() должны отправляться один за другим. .

Предложенное решение:

  1. Экспортируйте модель в формат, который охватывает математическое ядро ​​модели и не зависит от языка программирования (в Tensorflow есть экспорт ProtoBuf).
  2. В производственной системе формула, состоящая из «прямых» вычислений модели, восстанавливается как функция без состояния.
  3. Функция без сохранения состояния развернута в инфраструктуре, которая обеспечивает конечную точку REST (фреймворки AWS Lambda, Heroku и т. д. заботятся об автоматическом масштабировании инфраструктуры, чтобы обрабатывать большое количество прогнозов, они полностью управляемы и нейтральны к языку). Sagemaker можно использовать для развертывания конечной точки TF.

Шаблон проектирования 13: пакетное обслуживание. Используется для распределенной обработки данных для одновременного получения выводов по большому количеству экземпляров, например персонализированного ежедневного музыкального плейлиста для пользователей. Также используется, когда клиентский код должен поддерживать состояние, например прогнозирование 5-й транзакции для клиента после 4 заказов в одном сеансе.
Функция обслуживания без сохранения состояния (онлайн) настроена для обслуживания с малой задержкой для поддержки 1000 одновременных запросов и использования их для случайной или периодической обработки Mns. элементов может стать дорогостоящим. Если эти запросы не чувствительны к задержкам, более экономично использовать распределенную архитектуру обработки данных для вызова моделей машинного обучения для миллионов элементов. Причина в том, что вызов модели машинного обучения для миллионов элементов представляет собой поразительно параллельную задачу — можно взять миллион элементов, разбить их на 1000 групп по 1000 элементов в каждой, отправить каждую группу элементов к машине, затем объедините результаты. Результат модели машинного обучения для элемента номер 2000 полностью независим от результата модели машинного обучения для элемента номер 3000, поэтому можно разделить работу и выполнить ее.
Например: На заднем плане , рекомендации периодически обновляются. Например, мы можем ежечасно переобучать модель рекомендаций на основе последних действий на веб-сайте.
Рабочая система машинного обучения, которая поддерживает как онлайн-обслуживание, так и пакетное обслуживание, называется архитектура Lambda. такая производственная система ML позволяет практикам ML находить компромисс между задержкой (с помощью шаблона функции обслуживания без сохранения состояния) и пропускной способностью (с помощью шаблона пакетного обслуживания).

Шаблон проектирования 14: Непрерывная оценка моделиШаблон проектирования Непрерывная оценка модели решает распространенную проблему, связанную с необходимостью обнаружения и принятия мер, когда развернутая модель больше не соответствует назначению.Две основные причины, по которым модели ухудшаться со временем, являются дрейф концепции и дрейф данных.
Дрейф концепции
происходит всякий раз, когда изменяется соотношение между входными данными модели и целью. Это часто происходит из-за того, что основные допущения вашей модели изменились, например, модели, обученные изучению враждебного или конкурентного поведения, такого как обнаружение мошенничества, спам-фильтры, торговля на фондовом рынке, ставки онлайн-рекламы или кибербезопасность. В этих сценариях прогностическая модель направлена ​​на выявление закономерностей, характерных для желаемой (или нежелательной) деятельности, в то время как противник учится адаптироваться и может изменять свое поведение по мере изменения обстоятельств. Подумайте, например, о модели, разработанной для обнаружения мошенничества с кредитными картами. То, как люди используют кредитные карты, со временем изменилось, и поэтому общие характеристики мошенничества с кредитными картами также изменились. Например, когда была внедрена технология «чип и пин», мошеннические транзакции стали больше перемещаться в онлайн. По мере адаптации мошеннического поведения производительность модели, которая была разработана до этой технологии, внезапно начнет страдать, а прогнозы модели станут менее точными.
Дрейф данных относится к любому произошедшему изменению. к данным, подаваемым в вашу модель для прогнозирования, по сравнению с данными, которые использовались для обучения. Дрейф данных может происходить по ряду причин: схема входных данных изменяется в источнике (например, поля добавляются или удаляются выше по течению), распределение функций со временем меняется (например, в больнице может начать принимать больше молодых людей, потому что лыжный курорт, открытый поблизости), или значение данных меняется, даже если структура/схема не изменились (например, то, считается ли пациент «избыточным весом», может меняться с течением времени).

Получение достоверной информации: также необходимо зафиксировать основную информацию для каждого экземпляра, отправленного в модель для прогнозирования. Например, когда пользователь выбирает один из предложенных альтернативных маршрутов в Картах Google, выбранный маршрут служит неявной истинной точкой отсчета. Точнее говоря, когда пользователь оценивает рекомендованный фильм, это является четким указанием на истинность модели, которая построена для прогнозирования оценок пользователей для выдачи рекомендаций.
Внимание!< br /> Однако, если ваша модель предполагает, что пользователь бросит свою корзину, а вы предлагаете ему бесплатную доставку или некоторую скидку, чтобы повлиять на его поведение, то вы никогда не узнаете, был ли верен исходный прогноз модели. Короче говоря, вы нарушили допущения схемы оценки модели и должны будете определить метки истинности каким-то другим способом. Эта задача оценки конкретного результата в другом сценарии называется контрфактическое рассуждение и часто возникает в таких случаях использования, как обнаружение мошенничества, медицина и реклама, где прогнозы модели, вероятно, приводят к некоторому вмешательству, которое может скрыть изучение фактической основной истины для этого примера.

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

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

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

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

Шаблон проектирования 15: Конвейер рабочего процесса В шаблоне проектирования Конвейер рабочего процесса мы решаем проблему создания сквозного воспроизводимого конвейера путем контейнеризации и оркестровки шагов нашего процесса машинного обучения.

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

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

Почему это работает:
Без запуска нашего кода машинного обучения в качестве конвейера другим было бы трудно надежно воспроизвести нашу работу. Им нужно будет взять наш код предварительной обработки, разработки моделей, обучения и обслуживания и попытаться воспроизвести ту же среду, в которой мы ее запускали, принимая во внимание зависимости библиотек, аутентификацию и многое другое. Если существует логика, управляющая выбором нижестоящих компонентов на основе выходных данных вышестоящих компонентов, эта логика также должна быть надежно воспроизведена. Шаблон проектирования Workflow Pipeline позволяет другим запускать и отслеживать весь рабочий процесс машинного обучения от начала до конца как в локальной, так и в облачной средах, сохраняя при этом возможность отладки результатов отдельных шагов.

Интеграция CI/CD с конвейерами

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

Шаблон проектирования 16: хранилище функций.Шаблон проектирования Магазин функций упрощает управление функциями и их повторное использование в проектах, отделяя процесс создания функций от разработки моделей, использующих эти функции.
Потребность в Feature Store:
1. Во многих случаях данные, используемые для модели машинного обучения, берутся не из одного источника. Некоторые данные могут поступать из хранилища данных, некоторые данные могут храниться в сегменте хранилища как неструктурированные данные, а другие данные могут собираться в режиме реального времени посредством потоковой передачи.
2. Структура данных также может различаться в зависимости от эти источники, требующие, чтобы каждый вход имел свои собственные этапы разработки признаков, прежде чем его можно будет ввести в модель.

Проблемы с созданием специальных функций:
1. Специальные функции нелегко использовать повторно. Функции воссоздаются снова и снова либо отдельными пользователями, либо внутри команд, либо никогда не покидают пайплайны (или блокноты), в которых они созданы.
2. Специальные функции, используемые для обучения и обслуживания, несовместимы — т. е. перекос между обучением и обслуживанием. Обучение обычно выполняется с использованием исторических данных с пакетными функциями, которые создаются в автономном режиме. Однако обслуживание обычно осуществляется онлайн. Если конвейер функций для обучения вообще отличается от конвейера, используемого в рабочей среде для обслуживания (например, другие библиотеки, код предварительной обработки или языки), то мы рискуем перекосом между обучением и обслуживанием.
3. Производство функций. трудно. При переходе к рабочей среде не существует стандартизированной среды для обслуживания функций для онлайн-моделей машинного обучения и предоставления пакетных функций для обучения офлайн-моделей.

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

Характеристики хранилища функций:
1. Инструментарий для быстрой обработки больших наборов данных объектов
2. Способ хранения объектов, поддерживающий как доступ с малой задержкой (для логического вывода), так и доступ к большим пакетам (для обучения модели).
3. Уровень метаданных, который упрощает документирование и управление версиями различных наборов функций, а также API, управляющий загрузкой и получением данных о функциях.

Вместо того, чтобы создавать конвейеры функций для поддержки одной модели машинного обучения, шаблон Feature Store отделяет разработку функций от разработки модели. После создания функций они размещаются в хранилище данных для извлечения для обучения и обслуживания. Для обслуживания поиска функций скорость оптимизирована. Модель в производственной среде, поддерживающая какое-либо онлайн-приложение, может нуждаться в прогнозировании в реальном времени в течение миллисекунд, что делает необходимым малое время ожидания. Однако для обучения более высокая задержка не является проблемой. Вместо этого упор делается на высокую пропускную способность, поскольку исторические функции извлекаются большими партиями для обучения. Хранилище функций решает оба этих варианта использования, используя разные хранилища данных для доступа к функциям онлайн и офлайн. Например, хранилище функций может использовать Cassandra или Redis в качестве хранилища данных для онлайн-поиска функций, а Hive или BigQuery — для выборки исторических, больших наборов функций.

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

ПОЧЕМУ ЭТО РАБОТАЕТ. Хранилища функций работают, потому что они отделяют разработку функций от использования функций, позволяя разрабатывать и создавать функции независимо от использования функций во время разработки модели. Когда функции добавляются в хранилище функций, они сразу же становятся доступными как для обучения, так и для обслуживания и хранятся в одном месте. Это обеспечивает согласованность между обучением модели и ее обслуживанием.
Не существует единой базы данных, способной справиться с масштабированием до потенциально терабайтных данных и чрезвычайно малой задержкой порядка миллисекунд. Хранилище функций достигает этого с помощью отдельных онлайновых и автономных хранилищ функций и гарантирует, что функции обрабатываются согласованным образом в обоих сценариях.

Шаблон проектирования 17: Управление версиями модели (можно использовать в тесте AB). В шаблоне проектирования Управление версиями модели обратная совместимость достигается путем развертывания измененной модели в качестве микрослужбы с другой конечной точкой REST. Обучение этому обновленный набор данных повышает общую точность нашей модели, но немного снижает точность старых «классических» книг. Чтобы справиться с этим, нам понадобится решение, которое позволит пользователям выбирать более старую версию нашей модели, если они того пожелают.

Шаблон проектирования 18: эвристический тест.Онсравнивает модель машинного обучения с простой и понятной эвристикой, чтобы объяснить эффективность модели лицам, принимающим решения. Агентство по аренде велосипедов хочет использовать ожидаемую продолжительность аренды для создания динамического решения по ценообразованию. После обучения модели ML для прогнозирования продолжительности периода аренды велосипеда они оценивают модель на тестовом наборе данных и определяют, что средняя абсолютная ошибка (MAE) обученной модели ML составляет 1200 секунд. Когда они представят эту модель лицам, принимающим бизнес-решения, их, скорее всего, спросят: «Хороша или плоха MAE в 1200 секунд? Избегайте соблазна обучить даже простую модель машинного обучения, такую ​​как линейная регрессия, на наборе данных и используйте его в качестве эталона.
По мере разработки нашей модели было бы неплохо сравнить производительность нашей модели машинного обучения с этим эталоном. Для этого мы будем оценивать производительность модели на различных стратификациях оценочного набора данных. Таким образом, мы можем легко диагностировать, не уделяет ли наша модель слишком много внимания занятым, популярным станциям и игнорирует нечастые станции в обучающих данных. Если это произойдет, мы можем поэкспериментировать с увеличением сложности модели или сбалансировать набор данных, чтобы перевесить менее популярные станции.

Полезная ценность: хорошо ли улучшение на 1%? Стоит ли заморачиваться запуском модели машинного обучения, а не простым эвристическим правилом?»