【发布时间】:2016-06-16 09:23:24
【问题描述】:
取导数背后的概念是什么?有趣的是,为了以某种方式教授一个系统,我们必须调整它的权重。但是为什么我们要使用传递函数的推导来做到这一点。派生中有什么对我们有帮助。我知道导数是连续函数在给定点的斜率,但它与问题有什么关系。
【问题讨论】:
标签: neural-network artificial-intelligence recurrent-neural-network
取导数背后的概念是什么?有趣的是,为了以某种方式教授一个系统,我们必须调整它的权重。但是为什么我们要使用传递函数的推导来做到这一点。派生中有什么对我们有帮助。我知道导数是连续函数在给定点的斜率,但它与问题有什么关系。
【问题讨论】:
标签: neural-network artificial-intelligence recurrent-neural-network
您必须已经知道成本函数是一个以权重为变量的函数。 现在将其视为 f(W)。
我们在这里的主要动机是找到一个 W,我们得到 f(W) 的最小值。
其中一种方法是将函数 f 绘制在一个轴上,将 W 绘制在另一个轴上......但请记住,这里的 W 不仅仅是一个变量,而是一组变量。
那么另一种方法是什么? 它可以像改变 W 的值一样简单,看看我们得到的值是否低于之前的 W 值。
但是为 W 中的所有变量取随机值可能是一项乏味的任务。
所以我们要做的是,我们首先取 W 的随机值,并查看 f(W) 的输出和每个变量的所有值的斜率(我们通过将函数与第 i 个变量部分微分来得到这个并输入第 i 个变量的值)。
现在,一旦我们知道空间中那个点的斜率,我们就向斜率的下侧移动一点(这个小因素在梯度下降中被称为 alpha),直到斜率给出相反的值,说明我们已经到达图中的最低点(n维图,函数vs W,W是n个变量的集合)。
【讨论】:
原因是我们试图将损失降到最低。具体来说,我们通过gradient descent method 执行此操作。这基本上意味着,从我们在参数空间中的当前点(由完整的当前权重集确定),我们想要朝着减少损失函数的方向前进。想象站在山坡上,沿着坡度最陡的方向走。
从数学上讲,从参数空间中的当前点开始下降最陡的方向是负梯度。而梯度只不过是损失函数对每个单个参数的所有导数组成的向量。
【讨论】:
反向传播是将Chain Rule 应用于神经网络。如果前向传递涉及应用传递函数,则损失函数相对于权重的梯度将包括传递函数的导数,因为 f(g(x)) 的导数是 f'(g(x)) g'(x)。
【讨论】:
您的问题非常好!当错误的斜率 wrt 时,为什么我应该更多地向一个方向移动重量。重量高吗?这真的有意义吗?事实上,如果错误函数 wrt 确实有意义。重量是抛物线。然而,假设它是抛物线是一个疯狂的猜测。正如 rcpinto 所说,假设误差函数是抛物线,使用链式法则简化 a 更新的推导。
但是,还有一些其他参数更新规则实际上解决了这个非直观的假设。您可以制定更新规则,使权重在下坡方向上采用固定大小的步长,然后在训练的后期可能会在训练时以对数方式减小步长。 (我不确定这个方法是否有正式名称。)
还有一些可以使用的替代误差函数。在您的神经网络教科书中查找交叉熵。这是对误差函数的调整,以使更新规则中的(传递函数的)导数因子抵消。只要记住根据您的输出传递函数选择正确的交叉熵函数。
【讨论】:
当我刚开始接触神经网络时,我也有这个问题。
此处的其他答案已经解释了数学,这清楚地表明,当您尝试更新权重时,导数项将出现在您的计算中。 但所有这些计算都是为了实现反向传播,这只是更新权重的一种方式!现在继续阅读...
您正确地假设在一天结束时,神经网络所要做的就是更新其权重以适应您输入的数据。在此声明中也包含您的答案。您在这里感到困惑的是反向传播算法的概念。许多教科书默认使用反向传播来更新神经网络,但没有提到还有其他方法来更新权重。这导致了神经网络和反向传播是同一事物并且具有内在联系的混淆。这也导致错误地认为神经网络需要反向传播来训练。
请记住,反向传播只是训练神经网络的方法之一(尽管它是最著名的一种)。现在,您一定已经看到了反向传播中涉及的数学,因此您可以看到导数项的来源(其他一些答案也解释了这一点)。其他训练方法可能不需要导数,尽管大多数都需要。继续阅读以找出原因....
直观地考虑一下,我们正在谈论改变权重,与改变相关的直接数学运算是导数,因此您应该需要评估导数以改变权重。
如果您仍然感到困惑,请告诉我,我会尝试修改我的答案以使其更好。就像一个分离信息一样,另一个常见的误解是梯度下降是反向传播的一部分,就像假设反向传播是神经网络的一部分一样。梯度下降只是最小化成本函数的一种方法,还有很多其他方法可以使用。上面的答案之一在说“特别梯度下降”时也做出了这个错误的假设。这实际上是不正确的。 :)
【讨论】:
训练神经网络意味着最小化与网络权重相关的“误差”函数。现在有只使用函数值的优化方法(Nelder 和 Mead、Hooke 和 Jeeves 等的单纯形法)、另外使用一阶导数的方法(最速下降、拟牛顿法、共轭梯度)和使用二阶导数的牛顿法.因此,如果要使用导数方法,则必须计算误差函数的导数,这反过来又涉及传递或激活函数的导数。 反向传播只是一个很好的计算导数的算法,仅此而已。
【讨论】: