激活函数在计算人工神经网络成本函数中的作用
Role of activation function in calculating the cost function for artificial neural networks
我在理解激活函数和成本函数的作用时遇到了一些困难。让我们看一个简单的例子。可以说我正在构建一个神经网络(人工神经网络)。我有 5 个“x”变量和一个“y”变量。
如果我进行通常的特征缩放,然后在隐藏层应用例如 Relu 激活函数,那么这个激活函数会进行转换,结果我们得到介于 0 和 let 之间的预测输出值 (y hat)说M。然后下一步是计算成本函数。
然而,在计算成本函数时,我们需要将输出值 (y hat) 与实际值 (y) 进行比较。
问题是我们如何比较转换后的输出值(y hat),假设在 0 和 M 之间与未转换的实际值(y)(可以是任何数字,因为它没有经过 Relu激活函数)来计算成本函数?可能存在很大的不匹配,因为一个变量已进行转换而另一个尚未进行转换。
感谢您的帮助。
听起来您正在执行回归任务,因为您将最终输出描述为 "the untransformed actual value (y) (which can be any number as it is not been subjected to the Relu activation function)."
在那种情况下,您将不会在神经网络的最终输出层上使用激活函数,因为正如您所指出的,预测并不打算被限制在真实网络的任何特定激活区域数字...它可以是任何实数(并且模型将使用损失函数的梯度来调整网络早期层中的参数,以在创建某些 "any number" 最终输出值时实现准确性) .
有关示例,请参阅 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 损失,这将给出最大任何错误预测的损失,无论它离正确有多近或多远。
您将实际结果与成本函数进行比较的值(本质上)与您用于获取输出的输入没有任何关系。它不会以任何方式进行转换。
你的期望值是 [10,200,3] 但你在输出层使用了 Softmax 和 RMSE 损失?好吧,太糟糕了,你会一直付出高昂的代价(而且模型可能不会收敛)。
您可以使用正确的成本函数作为评估模型性能的合理启发式方法,并使用正确的激活来为手头的任务获得合理的输出。
-成本函数是模型预测值与实际值之间误差的度量。例如,假设我们希望预测数据点 xi 的值 yi 。令 fθ(xi) 表示具有参数 θ 的点 xi 的某个任意模型的预测或输出。许多成本函数之一可能是
∑ni=1(yi−fθ(xi))2
这个函数被称为 L2 损失。训练我们上面所说的假设模型就是找到最小化这个总和的θ的过程。
- 激活函数转换进入其中的数据的 shape/representation。一个简单的例子可以是 max(0,xi) ,如果输入 xi 为负则输出 0 或如果输入 xi 为正则输出 xi 。这个函数被称为“ReLU”或“Rectified Linear Unit”激活函数。使用特定神经架构选择哪些函数最适合特定问题仍在进行大量讨论。然而,这些表示对于使高维数据线性可分是必不可少的,这是神经网络的众多用途之一。
我希望这能让您对这些东西有一个正确的认识。如果你想了解更多,我建议你在 Coursera 上学习 Andrew Ng 的机器学习课程。它提供了对该领域的精彩介绍。
我在理解激活函数和成本函数的作用时遇到了一些困难。让我们看一个简单的例子。可以说我正在构建一个神经网络(人工神经网络)。我有 5 个“x”变量和一个“y”变量。
如果我进行通常的特征缩放,然后在隐藏层应用例如 Relu 激活函数,那么这个激活函数会进行转换,结果我们得到介于 0 和 let 之间的预测输出值 (y hat)说M。然后下一步是计算成本函数。
然而,在计算成本函数时,我们需要将输出值 (y hat) 与实际值 (y) 进行比较。
问题是我们如何比较转换后的输出值(y hat),假设在 0 和 M 之间与未转换的实际值(y)(可以是任何数字,因为它没有经过 Relu激活函数)来计算成本函数?可能存在很大的不匹配,因为一个变量已进行转换而另一个尚未进行转换。
感谢您的帮助。
听起来您正在执行回归任务,因为您将最终输出描述为 "the untransformed actual value (y) (which can be any number as it is not been subjected to the Relu activation function)."
在那种情况下,您将不会在神经网络的最终输出层上使用激活函数,因为正如您所指出的,预测并不打算被限制在真实网络的任何特定激活区域数字...它可以是任何实数(并且模型将使用损失函数的梯度来调整网络早期层中的参数,以在创建某些 "any number" 最终输出值时实现准确性) .
有关示例,请参阅 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 损失,这将给出最大任何错误预测的损失,无论它离正确有多近或多远。
您将实际结果与成本函数进行比较的值(本质上)与您用于获取输出的输入没有任何关系。它不会以任何方式进行转换。
你的期望值是 [10,200,3] 但你在输出层使用了 Softmax 和 RMSE 损失?好吧,太糟糕了,你会一直付出高昂的代价(而且模型可能不会收敛)。
您可以使用正确的成本函数作为评估模型性能的合理启发式方法,并使用正确的激活来为手头的任务获得合理的输出。
-成本函数是模型预测值与实际值之间误差的度量。例如,假设我们希望预测数据点 xi 的值 yi 。令 fθ(xi) 表示具有参数 θ 的点 xi 的某个任意模型的预测或输出。许多成本函数之一可能是
∑ni=1(yi−fθ(xi))2
这个函数被称为 L2 损失。训练我们上面所说的假设模型就是找到最小化这个总和的θ的过程。
- 激活函数转换进入其中的数据的 shape/representation。一个简单的例子可以是 max(0,xi) ,如果输入 xi 为负则输出 0 或如果输入 xi 为正则输出 xi 。这个函数被称为“ReLU”或“Rectified Linear Unit”激活函数。使用特定神经架构选择哪些函数最适合特定问题仍在进行大量讨论。然而,这些表示对于使高维数据线性可分是必不可少的,这是神经网络的众多用途之一。
我希望这能让您对这些东西有一个正确的认识。如果你想了解更多,我建议你在 Coursera 上学习 Andrew Ng 的机器学习课程。它提供了对该领域的精彩介绍。