使用SGD的神经网络能否仅使用backprop改变多个输出?

时间:2015-11-04 18:26:31

标签: neural-network backpropagation

让我们说我有一个具有这种结构的神经网络:网络([256,100,4]),其中有256个输入神经元,100个隐藏和4个输出。网络使用sigmoid函数作为其激活函数,输出神经元返回[0:1]范围内的值。

每个时代,我都知道四个输出中的一个是对还是错。例如,如果网络给我[1,0,1,0],但我知道第一个输出应该是0,我知道其他三个输出 nothing else。

有没有办法训练网络,只有第一个输出会受到影响?

我的直觉告诉我,使用目标设置为[0,0,1,0]的backprop将解决我的问题,但我也很好奇,如果[0,.5,.5,.5]更有意义。

2 个答案:

答案 0 :(得分:2)

您应该做的是在反向传播阶段将未知输出的梯度设置为零。您不应将标签本身设置为任何值,因为如果具有未知标签的样本数量很大,您将把网络输出偏向该数字。例如,如果设置[0,.5,.5,.5]并且未知与已知的比率可能为20:1,则网络可能只会输出常量[.5,.5,.5,.5 ]

答案 1 :(得分:0)

是的,您可以定义训练集以提供[0, 0, 1, 0]输出,但是,神经网络可以在看不见的集合中生成错误。 Backpropagation算法可以为您完成,并且您可以使用验证集来最小化此错误,以生成验证神经网络(提供结果的推广),正如我在this post上解释的那样。

问题是(实际上它不是一个大问题但是)它不会提供你想要的确切结果,你必须解释它并定义正确的输出。让我们等待[0, 0, 1, 0]之类的结果,神经网络为您提供[0.1278, 0.1315, 0.981554, 0.2102]。如您所见,第三个输出比另一个更接近1,因此您可以转换输出。

由于您将01之间的集合规范化,并将未来信息规范化以在神经网络上进行测试,因此您不应该遇到问题。您可以将.5的输出值视为0,将{/ 1}}等于0.5的{​​{1}}视为1。在其他情况下,您可以考虑将更大的值视为1

  

我的直觉告诉我使用backprop并将目标设置为   [0,0,1,0]会解决我的问题,但我也很好奇,如果[0,.5,.5,   .5]更有意义。

您可以使用切线双曲线作为神经网络的激活函数,并将-11之间的数据标准化,因此输出值的搜索空间可以比sigmoid更大。

enter image description here

如果你的结果接近[0, 0, 1, 0],你仍然会比这个值更接近,因为如果你为神经网络传递一个新的模式,模型可以改为搜索这个新模式,它仍然会有更近的价值观。也许,您可以使用prunning methods为您的神经网络模型搜索新架构并获得更好的结果。