Мысли и теория

Регрессия современного гауссовского процесса

Неограниченное выражение модели + современные вычисления

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

В этой статье мы обсудим:

  1. Краткий обзор теории георадара
  2. Типы проблем, которые мы можем решить с помощью георадара, и некоторые примеры
  3. Сравнение GPR с другими алгоритмами контролируемого обучения
  4. Современные программные пакеты и инструменты, которые мы можем использовать для реализации GPR

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

Резюме: концепции регрессии гауссовского процесса (GPR)

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

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

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

iii. Использует ковариационные функции для измерения расстояния ядра между входами:

iv. Интерполирует новые точки из существующих точек, обрабатывая каждую новую точку как часть гауссовского процесса, т. е. параметризуя новую точку как распределение Гаусса:

Какие проблемы я могу решить с помощью георадара?

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

А. Интерполяция / кригинг

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

Б. Прогнозирование временных рядов

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

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

Прогнозирование неопределенности

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

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

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

Почему GPR превосходит другие модели контролируемого обучения?

Вы можете спросить - почему я должен рассмотреть возможность использования георадара вместо другой модели контролируемого обучения? Ниже я перечисляю несколько сравнительных причин.

  1. Георадар непараметрический. Это означает, что он в основном учится на самих данных, а не на изучении обширного набора параметров. Это особенно выгодно, поскольку в результате модели георадара не так требовательны к данным, как высокопараметрические модели, такие как нейронные сети, т. Е. Им не нужно столько образцов для добиться сильной обобщаемости.
  2. Для задач интерполяции и прогнозирования GPR оценивает как ожидаемые значения, так и неопределенность. Это особенно полезно для систем принятия решений, которые учитывают эту неопределенность при принятии решений.
  3. GPR - это линейный более гладкий [5] - с точки зрения контролируемого обучения, это можно представить как регуляризацию техника. С помощью байесовской линзы это эквивалентно наложению на модель априорного утверждения о том, что все цели в контрольных точках должны быть линейными комбинациями существующих тренировочных целей. Этот атрибут помогает GPR обобщать невидимые данные до тех пор, пока истинные невидимые цели могут быть представлены в виде линейных комбинаций обучающих целей.
  4. Благодаря автоматической дифференциации серверных структур, таких как torch и tensorflow, которые интегрированы с помощью пакетов GPR, таких как gpytorch и gpflow, GPR становится молниеносно и масштабируемым . Это особенно верно для пакетных моделей. Чтобы увидеть пример этого, см. Мою предыдущую статью о пакетном многомерном георадаре здесь!

Как я могу реализовать георадар?

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

1. Scikit-Learn [1]

Это отличный пакет для начала работы с георадаром. Это обеспечивает некоторую гибкость модели и может выполнять оптимизацию гиперпараметров и определять вероятности под капотом. Чтобы использовать sklearn с вашими наборами данных, убедитесь, что ваши наборы данных могут быть представлены в числовом виде с помощью np.array объектов. Основные этапы использования георадара с sklearn:

  1. Предварительно обработайте ваши данные. Данные обучения (np.array) могут быть представлены в виде (x_train, y_train) кортежа с x_train формой (N, D) и y_train формой (N, 1), где N - количество образцов, а D - размер функций. Ваши контрольные точки (np.array) могут быть представлены как x_test с формой (N, D).
  2. Определите свою ковариационную функцию. В приведенном ниже сегменте кода мы используем ядро ​​радиальной базисной функции (RBF) RBF вместе с аддитивным шумом с использованием WhiteKernel.
  3. Определите свой GaussianProcessRegressor объект, используя вашу функцию ковариации и случайное состояние, которое засевает ваш георадар. Это random_state важно для обеспечения воспроизводимости.
  4. Подгоните свой gpr объект, используя метод gpr.fit(x_train, y_train). Это «обучает вашу модель» и оптимизирует гиперпараметры вашего gpr объекта с помощью методов градиента, таких как lbfgs, процедура оптимизации второго порядка на основе Гессе.
  5. Предскажите среднее и ковариацию целевых значений по вашим контрольным точкам x_test с помощью метода gpr.predict(x_test, return_std=True). Это дает вам как прогнозируемое значение, так и меру неопределенности для этой прогнозируемой точки.

