Перейти к основному содержимому

Ядерное обобщение методов

Вычислительная проблема

В прошлой главе мы изучили важность работы не с исходными признаками x\mathbf{x}, а с их нелинейно преобразованными версиями посредством некоторого нелинейного преобразования ϕ(x)\phi(\mathbf{x}), называемого спрямляющим. Однако в реальных задачах размерность ϕ(x)\phi(\mathbf{x}) может быть очень большой, что делает непосредственную работу в новом пространстве вычислительно трудоёмкой.

Например, при использовании полиномиальных признаков степени не выше KK в DD-мерном пространстве признаков количество новых признаков будет равно числу сочетаний из D+KD+K по DD (D+KD)\binom{D+K}{D}, что даже при небольших DD и KK становится непрактичным.

Доказательство для любознательных

Пусть у нас есть вектор признаков размерности DD:

x=(x1,x2,,xD)\mathbf{x} = (x_1, x_2, \dots, x_D)

и мы хотим построить все мономы степени в точности равной KK:

x1k1x2k2xDkD,k1+k2++kD=K,ki0.x_1^{k_1} x_2^{k_2} \cdots x_D^{k_D}, \quad k_1 + k_2 + \dots + k_D = K, \quad k_i \ge 0.

Каждое целое число kik_i можно визуально интерпретировать как количество звёздочек ★, присвоенных признаку xix_i.

Всего мы имеем KK звёздочек, которые нужно распределить между DD признаками.

Для разделения звёздочек между признаками будем использовать значок перегородки |.

Пример для D=3D=3, K=4K=4:

x14x20x30x_1^4 x_2^0 x_3^0 \to ★★★★|| x13x21x30x_1^3 x_2^1 x_3^0 \to ★★★|★| x11x21x32x_1^1 x_2^1 x_3^2 \to ★|★|★★ ...

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

Для распределения KK звёздочек между DD признаками требуется D1D-1 перегородка.

По комбинаторике, количество способов выбрать D1D-1 позиций из K+D1K+D-1 равно числу сочетаний из K+D1K+D-1 по D1D-1, т.е. (K+D1D1)\binom{K+D-1}{D-1}.

Чтобы посчитать число всех мономов степени не выше KK необходимо в число признаков включить тождественную единицу и посчитать число мономов степени в точности равной KK, что по формуле выше (учитывая появление D+1D+1 признака) будет (K+DD)\binom{K+D}{D}.

Идея ускорения расчётов

Можно ли обойтись без явного расчёта ϕ(x)\phi(\mathbf{x}), но при этом позволить алгоритму учитывать все эти сложные признаки? Оказывается, это можно сделать, если формула построения прогноза метода вместе с настроенными параметрами можно выразить так, чтобы она зависела не от самих объектов x\mathbf{x} и x1,x2,xN\mathbf{x}_1,\mathbf{x}_2,\cdots\mathbf{x}_N напрямую, а зависела от них опосредованно через скалярные произведения x,xi\langle \mathbf{x},\mathbf{x}_i\rangle и xi,xj\langle \mathbf{x}_i,\mathbf{x}_j\rangle.

В таком виде можно выразить прогнозы, например, для гребневой регрессии, метода опорных векторов, метода главных компонент и метода K-средних.

В этом случае формула построения прогнозов в пространстве исходных признаков будет

y^(x)=F({<x,xi>}i{<xi,xj>}i,j)\widehat{y}\left(\mathbf{x}\right)=F\left(\left\{ \left<\mathbf{x},\mathbf{x}_{i}\right>\right\} _{i}\left\{ \left<\mathbf{x}_{i},\mathbf{x}_{j}\right>\right\} _{i,j}\right)

После перехода в спрямляющее пространство xϕ(x)\mathbf{x}\to\phi\left(\mathbf{x}\right) она станет

y^(x)=F({<ϕ(x),ϕ(xi)>}i{<ϕ(xi),ϕ(xj)>}i,j),\widehat{y}\left(\mathbf{x}\right)=F\left(\left\{ \left<\phi\left(\mathbf{x}\right),\phi\left(\mathbf{x}_{i}\right)\right>\right\} _{i}\left\{ \left<\phi\left(\mathbf{x}_{i}\right),\phi\left(\mathbf{x}_{j}\right)\right>\right\} _{i,j}\right),

