进化是一代人基因的变化。有不同的方法。当代最优秀的人与所有其他人杂交。自然界中行之有效的东西(公牛和牛群)往往会导致计算机科学抽象世界中的技术克隆,这对繁殖产生巨大的负面影响。
在孤雌生殖中,个体在没有结构略有改变的伴侣的情况下进行繁殖。这也常常导致技术克隆。
当前一代中最好的种群根据加权随机原则相互杂交,直到下一代的种群再次完整,也称为交叉。杂交时,两对父母的基因使用数学方法混合,导致新个体的遗传发生改变。以这种方式创建的每个新个体都有很小的几率发生突变。个体基因的改变很小。这可能会给一些突变体带来更好的结果。带领。
神经网络的遗传训练
神经网络的遗传训练是什么意思?神经网络的权重称为基因。每层神经元的个体权重像一条长DNA链一样串在一起。每个人都有自己的神经网络和自己的 DNA 链。对于 500 人的群体来说,这是 500 个神经网络。该 DNA 链称为遗传物质,并使用上述过程进行改进。如果还有其他重要的特征应该在进化中使用,这些特征也与遗传学有关。这意味着在每一代之后,两个父母的 DNA 链都会从神经网络中读取,交叉形成后继者的新 DNA 链,然后加载回神经网络中。所有这一切的发生都是偶然的。系统没有给出任何具体指令或动作。也没有预先确定的规则。随着时间的推移,只有基因的不断变化才会导致神经网络比其前身更好地找到自己的路。
可以作为我们描述的方法的示例。该网络不是预先记录数千场比 美国家具制造商电子邮件列表 赛并用它们来训练经典的神经网络,而是在比赛时不断地输入数据,并且可以通过遗传学慢慢改进。
GenetikSnake 基于简单的贪吃蛇游戏。世界由正方形网格组成。一条蛇生活在这个网格中并且不断地移动。她只能朝四个基本方向移动。渐渐地,苹果出现在世界上。如果蛇吃掉其中一个苹果,它就会获得一点和新的生命能量。与此同时,她的身体也增长了一个单位,变得更长。如果蛇碰到边缘,它就会死。如果她吃了自己,她就会死。
现在的目标是让蛇尽可能长时间地移动而不死。理论上,当蛇长到占据整个比赛场地时,游戏就获胜了。
游戏玩家现在可以用键盘控制蛇,例如确定方向并收集分数。
我们应用程序的目标是创建一个能够独立玩游戏且不受人类影响的人工智能。为此,我们对神经网络进行了建模,该网络接收蛇的可见周围环境、边缘、苹果和它自己的身体作为输入。结果,网络告诉我们蛇应该朝哪个方向移动。
目前状况
现在市场上有许多框架和库,它们已经积累了多年的实践经验,并且在运行时进行了极其优化。尤其是Python编程语言,有Keras/Tensorflow(Google)和PyTorch(Facebook)两个系统,用户可以利用它们快速取得成功。然而,GeneticSnake 并未提供此帮助以提供对所使用算法的基本了解。为该应用开发了一个单独的神经网络,它为预测提供前馈部分。遗传算法也是手写的,因此可以测试对代码的任何更改。
神经网络的代码可在GitHub上找到。
为了保持应用程序清晰易懂,该应用程序被开发为具有简单 Swing 界面(胖客户端)的本机 Java 应用程序。出于性能原因,仅显示前 20 个字段,其余字段在后台计算。
GeneticSnake 的代码可在GitHub上获取。
一旦创建了应用程序并定义了算法,我们是否可以坐下来放松地看着一切发生?不幸的是事情没那么简单。如果你不准确定义什么是优秀的一代,你就不太可能看到任何改进。例如,仅计算步数时,不停地绕圈跑的蛇是最好的。蛇只接收它们所看到和知道的输入。这些是到边缘、到苹果和到你自己的身体的距离,它们来自的方向和它们的生命能量。你没有得到任何游戏规则,也没有任何关于什么是明智行动的提示。这一切都必须你自己学习,直到神经网络能够有意义地决定去哪里。随着进化和世代的进步,网络越来越适应游戏并概括它们的行为。这意味着训练有素的网络也可以在不同的环境中工作。例如,最好的蛇可以在 50x500 网格中生存,即使它只接受过 10x10 网格的训练。
在许多人工智能项目中,后模型阶段是最长的阶段之一。在这里调整超参数并不断改进细节。然后一次又一次地测试模拟。经过多次尝试和挫折,为GeneticSnake找到了适合遗传算法的网络架构,从而改进变得可见。几分钟后,大约3000代,每代100条蛇,一口气吃掉了60个或更多的苹果!