Làm rõ về quy tắc Perceptron so với Gradient Descent so với Stochastic Gradient Descent


15

Tôi đã thử nghiệm một chút với các triển khai Perceptron khác nhau và muốn chắc chắn rằng tôi có hiểu đúng "các lần lặp" không.

Quy tắc tri giác ban đầu của Rosenblatt

Theo như tôi hiểu, trong thuật toán tri giác cổ điển của Rosenblatt, các trọng số được cập nhật đồng thời sau mỗi ví dụ đào tạo thông qua

Δw(t+1)=Δw(t)+η(targetactual)xi

trong đó là quy tắc học tập ở đây. Và mục tiêu và thực tế đều được ngưỡng (-1 hoặc 1). Tôi đã triển khai nó dưới dạng 1 lần lặp = 1 lần so với mẫu đào tạo, nhưng vectơ trọng lượng được cập nhật sau mỗi mẫu đào tạo.eta

Và tôi tính giá trị "thực tế" là

sign(wwTxx)=sign(w0+w1x1+...+wdxd)

Độ dốc dốc ngẫu nhiên

Δw(t+1)=Δw(t)+η(targetactual)xi

Tuy nhiên, giống như quy tắc perceptron targetactualkhông được ngưỡng nhưng giá trị thực. Ngoài ra, tôi tính "lặp" là đường dẫn qua mẫu đào tạo.

Cả SGD và quy tắc perceptron cổ điển đều hội tụ trong trường hợp phân tách tuyến tính này, tuy nhiên, tôi đang gặp rắc rối với việc thực hiện giảm dần độ dốc.

Xuống dốc

Ở đây, tôi đi qua mẫu đào tạo và tổng hợp các thay đổi về trọng lượng trong 1 lần so với mẫu đào tạo và cập nhật các trọng số sau đó, ví dụ:

cho mỗi mẫu đào tạo:

Δwnew+=Δw(t)+η(targetactual)xi

...

sau 1 lần vượt qua tập huấn luyện:

Δw+=Δwnew

Tôi tự hỏi, nếu giả định này là chính xác hoặc nếu tôi đang thiếu một cái gì đó. Tôi đã thử các mức học khác nhau (tối đa vô cùng nhỏ) nhưng không bao giờ có thể khiến nó thể hiện bất kỳ dấu hiệu hội tụ nào. Vì vậy, tôi tự hỏi nếu tôi hiểu lầm sth. đây.

Cảm ơn, Sebastian

Câu trả lời:


19

Δ

Perceptionron:

ww(t+1)=ww(t)+ηt(y(i)y^(i))xx(i)

y^(i)=sign(wwxx(i))ith

Điều này có thể được xem như là một phương pháp hạ cấp con ngẫu nhiên ngẫu nhiên trên hàm "mất tri giác" sau đây *:

Mất tri giác:

Lww(y(i))=max(0,y(i)wwxx(i))

Lww(y(i))={0}, if y(i)wwxx(i)>0{y(i)xx(i)}, if y(i)wwxx(i)<0[1,0]×y(i)xx(i), if wwxx(i)=0

Vì perceptron đã một dạng của SGD, tôi không chắc tại sao bản cập nhật SGD phải khác với bản cập nhật perceptron. Cách bạn đã viết bước SGD, với các giá trị không ngưỡng, bạn sẽ bị lỗ nếu bạn dự đoán một câu trả lời quá chính xác. Thật tồi tệ.

Bước gradient hàng loạt của bạn là sai vì bạn đang sử dụng "+ =" khi bạn nên sử dụng "=". Các trọng số hiện tại được thêm vào cho mỗi trường hợp đào tạo . Nói cách khác, cách bạn viết nó,

ww(t+1)=ww(t)+i=1n{ww(t)ηtLww(t)(y(i))}

Những gì nó nên là:

ww(t+1)=ww(t)ηti=1nLww(t)(y(i))

ηt=η0t


wwxx(i)=0L=[1,0]×y(i)xx(i)00Lww=00y(i)xx(i)L

Vì vậy, chúng không hoàn toàn giống nhau, nhưng nếu bạn làm việc từ giả định rằng thuật toán perceptron là SGD cho một số hàm mất và thiết kế ngược lại hàm mất, thì mất perceptron là thứ bạn kết thúc.


Cảm ơn Sam, và tôi xin lỗi vì câu hỏi lộn xộn của tôi. Tôi không biết đồng bằng đến từ đâu, nhưng "+ =" là thứ đã sai. Tôi hoàn toàn bỏ qua phần đó. Cảm ơn câu trả lời thấu đáo!
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.