что, используя обозначение k(x,z)=<ϕ(x),ϕ(z)>k\left(\mathbf{x},\mathbf{z}\right)=\left<\phi\left(\mathbf{x}\right),\phi\left(\mathbf{z}\right)\right>, можно записать в виде:

y^(x)=F({k(x,xi)}i,{k(xi,xj)}i,j),\widehat{y}\left(\mathbf{x}\right)=F\left(\left\{ k\left(\mathbf{x},\mathbf{x}_{i}\right)\right\} _{i},\left\{ k\left(\mathbf{x}_{i},\mathbf{x}_{j}\right)\right\} _{i,j}\right),

где k(x,z)k\left(\mathbf{x},\mathbf{z}\right) называется функцией ядра (kenrel function).

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

Популярные ядра

При обработке табличных данных чаще всего используются следующие ядра (kernels):

НазваниеФормулаГиперпараметры
линейноеk(x,x)=x,xk(\mathbf{x}, \mathbf{x'}) = \langle \mathbf{x}, \mathbf{x'}\rangle
полиномиальноеk(x,x)=(x,x+r)dk(\mathbf{x}, \mathbf{x'}) = (\langle \mathbf{x}, \mathbf{x'}\rangle + r)^dr0r \ge 0 — сдвиг, dNd \in \mathbb{N} — степень
RBF (Гауссово)k(x,x)=exp(γxx2)k(\mathbf{x}, \mathbf{x'}) = \exp(-\gamma \|\mathbf{x} - \mathbf{x'}\|^2)γ>0\gamma > 0 — ширина ядра

Гауссово ядро также часто записывается в виде

K(x,x)=exp(xx22σ2),K(x, x') = \exp\Big(-\frac{\|x - x'\|^2}{2\sigma^2}\Big),

где 1/(2σ2)=γ1/(2\sigma^2)=\gamma, а гиперпараметр σ2\sigma^2 называется дисперсией Гауссова ядра.

Разберём описание спрямляющего пространства и применения каждого из этих ядер.

Линейное ядро

Спрямляющее пространство соответствует исходным признакам, ϕ(x)=x\phi(\mathbf{x}) = \mathbf{x}, точки не меняют своих координат.

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

Полиномиальное ядро

В полиномальном ядре каждая точка x=(x1,x2,...xD)\mathbf{x}=(x^1,x^2,...x^D) отображается во всевозможные полиномиальные комбинации исходных признаков, степень которых не превосходит dd:

ϕ(x)={d!i0!i1!...iD!(r)i0(x1)i1(x2)i2(xD)iD}i0,i1,i2,...iD при r>0\phi(\mathbf{x}) = \{\sqrt{\frac{d!}{i_0!i_1!...i_D!}}(\sqrt{r})^{i_0} \cdot (x^1)^{i_1} \cdot (x^2)^{i_2} \cdot (x^D)^{i_D} \}_{i_0,i_1,i_2,...i_D} \text{ при } r>0 i0+i1++iD=di_0+i_1+\cdots+i_D = d

Это можно проверить непосредственным расчётом ϕ(x),ϕ(x)\langle \phi(\mathbf{x}), \phi(\mathbf{x}) \rangle и применением мультиномиальной теоремы [1].

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

В частном случае r=0r=0 используются всевозможные полиномиальные комбинации признаков степени в точности равной dd:

ϕ(x)={d!i1!...iD!(x1)i1(x2)i2(xD)iD}i0,i1,i2,...iD,\phi(\mathbf{x}) = \{\sqrt{\frac{d!}{i_1!...i_D!}}(x^1)^{i_1} \cdot (x^2)^{i_2} \cdot (x^D)^{i_D} \}_{i_0,i_1,i_2,...i_D}, i1++iD=di_1+\cdots+i_D= d
Вычислительная эффективность

