Немного предыстории: я учусь в старшей школе и летом 2018 года стажировался на H2O.ai. Не имея опыта машинного обучения, кроме курса Эндрю Нг «Введение в машинное обучение на Coursera» и нескольких его курсов глубокого обучения, я сначала обнаружил, что меня немного ошеломило разнообразие новых алгоритмов, которые H2O предлагает как в своем ПО с открытым исходным кодом, так и в корпоративном ПО. Но, изучив различные ресурсы, к концу лета я смог использовать AI без водителя и алгоритмы H2O-3 в испытании TGS Salt Identification Challenge на Kaggle. В этом сообщении в блоге я расскажу о своем опыте и знаниях, полученных за время работы в H2O.ai, а также о ресурсах для изучения H2O и науки о данных для тех, кто в этом впервые.

Начало работы

H2O-3

Чтобы начать работу с H2O, я сначала загрузил пакет H2O-3 вместе с клиентом Python. Хотя инструкции по установке просты, при установке и использовании клиента Python убедитесь, что:

  1. Версия установки H2O Python и загруженного пакета совпадают.
  2. H2O работает под управлением Java 8

Если вы не хотите использовать Python, у H2O-3 есть GUI API, H2O Flow, доступ к которому можно получить в браузере; Клиент python был прост в использовании и гибок, с интуитивно понятными командами и другими преимуществами Python, такими как numpy, pandas и opencv.

После того, как Н2О-3 заработал, следующей задачей было ознакомление с его функционалом. Полезные ресурсы для этого включают:

  • Документация: Обязательно стоит прочитать страницы, доступные на боковой панели (пропустите или пролистайте на ваше усмотрение). Документация дает общее представление о том, что вы можете делать с H2O-3, а также подробности и пояснения относительно реализации. Пример кода можно найти на некоторых страницах как на R, так и на Python. Если пример кода недоступен на некоторых страницах - например, на странице глубокого обучения - он, вероятно, доступен в репозитории GitHub (скорее всего, в папке руководств; вы можете выполнить поиск в репозитории, если его нелегко найти)
  • H2O-3 GitHub: ознакомьтесь с руководствами по проекту, который вы задумали. Просмотрите еще несколько функций и алгоритмов, которые вы могли бы включить. Я нашел пример кода в руководствах очень полезным для изучения того, как использовать каждую функцию. Исходный код было интересно читать. Прочтите, если хотите понять, как все реализовано; хотя, чтобы понять, как все использовать, было бы легче просмотреть документацию, поскольку исходный код довольно длинный для чтения и интерпретации.
  • Coursera: у H2O есть курс на Coursera, где вы можете получить доступ к материалам бесплатно, но за задания нужно платить. Хотя я не пробовал это делать, если вы предпочитаете более структурированный подход, попробуйте.

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

Начиная с H2O Driverless AI

Я начал с AI без водителя (DAI) так же, как и с H2O-3. Скачал и установил DAI согласно инструкции по установке. Это было довольно просто, но стоит отметить, что если у вас недостаточно оперативной памяти на вашем компьютере (инструкции требуют минимум 10 ГБ для работы DAI), все равно попробуйте запустить DAI, он все равно может работать. Я выделил 4 ГБ на Mac с 8 ГБ оперативной памяти, и он все еще работал.

Чтобы ознакомиться с DAI, сначала просмотрите все страницы в боковой панели Документация. Интерпретация и преобразования моделей уникальны для DAI. Чтобы понять интерпретацию модели, я попытался понять LIME, просмотрев его репозиторий GitHub и эту статью. Оригинальную статью тоже стоит прочитать.

DAI очень интуитивно понятен в использовании. Понять, как им пользоваться, было довольно легко. В конце концов, он создан для специалистов, не занимающихся данными!

Ансамбль

