我最近完成了Coursera上Ng教授的机器学习课程,虽然我喜欢整个课程,但我从未真正理解反向传播算法来训练神经网络。
我的问题在于,他只教授全连接前馈网络的向量化实现。我的线性代数有点生疏,如果有人能以节点为导向的方式教我通用算法,我想会更容易理解。
我会尝试简单地阐述这个问题,但我可能误解了反向传播的工作原理,所以如果这不合理,请忽略它:
对于任何给定节点N,如何计算N的“成本”并使用此更新输入权重,以及给定输入权重/值、输出权重/值和N输出到所有节点的误差/成本?
我最近完成了Coursera上Ng教授的机器学习课程,虽然我喜欢整个课程,但我从未真正理解反向传播算法来训练神经网络。
我的问题在于,他只教授全连接前馈网络的向量化实现。我的线性代数有点生疏,如果有人能以节点为导向的方式教我通用算法,我想会更容易理解。
我会尝试简单地阐述这个问题,但我可能误解了反向传播的工作原理,所以如果这不合理,请忽略它:
对于任何给定节点N,如何计算N的“成本”并使用此更新输入权重,以及给定输入权重/值、输出权重/值和N输出到所有节点的误差/成本?
δj = f'(netj) × ∑k (δk × wjk)
对于我们的节点j,其δ值(δj)是转移函数的导数乘以下一层(靠近输出端)所有δ值乘上它们相连权重的和。有了这个值,我们可以计算如何调整前一层节点(靠近输入端)的权重。
dwij = L × oi × δj
这里的dw代表“权重变化”,所以这个方程表示从节点i到节点j的权重变化等于学习参数L(通常在网络中所有节点的值都相同)、节点i的输出值和节点j的δ值(误差项)三者的乘积。
调节偏置值与调节权重类似。
dθj = L × f(θj) × δj
这里的dθ代表“Θ变化”。我们必须对偏置值Θj应用转移函数,才能得到像节点输出一样的项。否则,它看起来就像其他方程一样。
需要注意的是,应该在整个网络上计算权重变化,然后在计算所有变化之后再应用这些变化。