机器学习应用——强化学习&课程总结 实例 “自主学习Flappy Bird游戏”(MDP&蒙特卡洛强化学习&Q-learning&DRL&DQN)

前言

本篇将简要介绍强化学习的“自主学习Flappy Bird”实例
读完本篇,你将了解:

一、强化学习
1.相关概念
2.马尔可夫决策过程(MDP)(model base 模型)
3.蒙特卡洛强化学习
4.Q-learning算法
5.深度强化学习(DRL)
6.Deep Q Network(DQN)

二、自主学习Flappy Bird
1.程序基本框架(观察期、探索期、训练期)
2.动作选择模块
3.卷积神经网络-CNN
4.Tensorflow&openCV库

三、关于机器学习专栏的一点总结
1.无监督学习
2.监督学习
3.强化学习。

一、强化学习(增强学习)

1.定义

(1)程序或智能体(agent)通过与环境不断地进行交互学习一个从环境到动作的映射,学习的目标是使累计回报最大化

(2)是一种试错学习,因其在各种状态(环境)下需尽量尝试所有可以选择的动作,通过环境给出的反馈(奖励)来判断动作的优劣,最终获得环境和最优动作的映射关系(策略)

2.举例:吃豆游戏

(1)基本组件
①agent: 大嘴小怪物
②环境:整个迷宫中的所有信息
③奖励:agent每走一步,需要扣除1分,吃掉小球得10分,吃掉敌人得200分,被吃掉游戏结束。
④动作:在每种状态下,agent能够采用的动作,比如上下左右移动。
⑤策略:在每种状态下,采取最优的动作。
⑥学习目标:获得最优的策略,以使累计奖励最大(即Score )。

(2)图示
在这里插入图片描述

3.马尔可夫决策过程(MDP)(model base 模型)

在这里插入图片描述

(1)马尔可夫决策过程(MarkovDecision Process)通常用来描述一个强化学习问题。
(2)智能体agent根据当前对环境的观察采取动作获得环境的反馈,并使环境发生改变的循环过程。

(3)基本元素
①s∈S:有限状态state集合,s表示某个特定状态
②a∈A:有限动作action集合,a表示某个特定动作
③T(S,a,S’)~Pr(s’|s,a):状态转移模型,根据当前状态s和动作a预测下一个状态s,Pr表示从s采取行动a转移到s‘的概率
④R(s,a):表示agent采取某个动作后的即时奖励,其他表现形式:R(s,a,s’),R(s)
⑤Policy π(s)->a:根据当前state来产生action,可表现为a=π(s)或π(a|s)=P(a|s),后者表示某种状态下执行某个动作的概率

(4)值函数
①状态值函数v表示执行策略π能得到的累计折扣奖励
在这里插入图片描述

整理后得
在这里插入图片描述

②状态动作值函数Q(s,a)表示在状态s下执行动作a能得到的累计折扣奖励
在这里插入图片描述

整理后得

在这里插入图片描述

③最优值函数
在这里插入图片描述

(5)最优控制
在得到最优值函数之后,可以通过值函数的值得到状态s时应该采取的动作a
在这里插入图片描述

4.蒙特卡洛强化学习

(1)免模型学习
①在现实的强化学习任务中,环境的转移概率、奖励函数往往很难得知,甚至很难得知环境中有多少状态。
②若学习算法不再依赖于环境建模,则称为免模型学习,蒙特卡洛强化学习就是其中的一种。

(2)蒙特卡洛强化学习使用多次采样,然后求取平均累计奖赏作为期望累计奖赏的近似。
<s0,a0,s1,a1,r2,…,S(T-1),a(T-1),rT,ST>

(3)直接对状态动作值函数Q(s,a)进行估计,每采样一条轨迹,就根据轨迹中的所有“状态-动作”利用下面的公式对来对值函数进行更新。
在这里插入图片描述

(4)贪心策略
①每次采样更新完所有的“状态-动作”对所对应的Q(s,a),就需要更新采样策略n。但由于策略可能是确定性的,即一个状态对应一个动作,多次采样可能获得相同的采样轨迹,因此需要借助ε贪心策略
②如图
在这里插入图片描述

5.Q-learning算法

(1)蒙特卡洛强化学习算法需要采样一个完整的轨迹来更新值函数,效率较低,此外该算法没有充分利用强化学习任务的序贯决策结构。

