多类神经网络问题

时间:2015-02-17 23:49:06

标签: java neural-network backpropagation

我一直试图实现反向传播神经网络一段时间,我一次又一次地面临问题。到目前为止的进展是我的神经网络适用于XOR,AND和OR。

下图显示我的神经网络训练超过100000次迭代的XOR,它似乎收敛良好。为此,我有2个输入神经元和一个输出神经元,隐藏层有2个神经元[虽然1已经足够] enter image description here

现在向前推进我训练相同的网络两个将XY平面中的坐标分成两个类,具有相同结构的2输入神经元和1个输出神经元和单个隐藏层与两个神经元: Dataset enter image description here

对于接下来的训练我只训练了两个班级,但是有两个输出神经元并且保持结构的其余部分相同,这次需要很长时间才能收敛但是确实如此。 enter image description here  但现在我增加到三个班级; A类将是100而B类将是010而C类将是001但现在当我训练它时它永远不会收敛并给出以下数据如下所示: enter image description here enter image description here

它似乎永远不会收敛。我已经观察到这种模式,如果我增加输出层中的神经元数量,错误率会像任何东西一样增加?我可以指引我到我错的地方吗?

1 个答案:

答案 0 :(得分:5)

如果从二进制分类转移到多类分类,则必须推广反向传播算法以正确处理两个以上的类。

二进制分类的主要区别在于更新更改为:

update

使用:

y

是新分数,其中选择参数y(输出),其产生特征的最高分数乘以权重向量w。此策略称为one-vs.-rest。写为伪代码(from here):

pseudocode

请注意,根据您自己的特定代码,您可能需要执行其他更改(例如,将实际值输出映射到每个输出单元的二进制输出)到当前代码。

如果您有多个independent属性可用于分类,那么每个类具有1个二进制输出节点的体系结构是完全正确的。否则,您应该考虑使用softmax输出层(有关实现示例,请参阅here)。在输出层中使用softmax激活会将原始值转换为后验概率(而不是每个类的二进制输出)。由于这可以为您提供一定的确定性,因此它也可以为您提供更多见解。