这是关于一个神经网络的性能,更高级别的问题。 我遇到的问题是,具有较大的每一层神经元的数目,网络上有完整的愚蠢的频繁轮。 他们并不一致; 看来,一般的成功VS失败的概率约为50/50层时,得到大于60元(总是3层)。
我教同样的功能与输入和从10-200尺寸的隐藏层的网络测试此。 成功率或者是0-1%或90%以上,但没有在两者之间。 为了显示此,我绘制它。 失败是5K训练迭代后的200个数据集不正确的反应的总计数。 。
我想这也是需要注意的是这些数字在该网络成功或失败的实验每次运行变化。 唯一的罪魁祸首可能是我想出来的是局部极小值(但不要让这种影响您的回答,我是新来的这一点,并初步尝试,以尽量减少局部极小的机会似乎没有任何效果)。
所以,最终的问题是,什么可能会导致这种行为? 为什么这个事情,所以疯狂地不一致?
的Python代码是上Github上并生成此图表中的代码是在该test.py方法testHugeNetwork(线172)。 如果网络算法的任何特定部分将是有益的,我很高兴发布有关片段。
我的猜测是,您的网络跨越锯齿误差表面严重振荡。 尝试更低的误码率可能会有所帮助。 但首先,有几件事情可以做,以更好地了解您的网络是这样做的:
- 绘制在训练时期输出误差。 这将显示你的时候在训练过程中出了问题。
- 有你的权重矩阵的和的输出的图形表示(的图像)。 使得它更容易发现违规行为。
基于人工神经网络训练的一个主要问题是双曲线函数的饱和度。 向两个逻辑函数和双曲正切的渐近线,该衍生物是接近于0,数值它甚至可能是零。 其结果是,网络将不仅学习非常缓慢或根本没有。 当乙状结肠输入太大,这里是你可以做什么,就会出现此问题:
- 初始化权重比例的神经元接收输入号码。 标准的文献表明,从均值= 0和标准差1 / SQRT(m),其中m为输入连接的数目的分布绘制它们。
- 扩展你的老师,让他们趴在网络学习的最; 即,这里的活化功能最陡:最大一阶导数的。 为双曲正切可以替代地缩放函数F(X)= 1.7159 *的tanh(2/3 * x)和保持教师[-1,1]。 但是,不要忘记调整衍生物到f'(X)= 2/3 * 1.7159 *(1 - 的tanh ^ 2(2/3 * x)的
让我知道如果你需要进一步澄清。