(2)Q-learning算法结合了动态规划与蒙特卡洛方法的思想,使得学习更加高效。

(3)过程
①假设对于状态动作对(s,a)基于t次采样估算出其值函数为∶
在这里插入图片描述

②在进行t+1次采样后,依据增量更新得到:
在这里插入图片描述

③然后,将,替换成系数α(步长),得到:
在这里插入图片描述

④以γ折扣累计奖赏为例∶
在这里插入图片描述

⑤则值函数的更新方式如下:
在这里插入图片描述

(4)流程

在这里插入图片描述
注:请参考周志华老师《机器学习》一书

6.深度强化学习(DRL)

(1)传统强化学习:真实环境中的状态数目过多,求解困难。

(2)深度强化学习:将深度学习和强化学习结合在一起,通过深度神经网络直接学习环境(或观察)与状态动作值函数Q(s,a)之间的映射关系,简化问题的求解。

7.Deep Q Network(DQN)

(1)介绍
①是将神经网络(neural network)和Q-learning结合,利用神经网络近似模拟函数Q(s,a)
②输入是问题的状态(e.g.,图形),输出是每个动作a对应的Q值
③然后依据Q值大小选择对应状态执行的动作,以完成控制。

(2)神经网络的参数︰应用监督学习完成

(3)DQN学习过程
①状态s输入,获得所有动作对应的Q值Q(s,a)
②选择对应Q值最大的动作a’并执行
③执行后环境发生改变,并能够获得环境的奖励r
④利用奖励r更新Q(s,a’)——强化学习
⑤利用新的Q(s,a’)更新网络参数—监督学习
在这里插入图片描述

(4)讲解
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

二、自主学习Flappy Bird游戏项目分析

1.“自主学习Flappy Bird游戏”实例介绍

(1)深度强化学习
①2013年,Deep Mind团队在NIPS上发表《PlayingAtari with Deep Reinforcement Learning》一文,在该文中首次提出Deep Reinforcement Learning—词
②并且提出DQN(DeepQ-Network)算法,实现了从纯图像输入完全通过学习来玩Atari游戏。
在这里插入图片描述
在这里插入图片描述

(2)Atari游戏
①接下来的学习中,我们将通过python实现的一个开源的自主学习flappy bird游戏的小项目,更细致的讲解有关深度强化学习的实例应用。
②Flappy Bird游戏:由来自越南的独立游戏开发者开发的一款游戏。在游戏中,玩家需要点击屏幕控制小鸟跳跃,跨越由各种不同长度水管组成的障碍。
在这里插入图片描述

③Flappy Bird游戏和Atari游戏的操作方法很相似,同样可以使用DQN进行学习。

(3)自主学习Flappy Bird游戏
①目标:使用深度强化学习方法自主学习Flappy Bird游戏策略,达到甚至超过人类玩家的水平。
②技术路线:Deep Q-Network
③使用工具:tensorflow + pygame + cv2

2.Flappy Bird自主学习程序基本框架

(1)程序与模拟器交互
①训练过程也就是神经网络(agent)不断与游戏模拟器(Environment)进行交互
②通过模拟器获得状态,给出动作,改变模拟器中的状态,获得反馈,依据反馈更新策略的过程
在这里插入图片描述

(2)训练过程
①观察期(OBSERVE):程序与模拟器进行交互,随机给出动作,获取模拟器中的状态,将状态转移过程存放在D(Replay Memory)中
②探索期(EXPLORE):程序与模拟器交互的过程中,依据Replay Memory中存储的历史信息更新网络参数,并随训练过程降低随机探索率ε
③训练期(TRAIN):ε已经很小,不再发生改变,网络参数随着训练过程不断趋于稳定。

(3)整体框架——观察期
在这里插入图片描述

①打开游戏模拟器,不执行跳跃动作,获取游戏的初始状态
②根据ε贪心策略获得一个动作(由于神经网络参数也是随机初始化的,在本阶段参数也不会进行更新,所以统称为随机动作),并根据迭代次数减小ε的大小

③由模拟器执行选择的动作,能够返回新的状态和反馈奖励
④将上一状态s ,动作a,新状态s ‘,反馈r组装成( s , a , s’ ,r)放进Replay Memory中用作以后的参数更新
⑤根据新的状态s ',根据ε贪心策略选择下一步执行的动作,周而复始,直至迭代次数到达探索期

