Мульти-выходная регрессия в gpflow

Я использую gpflow для регрессии с несколькими выходами.

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

kernel = mk.SharedIndependentMok(gpflow.kernels.RBF(args.feat_dim, ARD=False, name="rbf"), args.output_dim)

# kernel = mk.SeparateIndependentMok([gpflow.kernels.RBF(128, ARD=True, name="rbf_ard"+str(i)) for i in range(3)])
q_mu = np.zeros((args.batch_size, args.output_dim)).reshape(args.batch_size * args.output_dim, 1)
q_sqrt = np.eye(args.batch_size * args.output_dim).reshape(1, args.batch_size * args.output_dim, args.batch_size * args.output_dim)
# feature = gpflow.features.InducingPoints(np.zeros((args.batch_size, 128)))

self.gp_model = gpflow.models.SVGP(X=f_X, Y=Y, kern=kernel, likelihood=gpflow.likelihoods.Gaussian(name="lik"), Z=np.zeros((args.batch_size, args.feat_dim)), q_mu=q_mu, q_sqrt=q_sqrt, name="svgp")

У меня есть два вопроса:

  1. Какое ядро ​​я должен использовать? Я прочитал учебник по многопрофильному GP в https://gpflow.readthedocs.io/en/develop/notebooks/multioutput.html#Shared-Independent-MOK-&-Shared-Independent-Features-(SLOW-CODE), Может ли кто-нибудь дополнительно объяснить следующее утверждение? В моем понимании, ядра между различными выходными измерениями не коррелированы, однако, мы все еще можем получить полную ковариационную матрицу в прогнозе (условно)?

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

  1. технический вопрос. Как я должен установить "функцию", когда я использую gpflow после tenorflow. Должен ли я установить NumPy Matix с нулями или просто как None? Похоже, что при обучении партии заданная точка задается как полная партия по умолчанию. В то время как как установить типы объектов, например SharedIndependentMof, и можем ли мы установить точки побуждения больше, чем размер пакета?

Спасибо!

1 ответ

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

  • Обучение с использованием мини-пакетов (т.е. корреляции между мини-пакетами не нужно принимать во внимание [Hensman et al 2013])
  • Ядро, которое дает корреляции между выходами. В настоящее время мы поддерживаем только линейные корреляции в SeparateMixedMok, Хороший обзор математики предоставлен Alvarez et al.
  • Функция, которая использует свойства независимости в предыдущих (MixedKernelSeparateMof).
  • Предсказания с полной ковариацией.

Это покрыто разделом 3. Mixed Kernel & Uncorrelated features (OPTIMAL), При использовании обычной функции прогнозирования просто установите full_output_cov=True,

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

Примечание. Записную книжку также можно просмотреть через GitHub https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/multioutput.ipynb.

Другие вопросы по тегам