有人可以向我解释反向传播算法吗?

Jon*_*rth 10 algorithm backpropagation neural-network

我最近在Coursera上完成了Ng教授的机器学习课程,虽然我喜欢整个课程,但我从未真正理解用于训练神经网络的反向传播算法.

我理解它的问题是,他只是教导它的全向连接前馈网络的矢量化实现.我的线性代数是生锈的,我认为如果有人能教我通用算法会更容易理解.也许是以节点为导向的方式.

我会尝试简单地说出问题,但我可能误解了backprop的工作原理,所以如果这没有意义,请忽略它:

对于任何给定节点N,给定输入权重/值,输出权重/值以及N输出的所有节点的误差/成本,如何计算N的"成本"并使用它来更新输入权重?

Wes*_*rry 14

让我们考虑一个反向传播(BP)网络中的节点.它有多个输入,并产生一个输出值.我们希望将纠错用于训练,因此它还将根据节点的误差估计更新权重.

每个节点都有一个偏置值θ.您可以将此视为内部常量1.0值输入的权重.

激活是加权输入和偏差值的总和.让我们将我们感兴趣的节点称为j,前一层中的节点的值为i,后续层中的节点的值为k.然后激活我们的节点j:

Ĵ(邻 ×宽IJ)+θ Ĵ

也就是说,j的激活值是来自节点i和相应的权重链接节点i和j的输出的乘积加上偏差值的总和.

我们节点j的输出是激活的传递函数:

o j = f(净j)

f通常是S形函数.

f(净j)= 1 /(1 + e -net j)

sigmoid函数有一个易于指定的一阶导数:

f'(净j)= f(净j)×(1.0 - f(净j))

无论我们使用何种传递函数,我们都需要知道如何计算其一阶导数.BP通过链规则通过梯度下降工作,因此这很重要.上面的等式将随着不同的传递函数而不同.

到目前为止,我们知道如何获取输入值,计算激活,计算输出,以及计算激活的一阶导数.现在我们需要处理错误和体重调整.

用于BP中的节点误差估计的值称为δ.节点的δ与节点激活的一阶导数和它接收的误差项成比例.接收的错误项有两种表述,一种用于输出节点,另一种用于隐藏节点.

一般地,

δ= f'(净)×(接收误差)

对于输出节点,

δ 输出 = f'(净)×(t - o)

其中t是该输出节点的预期值,o是该输出节点的实际输出值.

对于我们的隐藏节点j,它是这样的:

δ Ĵ = F'(净Ĵ)×Σ ķķ ×瓦特JK)

我们的节点j,δ的δ Ĵ,在下一层(靠近输出)的变化量的总和乘以每个与连接权重的值的我们的传递函数给定的激活时间的一阶导数的乘积.有了这个,我们可以计算出如何调整前一层节点的权重(更接近输入).

DW IJ = L×○ ×δ Ĵ

这里的dw代表"权重的变化",因此等式所说的是从节点i到节点j的权重变化等于学习参数L的乘积(通常是网络中所有节点的相同值) ,节点i的输出值,以及节点j的δ(误差项).

调整偏差值类似于调整重量.

Ĵ = L×F(θ Ĵ)×δ Ĵ

dθ表示"θ的变化".我们必须传递函数应用于偏差值θ Ĵ得到像从一个节点输出术语.否则,它看起来就像另一个等式.

我应该注意,计算重量变化应该在网络范围内完成,然后在计算完所有变化之后应用这些变化.