1

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

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

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

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

同样为了重新计算输出梯度,我使用 Leaky RELU 的导数(现在),但在这种情况下,我是否也应该使用 softmax 的/回归导数?

提前致谢。

4

1 回答 1

1

我试图用谷歌搜索两者之间的区别,但我不能完全掌握 XOR 处理器的类别。是分类问题还是回归问题?

简而言之,分类是针对离散目标的,回归是针对连续目标的。如果是浮点运算,则存在回归问题。但是这里 XOR 的结果是0or 1,所以它是一个二进制分类(Sid 已经建议)。您应该使用 softmax 层(或sigmoid 函数,它特别适用于 2 个类)。请注意,输出将是一个概率向量,即实值,用于选择离散的目标类。

同样为了重新计算输出梯度,我使用 Leaky RELU 的导数(现在),但在这种情况下,我是否也应该使用 softmax 的/回归导数?

正确的。对于输出层,您需要一个交叉熵损失函数,它对应于 softmax 层,它是反向传播的导数。如果存在仍然使用 Leaky ReLu 的隐藏层,那么对于这些​​特定层,您还需要相应地使用 Leaky ReLu 的导数。

强烈推荐这篇关于反向传播细节的帖子

于 2017-10-07T20:38:08.333 回答