Чтобы установить зависимости для примера ниже, используя pip:

pip install scikit-learn numpy matplotlib

Вот пример, который соответствует и предсказывает одномерную синусоиду с использованием sklearn:

2. GPyTorch [2] (серверная часть PyTorch)

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

Перед работой с GPyTorch рекомендуется ознакомиться с PyTorch и / или пакетами автоматической дифференциации в python, но учебные пособия упрощают изучение и использование этой структуры. Данные для георадаров в GPyTorch представлены в виде torch.tensor объектов. Вот шаги для установки модели георадара в GPyTorch:

  1. Предварительно обработайте ваши данные. Данные обучения могут быть представлены в виде (x_train, y_train) кортежа с x_train формой (B, N, D) и y_train формой (B, N, 1), где B - размер пакета, N - количество образцов, а D - размер функций. Ваши контрольные точки могут быть представлены как x_test с формой (B, N, D).
  2. Определите свой ExactGPModel, создав подкласс класса gpytorch.models.ExactGP. Чтобы создать подкласс этой модели, вам необходимо определить: (i) метод конструктора, который определяет средние и ковариационные функции модели, (ii) метод forward, который описывает, как модель GPR делает прогнозы. Чтобы использовать пакетную обработку, ознакомьтесь с этим руководством здесь. Чтобы использовать предыдущие распределения для своих гиперпараметров, ознакомьтесь с этим руководством здесь.
  3. Укажите свою likelihood функцию, которую ваша модель использует для связи скрытых переменных f с наблюдаемыми целями y.
  4. Создайте экземпляр своего model, используя свои likelihood и данные обучения (x_train, y_train).
  5. Выполните гиперпараметрическую оптимизацию («обучение») вашего model, используя pytorch автоматическую дифференциацию. После завершения убедитесь, что ваши model и likelihood переведены в задний режим с помощью model.eval() и likelihood.eval().
  6. Вычислите среднее и отклонение для ваших контрольных точек с помощью model, позвонив по телефону likelihood(model(x_test)). Внутренняя функция предсказывает скрытые тестовые значения f* на основе тестовых входных данных x*, а внешняя функция предсказывает среднее и отклонение от скрытые тестовые значения f*.

Чтобы установить зависимости для примера ниже, используя pip:

pip install gpytorch torch matplotlib numpy
# (Optional) - Installs pykeops
pip install pykeops

Вот пример подгонки зашумленной одномерной синусоиды с использованием gpytorch:

3. GPFlow [3] (серверная часть TensorFlow)

Другой пакет GPR, который поддерживает автоматическое различение (на этот раз в tensorflow), GPFlow имеет встроенные обширные функциональные возможности для создания полностью настраиваемых моделей, функций правдоподобия, ядер, а также процедур оптимизации и вывода. В дополнение к GPR, GPFlow имеет встроенные функции для множества других современных задач байесовской оптимизации, таких как Вариационные функции Фурье и Сверточные гауссовские процессы .

Перед работой с GPFlow рекомендуется ознакомиться с пакетами TensorFlow и / или авто-дифференцирования в Python. Данные для георадаров в GPFlow представлены в виде tf.tensor объектов. Чтобы начать работу с GPFlow, перейдите по ссылке ссылка на эти примеры.

4. GPy [4]

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

5. Поджигатель [6]

Pyro - это пакет вероятностного программирования, который может быть интегрирован с Python, который также поддерживает гауссовскую регрессию процесса, а также расширенные приложения, такие как Deep Kernel Learning.

6. Gen [7]