(4)整体框架——探索期
在这里插入图片描述

探索期与观察期的唯一区别在于会根据抽样对网络参数进行更新。

①迭代次数达到一定数目,进入探索期,根据当前状态s,使用ε贪心策略选择一个动作(可以是随机动作或者由神经网络选择动作),并根据迭代次数减小ε的值
②由模拟器执行选择的动作,能够返回新的状态和反馈奖励
③将上一状态s ,动作a,新状态s’,反馈r组装成( s , a , s’ ,r)放进Replay Memory中用作参数更新
④从Replay Memory中抽取一定量的样本,对神经网络的参数进行更新
⑤根据新的状态s ',根据s贪心策略选择下一步执行的动作,周而复始,直至迭代次数到达训练期

(5)整体框架——训练期
在这里插入图片描述

迭代次数达到一定数目,进入训练期,本阶段跟探索期的过程相同,只是在迭代过程中不再修改ε的值

(6)模拟器

①游戏模拟器
1)使用Python的Pygame模块完成的FlappyBird游戏程序
2)为了配合训练过程,在原有的游戏程序基础上进行了修改。
3)参考以下网址查看游戏源码:https://github.com/sourabhv/FlapPyBird

②图示通过模拟器获取游戏的画面。
③训练过程中使用连续4帧图像作为一个状态s ,用于神经网络的输入。
在这里插入图片描述

(7)动作选择模块
①动作选择模块︰为s贪心策略的简单应用,以概率ε随机从动作空间A中选择动作,以1-ε概率依靠神经网络的输出选择动作:
②如图
在这里插入图片描述


③DQN∶用卷积神经网络对游戏画面进行特征提取,这个步骤可以理解为对状态的提取。

(8)卷积神经网络-CNN
在这里插入图片描述

展示卷积操作
①卷积核∶这里的卷积核指的就是移动中3*3大小的矩阵。
②卷积操作∶使用卷积核与数据进行对应位置的乘积并加和,不断移动卷积核生成卷积后的特征。

③池化操作∶对卷积的结果进行操作。最常用的是最大池化操作,即从卷积结果中挑出最大值,如选择一个2*2大小的池化窗口(操作如图示):
在这里插入图片描述

④卷积神经网络:把Image矩阵中的每个元素当做一个神经元,那么卷积核就相当于输入神经元和输出神经元之间的链接权重,由此构建而成的网络被称作卷积神经网络。

⑤Flappy Bird-深度神经网络

本实验中使用的深度神经网络结构就是多个卷积操作和池化操作的累加。
在这里插入图片描述

1)对采集的4张原始图像进行预处理,得到80804大小的矩阵;

2)使用32个884大小步长4的卷积核对以上矩阵进行卷积,得到202032大小的矩阵;
注:在tensorflow中使用4维向量表示卷积核[输入通道数,高度,宽度,输出通道数],对应于上面的[4,8,8,32],可以理解为32个884大小的卷积核;

3)对以上矩阵进行不重叠的池化操作,池化窗口为22大小,步长为2,得到101032大小的矩阵;
4)使用64个4
432大小步长为2的卷积核对以上矩阵进行卷积,得到5564的矩阵;
5)使用64个3
364大小步长为1的卷积核对以上矩阵进行卷积,得到5564的矩阵;
6)将输出的5
564大小的数组进行reshape,得到11600大小的矩阵;
7)在之后添加一个全连接层,神经元个数为512;
8)最后一层也是一个全连接层,神经元个数为2,对应的是就是两个动作的动作值函数;

⑥通过获得输入s,神经网络就能够:
1)输出Q(s,a1)和Q(s,a2)比较两个值的大小,就能够评判采用动作a1和a2的优劣,从而选择要采取的动作
2)在选择并执行完采用的动作后,模拟器会更新状态并返回回报值,然后将这个状态转移过程存储进D,进行采样更新网络参数。

(9)网络参数更新
在这里插入图片描述

①从D中抽取更新使用的样本;
②利用神经网络计算maxQ(s2, a’)和Qold(s1,a1);
③计算Qnew(s1,a1),并通过Qnew(s1,a1)和Qold(s1,a1)更新网络参数

3.相关库的介绍及安装

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬茶@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值