パーセプトロンルールと勾配降下法と確率勾配降下法の実装に関する説明


15

さまざまなパーセプトロンの実装を少し試し、「反復」を正しく理解しているかどうかを確認したいと思います。

ローゼンブラットの元のパーセプトロン規則

私の知る限り、Rosenblattの古典的なパーセプトロンアルゴリズムでは、すべてのトレーニング例の後に重みが同時に更新されます。

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

ここで、etaは学習ルールです。また、ターゲットと実際の両方にしきい値が設定されます(-1または1)。1反復= 1トレーニングサンプルのパスとして実装しましたが、各トレーニングサンプルの後に重みベクトルが更新されます。

そして、「実際の」値を次のように計算します

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

確率的勾配降下

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

しかし、パーセプトロンルールと同じ、targetおよびactual閾値が、実際の値がされていません。また、「反復」をトレーニングサンプルのパスとしてカウントします。

SGDと従来のパーセプトロンルールの両方が、この線形に分離可能な場合に収束しますが、勾配降下の実装に問題があります。

勾配降下

ここでは、トレーニングサンプルを調べ、トレーニングサンプルの1パスの重みの変化を合計し、その後、重みを更新しました。たとえば、

各トレーニングサンプル:

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

...

トレーニングセットを1回通過した後:

Δw+=Δwnew

この仮定が正しいのか、何か不足しているのか、疑問に思っています。さまざまな(無限に小さい)学習率を試しましたが、収束の兆候を示すことができませんでした。だから、私はsthを誤解しているかどうか疑問に思っています。ここに。

ありがとう、セバスチャン

回答:


19

Δ

パーセプトロン:

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

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

これは、次の「パーセプトロン損失」関数*の確率的亜勾配降下法として見ることができます:

パーセプトロン損失:

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.

Since perceptron already is a form of SGD, I'm not sure why the SGD update should be different than the perceptron update. The way you've written the SGD step, with non-thresholded values, you suffer a loss if you predict an answer too correctly. That's bad.

Your batch gradient step is wrong because you're using "+=" when you should be using "=". The current weights are added for each training instance. In other words, the way you've written it,

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

What it should be is:

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!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.