H2O-3 AutoML (а также некоторые по сути ансамблевые модели) и ансамблевые модели DAI для повышения производительности. Ансамблевые модели также часто используются в Kaggle. Эта статья концептуально объясняет ансамбль, а этот пост в блоге показывает, как его реализовать. По теме: mlwave.com - отличный ресурс для изучения концепций, способов использования и рабочих процессов машинного обучения от ведущих специалистов по Kagglers и специалистов по данным. Я очень рекомендую его прочитать; статьи очень интересны и могут быть полезны для вашего проекта по науке о данных.

Небольшой проект

Я начал экспериментировать с DAI и H2O-3 на примере дневной торговли, загрузив данные по акциям Tata Steel за 24 месяца с (Индийской) национальной фондовой биржи. Я намеревался использовать маркеры предыдущего дня и цену открытия текущего дня, чтобы предсказать цену закрытия текущего дня.

Сначала я обработал этот набор данных, сдвинув элементы в столбцах маркеров в один день так, чтобы цена закрытия текущего дня находилась в той же строке, что и маркеры предыдущего дня - это был неправильный способ создания временных рядов; Функция временных рядов DAI обрабатывала данные автоматически и надлежащим образом. Затем я запустил DAI для этого набора данных. Поскольку алгоритмы H2O-3 работали намного быстрее, я также смог обучить несколько моделей H2O-3 на этом наборе данных во время выполнения DAI. Оценки RMSE обучения были около 10 с алгоритмами H2O-3 и 9,1 с DAI, а результаты тестов были около 213 на небольших тестовых наборах данных, что делало модель бесполезной для любого приложения для дневной торговли.

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

Пытаясь следовать этому, я сначала скармливал данные, полученные из DAI, с дополнительными функциями (но со значениями истинной цены, т.е. столбец близких цен из исходного набора данных) в различные модели H2O-3, которые отображали большее разнообразие, а затем их прогнозы для DAI (окончательная модель). Это было более многообещающим на этапе обучения со среднеквадратичным отклонением около 3,5, но хуже с тестовым набором данных с результатом около 288. Это было неправильное суммирование. Просмотрите вышеупомянутую запись в блоге, чтобы узнать, как это сделать правильно.

Позже я попробовал функцию временных рядов DAI на неотредактированном наборе данных, и ее производительность резко улучшилась до ~ 0,05 обучающей RMSE и ~ 6 тестовой RMSE. Однако даже при такой повышенной производительности существенное снижение производительности модели на тестовой выборке говорит о том, что у нее не было достаточно данных для создания точной модели.

Kaggle

Попробовав и ознакомившись с H2O-3 и DAI, поскольку я не смог найти достаточно данных для Tata Steel, чтобы сделать лучшую модель, я обратился к Kaggle, платформе для соревнований по науке о данных. Конкурс TGS Salt Identification показался интересным и представил большой набор данных. Этот конкурс включал определение того, является ли подземная цель соляной или нет, с учетом сейсмических данных (в виде изображений) и глубины каждого изображения - другими словами, местоположения и границ соли на сейсмическом изображении.

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

Полезные модули Python

Python имеет множество модулей, которые значительно упрощают манипулирование данными. Обратите внимание на numpy и pandas для вычислений и обработки данных, csv для чтения и записи csv и opencv при работе с изображениями.

Генерация набора данных

Поскольку H2O не принимает данные изображения, я сгенерировал набор данных следующего формата столбца, где каждая строка соответствует пикселю на изображении, используя этот скрипт:

Id (строка)

глубина (реальная)

значение в пикселях шкалы серого (реальное)

солёная правда (bool / enum)

Подача этих данных в DAI была довольно простой задачей; Я только что загрузил его с помощью кнопки загрузки файла. Однако с H2O-3 его нужно было сжать, иначе Python выдаст [Errno 22] Invalid argument. Примечание: Python 3, кажется, борется с файлами размером более 2–4 ГБ; H2O.ai исправит эту ошибку, обновив свои библиотеки импорта.

