根据维基百科,使用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
我很乐意看到对此的正确解释!
提前感谢您。
回答:
您说的没错,如果您使用阶跃函数作为激活函数g
,其梯度总是零(除了在0点),所以delta规则(也称为梯度下降)就什么也不做(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 + 常数
。所以显然您找到的代码示例使用的是指数激活函数。
这意味着神经元输出被限制在(0, 无穷大)
(或者我猜(a, 无穷大)
对于任何有限的a
,对于g(x) = e^x + a
)。我之前没有遇到过这种情况,但在网上看到了一些参考资料。Logistic或tanh激活函数在有界输出(无论是分类还是已知界限的回归)中更为常见。