关于感知器规则与梯度下降与随机梯度下降实现的说明


15

我对不同的Perceptron实现进行了一些实验,并希望确定我是否正确理解了“迭代”。

罗森布拉特的原始感知器规则

据我了解,在罗森布拉特的经典感知器算法中,权重在每个训练示例之后通过

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

其中是这里的学习规则。目标和实际都被阈值化(-1或1)。我将其实现为1次迭代= 1次遍历训练样本,但是权重向量在每次训练样本后都会更新。ËŤ一种

我将“实际”值计算为

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

随机梯度下降

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

相同感知规则,但是,targetactual没有阈值处理,但真正的价值。另外,我将“迭代”视为训练样本上的路径。

在这种线性可分离的情况下,SGD和经典感知器规则都收敛,但是,我在梯度下降实现方面遇到了麻烦。

梯度下降

在这里,我查看了训练样本并总结了训练样本1次传递后的权重变化,然后更新了权重,例如,

对于每个训练样本:

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

...

经过1次训练后:

Δw+=Δwnew

我想知道这个假设是正确的还是我错过了什么。我尝试了各种(直到无限小的)学习率,但从未使它显示出任何趋同的迹象。所以,我想知道我是否误会了某事。这里。

谢谢塞巴斯蒂安

Answers:


20

您的更新中有几个错误。我认为通常您会将当前权重的值与当前权重和先前权重之间的差异混淆。您将符号分散在不应有的地方,而+ =应该在=的地方。Δ

感知器:

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

由于perceptron已经 SGD的一种形式,因此我不确定SGD更新为何与perceptron更新不同。如果使用非阈值来编写SGD步骤,则如果您对答案的预测过于正确,则会蒙受损失。那很糟。

您的批次渐变步骤是错误的,因为当您应该使用“ =”时,您正在使用“ + =”。将为每个训练实例添加当前权重。换句话说,您编写的方式

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

应该是:

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

另外,为了使算法收敛于每个数据集,您应按时间表降低学习率,例如。ηt=η0t


*在感知器丢失方面,感知器算法与SSGD 不完全相同。通常在SSGD中,在平局()的情况下,,所以,所以您可以不采取任何措施。因此,在,感知器损耗可以最小化,这是没有用的。但是,在感知器算法中,如果选择了错误的答案,则必须打破平局,并在使用子梯度方向。wwxx(i)=0L=[1,0]×y(i)xx(i)00Lww=00y(i)xx(i)L

因此,它们并不完全相同,但是如果您假设感知器算法对于某些损失函数是SGD,然后对损失函数进行反向工程,那么感知器损失就是您的最终选择。


谢谢山姆,对于我的问题我深表歉意。我不知道三角洲的来源,但“ + =”是出问题的地方。我完全忽略了那部分。感谢您的详尽回答!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.