Использование SVM с разными ядрами в качестве последнего уровня в сети CNN - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь заменить последний полностью подключенный уровень сети CNN на SVM, используя pytorch в задаче множественной классификации. Я провел небольшое исследование, и в нем говорится, что мне нужно просто заменить nn.CrossEntropyLoss на nn.MultiMarginLoss.

Как изменение критерия действительно соответствует задаче «замена полностью подключенного уровня на SVM»? Другое дело, что я бы хотел использовать SVM с другим ядром, например, quadrati c one.

1 Ответ

0 голосов
/ 30 мая 2020

Этот вопрос можно фактически интерпретировать как разницу между регрессией Logisti c и SVM в классификации.

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

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

Вам нужно прочитать о роли ядер в вычислении потерь (например, здесь ), но TL; DR - это то, что для вычисления потерь у вас есть компонент K(xi,xj), который на самом деле является функцией ядра и указывает на сходство xi и xj.

Таким образом, вы можете реализовать настраиваемую потерю, где у вас есть полиномиальное ядро ​​(quadrati c в вашем случае), и имитировать расчет маржинальных потерь там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...