【问题标题】:How relate ReLU to SigmoidReLU 与 Sigmoid 的关系
【发布时间】:2021-09-30 12:00:13
【问题描述】:

给定一个网络, 输入 -> 带有 ReLU 激活的隐藏层 -> 带有 Sigmoid 激活的输出层

我想知道如何输出 0 到 0.5 之间的值,因为 ReLU 根据定义返回正值,而 sigmoid 由 1/(1+e^-x) 定义,最小值为 1/(1+ e^-0) = 0.5

Sigmoid 激活是否发生了变化?因为我得到了 0 和 1 之间的输出(如手册所述),但为什么呢?

编辑

这是一段代码,它在控制台中打印函数输出,它显示了我的预期:它从 0.5 开始,当 x>0 时增加。

    import numpy as np
    import tensorflow as tf
    
    x = np.array([x/10 for x in range(-20,20)])
    
    y = tf.keras.activations.sigmoid(
        tf.keras.activations.relu(x)
    )
    for a,b in zip(x,y):
        print(a,"\t",float(b))

输出

-0.2     0.5
-0.1     0.5
0.0      0.5
0.1      0.52497918747894
0.2      0.549833997312478
0.3      0.574442516811659
0.4      0.5986876601124521

如果我这样做了

    x = Dense(64, activation="relu")(input)
    output = Dense(1, activation="sigmoid")(x)

我收到介于 0 和 1 之间的值。

【问题讨论】:

  • 你试过绘制函数吗?
  • 这方面有大量的链接 - 但请尝试例如images.app.goo.gl/TBWdN8i8sLEEKhNo9
  • x 可以是负数,所以 x -> -inf 函数趋向于 0。ReLU 也可以有一个负数 x - 它只是将输出设置为零低于 x = 0,这就是为什么你可能不这么认为。
  • 是的,现在我已经打印了这个函数,它按照我说的做了,它的 0.5 代表 x=0
  • 据我所知,它确实应用了偏差 (use_bias=True) - 但默认偏差为零,所以你可以在那里。 keras.io/api/layers/core_layers/dense

标签: python tensorflow keras


【解决方案1】:

在 ReLU 函数之上应用 Sigmoid 是错误的。在您看到的实现中,输出层可能有自己的权重,这些权重会乘以 ReLU 输出。所以理论上sigmoid在-inf到inf之间得到输入。

【讨论】:

  • 这不会是错的,因为它在大多数多标签分类模型中都使用过......
  • 好吧,也许没有错。但是当输入是 -inf 到 inf 时,sigmoid 效果很好。所以对于输入从 0 到 inf(ReLUs 范围)的情况,肯定有比 sigmoid 更好的激活函数。或者也许使用不同的激活函数而不是两个。从未见过有人一个接一个地应用两个激活函数。另请注意,使用 ReLU 应用密集层,然后使用 sigmoid 密集层与依次应用两个激活函数不同(这完全是 OP 的疑问)。
【解决方案2】:
x = Dense(64, activation="relu")(input)
output = Dense(1, activation="sigmoid")(x)

在这里,输出层xReLU 激活包裹。所以输出的范围是 0 到 ∞
但是当它被传递到 layer output 时,它会乘以权重(权重可以是负数),其输出可以是负数也可以是正数(因此范围从 -∞ 到 ∞)。由于范围是 -∞ 到 ∞,将其传递给 sigmoid 函数将给出 0 到 1 之间的值

总之,在ReLU 上包装sigmoid 将返回一个介于0.5 到∞ 之间的值。并且将 sigmoid 包裹在加权的 ReLU 之上将返回一个 -∞ 到 ∞ 范围内的值

【讨论】:

  • 感谢您的澄清。不知道有什么不同。不幸的是,这让我想到了一个问题:那么为什么要使用激活,如果它不影响它呢?
  • @343mps 第二层的输入是第一层和第二层之间权重的激活函数。一般来说,不同的激活会以不同的方式影响第二层的输入——训练后的权重也是如此。
猜你喜欢
  • 2020-04-23
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2012-10-07
  • 2020-02-02
  • 2020-11-08
  • 1970-01-01
相关资源
最近更新 更多