Làm thế nào để nhân một perceptron đơn giản?


10

Các vấn đề phân loại với các ranh giới phi tuyến có thể được giải quyết bằng một tri giác đơn giản . Mã R sau đây dành cho mục đích minh họa và dựa trên ví dụ này trong 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

Bây giờ, ý tưởng về kernel và cái gọi là thủ thuật kernel là chiếu không gian đầu vào vào một không gian có chiều cao hơn, giống như vậy ( nguồn ảnh ):

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Câu hỏi của tôi
Làm cách nào để sử dụng thủ thuật kernel (ví dụ với kernel bậc hai đơn giản) để tôi có được một perceptron kernel , có thể giải quyết vấn đề phân loại đã cho? Xin lưu ý: Đây chủ yếu là một câu hỏi về khái niệm nhưng nếu bạn cũng có thể đưa ra sửa đổi mã cần thiết thì điều này sẽ rất tuyệt

Những gì tôi đã thử cho đến nay
tôi đã thử những thứ sau đây hoạt động ổn nhưng tôi nghĩ rằng đây không phải là vấn đề thực sự vì nó trở nên quá đắt đối với các vấn đề phức tạp hơn ("mẹo" đằng sau "lừa nhân" không chỉ là ý tưởng của hạt nhân nhưng bạn không phải tính toán phép chiếu cho tất cả các trường hợp):

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)

Tiết lộ đầy đủ
Tôi đã đăng câu hỏi này một tuần trước trên SO nhưng nó không được chú ý nhiều. Tôi nghi ngờ rằng đây là một nơi tốt hơn bởi vì nó là một câu hỏi về khái niệm hơn là một câu hỏi lập trình.

Câu trả lời:


2

Chúng ta có thể xây dựng một "perceptron kernel" bằng cách lấy perceptron tiêu chuẩn và thay thế sản phẩm bên trong bằng dạng tương đương (do "kernel-trick") dạng K (X , X). Điều này hoạt động vì chúng ta có sản phẩm bên trong là bản đồ , có các thuộc tính giống hệt với hàm nhân . Như trong trường hợp hạt nhân hàm cơ sở xuyên tâm Gaussian (RBF) phổ biến : XX=X,X<,>:Rp×RpRk:Rp×RpR

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

Như đã đề cập trong trang Wikipedia trên perceptron kernel , chúng tôi chọn một tập hợp con có kích thước của các đầu vào và sử dụng kết hợp tuyến tính của chúng để tạo đầu ra của chúng tôi, M

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

Nếu bạn đã thấy máy vectơ hỗ trợ ( SVM ), bạn sẽ nhận thấy máy kép giống hệt nhau. Để chọn tập hợp con có kích thước sẽ sử dụng, chúng tôi tối ưu hóa trên , đại diện cho việc mẫu có phải là vectơ hỗ trợ / cơ sở cho giải pháp của chúng tôi hay không. Trong việc tối ưu hóa chúng tôi bao gồm các trọng số của tối ưu hóa perceptron ban đầu.α i i α i ω iMαiiαiωi

Đối với câu hỏi của bạn về việc không phải tính toán phép chiếu, bạn đã đúng, ma trận dữ liệu đầu vào vẫn là 2 chiều. Trong tính toán của đầu ra, chúng tôi đã thay thế một sản phẩm dấu chấm bằng hàm kernel và đây là lúc tính toán 'ẩn' trong không gian tính năng xảy ra.X



Cảm ơn bạn - Có lẽ bạn có thể làm cho câu trả lời của mình cụ thể hơn theo nghĩa là bạn nêu rõ các dòng trong mã từ trên phải được sửa đổi theo cách nào. Nếu bạn không biết R, các sửa đổi tất nhiên có thể được nêu trong mã giả. Sau đó tôi sẽ vui vẻ chấp nhận câu trả lời của bạn :-)
vonjd

Bài đăng mà bạn liên kết đến mà bạn dựa trên mã của bạn, theo ý kiến ​​của tôi, là một bài trình bày kém về tri giác và lan truyền ngược, mặc dù nó chắc chắn là rất ngắn gọn. Bạn có biết làm thế nào tuyên truyền trở lại hoạt động và lý thuyết perceptron chung?
Kellan Fluette

Vâng, đến một điểm, tôi sẽ hy vọng. Bạn đang nhận được chính xác là gì? Làm thế nào bạn sẽ sửa đổi mã ở trên để sử dụng thủ thuật kernel với kernel bậc hai?
vonjd

Không có $ \ vec {x} ^ \ intercal \ vec {x) $ trong tiêu chí kép Lagrangian của tiêu chí nhận thức? Đó là cụ thể nơi bạn thay thế sản phẩm bên trong bằng đánh giá chức năng hạt nhân.
Kellan Fluette
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.