Скрипт python создал набор поездов из 3600 пикселей изображений, набор проверки из 400 пикселей изображений и тестовый набор из 18000 пикселей изображений; эти тестовые прогнозы затем будут отправлены на Kaggle.

Алгоритмы DAI и H2O-3

Чтобы алгоритмы не запоминали данные, столбец id был удален перед обучением. Поскольку обучающие и тестовые наборы данных были довольно большими (~ 41 миллион строк и ~ 183 миллиона строк соответственно), без графического процессора DAI требовалось много времени для обучения. В этот раз я попробовал H2O-3 DeepLearningEstimator. Для обоих я использовал метрику AUC в качестве счетчика и включил модели Tensorflow и поддержку RuleFit (в меню экспертных настроек) для финальных конвейеров DAI. DAI достиг ~ 0,75 train AUC, а H2O-3 Deep Learning ~ 0,72.

Предсказанные значения пикселей были преобразованы в кодировки RLE, сопоставленные с идентификаторами, как того требует секретарь соревнования, с использованием этого сценария. Благодарим rakhlin за массив numpy для функции, найденной здесь. Оценки Intersection over Union (IoU) моделей Deep Learning и DAI в тестовом наборе данных по оценке Kaggle были следующими:

Модель: H2O-3 Deep Learning, IoU: 0,263

Модель: DAI, IoU: 0,176

Отсутствие функций

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

Это, однако, выявило еще больше аппаратных ограничений, поскольку файлы обучения, проверки и тестирования (в частности, тестовый файл) увеличились с 4 столбцов до 13. DAI требовал много времени для запуска, у моего ноутбука закончилась оперативная память, а Python - нет. поддержка загрузки больших файлов, все замедляет прогресс.

Ресурсы

Форумы Kaggle были невероятно полезны для поиска возможных путей улучшения моделей, будь то понимание и расширение данных, изучение более подходящих моделей или уточнение моделей. Кроме того, всякий раз, когда возникала проблема, поиск в Google обычно приводил меня к исследовательским статьям, в которых были некоторые ответы (или были, по крайней мере, интересны), обсуждениям Stackoverflow или Kaggle.

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

Идеи на будущее

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

Автоэнкодеры или GLRM также могут использоваться для шумоподавления входного изображения и / или прогнозов. Изучив начальные (2 функции) прогнозы поездов DAI, я заметил много шума, особенно на изображениях, которые должны быть пустыми. Kaggle реализовал метрику IoU, так что если на изображениях, которые должны быть пустыми, прогнозируется какая-либо соль, это изображение получает оценку 0. Прогнозирование теста через H2OAutoEncoderEstimator, обученный прогнозам поездов, и набор поездов должны уменьшить шум и удалить паразитные пиксели на в противном случае пустые изображения.

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

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

С точки зрения скорости Cython кажется многообещающим средством для ускорения обработки наборов данных. Более высокая эффективность и меньшее количество аппаратных ограничений также сделают объединение (наложение / смешивание) более жизнеспособным способом повышения производительности модели.

Если у вас есть время, желание и вычислительные ресурсы, возьмите эстафету и попробуйте соревноваться!

Разные уроки

Уловки с командной строкой

Знакомство с командной строкой, хотя и не требуется для работы с H2O, упрощает большинство задач. Для меня было достаточно знаний, как перемещаться по файлам, запускать Java, использовать Python и pip, подключаться к удаленным машинам и запускать на них задачи.

Удаленные машины

Если вы используете DAI или H2O на удаленном компьютере (или что-то еще в этом отношении), эти команды могут быть полезны:

wget: загрузить на машину

ssh: подключиться к командной строке машины

Byobu может использоваться для сохранения удаленных сеансов (вы можете запустить DAI или H2O-3 на удаленной машине даже при отключении) и очень прост в использовании.

Машинное обучение

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

В будущем

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