<p>如果我没弄错的话,这只是模型验证的一个方面,你必须一直这样做。网络通常会根据所有的训练数据尽量减少误差,但它不会精确地得到每一个结果。你也许可以通过运行更多的隐藏神经元来提高预测的准确性。然而,这样做最终会通过过度的柔韧性导致过度贴合。这有点平衡。在</p>
<p>作为一个类比,以回归为例。在下面的线性情况下,模型不匹配任何训练(蓝色)数据,但通常捕获蓝色和红色(外部测试)数据的趋势。对于所有的数据,使用线性方程总是给我一个错误的答案,但它是一个不错的近似器。然后假设我用多项式趋势线拟合数据。现在它有了更大的灵活性,可以命中所有的蓝点,但是测试数据的误差已经增加了。在</p>
<p><img src="https://s11.postimg.org/bxunnxff7/regression.png" alt="regression"/></p>
<p>一旦你建立了你的网络,你需要通过它重新运行你的所有数据。然后您可以在<a href="https://en.wikipedia.org/wiki/Average_absolute_deviation" rel="nofollow noreferrer">absolute average deviation</a>、<a href="https://en.wikipedia.org/wiki/Mean_squared_error" rel="nofollow noreferrer">MSE</a>、<a href="https://en.wikipedia.org/wiki/Mean_absolute_scaled_error" rel="nofollow noreferrer">MASE</a>等上进行验证,此外还可以进行k折交叉验证。你对错误的容忍度取决于你的应用程序:在工程中,我可能总是需要在5%的误差范围内,任何超过这个阈值(在第二张图中会出现的情况)都可能造成致命的后果。在语言处理中,我可能能忍受一两个真正的混乱,如果大多数预测非常接近,我可能会用另一种方法捕捉它们,所以我可能会选择第二张图。在</p>
<p>发挥你的学习速度和动力可能有助于找到更好的解决方案。在</p>
<p>编辑:基于注释</p>
<p>“应该能够识别它”的评论对我来说意味着与神经网络基础不同的东西。在网络中甚至没有一个模糊的记忆概念,它只是利用训练数据来开发一套复杂的规则,以尽量减少针对所有数据点的误差。一旦网络被训练,它就不记得任何训练数据了,它只剩下一个意大利面条式的乘法步骤,它将在输入数据上执行。因此,无论你的人际网络有多好,你永远无法将你的训练输入反向映射到正确的答案。在</p>
<p>“融合”的概念不能被认为是你有一个良好的人际网络。网络可能只是发现一个<a href="http://mnemstudio.org/ai/nn/images/minima1.gif" rel="nofollow noreferrer">local minima</a>出错而放弃学习。这就是为什么<strong>必须</strong>始终验证您的模型。如果您对验证结果不满意,可以尝试通过以下方式改进模型:<br/>
-只需重新运行它。网络的随机初始化现在可以避免局部最小值<br/>
-改变神经元的数量。这会放松或收紧模型的灵活性<br/>
-改变学习速度和动力<br/>
-改变学习规则,例如从Levenberg Marquardt交换到Bayesian正则化</p>