最新文章
泰课在线 | 微信拼团成功后如何获取课程?
08-09 17:57
Unity教程 | 使用ARKit为iOS开发AR应用
07-31 17:23
Unity Pro专业版7折订阅四选一工具包之VR开发与艺术设计
07-28 11:47
网友使用虚幻UE4实现CAVE 多通道立体渲染的沉浸式环境
07-27 11:57
VR晕动症调查:未来5年内大部分VR晕动症将得到解决
07-27 11:26
AMD CEO:未来3-5年最重要 希望5年达1亿VR用户
07-27 10:44
马里奥AI实现方式探索 神经网络+增强学习
儿时,我们都有过玩经典游戏马里奥的体验。在2016年里约奥运会闭幕式上,作为2020年东京奥运会东道主的日本,时任首相安倍晋三以经典的马里奥形象亮相。通常,马里奥游戏由人类玩家操控,那么能否让马里奥智能地自动闯关呢?利用人工智能相关算法实现游戏自动化通关一直是热门话题,近期备受瞩目的AlphaGo便是相关领域的代表。此外,在游戏自动化测试中,这类算法也十分实用,能大幅降低测试人力成本。
本文将首先梳理实现马里奥AI所涉及的神经网络和增强学习的相关概念,随后阐述智能通关的两种方式。(笔者在神经网络和增强学习方面知识有限,若有纰漏,还请大神指正,我会及时改正。)
神经网络
许多发明都源于对自然界生物的模仿,如飞机的灵感来自鸟类,雷达的灵感来自蝙蝠,红外线的灵感来自蛇。本文要探讨的神经网络,其灵感则源自人类大脑的神经元结构。从神经元结构的提出,到如今火热的深度神经网络,其发展历程可谓一波三折。下面按照时间顺序,对一些经典的神经网络模型进行梳理。
M - P模型
20世纪40年代初,心理学家W. W. McCulloch和数理逻辑家W. Pitts提出了M - P模型。该模型将神经网络引入计算机领域,其灵感最初源于人类大脑中的神经元。
生物学上的神经元结构特点总结如下:
- 每个神经元都是一个多输入单输出的信息处理单元;
- 神经元输入分为兴奋性输入和抑制性输入两种类型;
- 神经元具有空间整合特性和阈值特性;
- 神经元输入与输出间有固定的时滞,主要取决于突触延搁。
基于这些特点,两位学者提出了神经网络的早期M - P模型。该模型的基本思想是仿照神经元接受多个输入信号,由于突触的性质和突触强度不同,对神经元的影响程度也不同,因此引入了权重的概念,其正负模拟了神经元中的兴奋和抑制作用,最后将所有信号累加整合。输入信号有了之后,神经元是否被激活取决于输入信号是否超过某一阈值电位,若被激活则输出脉冲,否则不输出信号,该过程可用函数表示,也可写成矩阵形式。
经典的M - P模型特点总结如下:
- 每个神经元都是一个多输入单输出的信息处理单元;
- 神经元输入分兴奋性输入和抑制性输入两种类型;
- 神经元具有空间整合特性和阈值特性;
- 神经元输入与输出间有固定的时滞,主要取决于突触延搁;
- 忽略时间整合作用和不应期;
- 神经元本身是非时变的,即其突触时延和突触强度均为常数(神经网络中权重在训练结束后是固定的)。
结合相关公式来看,公式中有多个输入信号但只有一个输出信号,体现了多输入单输出的特点;权重的正负体现了输入的兴奋和抑制类型;只有当输入信号累加和超出电位阈值才会有输出,体现了空间整合和阈值特性;公式只考虑输入信号的整合,未考虑时间整合,体现了忽略时间整合作用和不应期的特点。随着M - P模型的提出,神经网络的研究经历了三次兴起,最近一次是随着卷积神经网络提出的深度学习热潮。
早期神经网络
M - P模型仅对单个神经元进行建模,未形成网络,无法完成特定任务。因此,人们提出了神经网络的概念。早期受硬件水平和计算条件限制,神经网络结构较为简单。
两层神经网络
1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络,即“感知器”(Perceptron)。这种简单的单层神经网络类似于逻辑回归,通过简单的权重训练,能够处理简单的线性分类问题,但对于非线性分类问题(如经典的异或问题)则无能为力。此后,神经网络研究进入低谷期。
三层神经网络(带有隐层)
为解决两层神经网络无法处理非线性分类问题,人们增加了一层隐含层,形成了三层神经网络。这种三层神经网络具有良好的非线性分类效果,其计算公式在考虑偏置节点后会有所不同。偏置节点在神经网络中默认存在,它没有输入,但会输出到后一层的所有节点。
理论证明,三层神经网络能够无限逼近任意连续函数。这是因为隐含层的加入,通过矩阵和向量相乘进行了一次线性变换,使得原先线性不可分的问题变得线性可分,本质上是对复杂函数的拟合。
要训练三层神经网络,需要使用反向传播算法(BP算法),其本质是梯度下降。
BP算法
在两层神经网络中,隐层的权值需要学习,但不能直接获取,因此利用输出层的输出结果和期望输出的误差来间接调整隐层的权值。BP算法的学习过程由信号的正向传播和误差的反向传播两个过程组成:
- 正向传播时,输入样本从输入层传入,经各隐层逐层处理后传向输出层。若输出层的实际输出与期望输出不符,则转入误差的反向传播阶段。
- 反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号作为修正各单元权值的依据。
BP网络有三个要素:网络拓扑结构、传递函数和学习算法。网络拓扑结构即前面总结的两层神经网络结构,下面主要对传递函数和学习算法进行阐述。
传递函数
传递函数是针对多个输入进行整合,并利用一个非线性函数进行输出的函数,要求是可微单调递增函数,通常采用非线性变换函数——sigmoid函数(S函数),有单极性S型函数和双极性S型函数两种。根据S函数,会整合所有输入,输出一个新的值,从生物学原理来看,即判断神经元是否被激活。
学习算法
学习算法是BP神经网络结构的核心,也是两层神经网络再次兴起的重要原因。BP算法(反向传播算法)的本质是逐层梯度下降。以三层感知器为例,当网络输出与期望输出不一致时,存在误差E,通过将误差反向逐层展开,可发现误差E是权值的函数,调整权值可改变误差E的大小,调整原则是使误差不断减小,因此权值与误差的梯度下降成正比,其中学习效率表示权重调整的幅度。
深度神经网络
从三层神经网络自然会联想到增加网络层数,扩展到深度神经网络,但参数个数过多的问题限制了其发展。例如,三层神经网络每层有1000个节点时,需要调整的权值参数可达$10^9$量级。近期火热的深度学习为解决这一问题提供了思路,下面以经典的卷积神经网络(CNN)为例进行归纳整理。
CNN的解决之道
CNN的核心点有三个:
- 局部感知:普通多层神经网络的隐层节点会全连接到图像的每个像素点,而CNN中每个隐层节点只连接到图像某个足够小局部的像素点,大大减少了需要训练的权值参数。例如,对于一张$1000×1000$像素的图片,传统深度神经网络需要训练的权重参数可达$10^{12}$量级,而CNN采用局部感知,每个神经元只与$10×10$个像素值相连,参数数量可下降到$10^8$。
- 权值共享:基于图像中局部的统计特征与其他部分相同的假设,假设在图像局部学习到一组特征,可将其应用到图像的其他部分。通过卷积操作实现权值共享,每个卷积核会提取图像某一方面的特征。例如,假设在第一个神经元中学习到局部$10×10$像素点的特征,可将其应用到图像的其他位置,只需训练第一个神经元的权重参数,该局部特征称为卷积核。CNN中通常会有多个卷积核进行卷积操作。
- 池化:在卷积神经网络中,通过卷积获得特征后,为减少计算量,在进行分类之前,利用人类判别图片记录关键特征的原理,对卷积层输出的特征进行“压缩”或提取处理,这种方法称为池化。以最大池化为例,$1000×1000$的图像经过$10×10$的卷积核卷积后,得到$991×991$的特征图,使用$2×2$的池化规模,最终得到$496×496$大小的特征图。
CNN整体结构
CNN的整体结构从左至右包括以下几个不同层:
- 输入层(图像):一般采用灰度化后的图像作为输入以减少复杂度,若使用RGB彩色图像,则输入分为RGB三个分量图像。输入图像通常需要归一化,可使用sigmoid函数归一化到$[0,1]$,若使用tanh激活函数,则归一化到$[-1, 1]$。
- 多个卷积(C) - 下采样(S)层:将上一层的输出与本层权重W做卷积得到各个C层,然后下采样得到各个S层,这些层的输出称为Feature Map。
- 光栅化(X):为与传统的多层感知器全连接,将上一层的所有Feature Map的每个像素依次展开,排成一列。
- 传统的多层感知器(N&O):最后的分类器一般使用Softmax,若为二分类,也可使用逻辑回归LR。
关于CNN的参数训练等内容可参考Deep learning:五十一(CNN的反向求导及练习)。
神经网络发展总结
从单个神经元模型的提出,到两层和三层的简单神经网络,再到如今火热的深度学习,神经网络的发展经历了三次跌宕起伏:
- 感知器:第一次兴起是科研人员利用两层神经网络(感知器)进行简单分类问题,当时人们认为找到了人工智能的奥秘,但后来发现两层感知器只能完成简单的线性分类问题,无法解决经典的异或分类问题,神经网络陷入低谷。
- BP算法:第二次兴起的关键是BP算法的提出。当人们发现两层神经网络无法胜任非线性分类问题时,考虑增加网络层数,但权重参数的训练问题无法解决,直到BP反向传播算法的提出,解决了这一问题,神经网络再次兴起。然而,随着其他算法(如SVM)的提出,人们发现这些算法的通用性和可计算性优于神经网络,神经网络进入第二次低谷。
- 深度学习:第三次兴起的关键是当下火热的深度学习,其标志之一是CNN卷积神经网络的提出,并应用于图像分类问题(这也得益于硬件水平的提高,如高并行的GPU的诞生)。
随着神经网络的发展,在解决基本分类问题上的效果越来越好,同时计算机硬件水平的发展也为神经网络的实践提供了支持。
增强学习
在机器学习领域,监督学习和非监督学习是两大主流。但对于一些序列决策或控制问题,如机器人控制问题,很难获得规则样本,这时就需要增强学习。
增强学习的定义
增强学习(Reinforcement Learning, RL)关注智能体如何在环境中采取一系列行为,以获得最大的累积回报。智能体需要知道在什么状态下采取什么行为,从环境状态到动作的映射学习称为策略。
马尔可夫决策过程(MDP)
马尔可夫链和隐式马尔可夫模型都具有马尔可夫性,即随机过程在给定现在状态及所有过去状态的情况下,其未来状态的条件概率分布仅依赖于当前状态。马尔可夫决策过程(MDP)也具有马尔可夫性,但它考虑了动作,系统的下个状态不仅与当前状态有关,还与当前采取的动作有关。
基本定义
一个马尔可夫决策过程由五元组组成:
- $S$:表示状态集(states)
- $A$:表示一系列动作(actions)
- $P$:表示状态转移概率,$P(s'|s,a)$表示在当前状态$s \in S$下,执行动作$a \in A$后,转移到其他状态$s'$的概率分布情况。
- $\gamma$(discount factor):表示阻尼系数,取值范围为$[0,1)$
- $R$:表示回报函数(reward function)
MDP的动态过程如下:智能体的初始状态为$s_0$,从$A$中挑选一个动作$a_0$执行,按概率随机转移到下一个状态$s_1$,然后再执行动作$a_1$转移到$s_2$,以此类推。
值函数
在MDP中,智能体决定下一步行动时,仅看一次Reward函数的值是不够的,因此引出了值函数(Value Function),也叫折算累积回报(discounted cumulative reward)。
状态值函数(state value function)
当遵循某个策略$\pi$时,值函数可定义为递推形式。利用Bellman等式,可得到在状态$s$时,根据策略$\pi$确定动作$a$后,进入不同状态的相关公式。求$V$的目的是找到当前状态$s$下的最优行动策略$\pi^*$。
动作值函数(action value function)
若值函数与状态$s$和动作$a$都有关,则称为动作值函数,即Q函数。MDP的最优策略可根据状态值函数和动作值函数来定义。
MDP的求解主要分为值迭代和策略迭代,下面简单阐述动作值函数的值迭代求解方式——Q - learning。
Q学习
Q学习的基本迭代公式是一种值迭代方式,每次更新的是Q函数的值,而非策略。通过一个房间机器人训练的例子可以说明,通过迭代最终得到Q矩阵,机器人可利用Q矩阵从任意房间走到屋外。
马里奥AI的实现方式
基于NEAT算法的马里奥AI实现
NEAT算法即通过增强拓扑的进化神经网络(Evolving Neural Networks through Augmenting Topologies),与传统神经网络不同,它不仅训练和修改网络的权值,还会修改网络的拓扑结构,包括新增节点和删除节点等操作。
NEAT算法的核心概念包括:
- 基因:网络中的连接
- 基因组:基因的集合
- 物种:一批具有相似性基因组的集合
- Fitness:类似于增强学习中的reward函数
- generation:进行一组训练的基因组集合,每一代训练结束后,会根据fitness淘汰基因组,并通过无性繁殖和有性繁殖新增新的基因组
- 基因变异:发生在新生成基因组的过程中,可能改变网络的权重,增加突出连接或神经元,也可能禁用突触或启用突触
利用NEAT算法实现马里奥智能通关的基本思想是,从游戏内存中获取实时游戏数据,判断马里奥是否死亡、计算Fitness值、判断是否通关等,将这些作为神经网络的输入,最后输出对马里奥的操作(上下左右跳跃等)。大多数该算法实现马里奥智能通关依赖于模拟器,运用lua语言编写相应脚本,获取游戏数据并操作马里奥,可参考NeuroEvolution with MarI/O。
基于Deep Reinforcement Learning的马里奥AI实现
2013年,DeepMind提出了一种深度增强学习算法,结合了CNN和Q - Learning两种算法,并应用于Atari游戏机中的多种小游戏进行AI通关。
其基本流程是利用CNN识别游戏中马里奥的状态,利用增强学习算法做出动作选择,根据新的返回状态和历史状态计算reward函数,反馈给Q函数进行迭代,不断训练直到游戏通关。研究表明该算法具有一定的普遍性。在github上有一个开源的实现方式:aleju/mario - ai,在CNN识别过程中,每4帧图像进行一次CNN识别,图中曲线反映了直接回报函数和间接回报函数。
总结
本文从神经网络和增强学习的基本概念出发,介绍了相关经典模型和算法,最后阐述了两种实现马里奥AI的方式。神经网络的发展历经波折,但随着技术的进步和算法的不断创新,其应用前景越来越广阔。在智能AI领域,除了理论知识,还可应用于游戏测试、游戏平衡性调整以及机器人控制等多个方面。若本文存在纰漏,欢迎指正,我会尽快修改。