什么是过度拟合神经网络的最佳方法?

时间:2016-04-26 19:37:51

标签: javascript machine-learning neural-network deep-learning

我一直在玩这个在浏览器https://cs.stanford.edu/people/karpathy/convnetjs/demo/image_regression.html的在线演示,我一直在努力制作带有文字的图像(带有“狐狸说什么......”的标题)看起来更清晰(有可读的文字)无济于事。

该神经网络接收两个输入 - 像素的X和Y位置以及三个输出 - 所述像素的RGB通道。网络由选定的图片训练,然后尝试“绘制”它。

我想以一种方式训练这个网络,使每个像素尽可能地与原始图像匹配,即使其过度拟合。怎么能实现这一目标?应该使用哪些组合或参数?也许网络的结构需要不同(更多的层,更多层的神经元,不同类型的层等)?

我尝试使用学习速率而不改变原始结构,但即使在400k迭代后,大部分文本都难以区分:

screenshot after 400k iterations

这只是一个时间问题,也许经过几百万次迭代后,可以实现预期的结果?可以以某种方式加速(不增加处理能力和其他明显的东西)?

似乎让它每次返回相同输入的相同值应该是一项非常容易的任务 - 网络在数十万次完全相同的数据上进行训练,为什么它仍然会返回如此多的灰色像素?

我是神经网络的新手,所以也许这是一个愚蠢的问题,神经网络根本无法用于此。

1 个答案:

答案 0 :(得分:4)

过度填充这样的网络将非常困难,因为它实际上只是来自2D的回归,所以你需要模拟非常"颠簸"表面。你需要的是很多隐藏的单位 - 这是必不可少的东西,让你有能力过度装备。

  

这只是一个时间问题,也许经过几百万次迭代后,可以实现预期的结果?

不,网络实际上可能没有太小的容量来代表问题。

  

可以以某种方式加速(不增加处理能力和其他明显的东西)吗?

是的,不要使用.js(有点明显,但这应该是基于网络的例子,而不是有效的技术)。

  

似乎让它每次返回相同输入的相同值应该是一项非常容易的任务 - 网络在数十万次完全相同的数据上进行训练,为什么它仍然会返回如此多的灰色像素?

为什么这么难? Aren的NN应该容易过度装?它们容易适应高维度问题,其中您的数据点很容易使用超平面组合(神经网络的构建块)分离。在这里,您正在使用2D,非常低维度,非常密集的数据,这远离典型的NN方法。如果您想让它轻松学习图像,您应该将图像视为输入,整个图像。相反,这里的每个像素都是一个输入,这使得NN的学习过程相对较难。