嗨,我现在正在玩神经网络。我做了一些本教程的重新实现:
http://www.ai-junkie.com/ann/evolved/nnt5.html,但有鱼和食物以及不同的编程语言。但重点是一样的。
我有一堆鱼(20)和一堆foos(40)。
每条鱼都有脑(神经网络(我现在将使用ANN))。目前神经网络不使用反向支持,并通过遗传算法进行训练。它工作正常。我想通过反向传播来实现学习,而不是比较这两种方法。问题只出现在反向传播中。我读了一些关于它的文章,但我还没有说明它在这个例子中实际可以使用的方式。我可能只是不理解它的意思。
我会解释这个问题:
现在我有4个输入的神经网络。 LookAt矢量lookAt(x,y),向最近食物的矢量nearestFood(x,y)=>这些向量的值是ANN的输入。 nn的输出是鱼的右脚蹼的速度=> ANN有2个输出leftFliperSpeed,rightFlipperSpeed。
所以总结一下。我喜欢这样:
输入:4(lookAt.X,lookAt.Y,nearestFood.X,nearestFood.Y)
层数:3(输入,输出,一个隐藏有6个神经元)
输出:2(leftFlipperSpeed,rightFlipperSpeed)
我这样使用它:
1.通过遗传算法,我获得了第一批鱼类(请参阅我将获得人工神经网络输入的权重)。
2.运行一定数量的迭代模拟,让鱼吃鱼找到并吃掉食物。我发现食物,她的健身功能增加,食物在其他地方重新定位。我一直有很多鱼和食物
3.在例如2000次迭代之后,我再次运行遗传算法并从实际人口中获得新的种群 - 具有更高适应性的鱼具有更高的生存机会或者是新鱼的父亲或母亲。我为Neural newtork获得了新的重量。并从第2点继续。
这里的学习过程简单明了。而且它的学习没有主管。
现在反向传播。从文章我读到反向传播是监督学习。问题在于训练集。对于遗传学alghs,我在这里并不需要它。
我该怎么做才能实现反向传播。
任何提示如何从中获取新的重量以及如何更换主管?我认为反向传播不能在没有主管的情况下完成。它可以某种方式使用我从遗传算法学习中获得的数据,但它将取决于投入的数量,与食物在哪里的鱼池的大小等等。
答案 0 :(得分:1)
反向传播只是一种计算渐变的方法,没有别的。它不是真正的监督学习技术,它只是能够有效地计算某些预定损失函数的梯度(通常,在线示例中将监督损失)。
对于所描述的问题,最合理的技术实际上是强化学习。在那里,您将能够通过您的网络进行反向支持,并以结构良好的方式学习饲喂策略(与遗传算法相反,遗传算法会因任何更复杂的问题而失败)。你可能想看一下像深度Q学习这样的对象(有效的只是一种简单的RL技术,你的策略由神经网络控制,这正是你试图实现的 - 你有一个基于神经网络的策略选择动作;虽然在你的情况下它是一个连续的输出空间,因此你可能需要为这个特定的用例离散它。)