Perceptron Kuralı ile Gradyan İniş ve Stokastik Gradyan İniş uygulaması hakkında açıklama


15

Farklı Perceptron uygulamaları ile biraz denedim ve "iterasyonları" doğru anladığımdan emin olmak istiyorum.

Rosenblatt'ın orijinal algılayıcı kuralı

Anladığım kadarıyla, Rosenblatt'ın klasik perceptron algoritmasında, ağırlıklar aynı anda her eğitim örneğinden sonra güncellenir.

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

burada eta burada öğrenme kuralıdır. Hem hedef hem de gerçek eşik değerlerdir (-1 veya 1). Antrenman numunesi üzerinde 1 iterasyon = 1 geçiş olarak uyguladım, ancak ağırlık vektörü her antrenman örneğinden sonra güncellenir.

Ve "gerçek" değeri şöyle hesaplıyorum

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

Stokastik eğim inişi

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

Bununla birlikte, perceptron kuralıyla aynıdır targetve actualeşikli değil gerçek değerlerdir. Ayrıca, "yineleme" yi eğitim örneği üzerindeki yol olarak sayıyorum.

Hem SGD hem de klasik perceptron kuralı bu lineer olarak ayrılabilir durumda birleşir, ancak gradyan iniş uygulamasında sorunlar yaşıyorum.

Dereceli alçalma

Burada, eğitim örneğinin üzerinden geçiyorum ve eğitim örneğinin 1 geçişi için ağırlık değişikliklerini özetliyorum ve daha sonra ağırlıkları güncelledim, örn.

her eğitim örneği için:

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

...

eğitim setinin 1 geçişinden sonra:

Δw+=Δwnew

Bu varsayımın doğru olup olmadığını veya bir şeylerin eksik olup olmadığını merak ediyorum. Çeşitli (sonsuz küçük) öğrenme oranları denedim ama herhangi bir yakınsama belirtisi göstermek için alamadım. Yani, yanlış anladım mı diye merak ediyorum. buraya.

Teşekkürler Sebastian

Yanıtlar:


20

Δ

Algılayıcı:

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

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

Bu, aşağıdaki "algılayıcı kaybı" fonksiyonunda stokastik bir alt gradyanlı iniş yöntemi olarak görülebilir:

Algılayıcı kaybı:

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

Algılayıcı zaten bu yana ise SGD şeklidir, ben emin SGD güncelleme algılayıcı güncelleme daha farklı olmalı neden değilim. SGD adımını yazma şekliniz, eşik olmayan değerlerle, bir cevabı çok doğru tahmin ederseniz bir kayıp yaşarsınız. Bu kötü.

Toplu iş gradyan adımınız yanlıştır, çünkü "=" kullanmanız gerektiğinde "+ =" kullanıyorsunuz. Mevcut ağırlıklar her bir eğitim örneği için eklenir . Başka bir deyişle, onu yazma şekliniz,

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

Ne olmalı:

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

Also, in order for the algorithm to converge on every and any data set, you should decrease your learning rate on a schedule, like ηt=η0t.


* The perceptron algorithm is not exactly the same as SSGD on the perceptron loss. Usually in SSGD, in the case of a tie (wwxx(i)=0), L=[1,0]×y(i)xx(i), so 00L, so you would be allowed to not take a step. Accordingly, perceptron loss can be minimized at ww=00, which is useless. But in the perceptron algorithm, you are required to break ties, and use the subgradient direction y(i)xx(i)L if you choose the wrong answer.

So they're not exactly the same, but if you work from the assumption that the perceptron algorithm is SGD for some loss function, and reverse engineer the loss function, perceptron loss is what you end up with.


Thank you Sam, and I do apologize for my messy question. I don't know where the deltas come from, but the "+=" was the the thing that went wrong. I completely overlooked that part. Thanks for the thorough answer!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.