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

Pop*_*rin 5 regression machine-learning neural-network keras activation-function

我正在关注带有 Keras 教程的官方 TensorFlow,但我被困在这里:预测房价:回归 - 创建模型

为什么将激活函数用于预测连续值的任务?

代码是:

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
Run Code Online (Sandbox Code Playgroud)

des*_*aut 8

隐藏层中使用非线性激活函数的一般原因是,如果没有它们,无论有多少层或每层有多少单元,网络都将表现得像一个简单的线性单元。Andrew Ng 在这个简短的视频中很好地解释了这一点:为什么需要非线性激活函数?

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

keras.layers.Dense(1)
Run Code Online (Sandbox Code Playgroud)

来自Keras 文档

稠密

[...]

参数

[...]

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

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