Вместо явного перехода в пространство размерности (K+DD)\binom{K+D}{D} при r>0r>0 или (K+D1D1)\binom{K+D-1}{D-1} при r=0r=0 мы используем обычный прогноз в исходном пространстве признаков, но в котором скалярные произведения x,x\langle \mathbf{x}, \mathbf{x'}\rangle заменяются на (x,x+r)d(\langle \mathbf{x}, \mathbf{x'}\rangle + r)^d, что имеет тот же порядок сложности!

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

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

RBF (Гауссово) ядро

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

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

При γ0\gamma \to 0 Гауссово ядро стремится к константе.

При увеличении γ\gamma ядро порождает более выраженные нелинейные зависимости, делая метод, опирающийся на такое ядро, более гибким, но и более склонным к переобучению.

Обоснование для любознательных

По свойствам скалярного произведения для любых векторов x\mathbf{x} и x\mathbf{x'}:

xx2=x2+x22x,x\|\mathbf{x} - \mathbf{x}'\|^2 = \|\mathbf{x}\|^2 + \|\mathbf{x}'\|^2 - 2 \langle \mathbf{x}, \mathbf{x}' \rangle

Вспомним разложение Тейлора для экспоненты:

ez=1+z+z22!+z33!+e^z = 1 + z + \frac{z^2}{2!} + \frac{z^3}{3!} + \dots

RBF-ядро можно выразить следующим образом:

K(x,x)=exp(γxx2)=exp(γ(x2+x22x,x))K(\mathbf{x}, \mathbf{x}') = \exp(-\gamma \|\mathbf{x} - \mathbf{x}'\|^2) = \exp\Big(-\gamma (\|\mathbf{x}\|^2 + \|\mathbf{x}'\|^2 - 2 \langle \mathbf{x}, \mathbf{x}' \rangle)\Big)

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

K(x,x)=exp(γx2)exp(γx2)exp(2γx,x)K(\mathbf{x}, \mathbf{x}') = \exp(-\gamma \|\mathbf{x}\|^2) \, \exp(-\gamma \|\mathbf{x}'\|^2) \, \exp(2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle)

Применяем разложение Тейлора к экспоненте с x,x\langle \mathbf{x}, \mathbf{x}' \rangle:

exp(2γx,x)=1+2γx,x+(2γx,x)22!+(2γx,x)33!+\exp(2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle) = 1 + 2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle + \frac{(2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle)^2}{2!} + \frac{(2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle)^3}{3!} + \dots

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

Причём за счёт быстро убывающего множителя 1/n!1/n! существенное влияние оказывают только первые члены разложения. Число значимых слагаемых разложения тем больше, чем выше γ\gamma, поэтому с ростом γ\gamma эффективная размерность используемого признакового пространства растёт, и метод становится способным моделировать более сложные зависимости.

При γ0\gamma\to 0 exp(γx2)1\exp(-\gamma \|\mathbf{x}\|^2)\to 1, exp(γx2)1\exp(-\gamma \|\mathbf{x'}\|^2)\to 1 и exp(2γx,x)1+2γx,x1\exp(2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle) \to 1 + 2 \gamma \langle \mathbf{x}, \mathbf{x}' \rangle \to 1,

откуда следует, что ядро стремится к константе.

Всякая ли функция k(x,x)k(\mathbf{x},\mathbf{x'}) годится как функция ядра?

Нет, не каждая. Поскольку функции ядра соответствует скалярное произведение

<ϕ(x),ϕ(x)>\left<\phi\left(\mathbf{x}\right),\phi\left(\mathbf{x}'\right)\right>, то эта функция должна быть симметричной и неотрицательно определённой, что формально сформулировано в теореме Мерсера [2].

Помимо представленных, существуют и другие типы ядер. В частности, существуют специализированные ядра для строковых [3] и графовых данных [4], использование которых позволяет работать со строками/графами напрямую без приведения их к векторному представлению (что приводило бы к потере информации и снижению качества обработки).

Литература

  1. Wikipedia: Multinomial theorem.
  2. Wikipedia: Mercer's theorem.
  3. Wikipedia: String kernel.
  4. Wikipedia: Graph kernel.