【问题标题】:Gradient Descent with Tanh, 0 gradient on incorrect classification?使用 Tanh 进行梯度下降,错误分类时梯度为 0?
【发布时间】:2020-08-07 02:07:36
【问题描述】:

tanh(x) 激活函数的导数是1-tanh^2(x)。 在对这个函数执行梯度下降时,这个导数成为权重梯度的一部分。

例如,Mean Squared ErrordL/dw = (tanh(x) - y)*(1 - tanh^2(x))*dx/dw

tanh(x) 等于1-1 时,术语tanh^2(x) 变为1

这意味着如果预测到了正确的类别,那么1-tanh^2(x) 等于0,因此损失的梯度变为0,因此权重不会更新。

但是,出于同样的原因,这似乎意味着如果预测到了完全错误的类,那么梯度仍然是0,因此不会导致更新。据推测,这与您想要发生的事情相反。

这是个问题吗?如果是这样,如何避免/修正这个问题?

【问题讨论】:

  • tanh函数主要用于两个类之间的分类。 This & this 可能会帮助你
  • 请注意,更新帖子时在帖子中包含“编辑:轻微数学错误”这样的短语是没有意义的,应该避免,因为它只会造成不必要的混乱(已删除) .

标签: machine-learning gradient-descent loss-function


【解决方案1】:

通过为每个类别选择01 的预测值来避免该问题(在两个类别的分类情况下)。 IE。您通常不会将 one-hot-encode 编码为负值。

【讨论】:

    【解决方案2】:

    好消息是,tanh(x) 仅在 x 为 +/- 无穷大时才变为 +/- 1,因此您无需为此担心太多。

    但是,对于绝对值较高的x,渐变确实会受到抑制,因此您应该:

    1. z 标准化您的输入并以正确的方式初始化网络中的权重 [1]
    2. 使用ReLU 或其变体(LeakyReLUPReLU 等)构建更深层次的网络。

    如需进一步阅读,请搜索“消失的渐变”。

    [1]http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2018-12-10
      • 2019-08-29
      相关资源
      最近更新 更多