Як кернелізувати простий перцептрон?


10

Задачі класифікації з нелінійними межами не можуть бути вирішені простим перцептроном . Наступний код R має ілюстративні цілі та заснований на цьому прикладі в Python):

nonlin <- function(x, deriv = F) {
  if (deriv) x*(1-x)
  else 1/(1+exp(-x))
}

X <- matrix(c(-3,1,
              -2,1,
              -1,1,
               0,1,
               1,1,
               2,1,
               3,1), ncol=2, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(2,-1,1)

for (iter in 1:100000) {
  l1 <- nonlin(X %*% syn0)
  l1_error <- y - l1
  l1_delta <- l1_error * nonlin(l1,T)
  syn0 <- syn0 + t(X) %*% l1_delta
}

print("Output After Training:")
## [1] "Output After Training:"
round(l1,3)
##       [,1]
## [1,] 0.488
## [2,] 0.468
## [3,] 0.449
## [4,] 0.429
## [5,] 0.410
## [6,] 0.391
## [7,] 0.373

Тепер ідея ядра та так званого трюку ядра полягає в проектуванні вхідного простору у простір більш високого розміру, як-от так ( джерела зображень ):

введіть тут опис зображення введіть тут опис зображення

Моє запитання
Як я можу використати трюк ядра (наприклад, з простим квадратичним ядром), щоб отримати рецептор ядра , який здатний вирішити задану класифікаційну задачу? Зверніть увагу: це, головним чином, концептуальне питання, але якщо ви також можете надати необхідну модифікацію коду, це було б чудово

Що я намагався до цього часу,
я спробував наступне, що працює добре, але я думаю, що це не реальна угода, тому що обчислювально стає занадто дорогим для складніших проблем ("фокус" за "трюком ядра" - це не просто ідея саме ядро, але вам не доведеться обчислювати проекцію для всіх примірників):

X <- matrix(c(-3,9,1,
              -2,4,1,
              -1,1,1,
               0,0,1,
               1,1,1,
               2,4,1,
               3,9,1), ncol=3, byrow=T)

y <- c(0,0,1,1,1,0,0)

syn0 <- runif(3,-1,1)

Повне розкриття
Я поставив це питання тиждень тому на SO, але це не приділяло особливої ​​уваги. Я підозрюю, що тут краще місце, тому що це більше концептуальне питання, ніж питання програмування.

Відповіді:


2

Ми можемо побудувати "перцептрон ядра", взявши стандартний перцептрон і замінивши внутрішній добуток на еквівалентну (за рахунок "хитрості ядра") форму K (X , X). Це працює, оскільки ми маємо, що внутрішній продукт - це карта , яка має однакові властивості функція ядра . Як і у випадку ядра загальної радіальної базової функції Гаусса (RBF) : XX=X,X<,>:Rp×RpRk:Rp×RpR

K(xi,xj)=exp(||xixj||22σ2)

Як згадується на сторінці Вікіпедії на перспектроні ядра , ми вибираємо підмножину розміру входів і використовуємо лінійну комбінацію їх для отримання нашого результату, M

f(x)=iMαiyiK(x,xi)

Якщо ви бачили підтримку векторної машини ( SVM ), ви помітите однаковий подвійний. Для вибору підмножини розміру що використовується, ми оптимізуємо через , які представляють, чи зразок є вектором підтримки / бази нашого рішення. В оптимізацію ми включаємо ваги оригінальної оптимізації перцептрон.Mαiiαiωi

Що стосується вашого питання про те, що не потрібно обчислювати проекцію, ви правильні, матриця вхідних даних все ще є двовимірною. При розрахунку виходу ми замінили скалярний твір за допомогою функції ядра, і це те , де «неявне» обчислення в художньому просторі відбувається.X



Дякую - Чи не могли б ви зробити свою відповідь конкретнішою в тому сенсі, що ви вказуєте, які рядки в коді зверху повинні бути змінені в такий спосіб. Якщо ви не знаєте R, зміни, звичайно, можуть бути зазначені в псевдокоді. Тоді я б із задоволенням прийняв вашу відповідь :-)
vonjd

Повідомлення, на яке ви посилаєтесь, на якому ви базували свій код, є, на мою думку, поганим представленням перцептронів та зворотного розповсюдження, хоча воно, безумовно, коротке. Чи знаєте ви, як працює розмноження спини та загальна теорія перцептрону?
Келлан Флюет

Ну, до певного моменту, я би сподівався. Що ви точно отримуєте? Як би ви змінили код вище, щоб використовувати фокус ядра з квадратичним ядром?
vonjd

Чи не існує $ \ vec {x} ^ \ intercal \ vec {x) $ у подвійному лагранжеві критерію сприйняття? Саме там ви замінюєте внутрішній продукт оцінкою функції ядра.
Келлан Флюет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.