Questions tagged «backpropagation»

反向传播是“错误的向后传播”的缩写,是训练人工神经网络与优化方法(例如梯度下降)结合使用的常用方法。

6
是否可以在不进行反向传播的情况下训练神经网络?
许多神经网络书籍和教程都在反向传播算法上花费了大量时间,反向传播算法本质上是计算梯度的工具。 假设我们正在建立一个具有约10K参数/权重的模型。是否可以使用一些无梯度优化算法来运行优化? 我认为计算数字梯度会太慢,但是其他方法(如Nelder-Mead,模拟退火或遗传算法)如何? 所有算法都会遭受局部极小值的困扰,为什么会迷恋梯度?


1
softmax_cross_entropy_with_logits与softmax_cross_entropy_with_logits_v2有何不同?
具体来说,我想我对此语句感到疑惑: TensorFlow的未来主要版本默认将允许梯度流入backprop上的标签输入中。 使用时会显示出来tf.nn.softmax_cross_entropy_with_logits。在同一封信中,它敦促我看看tf.nn.softmax_cross_entropy_with_logits_v2。我浏览了文档,但只说明了tf.nn.softmax_cross_entropy_with_logits_v2: 反向传播将同时出现在logit和标签中。要禁止反向传播到标签中,请在将标签张量馈入此函数之前将其张量传递给stop_gradients。 而不是tf.nn.softmax_cross_entropy_with_logits: 反向传播只会在logit中发生。 对于该主题来说是一个新手(我正在尝试通过一些基本教程进行学习),这些陈述并不十分清楚。我对反向传播有一个较浅的了解,但是前面的陈述实际上是什么意思?反向传播和标签如何连接?与tf.nn.softmax_cross_entropy_with_logits_v2原始作品相比,这将如何改变我的工作方式?

6
使用Softmax /交叉熵进行反向传播
我试图了解反向传播如何用于softmax /交叉熵输出层。 交叉熵误差函数为 E(t,o)=−∑jtjlogojE(t,o)=−∑jtjlog⁡ojE(t,o)=-\sum_j t_j \log o_j 分别以和为目标,并在神经元处输出。总和在输出层的每个神经元上。本身是softmax函数的结果:tttooojjjojojo_j oj=softmax(zj)=ezj∑jezjoj=softmax(zj)=ezj∑jezjo_j=softmax(z_j)=\frac{e^{z_j}}{\sum_j e^{z_j}} 同样,总和在输出层的每个神经元上,是神经元的输入:zjzjz_jjjj zj=∑iwijoi+bzj=∑iwijoi+bz_j=\sum_i w_{ij}o_i+b 那是前一层中所有神经元的总和,其对应的输出为,权重朝向神经元加上偏差。oioio_iwijwijw_{ij}jjjbbb 现在,要更新连接输出层中的神经元和上一层中的神经元的权重,我需要使用链式规则来计算误差函数的偏导数:wijwijw_{ij}jjjiii ∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij∂E∂wij=∂E∂oj∂oj∂zj∂zj∂wij\frac{\partial E} {\partial w_{ij}}=\frac{\partial E} {\partial o_j} \frac{\partial o_j} {\partial z_{j}} \frac{\partial z_j} {\partial w_{ij}} 用作为神经元的输入。zjzjz_jjjj 最后一个词很简单。由于和之间只有一个权重,因此导数为:iiijjj ∂zj∂wij=oi∂zj∂wij=oi\frac{\partial z_j} {\partial w_{ij}}=o_i 第一项是关于输出的误差函数的:ojojo_j ∂E∂oj=−tjoj∂E∂oj=−tjoj\frac{\partial E} {\partial o_j} = \frac{-t_j}{o_j} 中间项是softmax函数相对于其输入更难:zjzjz_j ∂oj∂zj=∂∂zjezj∑jezj∂oj∂zj=∂∂zjezj∑jezj\frac{\partial o_j} {\partial z_{j}}=\frac{\partial} {\partial z_{j}} …

5
神经网络训练的反向传播与遗传算法
我已经阅读了几篇论文,讨论了每种方法的优缺点,有些人认为GA在寻找最佳解决方案方面没有任何改进,而另一些则表明它更有效。似乎在文献中一般首选GA(尽管大多数人以某种方式对其进行了修改以实现所需的结果),那么为什么大多数软件解决方案似乎仅使用反向传播? 使用一种或另一种时是否有一些一般的经验法则?也许这取决于NN的类型,或者存在一些通常优于其他解决方案的最新解决方案? 如果可能的话,我正在寻找一般的答案:即,“如果NN很大,则GA会更好”,或者“ GA总是会更好,但存在计算性能问题”等。

