节点梯度在神经网络中代表什么?

use*_*073 6 neural-network

我正在跟随(代码是一团糟,我只是搞乱)与这个简单的3层神经网络的神经网络数学简介: 在此输入图像描述

我的计算结果与本书几乎相同(归因于舍入的差异):

o1 delta: 0.04518482993361776
h1 delta: -0.0023181625149143255
h2 delta: 0.005031782661407674
h1 -> o1: 0.01674174257328656
h2 -> o1: 0.033471787838638474
b2 -> o1: 0.04518482993361776
// didn't calculate layer 1 gradients but would use the same approach
Run Code Online (Sandbox Code Playgroud)

但究竟是什么梯度?它们是单个节点对o1错误的贡献吗?

小智 10

我们首先解释梯度下降.GRADIENT DESCENT是一种用于最小化成本函数的优化算法.

请考虑以下示例: 在此输入图像描述

其中f(t)是我们想要最小化的函数,t具有一些初始值t1但是我们想要找到一个使得f(t)得到它的最小值.

这是梯度下降算法的公式:

t = t - ?  d/dt f(t),
Run Code Online (Sandbox Code Playgroud)

其中α**是学习率,d/dt f(t)是函数的导数.并且导数只是与函数相切的直线的斜率.

我们继续应用此公式,直到达到最小值.

观察上面的图片,梯度下降将以下列方式更新t:斜率(导数)为正,α为正,因此t值现在将减小,因此最小化f(t).我们重复这个直到我们得到d/dt f(t)== 0(任何cont.函数的最小(和最大)的斜率为零).

我们现在可以在我们的反向传播算法中应用梯度下降的思想,以便适当调整我们的权重.

给定训练示例e,我们将误差函数定义为

E_e (w ? )=  1/2 ?_(k ?Outputs) (d_k- o_k )^2 , 
Run Code Online (Sandbox Code Playgroud)

其中k是神经网络中的输出数量,d是期望的输出,o是观察到的输出.

观察: 如果此函数E等于0,这意味着对于所有k,d_k == o_k,这意味着神经网络的输出与所需的输出相同,并且没有工作要做,因为我们的NN非常聪明.当然,最初权重是随机分配的,但从来都不是这样,但我们希望实现这一目标(或者几乎是希望实现).

由于我们现在有一个我们想要最小化的错误功能,它现在点击我们可以应用什么?渐变下降是的!^^想法是根据误差函数的梯度的负值修改权重,以便在此示例中快速减少误差(意思是e),因此我们根据梯度信息修改权重

?w_ji= ? (-?E(wij)/?wij  )
Run Code Online (Sandbox Code Playgroud)

如果你与上面的例子进行比较,这完全相同,唯一的区别是在后一种情况下,误差函数是一个多元函数,对于给定的权重,我们找到该特定权重的偏导数.)

将这种误差校正(梯度下降)反复应用于重量,我们将实现一个杠杆,其中误差函数被最小化并且我们的NN训练有素.

*注:也有参与这一问题的许多问题,例如,如果学习率过大,梯度下降甚至可以冲过最低,但为了避免混淆,不关心这个太多了.:)