假设我有一个具有这种结构的神经网络:网络( 256,100,4),其中有256个输入神经元,100个隐藏的,和4个输出。网络使用sigmoid函数作为激活函数,输出神经元在0:1范围内返回一个值。
每一个时代,我都能知道这四个输出中的一个是正确的还是错误的。例如,如果网络给我1,0,1,0,但我知道第一个输出应该是0,而我对其他三个输出一无所知。
有没有办法训练网络,使第一个输出受到影响?
我的直觉告诉我,使用目标设置为0, 0,1,0的backprop可以解决我的问题,但我也很好奇,如果0,.5,.5,.5更有意义。
发布于 2015-11-06 01:35:36
您应该做的是在反向传播阶段将未知输出的梯度设置为零。您不应该将标签本身设置为任何值,因为如果带有未知标签的样本数量很大,则网络输出将偏向该数字。例如,如果设置为0,则.5、.5、.5和未知与已知的比率可能为20:1,网络很可能只输出一个常数.5、.5、.5、.5。
发布于 2015-11-04 20:56:30
是的,您可以将训练集定义为[0, 0, 1, 0]来提供输出,但是,神经网络可以在一个看不见的集合中生成错误。反传播算法可以为您做到这一点,并且您可以使用一个验证集来生成一个验证神经网络(它提供了结果的泛化),就像我在这个职位上解释的那样,您可以最小化这个错误。
问题是(实际上这不是一个大问题,但)它不能提供您想要的确切结果,您必须解释它并定义正确的输出。让我们假设您正在等待像[0, 0, 1, 0]这样的结果,而神经网络为您提供了[0.1278, 0.1315, 0.981554, 0.2102]。如您所见,第三个输出比另一个更接近1,因此可以转换输出。
由于您规范了0和1之间的集合,并将未来的信息规范化以在神经网络上进行测试,所以您应该没有问题。您可以认为输出值低于.5作为0,大于/等于比0.5大/等于为1。在其他情况下,您可以将其视为1的值越大。
我的直觉告诉我,使用目标设置为0, 0,1,0的backprop可以解决我的问题,但我也很好奇,如果0,.5,.5,.5更有意义。
您可以使用切线双曲作为神经网络的激活函数,并对-1和1之间的数据进行规范化,这样输出值的搜索空间就可以比sigmoid更大。

如果您在[0, 0, 1, 0]附近有一个结果,您仍然会得到比这个值更近的结果,因为如果您为神经网络传递一个新的模式,模型可以更改为在这个新模式上搜索,并且它仍然有更接近的值。也许,您可以为您的神经网络模型搜索一个新的体系结构,并使用剪枝方法获得更好的结果。
https://stackoverflow.com/questions/33529310
复制相似问题