간단한 퍼셉트론을 커널 화하는 방법?


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

이제 커널 과 소위 커널 트릭 의 아이디어는 입력 공간을 다음과 같이 더 높은 차원의 공간으로 투영하는 것입니다 (사진 출처 ).

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

내 질문 주어진 분류 문제를 해결할 수
있는 커널 perceptron을 얻도록 커널 트릭 (예 : 간단한 2 차 커널)을 어떻게 사용합니까? 참고 : 이것은 주로 개념적 질문이지만 필요한 코드 수정을 제공 할 수 있다면 좋을 것입니다

내가 지금까지
시도한 것은 잘 작동하는 다음을 시도했지만 더 복잡한 문제에 대해 계산적으로 너무 비싸기 때문에 이것이 실제 거래는 아니라고 생각합니다 ( "커널 트릭"의 "트릭"은 단순한 아이디어가 아닙니다. 커널 자체이지만 모든 인스턴스에 대한 투영을 계산할 필요는 없습니다.)

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)

전체 공개
1 주일 전에이 질문을 SO 에 게시 했지만 별다른 주목을받지 못했습니다. 프로그래밍 질문보다 개념적 질문이기 때문에 여기가 더 좋은 곳이라고 생각합니다.

답변:


2

< , > : R P × R PRXX=X,X<,>:Rp×RpRk:Rp×RpR

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

커널 퍼셉트론Wikipedia 페이지에서 언급했듯이 입력 의 하위 세트를 선택하고 이들을 선형 조합하여 출력을 생성합니다. M

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

SVM (support vector machine)을 본 적이 있다면 동일한 듀얼을 볼 수 있습니다. 사용할 크기 의 부분 집합을 선택 하기 위해 샘플 가 솔루션의 지원 / 기본 벡터 인지 여부를 나타내는 이상을 최적화 합니다. 의 최적화에 우리는 무게 포함 원래 퍼셉트론 최적화합니다.α i i α i ω iMαiiαiωi

투영을 계산할 필요가 없다는 질문에 대해서는 입력 데이터 행렬 가 여전히 2 차원입니다. 출력 계산에서 우리는 내적 (dot product)을 커널 함수로 대체했으며, 이것이 기능 공간에서 '암시 적'계산이 발생하는 곳입니다.X



감사합니다-위의 코드에서 어떤 줄을 어떤 방식으로 수정해야하는지에 대한 답을 좀 더 구체적으로 만들 수 있습니까? R을 모르는 경우 수정 사항은 의사 코드로 말할 수 있습니다. 그럼 내가 행복하게 당신의 대답 :-) 받아 들일
vonjd

내 의견으로는, 당신의 코드를 기반으로하는 링크 게시물은 퍼셉트론과 역 전파의 열악한 표현이지만 분명히 간결합니다. 역 전파의 작동 원리와 일반적인 퍼셉트론 이론을 알고 있습니까?
Kellan Fluette

글쎄요, 어느 정도까지는 희망입니다. 정확히 무엇을 받고 있습니까? 2 차 커널에서 커널 트릭을 사용하도록 위의 코드를 어떻게 수정 하시겠습니까?
vonjd

라그랑지안 이중 인식 기준에 $ \ vec {x} ^ \ intercal \ vec {x) $가 없습니까? 내부 제품을 커널 기능 평가로 바꾸는 곳이 바로 여기에 있습니다.
Kellan Fluette 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.