4
为什么tanh作为激活函数几乎总是比Sigmoid好?
在安德鲁·Ng的神经网络和深度学习课程Coursera他说,使用Ť 一个Ñ ħŤ一种ñHtanh几乎总是最好使用。š 我克米ø 我ds一世G米Ø一世dsigmoid 他给出的原因是,使用的输出以0为中心,而不是的为0.5,这“使下一层的学习变得容易一些”。Ť 一个Ñ ħŤ一种ñHtanhš 我克米ø 我ds一世G米Ø一世dsigmoid 为什么居中激活的输出速度学习?我假设他是在反向传播期间学习时发生的,是指上一层? 还有其他使更可取的功能吗?陡峭的坡度会延迟消失的坡度吗?tanhŤ一种ñHtanh 在任何情况下,会更可取?sigmoids一世G米Ø一世dsigmoid 首选数学轻巧,直观的答案。


1
为什么非零中心激活函数在反向传播中会成为问题?
我在这里阅读以下内容: 乙状结肠输出不是零中心的。这是不希望的,因为神经网络中处理的后续层中的神经元(即将对此进行详细介绍)将接收到非零中心的数据。这对梯度下降期间的动力学有影响,因为如果进入神经元的数据始终为正(例如, 元素,在),则权重的梯度 将在反向传播期间变为全部为正,或全部为负(取决于整个表达式的梯度 x>0x>0x > 0f=wTx+bf=wTx+bf = w^Tx + bwwwfff)。这可能会在权重的梯度更新中引入不希望的之字形动力学。但是,请注意,一旦将这些梯度添加到一批数据中,权重的最终更新就可以具有可变的符号,从而在某种程度上缓解了此问题。因此,这是一个不便,但是与上面的饱和激活问题相比,后果不那么严重。 为什么让所有(在元素上)都导致全正或全负梯度?x>0x>0x>0www

1
通过ResNet跳过连接进行梯度反向传播
我很好奇如何使用ResNet模块/跳过连接通过神经网络向后传播梯度。我已经看到了关于ResNet的几个问题(例如,具有跳过层连接的神经网络),但是这个问题专门询问了训练过程中梯度的反向传播。 基本架构在这里: 我读了这篇论文《残差网络的图像识别研究》,在第2部分中,他们讨论了ResNet的目标之一是如何为梯度提供更短/更清晰的路径,使其反向传播至基础层。 谁能解释梯度如何流过这种类型的网络?我不太了解加法运算以及加法后缺少参数化图层如何实现更好的梯度传播。它是否与流经加法运算符时渐变不发生变化以及是否以无乘法方式重新分布有关? 此外,我可以理解,如果梯度不需要流过权重层,那么如何减轻消失的梯度问题,但是如果没有梯度流经权重,那么在向后传递之后如何更新它们?

3
为什么要对神经网络使用梯度下降?
当使用反向传播算法训练神经网络时,使用梯度下降法确定权重更新。我的问题是:与其使用梯度下降法相对于某个权重缓慢地定位最小点,不如我们只设置导数,并找到将误差最小化的权重的值?d(错误)dw= 0d(错误)dw=0\frac{d(\text{Error})}{dw}=0www 另外,为什么我们可以确定反向传播中的误差函数将是最小的?难道不是错误函数是最大值?压扁函数是否具有特定的特性,可以保证具有任意数量的具有任意权重和输入矢量的隐藏节点的网络将始终提供具有某些最小值的误差函数?



2
反向传播算法
我对多层感知器(MLP)中使用的反向传播算法有些困惑。 该误差由成本函数调整。在反向传播中,我们试图调整隐藏层的权重。我能理解的输出错误,就是e = d - y[没有下标]。 问题是: 如何获得隐藏层的错误?如何计算呢? 如果我反向传播它,应该使用它作为自适应滤波器的成本函数还是应该使用指针(在C / C ++中)编程意义来更新权重?

1
(最小)批量梯度中梯度的总和或平均值是否合适?
当我实现了迷你批次梯度样例时,我只是对训练批次中所有示例的梯度进行平均。但是,我注意到,现在的最佳学习率远远高于在线梯度样例。我的直觉是,这是因为平均梯度噪声较小,因此可以更快地遵循。因此,也许仅仅总结一批的梯度也是有意义的。无论如何,这些值可以为正也可以为负。 我知道这只是一个恒定因素,可以使用学习率来平衡。但是我不知道科学家们同意哪个定义,以便我可以从神经网络论文中复制结果。 通常是否将批次的总梯度除以批次大小?

3
为什么在RNN中通过时间反向传播?
在递归神经网络中,通常会向前传播几个时间步骤,“展开”网络,然后在输入序列中向后传播。 为什么不只在序列中的每个步骤之后更新权重?(等效于使用1的截断长度,因此没有展开的空间),这完全消除了消失的梯度问题,大大简化了算法,可能会减少陷入局部极小值的机会,并且最重要的是看起来工作正常。我以这种方式训练了一个模型来生成文本,结果似乎与从BPTT训练后的模型中看到的结果相当。我对此仅感到困惑,因为我所见过的每个有关RNN的教程都说要使用BPTT,几乎就像是正确学习所必需的那样,事实并非如此。 更新:我添加了一个答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.