Как научиться моделировать
Программа Blender с нуля или как за неделю научиться моделировать под 3D печать.
Для любого моделлера не секрет, что для того чтобы успешно моделировать объекты, нужно уметь представлять объект в объеме, видеть его изнутри. Хотя и это умение приходит не сразу, с опытом. Я моделирую сейчас зачастую в голове, когда еду с работы домой к примеру, и потом уже дома мне остается лишь воплотить задуманное в жизнь. Многим по началу трудно замоделить даже кружку, но как правило все эти проблемы от желания всего и сразу. Так не бывает, всему нужно учиться. Я хочу рассказать вам, об уникальном пакете, на мой взгляд, и имя ему Blender.
Сразу стоит сказать, что пакет абсолютно бесплатен и с открытым кодом, а это значит, что вам не нужно переживать за лицензию, а значит вы можете в нем моделировать, печатать, и продавать изделия не опасаясь судебных исков и прочих неприятностей. Конечно вы всегда можете перевести какую-нибудь сумму денег на счет разработчиков, тем самым помогая проекту развиваться дальше.
Другой плюс Blender для вас будет в том, что он адаптирован для 3D печати. В нем есть Плагин для теста модели на пригодность к печати, а также импорт в формат STL и OBJ. На самом деле в Блендере (буду писать его так) есть масса плагинов и расширений, позволяющих настроить его более гибко, под себя. Кроме того, единица измерения в нем (несмотря на разные версии и мнения) равна 1 мм, т.е. 1.00000 = 1 мм. Значит, что 0.0010 - это 1 микрон. Фактически, точность печати модели ограничивается возможностями вашего принтера.
Многие меня убеждали в том, что существует масса CAD систем, с которыми Блендер никогда не встанет в один ряд. Возможно они в чем-то правы, да Блендер не умеет работать с чертежами, но и CAD система не сможет построить скульптуру, скажем Венеры, а Блендер может. Вообще в Блендере многие предметы, вазы например, рисуются путем нажатия нескольких кнопок, что по времени занимает меньше минуты. На высоком уровне поддержка Булиновых операций сложения, вычитания, остатка. На высоком уровне работа с текстом.
Вообще Блендер это серьезный пакет, позволяющий делать анимацию, фильмы, дизайн и даже игры.
Освоил я Блендер меньше чем за неделю, это касается конечно лишь в части моделирования, быстро привык к горячим клавишам и теперь очень редко вспоминаю 3Ds max)) Ниже я размещаю для вас ссылки на сам Блендер, а также на курс обучения, по которому учился я. Пройдя этот курс, прочитав Blender Basics вы сможете уверенно работать в Блендере и как следствие печатать свои модели.
http://www.blender.org/ - официальный сайт, где вы можете скачать Блендер под свою ОС.
http://b3d.mezon.ru/index.php/Blender_Basics_3-rd_edition - Книга по изучению всех основ Блендера (обязательна к прочтению)
http://www.youtube.com/watch?v=7GCtVM-8naY&list=PLC15BA37A75D1F0D1 - канал на YouTube, где автор рассказывает самые важные вещи и научит вас создавать кружку.
http://www.youtube.com/watch?v=WgW90_8zEK8 - мастер класс от человека моделирующего под печать для ювелирки.
http://www.youtube.com/user/fastaboutblender/playlists - Уроки на YouTube от профессионала, рассказывает все, от настроек пакета до малейших нюансов.
Вы всегда можете поискать в сети что-то еще по Блендеру. Просмотрев эти ролики, прочитав книжку, и конечно же практикуясь, вы будете обречены на успех.
Мои уроки на 3DtodayУроки 3D-моделирования. Учимся моделировать ложку в Blender. 3D-моделирование в Blender. Учимся моделировать брелоки, подвески с обычной картинки. Урок 3D-моделирования в Blender. Некоторые азы и работа с текстом.
Как разработать модель машинного обучения с нуля | Виктор Роман
В этой статье мы собираемся подробно изучить, как выполняется процесс разработки модели машинного обучения. Будет объяснено множество концепций, а другие, более конкретные, мы оставим для будущих статей.
Конкретно в статье будет рассмотрено, как:
- Определить адекватно нашу проблему (цель, желаемые результаты…).
- Соберите данные.
- Выберите меру успеха.
- Установите протокол оценки и различные доступные протоколы.
- Подготовьте данные (имея дело с пропущенными значениями, с категориальными значениями…).
- Спилите правильно данные.
- Проведите различие между переоборудованием и недостаточным соответствием, определив, что это такое, и объяснив, как их избежать.
- Обзор того, как модель учится.
- Что такое регуляризация и когда целесообразно ее использовать.
- Разработайте эталонную модель.
- Выберите подходящую модель и настройте ее на максимальную производительность.
Первое и самое важное, что нужно сделать, - это выяснить, каковы входные и ожидаемые результаты. Необходимо ответить на следующие вопросы:
- Какова основная цель? Что мы пытаемся предсказать?
- Каковы целевые функции?
- Какие входные данные? Это доступно?
- С какими проблемами мы сталкиваемся? Бинарная классификация? Кластеризация?
- Какое улучшение ожидается?
- Каков текущий статус целевой функции?
- Как будет измеряться целевой объект?
Не каждую проблему можно решить, пока у нас не будет работающей модели, мы просто сможем сформулировать определенную гипотезу:
- Наши результаты можно предсказать с учетом входных данных.
- Наши доступные данные достаточно информативны, чтобы изучить взаимосвязь между входами и выходами
Важно помнить, что машинное обучение можно использовать только для запоминания шаблонов, которые присутствуют в данных обучения, поэтому мы можем только узнайте то, что мы видели раньше. При использовании машинного обучения мы делаем предположение, что будущее будет вести себя как прошлое, и это не всегда верно.
Это первый реальный шаг на пути к реальной разработке модели машинного обучения, сбора данных.Это критический шаг, который будет зависеть от того, насколько хорошей будет модель, чем больше и лучше данных мы получим, тем лучше будет работать наша модель.
Существует несколько методов сбора данных, например парсинг веб-страниц, но они выходят за рамки данной статьи.
Обычно наши данные будут иметь следующую форму:
Примечание. Предыдущая таблица соответствует знаменитому набору данных о жилищном строительстве в Бостоне, классическому набору данных, часто используемому для разработки симпл-моделей машинного обучения.Каждая строка представляет отдельный район Бостона, а каждый столбец указывает некоторые характеристики этого района (уровень преступности, средний возраст и т. Д.). Последний столбец представляет собой среднюю стоимость дома в районе, и это целевая цена, которая будет спрогнозирована с учетом другой.
Питер Друкер, преподаватель Гарвардского университета и автор книги «Эффективный руководитель и управление собой», сказал знаменитую поговорку:
«Если вы не можете измерить это, вы не сможете улучшить это».
Если вы хотите контролировать что-то, это должно быть наблюдаемым, и для достижения успеха важно определить, что считается успехом: Может быть, точность? точность? Уровень удержания клиентов?
Эта мера должна быть напрямую согласована с целями более высокого уровня бизнеса. И это также напрямую связано с проблемой, с которой мы сталкиваемся:
- Задачи регрессии используют определенные метрики оценки, такие как среднеквадратичная ошибка (MSE).
- В задачах классификации используются такие показатели оценки, как точность, точность и отзывчивость.
В следующих статьях мы подробно рассмотрим эти показатели, какие показатели лучше всего использовать с учетом возникшей проблемы, и узнаем, как их настроить.
После того, как цель ясна, следует решить, как будет измеряться прогресс в достижении цели. Наиболее распространенными протоколами оценки являются:
4.1 Поддержание набора проверки удержания
Этот метод состоит в выделении некоторой части данных в качестве набора для тестирования.
Процесс будет заключаться в обучении модели на оставшейся части данных, настройке ее параметров с помощью набора проверки и, наконец, оценке ее производительности на наборе тестирования.
Причина разделения данных на три части - избежать утечки информации. Основное неудобство этого метода заключается в том, что при наличии небольшого количества данных наборы для проверки и тестирования будут содержать настолько мало образцов, что процессы настройки и оценки модели не будут эффективными.
4.2 Проверка K-Fold
K-Fold состоит в разбиении данных на K разделов равного размера. Для каждого раздела i модель обучается с оставшимися разделами K-1 и оценивается на разделе i.
Итоговая оценка - это среднее значение из полученных К. Этот метод особенно полезен, когда производительность модели значительно отличается от разделения поезд-тест.
4.3 Итерированная проверка K-Fold с перетасовкой
Этот метод особенно актуален при наличии небольшого количества данных и необходимости оценки модели как можно точнее (это стандартный подход на соревнованиях Kaggle).
Он заключается в применении проверки K-Fold несколько раз и перетасовке данных каждый раз перед их разделением на разделы K.Итоговый балл - это среднее значение баллов, полученных в конце каждого цикла проверки K-Fold.
Этот метод может быть очень дорогостоящим с точки зрения вычислений, так как количество обученных и оценивающих моделей будет I x K раз. Это I количество итераций и K количество разделов.
Примечание. При выборе протокола оценки важно учитывать следующие моменты:
- В задачах классификации данные обучения и тестирования должны быть репрезентативными для данных, поэтому мы должны перемешать наши данные перед разделением это, чтобы убедиться, что охватывается весь спектр набора данных.
- При попытке предсказать будущее с учетом прошлого (прогноз погоды, прогноз курса акций…) данные не следует перемешивать, поскольку последовательность данных является важной особенностью, и это может привести к временной утечке.
- Мы всегда должны проверять, есть ли в наших данных дубликаты, чтобы удалить их. В противном случае избыточные данные могут появиться как в обучающем, так и в тестовом наборе и вызвать неточное обучение нашей модели.
Прежде чем приступить к обучению моделей, мы должны преобразовать наши данные таким образом, чтобы их можно было использовать в модели машинного обучения.Наиболее распространены следующие методы:
5.1 Работа с отсутствующими данными
В реальных проблемах довольно часто пропустить некоторые значения наших выборок данных. Это может быть связано с ошибками при сборе данных, пробелами в опросах, измерениями, которые не применимы и т. Д.
Отсутствующие значения обычно представлены индикаторами «NaN» или «Null». Проблема в том, что большинство алгоритмов не могут обработать эти пропущенные значения, поэтому нам необходимо позаботиться о них, прежде чем передавать данные в наши модели.После того как они идентифицированы, есть несколько способов справиться с ними:
- Удаление образцов или объектов с пропущенными значениями. (мы рискуем удалить релевантную информацию или слишком много выборок)
- Ввод недостающих значений с помощью некоторых предварительно построенных оценок, таких как класс Imputer из scikit learn. Мы сопоставим наши данные, а затем преобразуем их, чтобы оценить их. Один из распространенных подходов - установить пропущенные значения как среднее значение для остальных образцов.
5.2 Работа с категориальными данными
При работе с категориальными данными мы работаем с порядковыми и номинальными признаками. Порядковые признаки - это категориальные признаки, которые можно сортировать (размер ткани : L
Методы работы с порядковыми и номинальными признаками:
- Отображение порядковых признаков : чтобы убедиться, что алгоритм правильно интерпретирует порядковые признаки, нам необходимо преобразовать категориальные строковые значения в целые числа.Часто мы делаем это сопоставление вручную. Пример: L: 2, M: 1, S: 0.
- Кодирование меток номинального класса : Наиболее распространенным подходом является выполнение однократного кодирования, которое заключается в создании нового фиктивного объекта для каждого уникального значения в столбце номинального признака. Пример: в столбце цвета, если у нас есть три класса: желтый, красный, зеленый и выполняется одноразовое кодирование, мы получим три новых столбца, по одному для каждого уникального класса. Тогда, если у нас есть желтая рубашка, она будет выбрана как: желтый = 1, зеленый = 0, красный = 0.Это сделано для обеспечения хорошей производительности алгоритма, поскольку они намного более эффективны при работе с разреженной матрицей (матрицы с низкой плотностью, с большим количеством значений 0).
5.3 Масштабирование функций
Это важный шаг на этапе предварительной обработки, так как большинство алгоритмов машинного обучения работают намного лучше при работе с функциями того же масштаба. Наиболее распространены следующие методы:
- Нормализация: это изменение масштаба функций в диапазоне [0,1], что является частным случаем масштабирования min-max.Чтобы нормализовать наши данные, нам просто нужно применить метод масштабирования min-max к каждому столбцу функций.
- Стандартизация: она заключается в центрировании столбцов признаков по среднему значению 0 со стандартным отклонением 1, чтобы столбцы признаков имели те же параметры, что и стандартное нормальное распределение (нулевое среднее и единичная дисперсия). Это значительно упрощает алгоритмам обучения определение весов параметров. Кроме того, он сохраняет полезную информацию о выбросах и делает алгоритмы менее чувствительными к ним.
5.4 Выбор значимых функций
Как мы увидим позже, одна из основных причин, по которым модели машинного обучения переоснащаются, заключается в избыточности наших данных, что делает модель слишком сложной для данных обучающих данных и неспособен хорошо обобщать невидимые данные.
Одним из наиболее распространенных способов избежать переобучения является уменьшение размерности данных. Это часто делается за счет уменьшения количества функций в нашем наборе данных с помощью анализа основных компонентов (PCA), который является разновидностью алгоритма неконтролируемого машинного обучения.
PCA выявляет закономерности в наших данных на основе корреляций между признаками. Эта корреляция означает, что в наших данных есть избыточность, другими словами, что есть некоторая часть данных, которую можно объяснить с помощью других ее частей.
Эти коррелированные данные не являются существенными для модели, чтобы правильно узнать свои веса, и поэтому их можно удалить. Его можно удалить, напрямую удалив определенные столбцы (признаки) или объединив их несколько и получив новые, которые содержат большую часть информации.Мы углубимся в эту технику в будущих статьях.
5.5 Разделение данных на подмножества
В общем, мы разделим наши данные на три части: наборы для обучения, тестирования и проверки. Мы обучаем нашу модель на обучающих данных, оцениваем ее на данных проверки и, наконец, когда она будет готова к использованию, тестируем ее в последний раз на тестовых данных.
Теперь уместно задать следующий вопрос: почему не использовать только два подхода, тренировку и тестирование? Таким образом, процесс будет намного проще: просто обучите модель на данных обучения и протестируйте ее на данных тестирования.
Ответ состоит в том, что разработка модели включает настройку ее конфигурации, другими словами, выбор определенных значений для их гиперпараметров (которые отличаются от параметров модели - весов сети). Эта настройка выполняется на основе обратной связи, полученной от проверочного набора, и, по сути, является формой обучения.
Конечная цель состоит в том, чтобы модель могла хорошо обобщать невидимые данные, другими словами, предсказывать точные результаты на основе новых данных на основе ее внутренних параметров, скорректированных во время обучения и проверки.
а) Процесс обучения
Мы можем более подробно рассмотреть, как осуществляется процесс обучения, изучив один из простейших алгоритмов: линейную регрессию.
В линейной регрессии нам дается ряд переменных-предикторов (объясняющих) и переменная непрерывного отклика (результат), и мы пытаемся найти взаимосвязь между этими переменными, которая позволяет нам предсказать непрерывный результат.
Пример линейной регрессии: для заданных X и Y мы подбираем прямую линию, которая минимизирует расстояние, используя некоторые методы оценки коэффициентов (например, обычных наименьших квадратов и градиентного спуска) между точками выборки и подобранной линией.Затем мы будем использовать полученные данные о пересечении и наклоне, которые образуют подобранную линию, чтобы предсказать результат для новых данных.
Формула прямой: y = B0 + B1x + u . Где x - входные данные, B1 - наклон, B0 - точка пересечения по оси Y, u - остаток и y - значение линии в позиции x .
Доступные для обучения значения: B0 и B1 , которые влияют на положение строки, поскольку единственными другими переменными являются x (вход и y, выход (остаток не учитывается). ).Эти значения ( B0 и B1 ) являются «весами» функции прогнозирования.
Эти веса и другие, называемые смещениями, представляют собой параметры, которые будут организованы вместе в виде матриц ( W, для весов и b для смещений).
Процесс обучения включает в себя инициализацию некоторых случайных значений для каждой из обучающих матриц и попытку предсказать вывод входных данных с использованием начальных случайных значений. Вначале ошибка будет большой, но, сравнивая прогноз модели с правильными выходными данными, модель может корректировать значения весов и смещений, пока не будет получена хорошая модель прогнозирования.
Процесс повторяется, по одной итерации (или шагу) за раз. На каждой итерации исходная случайная линия приближается к идеальной и более точной.
b) Переоснащение и недостаточное оснащение
Одной из наиболее важных проблем при рассмотрении обучения моделей является противоречие между оптимизацией и обобщением.
- Оптимизация - это процесс настройки модели для получения максимальной производительности на обучающих данных (процесс обучения).
- Обобщение - насколько хорошо модель работает с невидимыми данными.Цель состоит в том, чтобы получить наилучшую способность к обобщению.
В начале обучения эти две проблемы коррелируют: чем меньше потери данных обучения, тем меньше потери тестовых данных. Это происходит, когда модель еще недостаточно приспособлена: еще предстоит научиться, еще не смоделированы все соответствующие параметры модели.
Но после нескольких итераций обучающих данных обобщение перестает улучшаться, и показатели проверки сначала замораживаются, а затем начинают ухудшаться.Модель начинает переоснащаться: она настолько хорошо усвоила обучающие данные, что усвоила шаблоны, которые слишком специфичны для обучающих данных и не имеют отношения к новым данным.
Есть два способа избежать этого переобучения: получение дополнительных данных и регуляризация.
- Получение большего количества данных обычно является лучшим решением, модель, обученная на большем количестве данных, естественно, будет лучше обобщать.
- Регуляризация выполняется, когда последнее невозможно, это процесс изменения количества информации, которую может хранить модель, или добавления ограничений на то, какую информацию ей разрешено хранить.Если модель может запомнить только небольшое количество шаблонов, оптимизация заставит ее сосредоточиться на наиболее релевантных из них, повышая вероятность хорошего обобщения.
Регуляризация выполняется в основном следующими методами:
- Уменьшение размера модели: уменьшение количества обучаемых параметров в модели, а вместе с ними и ее способности к обучению. Цель состоит в том, чтобы найти золотую середину между слишком большой и недостаточной способностью к обучению. К сожалению, нет никаких волшебных формул для определения этого баланса, его нужно проверять и оценивать, задав различное количество параметров и наблюдая за его работой.
- Добавление регуляризации веса: В целом, чем проще модель, тем лучше. Пока она может хорошо учиться, более простая модель вряд ли переобучится. Обычный способ добиться этого - ограничить сложность сети, заставив ее веса принимать только небольшие значения, упорядочивая распределение значений весов. Это делается путем добавления к функции потерь сети стоимости, связанной с большими весами. Стоимость возникает двумя способами:
- Регуляризация L1: Стоимость пропорциональна абсолютному значению весовых коэффициентов (норма весов L1).
- Регуляризация L2: Стоимость пропорциональна квадрату значения весовых коэффициентов (норма весов l2)
Чтобы решить, какие из них применить к нашей модели, рекомендуется иметь в виду следующую информацию: примите во внимание природу нашей проблемы:
Цель на этом этапе процесса - разработать эталонную модель, которая будет служить нам в качестве базовой линии, после того как мы измерим производительность более совершенного и настроенного алгоритма.
Бенчмаркинг требует, чтобы эксперименты были сопоставимыми, измеримыми и воспроизводимыми.Важно подчеркнуть воспроизводимую часть последнего утверждения. В настоящее время библиотеки науки о данных выполняют случайное разбиение данных, причем эта случайность должна быть согласованной во всех прогонах. Большинство генераторов случайных чисел поддерживают установку начального числа для этой заливки. В Python мы будем использовать метод random.seed из пакета random.
Как показано на «https://blog.dominodatalab.com/benchmarking-predictive-models/»
«Часто бывает полезно сравнить улучшение модели с упрощенной базовой моделью, такой как kNN или Naive Bayes для категориальных данных. или EWMA значения в данных временного ряда.Эти базовые показатели дают представление о возможной прогнозирующей способности набора данных.
Модели часто требуют гораздо меньше времени и вычислительной мощности для обучения и прогнозирования, что делает их полезными для перекрестной проверки жизнеспособности ответа. Ни kNN, ни наивные байесовские модели вряд ли улавливают сложные взаимодействия. Тем не менее, они предоставят разумную оценку минимальной границы прогностических возможностей тестируемой модели.
Кроме того, это упражнение дает возможность протестировать конвейер тестирования.Важно, чтобы тестовые конвейеры обеспечивали стабильные результаты для модели с понятными характеристиками производительности. KNN или наивный байесовский метод для необработанного набора данных, или минимально управляемый с помощью центрирования столбца или масштабирования, часто дает слабого, но адекватного обучаемого с характеристиками, которые полезны для целей сравнения. Характеристики более сложных моделей могут быть менее понятны и могут оказаться сложными ».
7.1 Поиск хорошей модели
Одним из наиболее распространенных методов поиска хорошей модели является перекрестная проверка.При перекрестной проверке мы установим:
- Количество складок, по которым мы разделим наши данные.
- Метод подсчета баллов (зависит от природы проблемы - регрессия, классификация…).
- Некоторые подходящие алгоритмы, которые мы хотим проверить.
Мы передадим наш набор данных в функцию оценки перекрестной проверки и получим модель, которая дала лучший результат. Это будет тот, который мы будем оптимизировать, соответствующим образом настроив его гиперпараметры.
# Параметры теста и метрики оценки.
num_folds = 10
scoring = "neg_mean_squared_error" # Алгоритмы выборочной проверки
models = []
mo
Как применить непрерывное обучение к моделям машинного обучения | by yochze
Повышение точности модели и повышение производительности за счет непрерывного обучения
Что такое непрерывное обучение?
Как академики, так и практики считают, что непрерывное обучение (CL) является фундаментальным шагом на пути к искусственному интеллекту. Непрерывное обучение - это способность модели постоянно учиться на потоке данных. На практике это означает поддержку способности модели к автономному обучению и адаптации в производственной среде по мере поступления новых данных.Некоторые могут знать это как автоадаптивное обучение или непрерывный AutoML. Идея CL - имитировать способность людей постоянно приобретать, настраивать и передавать знания и навыки на протяжении всей жизни. Как вы знаете, цель машинного обучения - развертывание моделей в производственной среде. С непрерывным обучением мы хотим использовать данные, которые поступают в производственную среду, и переобучить модель на основе новой деятельности. Например, все мы знакомы с очень успешной системой рекомендаций Netflix по теме «Далее».Система рекомендаций Netflix предлагает шоу сразу после того, как закончился ваш последний эпизод, и обычно трудно устоять, когда секунды падают. Такая модель в производстве - это то, что нужно периодически переучивать, потому что на рынке появляются новые фильмы, новые вкусы и новые тенденции. При непрерывном обучении цель состоит в том, чтобы использовать поступающие данные и использовать их для автоматического переобучения модели, чтобы вы действительно могли добиться высокой точности и сохранить высокопроизводительные модели.
Почему нам нужно постоянное обучение?
Ответ довольно прост - данные меняются.Данные могут изменяться из-за тенденций или из-за различных действий пользователей. Например, бестселлером Amazon 2000 года была книга о Гарри Поттере. Сегодня вы можете быть удивлены, узнав, что бестселлером является совершенно другой жанр: Fire and Fury: Inside the Trump White House .
Почему постоянное обучение? Данные меняются.Таким образом, Amazon придется переобучить модель и рекомендовать новые книги своим клиентам на основе новых данных и тенденций. Немного более обновленный пример - цена биткойна до огромного падения.В 2017 году биткойн стоил 19 тысяч долларов. Примерно через полтора месяца цена упала до 6 тысяч долларов.
Не только изменяются данные, но, по мнению исследователей, «обучение на протяжении всей жизни остается давней проблемой для машинного обучения и моделей нейронных сетей, поскольку постоянное получение постепенно доступной информации из нестационарных распределений данных обычно приводит к катастрофическому забыванию или помехам. . » Доводы в пользу непрерывного обучения остаются сильными. Для специалистов по обработке данных непрерывное обучение в конечном итоге оптимизирует модели для обеспечения точности, улучшит производительность моделей и сэкономит время на переобучение, сделав модели автоматически адаптирующимися.
Конвейер машинного обучения с непрерывным обучением
Конвейер машинного обученияНа приведенной выше диаграмме показано, как выглядит конвейер машинного обучения в производственной среде с применением непрерывного обучения. Вы заметите, что конвейер очень похож на любой другой конвейер машинного обучения. У нас должны быть данные, какое-то подтверждение. Это может включать тесты или внутренние тесты, такие как определение качества данных. Это также может быть предварительная обработка, которую вы выполняете.
Далее на стадии разработки находится AutoML. AutoML в непрерывном обучении является очень важной частью конвейера и аналогичен этапу обучения в типичном конвейере машинного обучения. Но об этом мы поговорим позже.
После обучения вы проведете несколько проверок моделей, чтобы протестировать модели и убедиться, что все они работают нормально. Здесь вы также можете выбрать лучший и развернуть его в производственной среде. Пока что конвейер выглядит как классический конвейер машинного обучения.Чтобы применить непрерывное обучение, мы добавляем мониторинг и снова подключаем цикл к данным.
Машинное обучение с непрерывным обучением замкнутого циклаПрогнозы, которые собираются в области развертывания модели, будут отслеживаться. После проверки вы очистите данные и при необходимости пометьте их. Но для чего-то вроде рекомендательной системы или прогнозирования вы просто сможете замкнуть цикл без человеческих ярлыков. После маркировки и очистки данных мы вернем их к данным, чтобы снова повторить процесс обучения и проверки.Теперь мы замкнули петлю как маховик.
AutoML в конвейере непрерывного обучения
AutoML - важный компонент для применения непрерывного обучения, потому что мы работаем с постоянным потоком данных. Вы можете сделать это простым и просто переобучить тот же алгоритм с теми же параметрами, но поскольку мы все еще хотим добиться действительно высокой точности, мы собираемся использовать AutoML.
AutoML не обязательно должен быть сложным метаобучением. Вы можете просто использовать оптимизацию гиперпараметров, алгоритмы и фреймворки с открытым исходным кодом - и вы будете удивлены, насколько это просто.В рамках исследования, когда вы начнете работать над конвейером машинного обучения, вам нужно будет выбрать пространство алгоритмов. Например, если вы решаете проблему с компьютерным зрением, возможно, вы захотите использовать трансферное обучение в качестве алгоритмов обучения. Благодаря трансфертному обучению у вас есть много предварительно обученных моделей, которые вы можете использовать для переобучения только последнего уровня сети, а затем для развертывания вашей модели.
В этом случае вы должны выбрать одну из популярных готовых моделей, таких как VGG, Inception, ResNet и некоторые другие.Для каждой модели мы также должны указать диапазон ее параметров.
Это может превратиться в действительно большую вычислительную проблему. Вы, как специалист по данным, должны действительно исследовать, какой алгоритм и параметры будут полезны для решения вашей проблемы машинного обучения.
Ссылки AutoML: AutoKeras, Auto SciKitLearn, FeatureTools для разработки функций
Отслеживание AutoML
С AutoML особенно важно отслеживать не только модели в производстве, но и весь процесс.Если вы включите машинное обучение на автопилоте, вы должны убедиться, что все отслеживается и управляется. Вам нужно отслеживать все: от типа используемого алгоритма, гиперпараметров, типа используемых вычислений, потребления памяти, показателей, точности и т. Д. Допустим, вы сегодня проводите 60 различных экспериментов. Отслеживаемые данные могут быть использованы на следующей неделе при попытке повторно развернуть и переобучить модель.
Вы также можете использовать информацию для метаобучения, чтобы попытаться понять, какие алгоритмы хорошо работают для задачи, что позволит минимизировать количество экспериментов каждый раз.
Автоматизируйте свою инфраструктуру
Еще одна важная вещь в AutoML - особенно с глубоким обучением - это автоматизация инфраструктуры машинного обучения. Запуск экземпляра, готового к глубокому обучению, может занять много времени (подумайте о CUDA, зависимостях, данных, коде и многом другом). Мы рекомендуем использовать Kubernetes поверх всех предпочитаемых вами облачных провайдеров. Тот факт, что у вас будет запущен и запущен кластер Kubernetes, действительно упрощает развертывание новых экспериментов. Используя Kubernetes, вы можете очень быстро запускать множество экспериментов и отслеживать их, чтобы убедиться, что все эксперименты проходят нормально.
Однако имейте в виду, что обслуживание кластера Kubernetes не так просто и может потребовать дополнительной помощи от вашей ИТ-команды / команды разработчиков данных.
Развертывание моделей в конвейере непрерывного обучения
После того, как вы обучитесь и выберете модель с наилучшей производительностью, ваша модель будет готова к развертыванию. Одной из основных проблем при непрерывном обучении является то, как развертывать новые модели в той же среде, не оказывая отрицательного воздействия на пользовательский опыт и поддерживая высокую точность.
Развертывание моделей для непрерывного обучения немного отличается от развертывания классических моделей. Обычно даже специалист по данным может развернуть модель, но, поскольку это будет автоматизировано, мы должны делать это очень осторожно. Так же, как вы не развернете программное обеспечение с ошибкой в производственной среде, вы не сможете развернуть модель, которая не была успешно обучена и проверена. Чтобы убедиться, что ваша новая модель работает хорошо, вы протестируете ее на старых данных до и во время развертывания.Кроме того, вы захотите контролировать производительность и состояние вашей системы.
Сейчас в разработке программного обеспечения существует множество различных способов развертывания нового программного обеспечения. Для машинного обучения эта область все еще довольно новая, но мы рекомендуем использовать технику развертывания Canary. Canary - это метод, позволяющий представить новую версию программного обеспечения таким образом, чтобы частично повлиять на пользователей, постепенно увеличивая количество пользователей на основе тестов. Использование этой техники позволит постепенно развернуть модель среди более крупных групп пользователей.
На уровне реализации - мы рекомендуем использовать Kubernetes вместе с Istio для развертывания модели, чтобы вы могли провести A / B-тестирование и убедиться, что ваша модель развернута правильно. В нашем блоге также есть руководство по развертыванию моделей машинного обучения с помощью Kubernetes.
Мониторинг конвейеров непрерывного обучения
Мониторинг - особенно важная часть машинного обучения с непрерывным обучением. Вы должны убедиться, что если с вашей моделью происходит что-то плохое или данные, которые отправляются в вашу модель, повреждены, у вас есть механизм для оповещения.
Чаще всего один специалист по данным будет управлять несколькими конвейерами машинного обучения одновременно. Поэтому настройка предупреждений имеет решающее значение. После развертывания новой модели в производственной среде цель состоит в том, чтобы предоставить специалисту по обработке данных или инженеру по данным контроль и прозрачность, необходимые им для мониторинга модели машинного обучения. Для возможности автоматического развертывания новых версий модели необходимо отслеживать входные данные для обнаружения отклонений и аномалий данных. Мониторинг также важен для данных прогнозирования, чтобы гарантировать высокую производительность и точность.
В Kubernetes или Prometheus есть отличные инструменты наряду с AlertManager, которые можно использовать для мониторинга всех входных данных. И вам следует использовать облачные сервисы и Kubernetes для автоматизации инфраструктуры машинного обучения и экспериментов.
Запуск и переподготовка модели для непрерывного обучения
Последний шаг в конвейере непрерывного обучения машинного обучения - запуск переобучения и замыкание цикла. Ваш конвейер машинного обучения подготовлен к непрерывному обучению:
- У вас есть данные
- Эксперименты проходят обучение
- Прогнозы собираются и контролируются
- Новые данные очищаются
Затем вы должны выбрать триггеры для переобучение вашей модели.Есть несколько способов сделать это. У нас есть клиенты, которые периодически переобучают свою модель. Например, для рекомендательных систем или рекламы мы видели команды, которые переобучаются каждые 30 минут. Вы также можете рассмотреть возможность переобучения модели только на новых поступающих данных.
Другими способами являются отслеживание и мониторинг распада модели и смещения модели, низкой достоверности и любых других предупреждений в производственной среде, которые запускают переподготовку. Самым важным является то, что если вы запускаете конвейер машинного обучения автоматически, вы должны отслеживать и проверять триггер.Незнание, когда ваша модель была переобучена, может вызвать серьезные проблемы. Вы всегда должны контролировать переподготовку своей модели, даже если этот процесс автоматизируется. Таким образом вы сможете понять и отладить модель в производственной среде.
Завершение цикла машинного обучения
После того, как ваши системы AutoML, развертывания и мониторинга будут готовы, вы сможете замкнуть цикл машинного обучения. Ваши модели будут работать с постоянным обучением и автономно адаптироваться к новым данным и тенденциям.Мало того, что точность вашей модели будет автоматически повышаться, но и в целом ваша модель будет работать лучше в приложении.
.Как развернуть модель машинного обучения | Автор: Маартен Гроотендорст
Мы начинаем с загрузки данных и сохранения имен функций, которые мы хотим использовать в нашей модели. Это помогает отслеживать порядок столбцов. Вы не хотите случайно вводить значения для Age, когда вы имели в виду Salary.
Далее, поскольку столбцы Sales и Salary являются категориальными, мы собираемся применить и сохранить экземпляр One-hot Encoding. Быстрое кодирование превращает столбец в n столбцов с 0 или 1, где n равно количеству уникальных категорий.Я делаю это, поскольку это показывает дополнительную сложность при развертывании вашей модели.
Наконец, я использую готовый классификатор LightGBM для прогнозирования текучести. Модель сохраняется, чтобы ее можно было использовать в нашем API.
Предварительная обработка данных и создание моделиПосле того, как мы подготовили данные и сохранили все необходимые файлы, пора приступить к созданию API для обслуживания нашей модели.
ПРИМЕЧАНИЕ : Существует несколько методов сохранения модели, каждый из которых имеет свои плюсы и минусы.Помимо травления, вы также можете использовать Joblib или внутреннюю процедуру LightGBM.
Производство обычно означает конечную точку в форме API, к которой может получить доступ конечный пользователь. Для python доступно множество опций, таких как Flask, Falcon, Starlette, Sanic, FastAPI, Tornado и т. Д.
FastApi
Мы будем использовать FastApi в статье по трем причинам:
- Как и Flask, вы можете настроить конечная точка с минимальным кодом
- Это невероятно быстрый и его скорость на одном уровне с NodeJS и Go
- Он автоматически создает как OpenAPI (Swagger), так и документацию ReDoc
Это, однако , это из личного опыта, и, к счастью, вы легко можете заменить FastApi на что-то другое.
Uvicorn
Мы обслуживаем наш сервер FastAPI с помощью Uvicorn. Uvicorn - это сервер ASGI, который позволяет выполнять асинхронные процессы по сравнению с более традиционными серверами WSGI. Это ускорит работу приложения и приблизит вас к производственной производительности.
API
Во-первых, нам нужно установить FastAPI и Uvicorn:
pip install fastapi
pip install uvicorn
После установки необходимых пакетов мы можем приступить к созданию основного файла.В этот файл мы обязательно загружаем все необходимые файлы, которые мы сохранили ранее.
Затем мы создаем класс с именем Data
, который определяет все переменные, используемые в модели. Это помогает отслеживать используемые нами переменные, а также создает документацию на основе созданного нами класса.
Наконец, мы создаем метод прогнозирования. При этом данные извлекаются и располагаются в правильном порядке. Применяется горячая кодировка, как и раньше. Прогноз затем возвращается как 0 или 1.
main.pyТеперь, когда у нас все в порядке, мы можем загрузить сервер с помощью следующей команды из вашей консоли:
uvicorn main: app
main
относится к имени файла (main.py), тогда как app
- это имя экземпляра FastApi в main.py. Если все работает как задумано, вы можете увидеть, что сервер работает по адресу http://127.0.0.1:8000.
Чтобы проверить, дает ли он прогноз, вы можете запустить следующий код:
Вы также можете протестировать API с помощью Postman, который является отличным инструментом для разработки API.
Хотя теперь ваш API может технически использоваться в производственной среде, было бы полезно включить документацию, регистрировать то, что происходит в вашем API, и поместить ваше решение в контейнер.
Есть большая вероятность, что не вы будете реализовывать API в существующих сервисах. Тогда было бы хорошо, если бы вы задокументировали конечную точку, чтобы ее можно было использовать без каких-либо трудностей. К счастью, FastApi автоматически создает документацию на основе класса Data
, который мы создали ранее.
FastApi имеет методы для автоматического встраивания документации: OpenApi (Swagger) и ReDoc.
OpenApi
После запуска сервера FastAPI вы можете перейти на http://127.0.0.1:8000/docs, чтобы просмотреть автоматически созданную документацию вашего сервера. Вы даже можете нажать «попробовать», чтобы проверить, работает ли сервер должным образом.
.Создайте свою первую модель машинного обучения с помощью TensorFlow | автор: Shadab Hussain
Добро пожаловать в эту статью, где вы узнаете, как обучить свою первую модель машинного обучения с помощью TensorFlow и использовать ее для прогнозов! Как следует из названия, это руководство предназначено только для тех, кто не имеет предварительного представления о том, как использовать модель машинного обучения. Единственным предварительным условием для прохождения этого курса является базовое понимание языка программирования Python. Я постарался упростить здесь задачу и представил только базовые концепции машинного обучения и нейронной сети.
Что такое TensorFlow: TensorFlow - это комплексная платформа с открытым исходным кодом для машинного обучения. Он имеет всеобъемлющую, гибкую экосистему инструментов, библиотек и ресурсов сообщества, которая позволяет исследователям продвигать новейшие технологии машинного обучения, а разработчикам легко создавать и развертывать приложения на основе машинного обучения. Узнайте больше о TensorFlow здесь.
Для этой демонстрации мы будем использовать Google Colab . Google Colab - это бесплатный облачный сервис, который можно использовать для разработки приложений глубокого обучения с использованием популярных библиотек, таких как Keras, TensorFlow, PyTorch и OpenCV.Чтобы узнать больше о Google Colab, нажмите здесь.
Давайте сразу перейдем к примеру задачи, которую мы собираемся решить, используя концепции TensorFlow и машинного обучения.
Предположим, что нам дан маркетинговый бюджет, потраченный (в тысячах долларов) поставщиком медиа-услуг за последние 8 месяцев, а также количество новых подписчиков (также в тысячах) за то же время в таблице, приведенной ниже. :
Набор данныхКак видите, существует тенденция или взаимосвязь между потраченной суммой и получением новых подписчиков.По мере увеличения количества увеличивается и количество новых подписчиков.
Если вы поработаете математику, используя теорию линейного уравнения, вы обнаружите:
Полученных подписчиков = 2 * Потраченная сумма + 40
Наша цель - найти взаимосвязь между суммой, потраченной на маркетинг, и количеством число подписчиков увеличилось с помощью машинного обучения.
Используя приведенную выше взаимосвязь, мы также можем предсказать, сколько новых подписчиков можно ожидать, если организация потратит некоторую «x» сумму на маркетинг.
Давайте познакомимся с базовой терминологией машинного обучения, прежде чем переходить к процессу моделирования:
Feature: Входные данные для нашей модели. В данном случае единственное значение - маркетинговый бюджет.
Этикетки: Выход , прогнозируемый нашей моделью. В данном случае единственное значение - количество новых подписчиков.
Пример: Пара входов / выходов, используемых во время обучения.В нашем случае это пара значений из
mar_budget
иNew_subs
с определенным индексом, например (80,200).Модель: Математическое представление реального процесса. В машинном обучении модель - это артефакт или объект, который создается с использованием определенного класса алгоритма и его обучения с помощью функций и меток.
Теперь давайте начнем с процесса моделирования.
Шаг 1. Создание новой записной книжки
Щелкните ссылку ниже, чтобы зайти в colab, и щелкните File , затем New Python 3 Notebook .
https://colab.research.google.com/notebooks/welcome.ipynb
Шаг 2: Второй шаг - импортировать зависимости / библиотеки, которые мы собираемся использовать в этой демонстрации:
import numpy, matplotlib , и тензорный поток, как показано в фрагменте ниже:
Шаг 3: Сгенерируйте / импортируйте набор точек данных
Давайте сгенерируем набор точек данных, который мы будем использовать для обучения нашей модели в виде двух массивов с именами Mar_budget и Subs_gained для каждого значения в mar_budget соответственно.
Мы также построим наши массивы, чтобы понять взаимосвязь между mar_budget и Subs_gained.
Мы воспользуемся Matplotlib для визуализации этого (вы можете использовать другой инструмент).
График результатовКак видите, существует линейная зависимость между потраченным маркетинговым бюджетом и полученными новыми субсидиями. Наша цель будет заключаться в том, чтобы найти уравнение линии, которое можно использовать для соответствия всем точкам, то есть объяснить это линейное отношение, а затем использовать для прогнозирования меток для невидимых точек данных / предикторов.
(Примечание: взаимосвязь между данными не всегда должна быть идеально линейной. В этом примере я использую идеально линейные точки данных, но в реальных сценариях практически не существует идеально линейного набора данных. Наша цель - найти наиболее приближенный линия / кривая, также называемая моделью, которую можно использовать для объяснения взаимосвязи между предикторами и метками. Вы также можете сгенерировать или использовать нелинейные точки данных для этого тематического исследования.)
Основное предположение линейной регрессии: Должно быть линейная связь между метками и коэффициентами уравнения линии.
Шаг 4: Следующий шаг - разделить наши данные на данные для обучения и тестирования. Данные обучения используются для обучения нашей модели, в то время как данные тестирования будут храниться отдельно и позже использоваться для проверки производительности нашей модели путем сравнения фактической метки наших тестовых данных с меткой, предсказанной нашей моделью для тестовых данных.
Шаг 5: Создание модели
Мы будем использовать самую простую возможную модель - плотную сеть. Поскольку проблема проста, для этой сети потребуется только один слой с одним нейроном.
Создайте слой:
Мы назовем слой layer_0 и создадим его, создав экземпляр tf.keras.layers.Dense со следующей конфигурацией:
- input_shape = [1]: это указывает, что вход к этому слою - одно значение. То есть фигура представляет собой одномерный массив с одним членом. Поскольку это первый (и единственный) слой, входная фигура является входной формой всей модели. Единственное значение - это число с плавающей запятой, представляющее маркетинг_бюджет.
- units = 1: определяет количество нейронов в слое. Количество нейронов определяет, сколько внутренних переменных слой должен попытаться научиться решать проблему. Поскольку это последний уровень, он также является размером выходных данных модели - единственное значение с плавающей запятой, представляющее новых подписчиков. (В многослойной сети размер и форма слоя должны соответствовать «input_shape» следующего слоя.)
Соберите слои в модель:
После того, как слои определены, их нужно собрать в модель.Определение последовательной модели принимает список слоев в качестве аргументов, определяющих порядок вычислений от ввода до вывода.
В этой модели всего один слой, layer_0.
Примечание: вы часто будете видеть слои, определенные внутри определения модели, а не заранее, как показано ниже:
Шаг 6: Скомпилируйте модель с функциями потерь и оптимизатора
Перед обучением модель должна быть скомпилирована. При компиляции для обучения модели предоставляется:
- Функция потерь: способ измерения того, насколько далеки прогнозы от желаемого результата.(Измеренная разница называется «потерями».)
- Функция оптимизатора: способ корректировки внутренних значений для уменьшения потерь.
Эти параметры используются во время обучения ( model.fit ()
, ниже), чтобы сначала вычислить потери в каждой точке, а затем улучшить их. Процесс вычисления текущей потери модели с последующим ее улучшением и есть обучение.
Во время обучения функция оптимизатора используется для расчета корректировок внутренних переменных модели.Цель состоит в том, чтобы настроить внутренние переменные до тех пор, пока модель (которая является математической функцией) не будет отражать фактическое уравнение для преобразования budget_Spent
в New Subs Gained
.
TensorFlow использует численный анализ для выполнения этой настройки, и вся эта сложность скрыта от вас, поэтому мы не будем вдаваться в подробности здесь.
Что полезно знать об этих параметрах:
- Используемые здесь функция потерь (среднеквадратичная ошибка) и оптимизатор (Adam) являются стандартными для простых моделей, подобных этой, но доступны многие другие.На данном этапе не важно знать, как работают эти конкретные функции.
- Одна часть оптимизатора, о которой вам, возможно, придется подумать при построении ваших моделей, - это скорость обучения (
0,1
в приведенном выше коде). Это размер шага, используемый при корректировке значений в модели. Если значение слишком мало, для обучения модели потребуется слишком много итераций. Слишком большой - снижает точность. Поиск подходящего значения часто требует некоторых проб и ошибок, но диапазон обычно находится в пределах 0.001 (по умолчанию) и 0,1.
Чтобы узнать больше о функции потерь и оптимизаторе, щелкните по приведенным ниже ссылкам:
a. Среднеквадратичная ошибка
б. Adam
Шаг 7. Обучите модель, вызвав метод fit .
Во время обучения модель принимает значения маркетингового бюджета, выполняет расчет с использованием текущих внутренних переменных (называемых «весами») и выводит значения, которые должны быть «Получены новые подписки». Поскольку веса изначально устанавливаются случайным образом, результат не будет близок к правильному значению.Разница между фактическим и желаемым выходом рассчитывается с помощью функции потерь, а функция оптимизатора указывает, как следует корректировать веса.
Этот цикл расчета, сравнения, настройки управляется методом «подгонки». Первый аргумент - это входы, второй аргумент - желаемые выходы.
Аргумент эпох указывает, сколько раз этот цикл должен выполняться, а аргумент подробный управляет объемом вывода, производимым методом.
Необязательный шаг: отображение статистики обучения
Метод `fit` возвращает объект истории. Мы можем использовать этот объект для построения графика уменьшения потерь нашей модели после каждой эпохи обучения. с высокими потерями означает, что значение новых субтитров , прогнозируемых моделью, далеки от соответствующего значения фактических полученных субтитров .
Как вы можете видеть, наша модель сначала улучшается очень быстро, а затем постепенно, медленно улучшается, пока к концу не станет почти «идеальной»:
Шаг 8: Используйте модель для прогнозирования значений
Сейчас у вас есть модель, которая обучена изучать взаимосвязь между marketing_Budget и new_subs_gained.Вы можете использовать метод прогнозирования, чтобы он вычислил new_subs_gained для ранее известного / неизвестного Marketing_budget.
Итак, например, если значение marketing_budget составляет 80 тысяч долларов, как вы думаете, каким будет результат new_subs_gained?
Угадайте, прежде чем запускать этот код, или обратитесь к своему train_data:
Вывод: [[200.76306]]
Правильный ответ 80 * 2 + 40 = 200, так что наша модель работает очень хорошо.
Затем мы спрогнозируем метки для всех точек тестовых данных и сравним их с их фактическими точками данных:
Выходные данныеШаг 9: Проверка точности модели с использованием метрики производительности
Давайте проверим степень соответствия модели, используя r2_score (значение r-квадрат)
R² - это статистика, которая дает некоторую информацию о степени соответствия модели.В регрессии коэффициент детерминации R² является статистической мерой того, насколько хорошо прогнозы регрессии соответствуют реальным точкам данных.
R2 из 1 указывает, что прогнозы регрессии полностью соответствуют данным.
Вывод: 0.9936534779940202
Как мы видим, r2_score нашей модели почти = 1, что означает, что наша модель предсказывает с хорошей точностью.
Итак, это был наш последний шаг в процессе моделирования.
Здесь мы выбрали r2-score в качестве метрики производительности, вы также можете выбрать любую другую метрику для измерения производительности нашей модели.
Давайте посмотрим, что мы сделали в процессе моделирования:
Мы создали модель с плотным слоем
Мы обучили ее на 3000 примерах (6 пар, более 500 эпох).
Наша модель настраивала переменные (веса) в слое Dense до тех пор, пока не смогла вернуть правильное значение new_subs_gained для любого значения marketing_budget.
Мы проверили это с помощью наших тестовых данных (помните, 80 не было частью наших данных обучения.)
Мы также измерили точность предсказания для нашей модели с помощью r2_score
Небольшой мысленный эксперимент
Просто для удовольствия, что, если мы создадим новую модель с еще 3 плотными слоями с разными единицами измерения, которые, следовательно, также будут иметь больше переменных?
После обучения модели спрогнозируйте значения и проверьте ее r2_score:
РезультатКак мы видим, r2_score увеличилось, таким образом, степень соответствия или предсказания нашей модели также увеличилась за счет добавления еще нескольких слоев.
TODO: Распечатайте вес каждого слоя и подумайте, почему они так отличаются от (2, 40).
В этом тематическом исследовании мы использовали простую задачу линейной регрессии, имеющую один предиктор и одну метку. Эти же шаги и концепции можно распространить на более сложные задачи множественной линейной регрессии (имеющие n предикторов и одну метку), а также на задачи классификации.
Я также использую свой ноутбук для справки. Если вы где-то застряли, не стесняйтесь получить к нему доступ по этой ссылке:
Я закончу эту статью определением методологии машинного обучения, которое, на мой взгляд, легко понять и обобщить:
В машинном обучении вместо написания Алгоритм для решения проблемы, мы используем класс методологии обучения (линейная регрессия в данном случае) и передаем исторические данные для генерации алгоритма, который можно проверить и использовать позже для решения проблемы.
Как вы определяете машинное обучение? Делитесь в комментариях.
.