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

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

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

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

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

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

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

Одно из особых свойств ядер, которое особенно полезно, заключается в том, что нам не нужно знать, какова наша функция отображения. Нам просто нужно продемонстрировать, что ядро ​​представляет действительный внутренний продукт в отображенном пространстве. Чтобы продемонстрировать это, наше ядро ​​должно соответствовать требованию, известному как Условие Мерсера. Хотя полная версия условия Мерсера более сложна, в этом случае мы можем свести ее к простому требованию выполнения следующего условия для всех последовательностей (x1, x2, …, xn) во входном пространстве (пространстве, в котором находятся наши данные). ) и все варианты n действительных коэффициентов (c1, c2, …, cn).

Если это условие выполнено, то должно существовать некоторое отображение в пространство внутреннего произведения, которому соответствует наше ядро, и, таким образом, ядро ​​подходит для наших целей. Некоторыми распространенными ядрами, дополнительную информацию о которых можно найти здесь, являются ядра Гаусса, ядра Лапласа и полиномиальные ядра. Понимать больше математики полезно для более сложных тем, но для понимания и использования ядер в Машинах опорных векторов или Анализе главных компонентов этого базового понимания должно быть достаточно, чтобы начать работу.

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

Спасибо за прочтение 👋

Джона Джоуин