激活函数在计算人工神经网络成本函数中的作用



我很难理解激活函数和成本函数的作用。让我们看一个简单的例子。比方说我正在构建一个神经网络(人工神经网络)。我有5个"x"变量和一个"y"变量。

如果我进行通常的特征缩放,然后在隐藏层中应用Relu激活函数,那么这个激活函数进行转换,结果我们得到了0到M之间的预测输出值(y-hat)。然后下一步是计算成本函数。

然而,在计算成本函数时,我们需要将输出值(y hat)与实际值(y)进行比较。

问题是,我们如何将0和M之间的转换输出值(y-hat)与未转换的实际值(y)(可以是任何数字,因为它没有经过Relu激活函数)进行比较,以计算成本函数?可能存在很大的不匹配,因为一个变量已经暴露在转换中,而另一个没有。

谢谢你的帮助。

这听起来像是在执行回归任务,因为您将最终输出描述为"未转换的实际值(y)(可以是任何数字,因为它不受Relu激活函数的影响)。">

在这种情况下,你不会在神经网络的最终输出层上使用激活函数,因为正如你所指出的,预测并不局限于实数的任何特定激活区域。。。它可以是任何实数(并且模型将使用损失函数的梯度来调整网络的早期层中的参数,以在创建一些"任何数"的最终输出值时实现准确性)。

有关示例,请参见基本回归张量流Keras教程。您可以从模型层定义中看到:

def build_model():
model = keras.Sequential([
layers.Dense(64, activation=tf.nn.relu, input_shape=[len(train_dataset.keys())]),
layers.Dense(64, activation=tf.nn.relu),
layers.Dense(1)
])
optimizer = tf.train.RMSPropOptimizer(0.001)
model.compile(loss='mse',
optimizer=optimizer,
metrics=['mae', 'mse'])
return model

它使用的是均方误差损失,最后一层只是一个普通的Dense(1)值,没有激活。

如果输出是二进制分类或多标签分类预测,那么您仍然会对最终层应用激活,它会将值转换为相对分数,指示模型对每个类别的预测。

因此,例如,如果你想预测4类预测任务的标签,你的输出层应该类似于Dense(4, activation=tf.nn.softmax),其中softmax激活将这4个神经元的原始神经元值转换为相对分数。

在这种情况下,通常将得分最高的输出神经元与预测的类别标签相关联。然而,分类损失函数,如交叉熵损失,将利用所有神经元的得分相对值,根据准确预测的程度来计算损失,而不是0-1损失,这将为任何不正确的预测带来最大损失,无论它离正确有多近或多远。

-成本函数是模型预测的值与实际值之间的误差度量。例如,假设我们希望预测数据点xi的值yi。设fθ(xi)表示具有参数θ的点xi的任意模型的预测或输出。可能是众多成本函数之一

∑ni=1(yi−fθ(xi))2

这个函数被称为L2损失。训练我们上面提到的假设模型将是找到最小化该和的θ的过程。

-激活函数转换进入其中的数据的形状/表示。一个简单的例子可以是max(0,xi),如果输入xi为负,则该函数输出0;如果输入xi为正,则该功能输出xi。该功能被称为"ReLU"或"整流线性单元"激活功能。使用特定的神经结构来选择哪种函数最适合特定的问题,仍在大量讨论中。然而,这些表示对于使高维数据线性可分离至关重要,这是神经网络的众多用途之一。

我希望这能让人们对这些东西有一个清晰的认识。如果你想了解更多,我建议你在Coursera上学习吴恩达的机器学习课程。它提供了对该领域的精彩介绍。

将成本函数的实际结果与之进行比较的值(本质上)与用于获取输出的输入无关。它不会以任何方式改变。

你的期望值是[1020,3],但你在输出层使用了Softmax,RMSE损失?好吧,太糟糕了,你会一直有很高的成本(而且模型可能不会收敛)。

你只需要使用正确的成本函数作为一种合理的启发式方法来评估模型性能,并使用正确的激活来获得手头任务的合理输出。

最新更新