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

时间:2014-07-15 17:17:02

标签: neural-network

使用这个简单的3层神经网络I am following along(代码是一团糟,我只是搞乱了)与Introduction to the math of neural networksenter image description here

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

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

但是渐变究竟是什么?它们是个体节点对o1错误的贡献吗?

3 个答案:

答案 0 :(得分:9)

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

考虑以下示例: enter image description here

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

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

t = t - α  d/dt f(t),

其中α**是学习率,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 , 

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

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

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

∆w_ji= α (-∂E(wij)/∂wij  )

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

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

*注意:这个问题涉及很多问题,例如,如果学习率太大,梯度下降甚至可以超过最小值,但为了避免混淆,现在不要太在意这个问题。 :)

答案 1 :(得分:1)

我还没有读过这本书,但听起来你需要阅读gradient descent算法的章节。我发现这个课程是一个非常好的介绍(https://class.coursera.org/ml-006/lecture),它从一个非常直观的线性回归演示开始。

你问题的直接答案是梯度是节点权重的偏导数。梯度下降试图找到最小化某些误差函数的解(通常是均方误差)。如何找到这种组合是计算函数的导数,并使用一个小的乘数(也称为学习率)在导数的方向上更新权重。对于像神经网络这样的嵌套函数,可以通过链规则获得隐藏层的导出。

我建议尝试完全理解最简单的情况,即使用一个变量的线性回归,您仍然可以绘制错误函数并查看它的外观。在理解之后,神经网络案例自然会随之而来。这包括课程和课程练习。

答案 2 :(得分:1)

考虑神经网络的成本函数J(theta)。其中theta =(theta_1,theta_2,...,theta_n)是神经网络中连接的权重。 我们的目标是最小化函数J(theta)w.r.t。(相对于)theta。注意J(theta)是一个多元连续函数,数学上theta_i w.r.t J(theta)的梯度只是J w.r.t的偏导数。 theta_i。现在让我们试着找出渐变的物理意义。

为了演示,考虑theta仅由一个变量x组成。那就是theta =(x)。 现在,在x w.r.t的函数渐变中。 J简单地说是J'(x),即点x中J的导数。现在,对于足够小的alpha,

[J(x) is increasing at x]
==> [J'(x) >= 0]
==> [x - alpha * J'(x) <= x]
==> [J(x - alpha * J'(x)) <= J(x)]

类似地,

[J(x) is decreasing at x]
==> [J'(x) <= 0]
==> [x - alpha * J'(x) >= x]
==> [J(x - alpha * J'(x)) <= J(x)]

因此,对于小alpha,我们总是通过将x更改为x-alpha * J'(x)来获得更低的值J.此外,渐变的较大(按绝对值)是通过更改x得到的较低值。现在,如果你绘制J,那么你可以看到J'(x)是点x处J(x)的切线的斜率,而x - alpha * J'(x)将x移动到最小值。换句话说,x的梯度表示一个方向和幅度的一维向量,它将x指向最小值。

现在考虑theta具有n维的情况。那么theta_i w.r.t的梯度J(theta)表示指向最小值的n维向量。