我将以较笼统的答案开始,最后以特定于您的特定实验的答案结束。
激活功能
实际上,不同的激活功能确实具有不同的属性。首先让我们考虑神经网络两层之间的激活函数。激活函数的唯一目的是充当非线性。如果您没有在两层之间放置激活函数,那么两层在一起将不会比一层更好,因为它们的效果仍然只是线性变换。长期以来,人们一直在使用S形函数和tanh,随意选择,S形函数更为流行,直到最近ReLU成为主要的非宽容性。人们之所以在各层之间使用ReLU是因为它不饱和(并且计算速度也更快)。考虑一下S形函数图。如果绝对值
x值越大,则S形函数的导数就越小,这意味着当我们向后传播误差时,误差的梯度将在我们返回图层时迅速消失。使用ReLU时,导数适用
1于所有正输入,因此,被激发的神经元的梯度不会被激活单元完全改变,也不会减慢梯度下降的速度。
对于网络的最后一层,激活单元还取决于任务。对于回归,您将需要使用S形或tanh激活,因为您希望结果在0到1之间。对于分类,您将只希望输出之一为1,其他所有零,但是没有可实现的不同方法正是这样,所以您将要使用softmax对其进行近似。
你的例子 。现在,让我们看一下您的示例。您的第一个示例尝试以
AND以下形式计算的输出:
sigmoid(W1 * x1 + W2 * x2 + B)
请注意,
W1和
W2始终会收敛到相同的值,因为(
x1,
x2)的输出应等于(
x2,
x1)的输出。因此,您适合的模型是:
sigmoid(W * (x1 + x2) + B)
x1 + x2
只能采用三个值(0、1或2)之一,而您想返回0
的情况为when,x1 + x2 < 2
而返回1的情况为when `x1 + x2
2
。由于双曲线函数是相当顺利,这将需要非常大的价值W
,并B`使输出接近期望,但因为小的学习率,他们不能去那些大的值快。在第一个示例中,提高学习速度将提高收敛速度。
您的第二个示例收敛得更好,因为该
softmax函数擅长使一个输出等于
1和所有其他输出等于
0。由于这正是您的情况,因此确实可以迅速收敛。请注意,
sigmoid这最终也将收敛为良好的值,但是将需要更多的迭代(或更高的学习率)。
使用什么 。现在到最后一个问题,如何选择要使用的激活和成本函数。这些建议适用于大多数情况:
如果进行分类,则
softmax
用于最后一层的非线性和cross entropy
成本函数。如果进行回归,则将
sigmoid
或tanh
用于最后一层的非线性,并将其squared error
用作成本函数。将ReLU用作图层之间的非线性。
使用更好的优化(
AdamOptimizer
,AdagradOptimizer
而不是)GradientDescentOptimizer
,或使用势头较快的收敛,



