我一直试图实现反向传播神经网络一段时间,我一次又一次地面临问题 . 到目前为止的进展是我的神经网络适用于XOR,AND和OR .
下图显示我的神经网络训练超过100000次迭代的XOR,它似乎收敛良好 . 为此,我有2个输入神经元和一个输出神经元,隐藏层有2个神经元[虽然1已经足够]
现在我正在前进,我训练了同一个网络,将XY平面中的坐标分成两个类,具有相同结构的2输入神经元和1个输出神经元,以及具有两个神经元的单个隐藏层:
对于接下来的训练我只训练了两个 class ,但是有2个输出神经元,并保持结构的其余部分相同,这段时间需要很长时间才能收敛,但确实如此 .
但现在我增加到三个 class ; A类将是100而B类将是010而C类将是001但是现在当我训练它时它永远不会收敛并且给出了以下数据的以下结果:
它似乎永远不会收敛 . 我已经观察到这种模式,如果我增加输出层中的神经元数量,错误率会像任何东西一样增加?我可以指引我到哪里出错吗?
1 回答
如果从二进制分类转移到多类分类,则必须推广反向传播算法以正确处理两个以上的类 .
与二进制分类的主要区别在于更新更改为:
有:
作为新分数,其中选择参数y(输出),其产生特征的最高分数乘以权重向量w . 此策略称为one-vs.-rest . 写为伪代码(from here):
请记住,根据您自己的特定代码,您可能必须执行其他更改(例如,将实际值输出映射到每个输出单元的二进制输出)到当前代码 .
如果您有多个independent属性,则每个类具有1个二进制输出节点的体系结构完全正常 . 否则,您应该考虑使用softmax输出层(有关实现示例,请参阅here) . 在输出层中使用softmax激活会将原始值转换为后验概率(而不是每个类的二进制输出) . 由于这可以为您提供一定的确定性,因此它也可以为您提供更多洞察力 .