【问题标题】:Use of activation derivative in back propagation在反向传播中使用激活导数
【发布时间】:2016-05-13 13:40:11
【问题描述】:

我有点困惑,为什么反向传播中的激活导数是这样的。

首先,当我从反向传播算法中删除激活导数并将其替换为常数时,网络仍在训练,尽管速度稍慢。所以我认为它对算法来说不是必需的,但它确实提供了性能优势。

但是,如果激活导数(简单地说)是激活函数相对于当前输入的变化率,那么为什么这会提供性能提升?

当然,在激活函数变化最快的值处,我们想要一个较小的值,以便权重更新更小?这将防止由于激活函数上陡峭斜坡附近的权重变化而发生大的输出变化。然而,这与算法的实际工作方式完全相反。

有人可以向我解释为什么它是这样设置的,以及为什么它提供了这样的性能改进?

【问题讨论】:

    标签: machine-learning neural-network artificial-intelligence


    【解决方案1】:

    我不完全确定这是否是您所要求的,但此答案可能会为您试图理解的内容提供一些见解。

    想象一下误差曲线:

    我们正在尝试使用梯度下降来最小化成本函数,对吗?假设我们处于曲线的最外侧,误差非常高。通过用曲线计算梯度下降,函数会意识到斜率很陡,因此误差很大,所以会走大步。当它沿着曲线向下移动时,斜率会慢慢接近 0,因此每次都会采取较小的步长。

    使用激活导数的梯度下降可视化:

    看看它是如何从迈出一大步开始,然后每次迈出小步的?这是通过使用激活导数来实现的。它从一大步开始,因为有一个陡峭的曲线。随着坡度变小,台阶也变小。

    如果您使用一个常数值,您将不得不选择一个非常小的步长以避免超出最小值,因此必须使用更多的迭代来获得类似的结果。

    【讨论】:

    • 如果误差极低,例如目标为 0.5,实际输出为 0.49,该怎么办?假设使用 sigmoid 激活函数,激活导数几乎是它的最大值 0.2499。根据您的图表,这没有意义,因为较低的误差等于较低的导数值。
    • 如果你看一下 sigmoid 激活函数的导数图,你会看到方程是 'dy/dx = f(x)' = f(x) * (1 - f( x))' 并且图形看起来像一个弯曲的对数函数。看看here,你会看到随着激活函数导数图的成本降低,斜率也会降低。因此,对于您提供的示例,0.01 的错误会在更新函数中产生微小的变化。
    • 如果你还是一头雾水,看看this问题。它可能会回答您的一些剩余问题。
    猜你喜欢
    • 2012-04-04
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 2017-06-21
    • 2015-07-26
    相关资源
    最近更新 更多