我正在使用三层反向传播网络完成 xor 示例。当输出层具有 sigmoid 激活时,输入 (1,0) 可能会给出 0.99 的期望输出 1,输入 (1,1) 可能会给出 0.01 的期望输出 0。
但是,如果希望输出是离散的(0 或 1)怎么办,我是否只需将阈值设置在 0.5 之间?这个阈值是否需要像任何其他权重一样进行训练?
我正在使用三层反向传播网络完成 xor 示例。当输出层具有 sigmoid 激活时,输入 (1,0) 可能会给出 0.99 的期望输出 1,输入 (1,1) 可能会给出 0.01 的期望输出 0。
但是,如果希望输出是离散的(0 或 1)怎么办,我是否只需将阈值设置在 0.5 之间?这个阈值是否需要像任何其他权重一样进行训练?
好吧,你当然可以在输出神经元之后设置一个阈值,使 0.5 之后的值变为 1,反之亦然,所有低于 0.5 的输出都为零。我建议不要使用离散化阈值隐藏连续输出,因为 0.4 的输出比 0.001 的值更“零”,并且这种差异可以为您提供有关数据的有用信息。
做没有门槛的训练,即。通过使用神经元网络输出的内容计算示例的错误,而不对其进行阈值处理。
另一个小细节:您使用了诸如 sigmoid 之类的传递函数?sigmoid 函数返回 [0, 1] 中的值,但 0 和 1 是渐近线,即。sigmoid 函数可以接近这些值,但永远无法达到它们。这样做的结果是你的神经网络不能准确地输出 0 或 1 !因此,使用 sigmoid 乘以略高于 1 的因子可以纠正此问题。此处讨论了反向传播的这一点和其他一些实际方面http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf