减少输出神经元的数量

时间:2014-09-14 04:16:40

标签: machine-learning artificial-intelligence neural-network encog

我正在尝试训练神经网络来控制2维角色的速度。 x和y介于-1和1米/秒之间。目前我将范围分成0.1米/秒的间隔,所以我最终得到400个输出神经元(20 x值* 20 y值),如果我将精度提高到0.01,最终得到40k输出神经元。有没有办法减少输出神经元的数量?

1 个答案:

答案 0 :(得分:3)

我假设您将此问题视为分类问题。在培训时间内,您输入了X和输出Y。由于您正在训练神经网络进行分类,因此您的预期输出总是如下:

    -1  -0.9 ...  0.3  0.4  0.5 ... 1.0 m/s
Y1 = [0,  0,  ..., 1,   0,   0,  ..., 0]  // speed x component
Y2 = [0,  0,  ..., 0,   0,   1,  ..., 0]  // speed y component
Y  = [Y1, Y2]

即:对于x和y方向的每个速度分量,只有一个神经元输出1;所有其他神经元输出0(在上面的例子中,对于该训练实例,预期输出在x方向上为0.3m / s,在y方向上为0.5m / s)。实际上这可能更容易学习并且具有更好的预测性能。但正如你所指出的那样,它不会扩展。

我认为您也可以将问题视为回归问题。在您的网络中,每个速度组件都有一个神经元。您的预期输出只是:

Y = [0.3, 0.5]  // for the same training instance you have. 

要获得-1到1的输出范围,您可以在输出图层中使用不同的激活功能选项。例如,您可以使用

f(x) = 2 * (Sigmoid(x) - 0.5)
Sigmoid(x) = 1 / (1 + exp(-x))

由于sigmoid(x)在(0,1)中,2 *(sigmoid(x) - 0.5)在(-1,1)中。这种变化(用两个神经元替换输出层中的多个神经元)大大降低了模型的复杂性,因此您可能希望在中间层添加更多神经元以避免不合适。