unl*_*hed 7 computer-science artificial-intelligence backpropagation neural-network
我一直在努力学习反向传播如何与神经网络一起工作,但是却从一个技术性较差的方面找到了一个很好的解释.
反向传播如何工作?它是如何从提供的训练数据集中学习的?我将不得不对此进行编码,但在此之前我需要对它有更深入的了解.
060*_*002 17
反向传播的工作逻辑非常类似于前馈.不同之处在于数据流的方向.在前馈步骤中,您可以从中观察输入和输出.您可以向前传播值以训练前方的神经元.
在反向传播步骤中,您无法知道每个神经元中发生的错误,而是输出层中的错误.计算输出节点的误差很简单 - 您可以在神经元的输出和训练集中该实例的实际输出之间取差异.隐藏层中的神经元必须从中更新错误.因此,您必须将错误值传递给它们.根据这些值,隐藏的神经元可以使用来自前方层的误差的加权和来更新其误差和其他参数.
可在此处找到前馈和反向传播步骤的逐步演示.
如果您是神经网络的初学者,您可以从Perceptron开始学习,然后前进到NN,NN实际上是多层感知器.
Nov*_*vak 10
反向传播试图在神经网络的误差表面上进行梯度下降,使用动态编程技术调整权重以保持计算易于处理.
我将尝试用高级术语解释所有刚刚提到的概念.
如果你有一个神经网络,比如说输出层中有N个神经元,那意味着你的输出实际上是一个N维向量,那个向量存在于一个N维空间中(或者在一个N维空间上).所以做你正在训练的"正确"输出.您的"正确"答案与实际输出之间的差异也是如此.
这种差异,适当的调节(特别是对绝对值的一些考虑)是误差矢量,生活在误差表面上.
有了这个概念,您可以将训练神经网络视为调整神经元权重的过程,以便误差函数很小,理想情况下为零.从概念上讲,你用微积分来做这件事.如果你只有一个输出和一个重量,这很简单 - 采取一些导数,它会告诉你移动哪个"方向",并在那个方向进行调整.
但是你没有一个神经元,你有N个神经元,而且输入重量要多得多.
原理是相同的,除了在线上寻找可以在你脑中画出的斜率的线上使用微积分,方程式成为你不能轻易想象的矢量代数表达式.术语梯度是在线上倾斜的多维模拟,下降意味着您想要向下移动该误差表面,直到误差很小.
但是还有另一个问题 - 如果你有多个图层,你就不能轻易看到某些非输出图层中的权重与实际输出的变化.
动态编程是一种簿记方法,可帮助跟踪正在发生的事情.在最高级别,如果你天真地尝试做所有这些向量计算,你最终会一遍又一遍地计算一些导数.现代反向传播算法避免了其中的一些,并且首先更新输出层,然后更新第二层到最后一层,等等.更新从输出向后传播,因此名称.
所以,如果你很幸运之前已经暴露于渐变下降或矢量微积分,那么希望点击.
反向传播的完全推导可以浓缩成大约一页紧密的符号数学,但如果没有高级描述,很难理解算法.(在我看来,这是彻头彻尾的恐吓.)如果你对矢量微积分没有很好的处理,那么,对不起,上面的内容可能没什么帮助.但是为了使反向传播实际工作,没有必要理解完整的推导.
当我试图理解这些材料时,我发现以下论文(由Rojas撰写)非常有用,即使它是他书中一章的重要PDF.
http://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf