13 / 27 · Линейная классификация
Ядра
Линейные методы на нелинейных признаках без вычисления самих признаков: отображения признаков и ядерный трюк в двойственной задаче SVM, какие функции являются ядрами (положительно полуопределённые ядра, теорема Мерсера, правила построения новых ядер), полиномиальное и RBF-ядро и ширина RBF-ядра как ручка компромисса между смещением и разбросом, теорема о представителе и ядерная гребневая регрессия, стоимость от квадратичной до кубической и случайные признаки Фурье как средство от неё.
Метод опорных векторов · Регуляризация · Многомерное нормальное распределение · Математическое ожидание
На этой странице 14
Заметка о методе опорных векторов закончилась двумя наблюдениями. Двойственная задача и полученный из неё классификатор используют обучающие точки только через скалярные произведения , а оценка через зазор не зависит от размерности. Линейный классификатор на исходных признаках по-прежнему проводит гиперплоскость, и два концентрических кольца ему не по силам. В этой заметке исходные признаки заменяются более богатым представлением , а скалярное произведение — ядром (kernel) , которое можно вычислить, ни разу не построив . Та же задача квадратичного программирования тогда проводит криволинейные границы, а та же идея превращает гребневую регрессию в гибкий непараметрический регрессор. Платить приходится числом обучающих точек вместо числа признаков, и в конце заметки показано, как платить меньше.
Обозначения. Обучающие точки с целевыми значениями . Отображение признаков (feature map) переводит точку в вектор пространства со скалярным произведением, возможно бесконечномерного. Ядро — функция ; матрица Грама (Gram matrix) — матрица с элементами , а собирает значения ядра между новой точкой и обучающими. — ширина RBF-ядра, — коэффициент гребневого штрафа.
Отображения признаков#
Линейная модель становится нелинейной по , когда она линейна по нелинейным признакам . Точки на прямой, у которых один класс в середине, нельзя разделить одним порогом, но после они лежат на параболе, где их разделяет прямая:
Отображение признаков делает классы линейно разделимыми
Прямая на поднятой плоскости — это квадратное неравенство по , которое выполняется между двумя порогами. В общем случае добавляют все произведения признаков до некоторой степени . Число одночленов степени не выше от переменных равно : при и это . Выписать эти признаки для каждой обучающей точки и подобрать вес для каждого быстро становится узким местом.
Ядерный трюк в двойственной задаче#
Самим признакам SVM не нужен. Его двойственная задача с вместо выглядит так:
а классификатор равен , где для любого опорного вектора на краю полосы. И то и другое требует только . Замена каждого скалярного произведения в линейном методе ядром называется ядерным трюком (kernel trick; Boser, Guyon and Vapnik, 1992); он работает для любого метода, который можно записать через скалярные произведения, от SVM и гребневой регрессии до PCA и -средних.
Выигрыш дают ядра, которые дёшево вычислять, хотя велико. Для и
Разобранный пример. Для и : , и . Ядро стоит одного скалярного произведения в и возведения в квадрат; в измерениях стоит умножений против для явных признаков. У отображения признаков с рисунка, , ядро равно .
Какие функции являются ядрами#
Не всякая функция сходства — скалярное произведение в каком-то пространстве. Если , то для любых точек и любых вещественных чисел
Значит, матрица Грама ядра на любом конечном множестве точек симметрична и положительно полуопределена. Верно и обратное: симметричная функция, все матрицы Грама которой положительно полуопределены, — это скалярное произведение после некоторого отображения признаков в гильбертово пространство, гильбертово пространство с воспроизводящим ядром (reproducing kernel Hilbert space, RKHS) функции (Aronszajn, 1950; Shalev-Shwartz and Ben-David, 2014, лемма 16.2). Такие функции называются положительно полуопределёнными ядрами (positive semidefinite kernels), и именно их может использовать ядерный трюк. Теорема Мерсера (Mercer’s theorem) явно даёт отображение признаков для непрерывного ядра на компактной области: с собственными значениями и ортонормированными собственными функциями , так что (Rasmussen and Williams, 2006, §4.3).
Это условие знакомо по теории вероятностей. Матрица положительно полуопределена ровно тогда, когда она является ковариационной матрицей некоторого случайного вектора, потому что (см. ковариацию). Точно так же — положительно полуопределённое ядро ровно тогда, когда оно является ковариационной функцией случайной функции: для гауссовского процесса . Ядро говорит, насколько сильно коррелированы значения неизвестной функции в двух входах; это прочтение вернётся в ядерной гребневой регрессии.
Проверять определение напрямую часто трудно, поэтому ядра обычно строят из более простых по правилам, сохраняющим положительную полуопределённость. Если и — ядра, то ядрами являются и:
- и при : суммы и положительные кратные положительно полуопределённых матриц положительно полуопределены;
- : поэлементное произведение положительно полуопределённых матриц положительно полуопределено (теорема Шура о произведении), или, в терминах признаков, ;
- для любой вещественной функции : матрица Грама ранга один ;
- для любого отображения ;
- поточечный предел ядер, потому что каждое неравенство сохраняется в пределе.
Поэтому многочлены от ядра с неотрицательными коэффициентами и его экспонента (предел таких многочленов) тоже являются ядрами (Bishop, 2006, §6.2).
Некоторые естественные меры сходства этому не удовлетворяют. У расстояния на диагонали матрицы Грама стоят нули, поэтому сумма собственных значений равна следу, 0, и если не все точки совпадают, одно из них отрицательно. Для двух точек 0 и 1 матрица Грама равна с собственными значениями . На 50 случайных точках плоскости её наименьшее собственное значение равно ; «сигмоидное ядро» даёт , а у RBF-ядра оно остаётся равным с точностью до округления. С такой функцией двойственная задача SVM перестаёт быть вогнутой, и её решение теряет смысл.
Распространённые ядра: полиномиальное и RBF#
Полиномиальное ядро (polynomial kernel) с раскладывается по формуле бинома в — неотрицательную комбинацию ядер . Его признаки — все одночлены степени не выше , причём одночлен степени взят с весом , где мультиномиальный коэффициент возникает при раскрытии ; управляет тем, насколько низкие степени весят по сравнению с высокими.
RBF-ядро (гауссовское, radial basis function kernel) равно
Первые два множителя имеют вид , а последний — экспонента ядра, так что по правилам выше это ядро. Его ряд Тейлора содержит для каждого , поэтому пространство признаков бесконечномерно: никакое явное не удалось бы сохранить, а стоит одного расстояния. У каждой точки , а квадрат расстояния между двумя точками в пространстве признаков равен : RBF-ядро — это мера сходства, убывающая с расстоянием на масштабе . Классификатор с этим ядром — взвешенное голосование опорных векторов, в котором ближние весят больше всего, гладкий родственник метода ближайших соседей с весами, подобранными максимизацией зазора.
Ширина ядра как смещение и разброс. При большом каждая обучающая точка влияет на всё пространство, и решающая функция почти линейна; при малом каждая точка влияет лишь на ближайшую окрестность, и функция может обогнуть каждую обучающую точку. На двух зашумлённых полумесяцах (600 точек, шум 0.3, половина для теста, ; scikit-learn записывает ядро как , так что ):
| доля правильных на обучении | доля правильных на тесте | опорных векторов | ||
|---|---|---|---|---|
| 0.01 | 7.07 | 0.843 | 0.827 | 198 |
| 0.1 | 2.24 | 0.883 | 0.850 | 125 |
| 1 | 0.71 | 0.937 | 0.880 | 79 |
| 10 | 0.22 | 0.940 | 0.883 | 126 |
| 100 | 0.07 | 0.990 | 0.857 | 256 |
| 1000 | 0.02 | 1.000 | 0.653 | 299 |
Линейный SVM достигает . С очень широким ядром RBF-SVM не лучше прямой; при – он выигрывает три пункта; с очень узким ядром он запоминает обучающую выборку (доля правильных ответов (accuracy) 1, опорными векторами становятся 299 из 300 точек) и падает до на тесте. Число опорных векторов минимально там, где доля правильных ответов на тесте максимальна. и подбирают вместе кросс-валидацией по логарифмическим сеткам, предварительно стандартизовав признаки, чтобы одно подходило им всем.
Теорема о представителе#
Почему решение SVM имеет вид , с одним коэффициентом на обучающую точку, даже когда бесконечномерно? Причина не связана именно с кусочно-линейной функцией потерь. Рассмотрим любую регуляризованную задачу
Разложим , где лежит в линейной оболочке , а ортогонален им всем. Предсказания на обучающих точках зависят только от , потому что , а . Отбрасывание сохраняет функцию потерь и строго уменьшает штраф, если , поэтому у любого минимума :
Это теорема о представителе (representer theorem; Kimeldorf and Wahba, 1971; Schölkopf, Herbrich and Smola, 2001, которые допускают в качестве штрафа любую строго возрастающую функцию от ; Shalev-Shwartz and Ben-David, 2014, теорема 16.1). Она превращает поиск в бесконечномерном пространстве в поиск коэффициентов и выполняется для любой функции потерь: квадратичной, логистической, кусочно-линейной. После подстановки этого представления , а вектор предсказаний на обучающей выборке равен .
Ядерная гребневая регрессия#
С квадратичной функцией потерь задача становится гребневой регрессией в пространстве признаков, , где строки — это . Её решение из заметки о регуляризации можно переписать с помощью тождества : умножив его слева на и справа на (обе матрицы обратимы при ), получаем
Левая форма обращает матрицу размера пространства признаков, правая — матрицу размера , причём . Значит, с
— это предсказание ядерной гребневой регрессии (kernel ridge regression), в точности в той форме, которую обещала теорема о представителе (Bishop, 2006, §6.1).
Разобранный пример. Две обучающие точки и с целевыми значениями и , RBF-ядро с и . Ядро между точками равно , поэтому
В точке оба значения ядра равны и . В точке значения ядра равны и , и : вдали от данных RBF-регрессор возвращается к 0, своему априорному среднему, каким бы ни был тренд. В самих обучающих точках подгонка равна и , а не целевым значениям и : при подгонка сглаживает, а не интерполирует. Точная интерполяция требует и обратимой . В любом случае экстраполяции нет.
Ширина RBF-ядра как сложность модели
Ширина ядра и здесь обменивает смещение на разброс. Эффективное число параметров гребневой подгонки, , показывает, сколько направлений использует подгонка (Hastie, Tibshirani and Friedman, 2009, §3.4.1); оно близко к , когда подгонка интерполирует, и мало, когда она жёсткая. Для 30 точек рисунка:
| 1 | 0.5 | 0.3 | 0.2 | 0.1 | 0.05 | 0.02 | 0.01 | |
|---|---|---|---|---|---|---|---|---|
| df | 2.36 | 3.31 | 4.43 | 5.77 | 9.25 | 14.69 | 21.61 | 24.26 |
| ошибка на обучении | 0.231 | 0.098 | 0.039 | 0.031 | 0.024 | 0.019 | 0.006 | 0.004 |
| средний квадрат расстояния до истинной кривой | 0.181 | 0.051 | 0.007 | 0.015 | 0.031 | 0.060 | 0.116 | 0.197 |
Ошибка на обучении монотонно падает по мере сужения ядра; средний квадрат расстояния до истинной кривой имеет U-образную форму разложения на смещение и разброс с минимумом около .
Байесовское прочтение. Для конечномерного отображения признаков зададим на весах гауссовское априорное распределение , а на целевых значениях — гауссовский шум с дисперсией . Тогда — гауссовский процесс с ковариацией . У RBF-ядра пространство признаков бесконечномерно, и изотропное гауссовское априорное распределение на бесконечном числе весов — лишь формальный предел этой картины; тогда модель задают напрямую: — гауссовский процесс с ковариацией . В обоих случаях апостериорное среднее при данных следует из формулы условного распределения многомерной гауссианы: с . Ядерная гребневая регрессия — это апостериорное среднее регрессии на гауссовских процессах, так же как гребневая регрессия — MAP-оценка при гауссовском априорном распределении (Rasmussen and Williams, 2006, §2.2 и §6.2). Гауссовский процесс добавляет то, чего не хватает гребневому взгляду: апостериорную дисперсию, планку погрешности в каждой точке .
Стоимость и случайные признаки Фурье#
Ядерные методы обменивают размерность признаков на число примеров. Вычисление матрицы Грама стоит времени и памяти, решение стоит , а солверы SVM на практике масштабируются между и . Каждое предсказание стоит одного вычисления ядра на опорный вектор или обучающую точку. При одна матрица Грама содержит элементов, 80 ГБ в двойной точности. Поэтому ядерные методы господствуют на малых и средних данных и проигрывают линейным моделям, деревьям и нейросетям на больших.
Средство Rahimi and Recht (2007) — вернуться к явным признакам, но немногочисленным и случайным. Оно опирается на теорему Бохнера (Bochner’s theorem): непрерывное инвариантное к сдвигу ядро с положительно полуопределено тогда и только тогда, когда оно является характеристической функцией некоторого распределения вероятностей ,
(Rahimi and Recht, §3, теорема 1; вторая форма верна, потому что вещественно, так что мнимая часть в среднем равна нулю). Характеристические функции встречались в заметке о математическом ожидании. Для RBF-ядра — гауссиана , характеристическая функция которой равна . Теперь сгенерируем из и равномерно из и положим
По формуле каждое слагаемое равно , а второй косинус в среднем по равномерному равен нулю. Значит, — среднее независимых слагаемых со средним : оценка методом Монте-Карло ядра. Каждое слагаемое лежит в , и неравенство Хёфдинга даёт для каждой пары; Rahimi and Recht (утверждение 1) распространяют оценку сразу на все пары из ограниченного множества ценой множителя, растущего с .
Ошибка убывает как . На 300 точках в наибольшая ошибка по всей матрице Грама равна , , и при , , и — примерно в раз на каждом шаге. Любой линейный метод, обученный на , тогда приближает ядерный метод, а стоит это на признаки и на гребневую подгонку — линейно по . На полумесяцах линейный SVM на случайных признаках уже достигает доли правильных ответов на тесте точного RBF-SVM с тем же , .
Ядра сравнивают распределения#
Дополнительный материал: ядерные вложения средних и максимальное расхождение средних, которыми пользуется курс генеративных моделей. Остальная часть заметки на него не опирается.
Среднее признаков распределения, , сводит к одной точке пространства признаков, а расстояние между двумя такими точками снова вычисляется одним ядром:
Это квадрат максимального среднего расхождения (maximum mean discrepancy, MMD). С полиномиальным ядром оно сравнивает моменты до степени ядра; с RBF-ядром оно равно нулю, только когда (Gretton et al., 2012). Курс генеративных моделей использует его, чтобы сравнивать сгенерированные изображения с настоящими: Kernel Inception Distance — это та же величина с кубическим полиномиальным ядром на признаках сети.
Что изменилось#
| Линейный SVM и гребневая регрессия | Ядерные методы | |
|---|---|---|
| Решающая функция | , гиперплоскость | , криволинейная по |
| Параметры | весов | коэффициентов, по одному на обучающую точку (теорема о представителе) |
| Как входят данные | векторы признаков | матрица Грама |
| Пространство признаков | любое пространство со скалярным произведением, для RBF-ядра бесконечномерное | |
| Ручка сложности | или | или плюс ядро и его ширина |
| Стоимость обучения | линейная по | памяти, – времени; случайные признаки возвращают её к линейной |
Ограничения#
- Квадратичная память, кубическое время. Точные ядерные методы не масштабируются дальше нескольких десятков тысяч примеров; приближения (случайные признаки, метод Нистрёма) жертвуют точностью ради скорости.
- Ядро — это выбор модели. Оно задаёт, какие входы считаются похожими. RBF-ядро после стандартизации обращается со всеми направлениями одинаково; при многих нерелевантных признаках в расстояниях доминирует шум, как в проклятии размерности из заметки о методе ближайших соседей.
- Гиперпараметры. Ширина ядра и или взаимодействуют, и их нужно подбирать совместно; таблица для полумесяцев показывает долю правильных ответов на тесте от до в зависимости от одного только .
- Нет экстраполяции с локальными ядрами. RBF-подгонка вдали от данных возвращается к нулю, как показал разобранный пример.
- Фиксированные признаки. Отображение признаков выбирают до того, как увидеть данные. Нейросети вместо этого выучивают признаки, что и позволяет им масштабироваться на изображения и тексты.
Что нужно запомнить#
- Ядро — это скалярное произведение после отображения признаков, . Любой метод, записанный через скалярные произведения, например двойственная задача SVM, работает с вместо без построения .
- — допустимое ядро тогда и только тогда, когда все его матрицы Грама симметричны и положительно полуопределены; равносильно, — ковариационная функция. Суммы, положительные кратные, произведения, пределы и сохраняют это свойство; у расстояний и его нет.
- Полиномиальное ядро: все одночлены до степени . RBF-ядро: бесконечномерные признаки, сходство на масштабе ; большое ведёт к недообучению, малое — к переобучению.
- Теорема о представителе: для любой функции потерь плюс минимум имеет вид . Ядерная гребневая регрессия: , — апостериорное среднее гауссовского процесса.
- Точные ядерные методы стоят памяти и до времени. Случайные признаки Фурье оценивают инвариантное к сдвигу ядро методом Монте-Карло с ошибкой и делают обучение линейным по .
Код#
Полиномиальное ядро как скалярное произведение, матрицы Грама, которые положительно полуопределены и которые нет, ядерная гребневая регрессия вручную, ширина RBF-ядра на полумесяцах и случайные признаки Фурье:
import numpy as np, math
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC, LinearSVC
from sklearn.kernel_ridge import KernelRidge
from sklearn.kernel_approximation import RBFSampler
# ядро — это скалярное произведение после отображения признаков: (x.z)^2 при phi(x) = (x1^2, sqrt(2) x1 x2, x2^2)
x, z = np.array([1.0, 2.0]), np.array([3.0, 1.0])
phi = lambda v: np.array([v[0]**2, math.sqrt(2) * v[0] * v[1], v[1]**2])
print((x @ z)**2, phi(x) @ phi(z), math.comb(100 + 3, 3)) # 25.0 25.0 176851: одночлены степени <= 3 от 100 признаков
# какие функции являются ядрами: наименьшее собственное значение матрицы Грама на 50 случайных точках
rng = np.random.default_rng(0)
P = rng.normal(size=(50, 2)); D2 = ((P[:, None] - P[None]) ** 2).sum(-1)
for name, G in (('rbf', np.exp(-D2 / 2)), ('distance', np.sqrt(D2)), ('tanh', np.tanh(P @ P.T + 1))):
print(name, f'{np.linalg.eigvalsh(G).min():.3g}')
# rbf 4.24e-10 | distance -27.5 | tanh -6.26: положительно полуопределена только матрица Грама RBF-ядра
# ядерная гребневая регрессия вручную: x = (0, 1), y = (1, 2), RBF с sigma = 1, lambda = 0.1
X = np.array([[0.0], [1.0]]); y = np.array([1.0, 2.0])
k = lambda A, B: np.exp(-(A - B.T) ** 2 / 2)
alpha = np.linalg.solve(k(X, X) + 0.1 * np.eye(2), y)
Xn = np.array([[0.5], [3.0]])
print(alpha.round(4), (k(Xn, X) @ alpha).round(4)) # [-0.1343 1.8922] [1.5514 0.2546]
print((k(X, X) @ alpha).round(3)) # [1.013 1.811]: подгонка в обучающих точках, а не (1, 2)
print(KernelRidge(alpha=0.1, kernel='rbf', gamma=0.5).fit(X, y).predict(Xn).round(4)) # [1.5514 0.2546]
# ширина RBF-ядра как смещение и разброс: SVM на двух зашумлённых полумесяцах, gamma = 1/(2 sigma^2)
Xm, ym = make_moons(n_samples=600, noise=0.3, random_state=0)
Xtr, Xte, ytr, yte = train_test_split(Xm, ym, test_size=0.5, random_state=0)
print('linear', round(SVC(kernel='linear').fit(Xtr, ytr).score(Xte, yte), 3)) # linear 0.853
for g in (0.01, 0.1, 1, 10, 100, 1000):
m = SVC(kernel='rbf', gamma=g, C=1).fit(Xtr, ytr)
print(g, round(1 / math.sqrt(2 * g), 3), round(m.score(Xtr, ytr), 3), round(m.score(Xte, yte), 3), len(m.support_))
# gamma, sigma, доля правильных на обучении и на тесте, опорные векторы
# 0.01 7.071 0.843 0.827 198 | 0.1 2.236 0.883 0.85 125 | 1 0.707 0.937 0.88 79
# 10 0.224 0.94 0.883 126 | 100 0.071 0.99 0.857 256 | 1000 0.022 1.0 0.653 299
# случайные признаки Фурье: наибольшая ошибка по матрице Грама 300 x 300 (5 признаков, gamma = 0.1), среднее по 5 генерациям
Q = rng.normal(size=(300, 5)); K = np.exp(-0.1 * ((Q[:, None] - Q[None]) ** 2).sum(-1))
for D in (10, 100, 1000, 10000):
err = [np.abs((Z := RBFSampler(gamma=0.1, n_components=D, random_state=s).fit_transform(Q)) @ Z.T - K).max() for s in range(5)]
print(D, round(float(np.mean(err)), 3))
# 10 1.118 | 100 0.343 | 1000 0.101 | 10000 0.035: примерно 1/sqrt(D)
# линейный SVM на D случайных признаках приближается к RBF-SVM (gamma = 1: доля правильных на тесте 0.88)
for D in (2, 10, 100, 1000):
f = RBFSampler(gamma=1, n_components=D, random_state=0).fit(Xtr)
print(D, round(LinearSVC(C=1).fit(f.transform(Xtr), ytr).score(f.transform(Xte), yte), 3))
# 2 0.663 | 10 0.883 | 100 0.88 | 1000 0.877
Дальше#
SVM и его ядра разделяют два класса. Во многих задачах их больше: десять цифр, тысячи тем, словарь из десятков тысяч слов или несколько меток сразу у одного объекта. Следующая заметка сводит такие задачи к бинарным, обобщает логистическую регрессию на много классов с помощью softmax и приспосабливает метрики из заметки о метриках классификации к нескольким классам и к нескольким меткам на пример.
Литература#
- B. E. Boser, I. M. Guyon, V. N. Vapnik. A Training Algorithm for Optimal Margin Classifiers. COLT, 1992, pp. 144–152. Ядерный трюк в классификаторе с максимальным зазором.
- N. Aronszajn. Theory of Reproducing Kernels. Transactions of the American Mathematical Society, 68(3), pp. 337–404, 1950.
- G. Kimeldorf, G. Wahba. Some Results on Tchebycheffian Spline Functions. Journal of Mathematical Analysis and Applications, 33(1), pp. 82–95, 1971. Теорема о представителе для квадратичной функции потерь.
- B. Schölkopf, R. Herbrich, A. J. Smola. A Generalized Representer Theorem. COLT, LNCS 2111, pp. 416–426, 2001.
- A. Rahimi, B. Recht. Random Features for Large-Scale Kernel Machines. NIPS, 2007. §3: теорема Бохнера (теорема 1), случайные признаки Фурье (алгоритм 1), равномерная сходимость (утверждение 1).
- A. Gretton, K. M. Borgwardt, M. J. Rasch, B. Schölkopf, A. Smola. A kernel two-sample test. JMLR, 13, pp. 723–773, 2012. Максимальное среднее расхождение.
- C. E. Rasmussen, C. K. I. Williams. Gaussian Processes for Machine Learning. MIT Press, 2006. §2.1–2.2 (регрессия в пространстве весов и в пространстве функций), §4.3 (анализ ядер через собственные функции, теорема Мерсера), §6.1–6.2 (гильбертовы пространства с воспроизводящим ядром, регуляризация).
- S. Shalev-Shwartz, S. Ben-David. Understanding Machine Learning: From Theory to Algorithms. Cambridge University Press, 2014. Глава 16: вложения в пространства признаков, ядерный трюк, теорема 16.1 (теорема о представителе), лемма 16.2 (положительно полуопределённые ядра).
- C. M. Bishop. Pattern Recognition and Machine Learning. Springer, 2006. §6.1 (двойственные представления), §6.2 (построение ядер), §6.4 (гауссовские процессы).
- T. Hastie, R. Tibshirani, J. Friedman. The Elements of Statistical Learning, 2nd ed. Springer, 2009. §3.4.1 (гребневая регрессия и её эффективное число степеней свободы), §5.8 (регуляризация и гильбертовы пространства с воспроизводящим ядром), §12.3 (SVM и ядра).
- E. Sokolov et al. Машинное обучение (HSE), конспекты лекций: лекция 13 (ядерные методы, построение ядер, полиномиальное и гауссовское ядра), лекция 14 (ядерный SVM, случайные признаки Фурье).