Я изучал нейронные сети и SVM. Учебники, которые я прочитал, подчеркнули, насколько важна ядро для SVM. Без функции ядра SVM - это просто линейный классификатор. С помощью ядра, SVM также может включать нелинейные функции, что делает их более мощным классификатором.
Мне кажется, что можно также применить ядро к нейронным сетям, но ни одно из учебных пособий по нейронным сетям, которые я видел, не упоминало об этом. Люди обычно используют уловку ядра с нейронными сетями? Я предполагаю, что кто-то, должно быть, экспериментировал с этим, чтобы видеть, имеет ли это большое значение. Помогает ли ядро в нейронных сетях так же, как в SVM? Почему или почему нет?
(Я могу представить несколько способов включить трюк ядра в нейронные сети. Одним из способов было бы использование подходящей функции ядра для предварительной обработки ввода, вектора в , во вход более многомерный, вектор в для . Для многослойных нейронных сетей другой альтернативой будет применение функции ядра на каждом уровне нейронной сети.)
Ответы:
Я думаю, что вы, возможно, путаете терминологию таким образом, что запутываете проблему. SVM работают путем определения границы линейного решения, т. Е. Гиперплоскости. Мы можем определить эту гиперплоскость в терминах внутренних произведений между точками. Следовательно, если мы определяем это внутреннее произведение как находящееся в некотором многомерном или даже бесконечномерном пространстве, то, что выглядит как гиперплоскость в этом новом пространстве, не является необходимой линейной в исходном пространстве признаков. Таким образом, все по-прежнему линейно, единственное, что мы сделали, это неявно (через новый внутренний продукт) внедрили точки в некоторое пространство более высокого измерения. Может быть, вы уже все это знаете.
В отношении нейронных сетей необходимо рассмотреть 2 вопроса. Первый был создан @Yuval Filmus, поскольку нейронные сети со скрытым слоем зависят не только от внутренних произведений между точками. Если вы удалите скрытый слой, у вас просто будет что-то вроде логистической регрессии, среди которых есть версии с ядрами . Может быть, есть способ обойти это, но я этого не вижу.
Во-вторых, вы упоминаете предварительную обработку ввода, проецируя в более высокое, но не бесконечное пространство измерений. Нейронные сети определяют поверхность решения, и эта поверхность не обязательно должна быть линейной. Это означает, что выгода от проецирования точек в пространство более высокого измерения будет отличаться, т. Е. Может быть легче найти хороший набор весов, но мы не обязательно сделали нашу модель более мощной. Это следует из теоремы Универсального приближения, которая говорит нам, что при достаточно большом количестве скрытых единиц мы можем аппроксимировать любую функцию (с некоторыми ограничениями). Это последнее утверждение довольно бессмысленно, и я не хочу его упоминать. Не говоря вам ничего о том, как найти правильные веса, это не приносит много пользы с точки зрения приложения.
источник
Уловка ядра возможна для SVM из-за особого свойства процесса обучения для SVM. Нейронные сети, похоже, не обладают этим свойством (насколько я могу судить).
Это специальное свойство процесса обучения SVM позволяет нам использовать трюк ядра. Мы можем определить функцию ядра так, чтобы K ( x i ( x j ) . Следующее интересное свойство заключается в том, что для некоторых нелинейных преобразований ϕ можно вычислить K ( x i , x j).К К( хя, хJ) ϕ : Rd→ Rм м > д К( хя, хJ) = ϕ ( xя) ⋅ ϕ ( xJ) φ К( хя, хJ) ϕ ( xя) , ϕ ( xJ) К( хя, хJ) O ( д) O ( м ) время.
источник
Я хотел бы поделиться некоторыми наблюдениями, которые я сделал. Входное измерение: 144. Я обучил нейронную сеть, и во время обучения выходные данные скрытых слоев были заданы как входные данные для логистической регрессии, и было построено среднее значение функции потерь после подгонки модели.
Мы можем видеть, что с увеличением размера слоя элементы или выходные данные скрытых слоев становятся линейно разделимыми. Хотя это и является целью изучения вектора функций ядра , нейронная сеть, похоже, делает это внутренне.
источник