根据wikipedia,我们通过delta规则调整权重:
dw = alpha *(ti-yi)* g'(hj)xi
当alpha =学习常数时,ti - 真实答案,yi - 感知器的猜测,g'=激活函数g相对于感知器输入的加权和xi - 输入的导数。
我在这个公式中不理解的部分是乘以导数g'。设g = sign(x)(加权和的符号)。所以g'总是0,dw = 0.但是,在互联网上看到的代码示例中,作者只是省略了g'并使用了公式:
dw = alpha *(ti-yi)*(hj)xi
我很乐意阅读正确的解释!
提前谢谢。
答案 0 :(得分:3)
如果你对激活函数g
使用步长函数,你是正确的,渐变总是为零(除了0),所以delta规则(也就是梯度下降)什么都不做({{ 1}})。这就是阶梯函数感知器不能很好地适应梯度下降的原因。 :)
对于线性感知器,dw = 0
为g'(x) = 1
。
您见过使用dw = alpha * (t_i - y_i) * x_i
的代码。我们可以对这里发生的事情进行逆向工程,因为显然dw = alpha * (t_i - y_i) * h_j * x_i
,这意味着要记住我们必须拥有g'(h_j) = h_j
的微积分。显然,您找到的代码示例使用指数激活函数。
这必须意味着神经元输出被限制在g(x) = e^x + constant
上(或者我猜(0, infinity)
对于任何有限(a, infinity)
,a
)。我之前没有遇到过这种情况,但我在网上看到了一些参考资料。对于有界输出(具有已知边界的分类或回归),Logistic或tanh激活更常见。