Neural network 反向传播过时了吗?

Neural network 反向传播过时了吗?,neural-network,backpropagation,Neural Network,Backpropagation,回到大学时代(大约2011年、2012年),我被介绍到反向传播作为训练前馈人工神经网络的最新技术 在Tensorflow的示例中,我看到梯度下降上的现代旋转(例如RMSProp、Adam)用于一次训练所有权重,但不使用反向传播 从直观的角度来看,我理解反向传播是一次训练每一层,因此有多个空间进行优化,但每个空间的维度较少(层的每个权重都是一个维度)。相反,没有反向传播的情况下,在单个高维空间内进行优化。当然,RMSProp等可以与反向传播相结合,但我看到的是,它没有这样做 例如 反向传播过时了吗

回到大学时代(大约2011年、2012年),我被介绍到反向传播作为训练前馈人工神经网络的最新技术

在Tensorflow的示例中,我看到梯度下降上的现代旋转(例如RMSProp、Adam)用于一次训练所有权重,但不使用反向传播

从直观的角度来看,我理解反向传播是一次训练每一层,因此有多个空间进行优化,但每个空间的维度较少(层的每个权重都是一个维度)。相反,没有反向传播的情况下,在单个高维空间内进行优化。当然,RMSProp等可以与反向传播相结合,但我看到的是,它没有这样做

例如


反向传播过时了吗?

我相信您指的是和。或它正在使用

在使用这些技术之前,我们需要手动推导雅可比矩阵来实现自动微分(反向传播)。在TensorFlow 2.0中引入autodiff后,我们可以只运行正向路径,autodiff会处理梯度(实际上在计算图TF生成上应用链规则)

我们所需要做的就是用tf.GradientTape()包围前进路径,并告诉Tensorflow要监视哪个变量。例如,
y=x*x
的back prop被用来编码为
dy/dx=2x
,但我们不再需要这样做了

# From https://www.tensorflow.org/api_docs/python/tf/GradientTape
x = tf.constant(3.0)
with tf.GradientTape() as g:
  g.watch(x)
  y = x * x
dy_dx = g.gradient(y, x)
print(dy_dx)

然而,有一个陷阱。我们需要注意并了解我们可以为autodiff使用什么。例如。此外,浮点大小(TF为float32)在自动差异过程中可能会导致数值错误,而TF不会捕捉并告诉我们此类情况,尽管手动操作与此相同。

它们都使用反向传播。这不是一种学习算法,而是一种计算梯度的方法,Adam和co.在其中使用。也许可以开始阅读。@sascha:我链接到的当前代码中没有反向传播:1)神经层是显式编程的。唯一可能隐藏某些东西的地方是优化-这似乎不太可能,因为它甚至不知道我首先在训练ANN-但我还是去看了代码,导致我2)…2)中没有反向传播,梯度是根据总损失(而不是层的损失)计算的在
def渐变中
in。因此:不,没有使用反向传播。如果我遗漏了什么,请直接指向显式代码。(无论如何,谢谢你的文章——看起来很有趣。)没有。阅读摘录:
因为TensorFlow知道您计算的整个图形,它可以自动使用反向传播算法来有效地确定您的变量如何影响您要求它最小化的损失。
+
TensorFlow在幕后实际做了什么,是向图形中添加新的操作,这些操作实现了反向传播和梯度下降。
@sasche:好的,当然,这非常令人印象深刻。谢谢你的回答。据我所知,在没有反向传播的情况下训练神经网络是可能的,不是吗?(即使使用反向传播可能更有效。)