为啥 ReLU 用于神经网络的回归?

Posted

技术标签:

【中文标题】为啥 ReLU 用于神经网络的回归?【英文标题】:Why is ReLU used in regression with Neural Networks?为什么 ReLU 用于神经网络的回归? 【发布时间】:2018-12-28 18:15:49 【问题描述】:

我正在关注官方的 TensorFlow with Keras 教程,但我卡在这里:Predict house prices: regression - Create the model

为什么要在预测连续值的任务中使用激活函数?

代码是:

def build_model():
    model = keras.Sequential([
        keras.layers.Dense(64, activation=tf.nn.relu, 
                   input_shape=(train_data.shape[1],)),
        keras.layers.Dense(64, activation=tf.nn.relu),
        keras.layers.Dense(1)
    ])

    optimizer = tf.train.RMSPropOptimizer(0.001)

    model.compile(loss='mse', optimizer=optimizer, metrics=['mae'])
    return model

【问题讨论】:

【参考方案1】:

隐藏层中使用非线性激活函数的一般原因是,如果没有它们,无论有多少层或每层有多少单元,网络的行为都会像简单的线性单元。 Andrew Ng 的这个短片很好地解释了这一点:Why do you need non-linear activation functions?

在您的情况下,仔细观察,您会发现 final 层的激活函数不是隐藏层中的 relu,而是线性函数(即当您不指定任何内容时默认激活,例如此处):

keras.layers.Dense(1)

来自Keras docs:

密集

[...]

参数

[...]

activation:要使用的激活函数(参见activations)。如果您不指定任何内容,则不会应用任何激活(即“线性”激活:a(x) = x)。

这确实是具有单个连续输出的回归网络所期望的。

【讨论】:

感谢您抽出宝贵时间回答我的问题,这是一个很棒的视频!

以上是关于为啥 ReLU 用于神经网络的回归?的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 RELU 激活时,为啥我的 TensorFlow 网络权重和成本为 NaN?

TensorFlow 神经网络相关函数

tensorflow框架学习—— 一个简单的神经网络示例

神经网络多层感知机

激活函数 sigmoid、tanh、relu

循环神经网络