在深圳的研发部培训中,我们组给定一个有趣的课题便是:马里奥游戏的智能通关,本文就神经网络和增强学习两个点进行整理,并将我们最后用的NEAT算法以及扩展找到的DRL算法进行了简单梳理。如果能够在游戏自动化测试、智能AI中应用这些有趣的算法,想想还是有点小激动哒 ^v^
儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典的马里奥形象出现。平时我们都是人来玩马里奥游戏,能否可以让马里奥智能的自己闯关个呢?OK,利用人工智能的相关算法来进行自动化通关一直是一个热门的话题,最近最火的相关东东就是传说中的alphaGo啦。而在游戏的自动化测试当中,这种算法也是非常实用的,可以大量的减少测试人力成本。 首先,对于实现马里奥AI当中涉及到的神经网络和增强学习的相关概念进行整理,之后对智能通关的两种方式进行阐述。(本人才疏学浅,在神经网络和增强学习方面基本门外汉,如有任何纰漏,还请大神指出,我会第一时间改正。)
像飞机的灵感来源于鸟类,雷达的灵感来源于蝙蝠,红外线的灵感来源于蛇,而本文要讨论的神经网络灵感来源于我们自己,人类大脑的神经元结构。从神经元结构被提出,到时下火热的无以复加的深度神经网络,发展过程也可为一波三折。我们按照时间的顺序,对一些经典的神经网络模型进行整理:
40年代初心理学家 W.W.Mcculloch 和梳理逻辑家 W.Pitts 提出 M-P 模型(为啥叫M-P模型,看看这两位大牛的名字,也不考虑下我们非英语系国家人民的感受。。。),神经网络被引入到计算机领域当中,其最初起源的灵感就是人类大脑中的神经元,如下图:
生物学上具体的专业术语我们这里不展开描述,我们总结一下神经元结构的特点:
由此两位大牛提出了神经网络的早期M-P模型,如下图:
该模型的基本思想很简单,就是仿照神经元接受多个输入信号,由于突触的性质和突触强度不同,所以对神经元的影响程度不同,我们加上了权重的概念,其正负模拟了神经元中的兴奋和抑制作用,最后所有信号累加整合,其值为:
输入信号有了,神经元是否被激活,要看输入信号是否超过了某一阈值电位,如果被激活神经元输出脉冲,否则神经元不会输出信号,其过程如下函数:
当然这里我们也可以写成矩阵的形式
类似神经元结构的特点,经典的M-P模型的特点可以总结如下:
结合两个公式来看这几个特点:对于特点1,我们的公式有多个x输入信号,但我们的输出信号只有一个o;权重的正负体现了特点2中输入分兴奋和抑制;对于第3个特点,我们第2个公式中只有当输入信号的累加和超出电位阈值才会有输出;另外我们的公式只考虑了所有输入信号的整合,并没有去考虑时间整合(就是不管你信号早到晚到,只要到了都是好信号),体现了特性4和5。
随着M-P模型的提出,神经网络的研究有三次兴起,最近的一次就是随着卷积神经网络提出的深度学习的火热。
M-P模型很简单,仅仅是一种单个神经元上的建模,并没有形成网络,没法去完成一些特定的任务。由此人们提出了神经网络的概念,而早期的研究,由于当时硬件水平和计算条件的限制,神经网络结构一般比较简单。
由此1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字“感知器”(Perceptron) 其结构如下图:
这种简单的单层神经网络有点类似于逻辑回归,通过简单的权重训练,能够处理简单的线性分类问题,类似下图:
而对于非线性的分类问题(如经典的异或问题)却无能为力,后来研究人员也发现了这一点,神经网络研究遍进入了低谷期(好伤心TT)
问题总是用来解决的嘛,既然两层神经网络hold不住非线性分类问题,那么我们就加一层,称为隐含层,由此而来的三层神经网络如下图:
这种三层神经网络具有非常好的非线性分类效果,其计算公式如下:
当然啦,就像我们平时的逻辑回归模型一样,bias在模型中是必不可少的,所以我们在原有结构上加入偏置节点,结构图如下:
神经网络中偏置节点是默认存在的,而且它非常特殊,就是没有输入,并且会输出的后一层的所有节点。加入偏置节点后计算公式如下:(一般情况下,偏置节点不会被画出来)
与两层神经网络不同,理论证明三层神经网络能够无限逼近任意连续函数。这里我们不禁会有疑问,我们知道两层神经网络是线性分类问题,那么两个线性问题拼在一起为什么就可以解决非线性分类问题了呢?
上图很好的解释了我们的疑问。首先上图左侧部分可以看出,三层神经网络的决策分界非常平滑,而且分类的很好。而上图右侧部分展示了该图经过空间变换后的结果,我们可以看到输出层的决策分界仍然是直线,关键是,从输入层到隐含层时,发生了空间变换。 也就是说三层神经网络可以做非线性分类的关键便是隐含层的加入,通过矩阵和向量相乘,本质做了一次线性变换,使得原先线性不可分的问题变得线性可分。所以多层神经网络本质就是复杂函数的拟合。 现在三层神经网络结构定了,如何来进行网络的训练,这就需要用到反向传播算法(本质就是梯度下降,还说的这儿玄乎<-T->)
上面我们提到两层神经网络,其中隐层的权值是需要我们学习的,而这个权值我们不能直接获取,所以我们利用输出层得到输出结果和期望输出的误差来间接调整隐层的权值。BP算法的学习过程由信号的正向传播和误差的反向传播两个过程组成。
下图展示了整个BP算法的信号流程图:
BP网络有三个要素:
网络拓扑结构便是我们之前总结的两层神经网络结构,我们主要从传递函数和学习算法进行整理阐述下。
首先什么是传递函数呢?请看下图:
图中是最基本的单个神经元的模型,针对于多个输入,我们会进行整合并利用一个非线性函数进行输出,函数的要求必须是可微单调递增函数,通常采用非线性变换函数———sigmoid函数也称S函数(形状),有单极性S型函数和双极性S型函数两种(高中数学里的东东)。
函数曲线图如下(似乎不够S。。)
双极性S型函数定义如下:
函数曲线图如下:
可以看出根据上面的S函数,我们会整合所有输入,输出一个新的值,从之前生物学的原理来看也就是说神经元是否被激活。
学习算法是BP神经网络结构的核心,也是两层神经网络有一次兴起的重要原因,因为人们找到了如何去训练一个神经网络来达到我们预期的分类效果(拟合不同的非线性连续函数)。而BP算法(反向传播算法)的本质其实就是一种逐层梯度下降。
我们以三层感知器为例,当网络输出与期望输出不一致时,存在误差E,定义如下:
将以上误差反向逐层展开(体现了反向传播算法中的反向含义)
最终我们展开到输入层如下:
根据上式我们发现误差E是的函数,我们发现调整权值可以改变误差E的大小,而调整权值的原则是使得误差不断减小。因此我们应该使得权值与误差的梯度下降成正比,如下:
其中值得注意的是表示学习效率,即权重调整的幅度。 我们可以看出对于权重的调整是从输出层逐层反传过来的,而且我们也发现我们在梯度下降的过程中需要求导,这也就是我们在最初要求传递函数可微的原因
有三层神经网络,我们自然而然就会想到将神经网络加入更多层,扩展到深度神经网络,但是一个非常显著的问题就是参数的个数,比如之前我们的三层神经网络每层有1000个节点,那么我们需要调整的权值参数就达到了10^9量级,这问题限制了很大程度上限制了深度神经网络的发展。这就要把大哥叫出来帮忙了,就是近期一直火热的deep learning,由于本人在这方面也是门外汉,只从经典的卷积神经网络(CNN)进行一些归纳整理。
根据网上的资料总结,CNN的核心点有三个:
从图中我们可以看出,对于一张1000×1000像素的图片,假设神经网络中的隐节点有1M个。对于传统的深度神经网络,所有的隐节点会连接到图像中的每个像素点,那么我们需要训练的权重参数就达到了匪夷所思的10^12量级。而CNN提出局部感知,即图中右侧展示的,每个神经元只与10×10个像素值相连,那么我们的权重参数就下降到10^8,参数数量为原来的万分之一(虽然还是很多TT)
权值共享基于的原理或者说假设是图像中局部的统计特征与其他部分是一样的,也就意味着假设我们在图像的局部学习到了一组特征,那么我们可以直接将这组特征应用到图像的其它部分。就拿上面的例子来看,我们假设在第一个神经元中学习到了局部10×10像素点的特征,那么我们完全可以将这个特征应用在图像的其他位置上,那么我们另外的1M-1的神经元权重参数就不需要训练了,所以我们只需要训练第一个神经元的权重参数即可,而这第一个神经元得到的局部特征称为卷积核。当然啦,我们不会这么变态的只用一个卷积核,这样对于图像特征的提取也是不充分的,所以往往CNN中都会有多个卷积核来进行卷积操作,每个卷积核会提取出图像某一方面的特征。如下图展示了卷积操作的基本原理:
图中展示了一个3×3的卷积核在5×5的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。
上面我们从CNN的三个核心点出发,阐述了CNN的基本原理,下图我们列出了CNN的整体结构:
图中从左至右描述了CNN神经网络的几个不同层
~长出一口气~,从最一开始单个神经元模型的提出,到两层和三层的简单神经网络,再到时下火热的深度学习,我们可以用下图从时间上进行一个大致的梳理:
我们可以看到,神经网络的发展经历了三次跌宕起伏:
而对于每次神经网络可解决的问题,我们可以用下图来阐述:
上图中我们可以看出,随着神经网络的发展,我们在解决最基本的分类问题时的效果越来越好,这也是神经网络的魅力所在啦^v^。当然在神经网络发展的过程当中,计算机硬件水平的发展也是不容忽视的,随着计算能力和性能的提高,原来不可能实现的想法、算法都能付诸实践进行试验。
机器学习领域,我们都知道两位大哥就是监督学习和非监督学习,我们有样本X和标记或者未标记的Y,我们通过训练可以做一些分类或者聚类的任务。但是,对于一些序列决策或者控制问题,是很难得到上面那样的规则样本的,比如机器人的控制问题,决策机器人下一步该怎么走,那么这时我们就需要清楚另外一位大哥——增强学习,虽然他似乎曝光度并不是很高,那么何谓增强学习呢?
增强学习(Reinforcement Learning, RL),其英文定义如下:
Reinforcement learning is learning what to do ——how to map situations to actions —— so as to maximize a numerical reward signal.[6]
也就是说增强学习关注的是智能体如何在环境中采取一系列行为,从而获得最大的累积回报。
通过增强学习,一个智能体(agent)应该知道在什么状态下应该采取什么行为。RL是从环境状态到动作的映射的学习,我们把这个映射称为策略。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。