大家好
欢迎回来
我们这一节来继续
基于仿生算法的人工智能系统
我们在介绍基因遗传算法的最后一部分
我们拼图游戏的最后一部分就是
自然选择
那么达尔我们都知道
达尔文提出来关于生物进化的机理当中
一个最核心的部分就是自然选择
那么他就说在不断的变化的这种
自然的生存环境下
具有有利变异的个体
它就能够生存下来
更容易生存下来并且繁殖后代
那么如果是有一些不利变异的个体
它就会逐渐在漫长的复制
繁殖的过程当中逐渐的就会被淘汰
因为它不适应环境
它就不容易存活
也不容易有后代
所以它会逐渐的被淘汰
这是自然选择
那么大自然它依靠什么样来选择
最终能够更加适应生存环境的优良物种
那么这有几个例子
比如说像长颈鹿
那么它的选择的参数可能就是
脖子的长度
这样脖子越长
它就越能在食物不足的情况下
能够吃到高处的叶子
更容易存活下来
那么像猎豹这样的
它就有是自然选择
就靠他的奔跑的速度
奔跑的速度越快
那么它就越容易能够捕捉到它的猎物
那么他也就越容易生存和存活下来
并且繁殖下一代
所以脖子的长度和奔跑的速度都是一个参数
那么这些呢都是自然界来选择
不同的物种它的这种参数
所以我们可以利用适应度函数来
表示这个参数值的大小
来判断在各种群进化的过程当中
哪些个体应该被淘汰掉
不会被保留到下一代
产生新的子代
那么我们在我们的拼图游戏当中
当然我们有已经有了有128个
三角形这样的一个基因所构成的一个个体
那么最终我们要去如何选择这个适应度函数
来朝向我们最终的目标
也就是火狐图标来进发
进行进化最终能够达到进化的终点
那么这是进化的过程
他逐渐的越来越接近最后的终点
那么这就有一个适应度的问题
显然最开始的时候适应度是最低的
那么越往后适应度会越来越高
那么我们来看看这些若干个
三角形所拼成的图像
它本身具有哪些属性
我们看到一个图片
我们放大它的局部
它其实是由一系列的像素点来构成的
每个像素点都有红绿蓝三种颜色的一个组合
是吧
那么这就构成了它不同色彩
那么每个像素点都有不同的RGB值来表示这个自己的颜色
所以我们来去计算适应度的话
那么我们就对于每一个像素点
他的三个颜色的分量
红绿蓝三个颜色的分量
计算我们当前的图像A和我们
最终的目标的图像B目标图像
就是最终精确的火狐的图标
火狐图标它也是按照逐个像素
它有不同的颜色值
计算它们的差值
逐个像素
每个像素当中的A当中的红减去B当中的红
逐个像素一一对应的像素
有个差值
然后绿也有个差值蓝有个差值
然后把每一个像素的差值
因为差值有正有负
为了防止红绿蓝三种颜色之间
相差值相互抵消
我们就把这个差值做一个平方
那么它永远是正的
所以可以把这三个参数加起来
那么对于这里头可能会有几万个
甚至可能几十万个像素
他们的所有的一一对应的差值
全部累加在一起
作为适应度函数
那么从这样的我们就可见
如果说是两个图像完全一模一样的话
完全一样
那么这些差值都应该等于0
对不对
那么所以所有的颜色完全一样的
两幅图像
那么适应度函数它的函数值应该
等于多少
它应该等于0
所以如果适应度函数它的值越大
那就说明这两个图像的差异就越大
这个值越小
那么差异就越小
所以我们说如果说两个图像
它计算出来以后适应度函数值越低
这就说明他的适应就越适应
适应度越高
那么如果这个差值函数值越大
那就说明适应度越低
所以按照这样的适应度函数
我们就可以来基因遗传算法选择的过程
就可以像大自然选择物种一样去
决定这一代当中的哪一代的哪个体保留下来
哪些个体会被淘汰
那么如果说子代的适应度高于父代的适应度的话
那么就用子代来去取代父代
反之子代他就应该被淘汰
但在产生下一代的过程当中
这些适应度低的个体就不再出现了
所以我们在最后这一代一代的
这么进行选择
当然这个选择的基础是有遗传变异
然后才有适应度的选择
那么选择这一代一代的进行进化的时候
我们最终需要有一个终止的条件
那么终止的条件
当然如果说最理想最优的部分
就是让适应度的函数
函数值最终等于0
当然这个你要让等于0的话
可能需要付出的计算代价可能会特别的高
也许在某些情况下你可能永远都不会得到0
因为变异毕竟是随机的
所以我们确定一个终止条件
确定一个我们觉得可以接受的最优的方案就行了
不一定达到完整的一个像素都不差那种程度
所以我们的终止条件就是当适应
度函数计算出来
我这个子代离我们最终的目标
如果这个函数值小于一定的阈值
我们能接受
我们看起来特别像的时候
我们就可以停止进化
我们就得到了就把子代的128个三角形
它的形状
它的位置
它的颜色
它的透明度
记录下来就得到了我们最终的解
或者我们设定一个循环迭代的次数
我们说经历了
比如说3万代之后就停下来
不管它的适应度计算如何
因为我们计算的可能拥有的计算资源可能是一定的
我这个机器只能够用一段时间
那么好我们就设定一个循环迭代的次数
一旦超过一定的限制我们就停下来
然后再看着我们产生的子代当中
哪些会最为接近我们的最终的目标
就可以选择它了
那么在遗传算法最后
因为这两个条件其中之一终止了以后
我们在这一系列的后代当中可以
找到一个最优的
那就是我们的最优解
比如说我们再一次的运行当中
我们得到了这么一个最优解
这是经过29900代之后进化
之后得到了解
我们可以看到这个已经非常像火狐图标了
甚至连背后地球的高光部分都有所表现
所以这个一个已经是一个相当好的结果
但是不要忘了
它只是由128个形状各异颜色各异
透明值各异三角形组成的这么一个图像
好
我们最后把算法游戏总结一下
首先我们把当前的图片和目标的
图片的差异量进行量化
转化为一个适应度的函数
通过逐个像素点的比较得到了
一个适应度函数的函数值
那么这个值如果越低的话
就说明这个适应度越高
它就越适应
我们最终的目标是让适应度函数值趋向于零
那么在这个模拟自然选择的过程当中
就依照适应度的高低来决定某一代的结果的淘汰
还是继续存活下去
那么这样通过一代一代的迭代和进化
最终我们就能够得到我们火狐图标
目标的图案
当然同样的算法
它可以不仅用于逼近火狐的图标
你可以逼近任何的图片
而且算法的它的起始的条件和他
算法的整个的参数的过程很可能
还可以是完全一样的
那么从看来基因遗传算法它具有
相当好的适应性
它可以用一个算法一套参数
甚至可以做完全不同的这些事情
那么这个就是我们在仿生算法的人工智能系统当中
通过基因遗传
通过模仿大自然能够得到的一个
比较好的一个算法的过程