人工神经网络RELU激活函数和梯度

Artificial Neural Network RELU Activation Function and Gradients

我有一个问题。我看了一个关于用 C++ 实现人工神经网络的非常详细的教程。现在我对神经网络的工作原理以及如何实际编程和训练神经网络有了更多的基本了解。

所以在本教程中,双曲正切用于计算输出,显然它的导数用于计算梯度。但是我想继续执行其他功能。特别是 Leaky RELU(避免神经元死亡)。

我的问题是,它指定这个激活函数应该只用于隐藏层。对于输出层,应该使用不同的函数(softmax 或线性回归函数)。在教程中,那个人教神经网络成为异或处理器。那么这是分类问题还是回归问题?

我试图 google 两者之间的区别,但我不能完全掌握 XOR 处理器的类别。是分类问题还是回归问题? 所以我实现了 Leaky RELU 函数及其导数,但我不知道我应该为输出层使用 softmax 还是回归函数。

另外,为了重新计算输出梯度,我使用了 Leaky RELU 的导数(目前),但在这种情况下,我是否也应该使用 softmax's/regression 导数?

提前致谢。

I tried to google the difference between the two, but I can't quite grasp the category for the XOR processor. Is it a classification or a regression problem?

简而言之,class化是针对离散目标,回归是针对连续目标。如果它是一个浮点运算,你就会遇到回归问题。但是这里异或的结果是0或者1,所以是二进制class化(Sid已经建议了)。您应该使用 softmax 层(或 sigmoid function,它特别适用于 2 classes)。请注意,输出将是概率的向量,即实值,用于选择离散目标class。

Also for recalculating the output gradients I use the Leaky RELU's derivative(for now) but in this case should I use the softmax's/regression derivative as well?

正确。对于输出层,您需要一个 cross-entropy loss 函数,它对应于 softmax 层,并且它是反向传递的导数。 如果存在仍然使用 Leaky ReLu 的隐藏层,则对于这些特定层,您还需要相应地使用 Leaky ReLu 的导数。

强烈推荐this post on backpropagation details