Gen - еще один пакет вероятностного программирования, созданный на основе Julia. Gen предлагает несколько преимуществ с помощью гауссовской регрессии процесса: (i) он встраивает распределения предложений, которые могут помочь сузить пространство поиска, эффективно накладывая априорное значение на набор возможных решений; (ii) он имеет простой API для выборки трассировок. от подходящих моделей георадара, (iii) Как и является целью многих вероятностных языков программирования, он позволяет легко создавать иерархические модели для настройки априорных значений гиперпараметров георадара.

7. Стэн [8]

Stan - еще один пакет вероятностного программирования, который может быть интегрирован с Python, но также поддерживает другие языки, такие как R, MATLAB, Julia и Stata. Помимо встроенных функций для регрессии гауссовского процесса, Stan также поддерживает множество других функций байесовского вывода и выборки.

8. BoTorch [9]

Созданная создателями GPyTorch, BoTorch представляет собой библиотеку байесовской оптимизации, которая поддерживает многие из тех же методов георадара, а также передовые методы байесовской оптимизации и аналитические наборы тестов, что и GPyTorch.

Заключение и обзор

В этой статье мы рассмотрели теорию, лежащую в основе регрессии гауссовского процесса (GPR), представили и обсудили типы проблем, которые можно использовать для решения GPR, обсудили, как GPR сравнивается с другими алгоритмами контролируемого обучения, и рассмотрели, как мы можем реализовать GPR, используя sklearn , gpytorch или gpflow.

Чтобы увидеть больше статей по обучению с подкреплением, машинному обучению, компьютерному зрению, робототехнике и обучению, подписывайтесь на меня! Спасибо за чтение!

Благодарности

Спасибо компании CODECOGS за их встроенный инструмент визуализации уравнений, Карлу Эдварду Расмуссену за открытый исходный код учебника Гауссовские процессы для машинного обучения [5] и за Scikit-Learn, GPyTorch », GPFlow и GPy за открытый исходный код их библиотек Python для гауссовской регрессии процессов.

использованная литература

[1] Педрегоса, Фабиан и др. «Scikit-learn: машинное обучение на Python». Журнал исследований по машинному обучению 12 (2011): 2825–2830.

[3] Гарднер, Джейкоб Р. и др. «Gpytorch: гауссовский вывод матрицы-матрицы Blackbox с ускорением графического процессора». Препринт arXiv arXiv: 1809.11165 (2018).

[3] Мэтьюз, Александр Г. де Г. и др. «GPflow: библиотека гауссовских процессов с использованием TensorFlow». Дж. Мах. Учиться. Рез. 18.40 (2017): 1–6.

[4] GPy, GPy. http://github.com/SheffieldML/GPy.

[5] Карл Эдвард Расмуссен и Кристофер К. И. Уильямс. 2005. Гауссовские процессы для машинного обучения (адаптивные вычисления и машинное обучение). MIT Press.

[6] Эли Бингхэм, Джонатан П. Чен, Мартин Янковяк, Фриц Обермейер, Нирадж Прадхан, Теофанис Каралецос, Рохит Сингх, Пол Шерлип, Пол Хорсфолл и Ноа Д. Гудман. 2019. Pyro: глубокое универсальное вероятностное программирование. Дж. Мах. Учиться. Res. 20, 1 (январь 2019 г.), 973–978.

[7] Gen: универсальная система вероятностного программирования с программируемым выводом. Cusumano-Towner, M. F .; Саад, Ф. А .; Lew, A .; и Мансингка, В. К. В материалах 40-й конференции ACM SIGPLAN по проектированию и реализации языков программирования (PLDI ‘19).

[8] Команда разработчиков Stan. 2021. Стандартное руководство пользователя и справочное руководство по языку моделирования, ВЕРСИЯ. Https://mc-stan.org.

[9] Баландат, Максимилиан и др. «BoTorch: структура для эффективной байесовской оптимизации методом Монте-Карло». Достижения в системах обработки нейронной информации 33 (2020).