我很难理解激活函数和成本函数的作用。让我们看一个简单的例子。可以说我正在建立一个神经网络(人工神经网络)。我有5个“ x”变量和一个“ y”变量。
如果我进行常规的特征缩放,然后在隐藏层中应用Relu激活函数,则此激活函数进行转换,结果我们得到的预测输出值(y hat)在0和M之间然后,下一步是计算成本函数。
但是,在计算成本函数时,我们需要将输出值(y hat)与实际值(y)进行比较。
问题是我们如何比较转换后的输出值(y hat)(可以说是0到M)与未转换的实际值(y)(可以是任意数字,因为它没有经过Relu激活功能)计算成本函数?可能存在很大的不匹配,因为一个变量已经进行了转换,而另一个没有进行过。
感谢您的帮助。
答案 0 :(得分:0)
听起来好像您正在执行回归任务,因为您将最终输出描述为“未转换的实际值(y)(可以是任何数字,因为它没有经过Relu激活功能)。” >
在这种情况下,您将不会在神经网络的最终输出层上使用激活函数,因为正如您所指出的那样,预测并不打算局限于实数的任何特定激活区域。 ..允许为任何实数(该模型将使用损失函数的梯度来调整网络早期层中的参数,从而在创建某些“任意数目”的最终输出值时获得准确性)。>
有关示例,请参见Basic Regression TensorFlow 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损失,后者会给出最大的对于任何不正确的预测都会造成损失,无论它离正确有多远。
答案 1 :(得分:0)
-成本函数是模型预测的值与实际值之间的误差的度量。例如,假设我们希望预测数据点xi的值yi。令fθ(xi)表示参数θ对点xi的任意模型的预测或输出。许多成本函数之一可能是
∑ni = 1(yi-fθ(xi))2
此功能称为L2损失。训练我们上面假设的假设模型将是找到一个使该和最小的θ的过程。
-激活功能可转换进入其中的数据的形状/表示形式。一个简单的示例可以是max(0,xi),如果输入xi为负,则输出0;如果输入xi为正,则输出xi。该功能称为“ ReLU”或“ Rectified Linear Unit”激活功能。使用特定的神经体系结构选择最适合特定问题的函数仍在讨论中。但是,这些表示对于使高维数据线性可分离是必不可少的,这是神经网络的众多用途之一。
我希望这对这些东西给出了一个体面的想法。如果您想了解更多信息,建议您在Coursera上学习Andrew Ng的机器学习课程。它提供了对该领域的精彩介绍。
答案 2 :(得分:-1)
将实际结果与成本函数进行比较的值(本质上)与用于获取输出的输入没有任何关系。它不会以任何方式转化。
您的期望值为[10,200,3],但是您在输出层使用了Softmax和RMSE损失?好吧,太糟糕了,您将一直花费高昂的成本(而且该模型可能无法收敛)。
使用正确的成本函数充当评估模型性能和正确激活方法的理智启发法,只是能够为手头的任务获得合理的输出,就在您身上。