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

2024-09-27 00:20:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难理解激活函数和代价函数的作用。让我们看一个简单的例子。假设我正在建立一个神经网络(人工神经网络)。我有5个“x”变量和一个“y”变量

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

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

问题是我们如何比较转换后的输出值(yhat),也就是说,在0和M之间,与未转换的实际值(y)(可以是任何数字,因为它不受Relu激活函数的约束)来计算成本函数?由于一个变量已暴露于转换,而另一个变量未暴露于转换,因此可能存在较大的不匹配

谢谢你的帮助


Tags: 函数数字神经网络特征例子relu人工神经网络yhat
2条回答

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

您的期望值是[10200,3],但是您在输出层上使用了Softmax和RMSE loss?好吧,太糟糕了,你会一直有一个高成本(和模型可能不会收敛)

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

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

在这种情况下,你不会在神经网络的最后一个输出层上使用激活函数,因为正如你所指出的,预测并不打算被限制在实数的任何特定激活区域。。。它可以是任意实数(模型将使用损失函数的梯度来调整网络早期各层的参数,以达到创建某些“任意数”最终输出值的精度)

例如,请参见Basic RegressionTensorFlow 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损失,因为0-1损失将为任何错误预测提供最大损失,不管离正确有多远

相关问题 更多 >

    热门问题