0

在 java 中编写了一个简单的反向传播+前馈神经网络类之后,我尝试使用 shadow-caster NN 来检查四边形(或三角形)是否在顶点上投射阴影。

输入(归一化,总共 8+2*targetNumber):

  • 点光源坐标 xL 和 yL
  • 三角形或四边形对象 xt1,xt2,xt3 , yt1,yt2,yt3 的坐标
  • 目标顶点坐标 xT(i), yT(i)

输出(标准化,targetNumber 总数):

  • (点 i):有阴影(1.0f)或无阴影(0.0f)

问题:它需要思考多少个神经元?我是否必须尝试所有隐藏层神经元数、隐藏层数、最小训练迭代次数的组合......?有没有办法预见到这一点?

问题:这种方法的性能与用于数百万个顶点的通常光线追踪器相比如何(NN 似乎比光线追踪器更尴尬地并行)?

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

4

1 回答 1

3

问题:这种方法的性能与用于数百万个顶点的通常光线追踪器相比如何(NN 似乎比光线追踪器更尴尬地并行)?

您尝试解决的问题似乎不是机器学习模型的问题。这种方法应该适用于复杂的统计数据问题,对于人类来说,找到好的算法解决方案太难了。这些简单的问题(从某种意义上说,你可以找到高效的算法),你可以深入分析(因为它只是 2/3 维数据)应该使用经典方法来解决,而不是神经网络(也不是任何其他机器学习模型) )。

即使您尝试这样做,您对问题的表示也准备不足,网络不会通过向其展示此类数据来学习“阴影的概念”,有两个可以用与您的数据一致的神经网络表示的模型. 即使是经过训练的网络的效率似乎也无法与“算法”替代方案相提并论。

总结一下——没有理由使用这样的方法,事实上,使用它们:

  • 不能很好地工作,因为问题的表现不好(而且我“从头顶”看不到一个好的表现)
  • 即使它会起作用,它也不会有效

问题:它需要思考多少个神经元?我是否必须尝试所有隐藏层神经元数、隐藏层数、最小训练迭代次数的组合......?有没有办法预见到这一点?

正如我之前所说,无论您使用什么参数,它都不会很好地学习这种数据。但是对于“未来参考”——对于“简单”的神经网络,实际上你总是需要一个隐藏层。在大多数情况下,更多的隐藏层实际上并没有帮助,因为梯度消失现象(对此,深度学习是一个成功的解决方案)。隐藏层大小有一些经验法则,但没有真正的数学答案。一个好的选择是使用大量隐藏单元并添加强正则化,这将防止网络过度拟合,这可能是隐藏层太大的结果。考虑迭代次数 - 你永远不应该将其用作参数。只要网络不符合一些明确定义的停止标准,就应该对网络进行训练——迭代次数不是其中之一。最经典且运行良好的方法是测量泛化误差(独立验证集的误差),当它开始上升时 - 停止学习过程。

于 2013-08-31T17:22:57.993 回答