感知器训练 – delta规则

根据维基百科,使用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)。我之前没有遇到过这种情况,但在网上看到了一些参考资料。Logistictanh激活函数在有界输出(无论是分类还是已知界限的回归)中更为常见。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注