理解人工智能的遗传算法
遗传学领域近来在AI中受到了很多关注。我们最近看到科学研究取得了突破,但大多数人甚至不知道如何开始了解这个领域。
因此,在本文中,我将向您介绍遗传算法的工作原理以及下次构建神经网络模型时应该考虑的原因。
无限猴子定理
“无限猴子定理”指出,如果一只猴子在键盘上随意敲击键盘上的键,持续时间无限长,他几乎肯定会键入给定的文本,比如威廉·莎士比亚(William Shakespeare)的全集。事实上,几乎可以肯定,猴子会无限次地输入所有可能的有限文本。然而,这一事件发生的概率是如此之小,它需要的时间比估计的宇宙年龄还要长,但发生这一事件的几率并不是零。
证明
假设打字机有50个键,要输入的单词是“ banana”。如果随机且独立地按下按键,则意味着每个按键具有相同的按下机会。那么,输入的第一个字母是'b'的几率是1/50,输入的第二个字母'a'的几率也是1/50,依此类推。因此,拼写“ banana”的前六个字母的机会是:
(1/50)×(1/50)×(1/50)×(1/50)×(1/50)×(1/50)=(1/50)6 = 1/15 625 000 000,即,不到150亿中的一个。但仍然不是零,因此结果仍然是可能的。
因此,猴子将在15,625,000,000次中输入“banana”一词。现在让我们假设猴子每秒击中一个键,在最坏的情况下发生此事件所需的时间约为495年。
现在,如果我为上述问题模拟一个计算机程序,并对“banana”这个词进行强力搜索,所涉及的计算量和时间将是巨大的。
但是,如果我想输入相同的内容,我只需要不到6秒的时间。为什么?因为我知道字母,我知道banana这个词和它的拼写。
那么,我能使用进化理论并显著改进我的程序吗?是的,这要归功于遗传算法的概念。
理解遗传算法
这是一种受达尔文自然选择理论启发的算法,用于解决优化问题。这是一个很好的解决方案,尤其是信息不完整或不完善,甚至计算能力有限。
在达尔文的自然选择理论中,进化所必需的三个主要原则是:
1)遗传 - 必须有一个孩子获得父母特征的过程
2)变异 - 群体中必须存在各种特征或引入变异的手段
3)选择 - 必须有一种机制,通过这种机制,一些群体的成员可以成为父母并传递他们的遗传信息而有些则不会(适者生存)
如何在遗传算法中实现这些原则
遗传算法有五个阶段:
- 1.创建初始种群
- 2.定义适应度函数
- 3.选择父母
- 4.做一个交叉
- 5.突变
创建初始种群
在这一步中,我们创建了一组n个元素,称为Population。种群中的每个元素都是您要解决的问题的解决方案。
在我们的例子中,种群是:
bahama
ABCDEF
ijklmn
….
所有其他6个字符的单词
mnopqr
stuvwx
cabana
定义适应度函数
适应度函数决定一个个体被选择繁殖的可能性,这是基于它的适应度得分。假设我们的适应度函数将为匹配目标单词banana的每个字符分配一个适应度得分或概率百分比。
在我们的例子中:
元素,适应度分数
banyan,5#(从字母b, a, n, a, n, a中提取的5个字符出现在这个单词中,这些是b, a, n, a, n)
abcdef,2#(同样的,这个单词里有两个字母,b,a)
ijklmn,1#(遵循上述规则,它只有一个匹配的单词 - 'a')
……, ..
所有其他6个字符的单词,..
mnopqr,1
stuvwx,0
cabana,5
等......
选择父母
这一步背后的想法是选择最适合的个体,让他们将他们的基因传递给下一代。根据他们的适应度分数选择群体的两个要素。在我们的例子中,我们选择具有较高适应度分数的个体。
在我们的例子中,我们选择了这些元素,因为这些单词具有来自给定种群的高适应度分数。
元素,适应度分数
banyan, 5
cabana,5
做一个交叉
这是遗传算法中最重要的阶段。在此步骤中,我们从所选元素中重新生成n个元素的新群。在这一步中,我们必须对从上一步中选择的两个父词获得的字符中的尽可能多的单词进行置换和组合。在我们的例子中,父母的话是' banyan '和' cabana '。
例如,我们可以从“ banyan ” 这个词中选择最后3个单词,从“ cabana ” 这个单词中选择前3个单词,然后形成一个新单词“ cabyan ”,
在应用“ banyan ”和“ cabana ” 这两个词的所有可能组合后,我们得到了一个新的种群集。
在我们的例子中,新的复制元素是:
canyan
Cbyan
cabyna
babyna
……
所有其他可能的组合来自父母的单词' banyan '和' cabana '
banana
yanbac
等......
突变
从交叉阶段开始,我们可能会得到一个不会促成新的多样化种群进化的群体,我们的算法会过早地收敛。因此,我们需要改变新创建种群中1%的单词序列,以保持这种多样性。我们可以选择任何类型的改动。
例如,假设从之前群体的1%中我们得到像' banyan '和' yanbac ' 这样的词。现在我们选择这些元素来创建一个新的群体,因为这些单词的适应度分数分别为5和4,因此很有可能成为父母。现在,如果我们从这两个单词中选出最后3个和前3个单词并将它们组合起来,我们将得到' yanyan ',这个单词不再具有足够的生产力来获得任何新的多样化元素。
但是,如果我们通过简单地翻转两个单词中的第一个和最后一个字母来改变我们之前1%的人口并改变' banyan '和' yanbac '的字母,我们就会得到' nanyab '和' canbay '。现在,如果我们运用突变元素的thelast 3个第3个字母相同的组合,我们得到“ yabcan ”,这是来自“相当多样化嫣嫣 ”。(注意,在突变中,您可以以尽可能多的方式更改元素。翻转第一个和最后一个元素只是本例中使用的一种随机方法)。
这个过程什么时候停止?
我们的种群有固定的规模。随着新元素的形成,删除了具有低适应度分数的旧元素。当群体已经收敛时,即没有再现与先前群体显着不同的新元素,那么我们可以说遗传算法已经为我们的问题提供了一组解决方案。
在我们的情况下,当我们发现所有人口的健康分数为6时,所有字母组合都来自香蕉。
Convergence
nnbaaa
aaabnn
Abnn
abaann
……
banana
baaann
我们有一个收敛集,即无论我们重复多少次以上的过程,我们只会得到这些元素的集合。在我们的最后一组中,肯定会有“banana”这个词,因此我们的模拟无限猴子程序在短时间内输入了“banana”这个词。
伪代码
START
- 创建初始群体
计算适应度
REPEAT
- 选择
- 交叉
- 突变
- 计算适应度
UNTIL 群体已收敛
STOP
为什么它应该用于人工智能?
我们可以实现遗传算法来学习神经网络的最佳超参数。为了学习超参数,我们应用遗传算法,如下面的步骤所述:
- 创建多个神经网络的群体
- 将超参数随机分配给所有神经网络
- 重复以下步骤
- 训练所有神经网络。
- 计算他们的训练成本
- 根据先前神经网络的成本,从该组超参数计算适应度分数。最好的神经网络将具有最低的成本。因此,它的反向将给出高适应值
- 根据适合度选择两个最佳神经网络
- 从这些中重现新的神经网络
- 改变孩子的基因
- 对总体中的所有神经网络执行步骤5-7。在最新一代的最后,我们拥有最佳的超参数
结论
遗传算法可用于解决各种类型的优化问题。我们看到了如何使用遗传算法在人工智能中使用超参数。