![](/img/trans.png)
[英]Keras – Artificial Neural Networks - Error when using a custom activation function
[英]Role of activation function in calculating the cost function for artificial neural networks
我在理解激活函数和成本函数的作用方面有一些困难。 让我们看一个简单的例子。 假设我正在构建一个神经网络(人工神经网络)。 我有 5 个“x”变量和一个“y”变量。
如果我做通常的特征缩放然后应用,例如,隐藏层中的 Relu 激活函数,那么这个激活函数会进行转换,结果我们得到我们的预测输出值(y hat)在 0 之间,假设为 M。那么下一步是计算成本函数。
然而,在计算成本函数时,我们需要将输出值(y hat)与实际值(y)进行比较。
问题是我们如何将转换后的输出值(y hat)(可以说在 0 和 M 之间)与未转换的实际值(y)(可以是任何数字,因为它没有受到 Relu 激活函数的影响)来计算成本函数? 由于一个变量已暴露于转换而另一个未暴露,因此可能存在较大的不匹配。
感谢您的任何帮助。
听起来您正在执行回归任务,因为您将最终输出描述为“未转换的实际值 (y)(它可以是任何数字,因为它不受 Relu 激活函数的影响)。”
在这种情况下,您将不会在神经网络的最终输出层上使用激活函数,因为正如您指出的那样,预测并不旨在限制于实数的任何特定激活区域......它允许是任何实数(并且模型将使用损失函数的梯度来调整网络早期层中的参数,以在创建某些“任意数字”最终输出值时实现准确性)。
有关示例,请参阅基本回归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 损失,这将给出最大任何不正确预测的损失,无论它离正确有多近或多远。
- 成本函数是对模型预测值与实际值之间误差的度量。 例如,假设我们希望预测数据点 xi 的值 yi 。 令 fθ(xi) 表示对参数为 θ 的点 xi 的某个任意模型的预测或输出。 许多成本函数之一可以是
∑ni=1(yi−fθ(xi))2
这个函数被称为 L2 损失。 训练我们上面提到的假设模型将是找到最小化这个总和的 θ 的过程。
- 激活函数转换进入其中的数据的形状/表示。 一个简单的例子可能是 max(0,xi) ,如果输入 xi 为负则输出 0 或如果输入 xi 为正则输出 xi 的函数。 此函数称为“ReLU”或“整流线性单元”激活函数。 对于使用特定神经架构的特定问题,选择哪个函数是最佳的仍在讨论中。 然而,这些表示对于使高维数据线性可分至关重要,这是神经网络的众多用途之一。
我希望这能让你对这些东西有一个很好的了解。 如果你想了解更多,我建议你在 Coursera 上学习 Andrew Ng 的机器学习课程。 它提供了对该领域的精彩介绍。
您将实际结果与成本函数进行比较的值(本质上)与用于获取输出的输入没有任何关系。 它不会以任何方式转变。
你的期望值是 [10,200,3] 但你在输出层和 RMSE 损失上使用了 Softmax? 好吧,太糟糕了,你会一直有很高的成本(而且模型可能不会收敛)。
您只需使用正确的成本函数作为评估模型性能和正确激活的合理启发式方法,以便能够为手头的任务获得合理的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.