MATLAB强化学习入门——一、多臂赌机问题-程序员宅基地

技术标签: matlab  强化学习与控制  机器学习  强化学习  

零、写在前面

机器学习在近几年大火,从某种意义上讲,现今已然是一个万物均可“机器学习”的状态。在机器学习目前较为普及的几大领域,SVM与神经网络模型的主要长处在于图像和语言识别;强化学习则长于处理控制与决策问题。惊艳世人的谷歌AlphaGo等人工智能,简单来说,也是强化学习与深度神经网络的结合。
学习机器学习的缘由也在于此:未来的机器学习模型,可能即如今日的计算机与编程,成为科研、工程中必不可少的工具。于是,决定从强化学习(Reinforcement Learning)入手,理解一些基础的东西。最后的目标呢,则是想实现卫星的强化学习三轴姿态控制。
写这一系列的文章,在于记录自己学习强化学习的过程,并将自己对强化学习体系的理解文字化,丢在这个树洞里。如果有人看并能指点指点,或者从中有所收益,那么也就没白写。

一、何谓“ 强化学习”

强化学习是一种用于求解时序决策问题(sequential decision problem)的机器学习模型。[1] 从强化学习的建模思想上来看,它模仿了人类学习和决策中不断尝试最终得到最优解的过程。在强化学习的过程中,机器不断尝试不同的解决问题的策略,并根据环境的反馈调整策略,最终得到最优的控制策略。具体的来说,强化学习通过将复杂的空间-时序决策问题描述为马尔可夫决策过程(Markov Decision Process)以实现建模与决策。这样,时序决策问题的描述可以划分为智能体(agent)和环境(environment)两大主体,并可由以下的多个要素进行描述:
智能体A:智能体即强化学习中的控制主体,能够按照某种策略π(policy),根据当前所处的状态x(state)选择合适的动作a(action)。
环境E:系统中除智能主体以外的部分,能够根据智能主体的动作向智能主体反馈状态和奖励。其变化一般服从智能主体已知或者未知的某种规律
状态空间X:智能主体所感知到的每一个对环境的描述,即状态x的整体。例如,在某个离散网格空间中的小球运动问题(如图1所示),小球所处的坐标和移动步数就是一个状态。
动作空间A:机器在所有状态下所能采取的动作a的整体。例如,离散网格空间中的小球运动问题,小球的向上/向下/向左/向右运动即为一种动作。
图1 离散网格空间的小球运动问题

状态转移概率P:X×A×X→R:描述了了智能主体在现有状态采取某一动作,能够转移到另一状态的概率。
奖励R:X×A×X→R:描述了了智能主体在现有状态采取某一动作转移到另一状态后环境所反馈的奖励。

一般来说,环境可以定义为四元组:E=〈X,A,P,R〉。[2]另外,作为采用策略π选择动作的依据,智能主体往往需要对状态空间中的状态以及状态所对应的动作进行量化估计,这就是状态价值函数 V(x) (state value function)以及状态-动作价值函数 Q(x,a) (state-action value function)。

二、强化学习与控制

作为一种解决时序决策问题的模型,强化学习被Sutton等研究者定义为一种自适应最优控制(adaptive optimal control)方法。[3]他们认为,所有的控制问题都可如下描述:控制某个动力学系统的输入以使其行为满足一系列控制目标。这其中包括两大类问题:①监管和追踪问题(regulation and tracking problem),②最优控制问题(optimal control problem)。对于第一类问题,控制的任务可以描述为令被控系统的输出与参考轨迹/参考水平相一致。对于第二类问题,则是令受控系统行为所对应的某一类指标最大化。[3]而第二类问题,显然与强化学习的任务内涵相一致。而第一类问题,其本质目标及最小化控制误差,在这一层面上,第一类问题也可采用强化学习方法解决。

强化学习在控制上的常见例子是倒立摆以及小车上山问题。初步的想法是,能不能用强化学习,实现一个卫星的三轴姿态控制,这也就是接下来一系列工作的重心。

三、K-多臂赌机与策略(Policy)

不积硅步,无以至千里。想要入门,最先需要理解的问题就是多臂赌机问题。强化学习问题实际可以将复杂的问题拆分成多步决策问题。而这其中的每一个单步决策问题,对应的就是K-多臂赌机模型(K-armed bandit)。
K-摇臂赌机(K-armed bandit)是强化学习任务中考虑单步奖励最大化时所对应的理论模型。K-摇臂赌机的模型包含K个摇臂,智能主体投入一个硬币后可选择按下其中一个摇臂,每个摇臂以一定的概率吐出硬币(即奖赏),但奖赏以及吐出奖赏的概率智能主体事先并不知道。因此,智能主体的目标即在于通过一定的策略最大化所能获得的奖赏,即获得最多的硬币。

3.1 “探索”与“利用”的矛盾

由于智能主体事先并不知道各摇臂的回报及其概率,因此,想要最大化总体汇报,就必须通过一定的方法估计各摇臂回报的数学概率,这也就是强化学习的“探索”方法(exploration)。而一旦完成了对各摇臂回报情况的估计,那么就应当根据这种估计选择预期能够获得最大回报的摇臂;这也就是“利用”方法(exploitation)。
在一个多臂赌机问题的循环中,显然需要即使用“探索”方法,也使用“利用”方法,以实现最大化总体奖赏的目标。如果“探索”次数过少,则可能对各摇臂的数学期望估计不准确。如果“利用”次数过少,则不能很好的利用估计得到的期望最大化奖赏。这就是“探索”与“利用”之间的矛盾。
针对上述矛盾,几种基本的策略被提出,包括ε-greedy策略、softmax策略、时变ε-greedy策略。

3.2 ε-greedy策略

ε-greedy策略基于一个概率来对探索和利用进行折中:每次尝试时,以ε的概率进行探索,以1-ε的概率进行利用。进行探索时,以均匀概率随机选取摇臂;进行利用时,则选择当前平均奖赏最高的摇臂。
这里考虑一个k=5的多臂赌机,其各摇臂的对应反馈均为二值的,即以P的概率返回奖赏,以1-P的概率返回另一值。下表展示了摇臂的奖赏及其概率。

序号 概率P 反馈1 反馈2
1 0.2 1 0
2 0.1 2 0
3 0.3 1 -1
4 0.5 2 -1
5 0.4 2 0

从数学期望上讲,摇臂5具有最大的回报期望,无论怎样选择摇臂,随着尝试次数增多,最后得到的平均回报都不会超过这一期望。这样因此,一个理想的策略应该在尝试足够多次数后令所获得的平均回报不断接近这一值。
图2 ε-greedy策略所获得的平均回报

图2 ε-greedy策略所获得的平均回报

采用ε-greedy策略选择摇臂,ε取不同的值,得到的回报情况如上。当ε较大时(如ε=0.5),得到的回报显然是不理想的,原因在于即是已经获得了对多臂赌机的准确估计,智能体仍然浪费机会进行不必要的探索,降低了总体回报。当ε过小(如ε=0.05)时,显然由于探索次数过小,智能体迟迟不能准确的估计得到最佳选项,因此,明显的回报上升直到6000次以后才出现。

3.2.1 代码实现

具体的代码实现上,使用MATLAB语言。由于强化学习的本意在于智能体通过学习对环境建模,因此,需要将智能体部分代码与摇臂赌机(即环境)分别封装,即将摇臂赌机作为函数封装,这样对于智能体,摇臂赌机将是一个给输入只得到输出的"黑箱"。

%I thought what I'd do was I'd pretend I was one of those deaf-mutes,or should I ?

clear all;
epsilon=[0.5,0.2,0.1,0.02,0.005];  %epsilon概率进行探索(exploration),1-epsilon概率进行利用(exploitation)
m=5;

T=10000;
%决策机内存初始化
Avegain=zeros(m,5);  %
Testtime=zeros(m,5);
Reward=zeros(5,T);

for k=1:m
    for i=1:T
        if rand(1)<=epsilon(k) %探索
            num=unidrnd(5);  %随机生成最大为5的正整数,随机选择摇臂
        else   %利用
            a=findmax(Avegain(k,:));
            num=a(2);%选择平均奖赏最大的摇臂
        end
        r=Slotmachine5(num);
        if i==1                                            %更新累计奖赏
            Reward(k,i)=r;
        else
            Reward(k,i)=(Reward(k,i-1)*(i-1)+r)/i;
        end        
        Avegain(k,num)=(Avegain(k,num)*Testtime(k,num)+r)/(Testtime(k,num)+1); %更新所选臂的平均奖赏
        Testtime(k,num)=Testtime(k,num)+1;                 %更新所选臂的实验次数
    end
end
result.Testtime=Testtime;
result.Avegain=Avegain;
result.Reward=Reward;
plot(1:10000,Reward);
xlabel('测试次数');
ylabel('平均累计奖赏');
legend('ε=0.5','ε=0.2','ε=0.1','ε=0.02','ε=0.005');

代码最后的result结构主要用于保留结果,而随后讨论的softmax算法及时变ε-greedy算法均采用类似方法实现。完整的代码将作为资源上传。

3.3 softmax策略

softmax是另一种用于平衡探索和利用的算法。在这种方法中,智能体依据某种概率分布选择摇臂,而概率分布则是基于当前平均奖赏的Boltzmann分布:
在这里插入图片描述
其中,τ>0是用于调节选择情况的参数。τ越小时平均奖赏越高的摇臂被选择的概率越高。因此,τ趋近于0时,智能体趋于“仅利用”。
在这里插入图片描述

图3 soft策略所获得的平均回报

softmax策略得到的回报情况如图3所示,显然该策略相比ε-greedy能更快的到达稳态状态。但该方法对环境的估计和选择随机性较高。图四则展示了相同赌机、相同策略模拟下的另一组解。
图4 softmax所获得的平均回报II

图4 softmax所获得的平均回报II

相同的τ值在初始尝试结果情况不同的情况下,显然不能得到相同的平均回报。而从长期平均回报来看,该策略也略逊于ε-greedy策略。

3.4 时变ε-greedy策略

有没有一种方法,能在初期尽可能多的进行“探索”,以求准确估计,而在后期尽可能多的“利用”,以求最大化平均回报?
时变ε-greedy提供了解决方案,将ε定义为随时间减小的函数,从而实现上述设想。例如定义ε=1/√t,其结果如图5。
在这里插入图片描述

图5 时变ε-greedy所获得的平均回报

四、总结

这一篇文章将是强化学习之路的开头。在啰嗦了定义和理解之后,讨论了几种单步决策使用的策略及其特点。解决了单步决策策略问题,就可以考虑多步决策问题,这就是网格迷宫模型所描述。
本期的三种解决多臂赌机问题的策略,其完整的代码已经上传,读者可以移步以下的链接下载:

MATLAB强化学习_多臂赌机问题_程序包

以上就是本期博客的主要内容,欢迎大家交流和讨论~

[1] Xin Xu, Lei Zuo, Zhenhua Huang. Reinforcement learning algorithms with function approximation: Recent advances and applications[J]. Information Sciences,2014,261.
[2] 周志华. 机器学习[M]. 北京:清华大学出版社, 2016.
[3] Sutton, Richard S., Barto, Andrew G., Williams, Ronald J… Reinforcement Learning is Direct Adaptive Optimal Control[P]. American Control Conference, 1991,1991.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43723517/article/details/104032416

智能推荐

python numpy学习笔记_ndarray的位置-程序员宅基地

文章浏览阅读1.2k次。numpy的主要数据对象是多维数组,其中包含相同类型的元素,通常是数字类型,每个元素都有一个索引。使用numpy前通常要导入包。import numpy as np目录类型维度创建运算索引和切片类型numpy的数组被称为ndarray。numpy.array只处理一维数组,而ndarray对象才提供更多功能。a = np.array([[1, 2, 3], [4, 5, 6]])type(a) # <class 'numpy.ndarray'>dtype属性可以获得元素的数_ndarray的位置

我的世界java版gamemode指令_《我的世界》Java版常用指令代码大全!你想要的都在这里了!...-程序员宅基地

文章浏览阅读1.6w次。还在苦于网上找到的一些指令已经不适用了吗?还在苦于有些地方的指令有误吗?还在苦于有些地方整理的指令不够全面吗?那么你来对地方了!小编为大家整理了《我的世界》原版游戏常用的指令,这些基本足以满足各位的基本需求了!大家来一起看看吧!注:表示的是必须输入的部分,[方括号]表示的是可选择性输入的部分基本命令列表命令描述/?/help的替代命令,提供命令使用帮助。/ban + 玩家名字将玩家加入封禁列表。/..._gamemode指令java

Spring Boot 结合shiro做第三方登录验证_shiro 第三方token登录-程序员宅基地

文章浏览阅读1.5w次,点赞3次,收藏3次。Spring Boot 结合shiro做第三方登录验证1、首先,说一下我的具体实现思路。在做spring boot拦截器的过程中,开始我准备用spring security来实现,但是研究了一段时间之后发现spring security的集成度太高,需要修改的东西比较多,而且对它本身的使用方法不是很了解,后来转而使用Apache shiro。由于是第三方登录,是不需要我来验证密码的。最开始,我陷入了_shiro 第三方token登录

labelme UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 227: illegal mult_file "c:\rgzn\labelme-main\setup.py", line 91, in -程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏4次。[INFO ] __init__:get_config:71 - Loading config file from:C:\Users\xxx\.labelmercTraceback (most recent call last): File .... line 191, in <module> main() File ...., line 145, in main config = get_config(config_file_or_yaml, config_fro_file "c:\rgzn\labelme-main\setup.py", line 91, in main if sys.argv[1] == "re

[基础] Dart - 条件表达式_dart 条件表达式-程序员宅基地

文章浏览阅读343次。Dart - 条件表达式关于Dart 语言的基础学习记录Dart 官方网站if…else 条件表达式if(条件A){ //条件A成立执行的内容}else if(条件B){ //条件B成立执行的内容}else{ //条件A-B 都不成立执行的内容}switch…case 条件表达式int a = 1;switch(a) //需要判断的内容{ case 1:..._dart 条件表达式

CentOS7 完全卸载 php-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏3次。在 CentOS 7 使用 yum install 简单安装 php 后,发现 php 版本 5.4 ,太低了!然后,使用 yum remove 简单卸载后,发现 php 还在,不干净!只好 rpm 慢慢卸载

随便推点

深度解析Java游戏服务器开发-程序员宅基地

文章浏览阅读5.2k次,点赞9次,收藏40次。---恢复内容开始---1.认识游戏  1.1什么是游戏    1.1.1游戏的定义              任何人类正常生理需求之外的活动均可称为游戏    1.1.2游戏的分类      RPG角色扮演游戏、ACT动作游戏、AVG冒险游戏、FPS第一人称视角射击游戏、TPS第三人称视角射击游戏、FTG格斗游戏、SPT体育游戏、RAC竞速游戏、RTS即时战略游戏、STG..._深度解析java游戏服务器开发

【ThinkPHP5初体验(二)1】CSRF防范原理(thinkphp5 CSRF ajax令牌)_tp5 开启csrf令牌-程序员宅基地

文章浏览阅读4k次。CSRF是什么我就不解释了,百度一搜全是,比波姐的片源还要多,千篇一律都他么是复制粘贴。那为什么这个令牌(token)操作可以防范CSRF呢?下面我就随便说说说错了大家不要介意。首先我们要知道令牌是存储在session里面的,这个很重要 php代码如下&lt;?php namespace app\index\controller; //我直接允许跨域,因为伪装..._tp5 开启csrf令牌

市盈率、市净率、净资产收益率股息率介绍-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏6次。市盈率PE市盈率 = 市值/净利润概念解析:买入一家公司,几年回本,年化收益率:净利润/市值(市盈率的倒数)举例:砖头10万买个砖头,每年拍人带来1万利润,需要10年回本市盈率:10/1 = 10年化收益率:1/10 = 10%市净率PB市净率 = 市值/净资产净资产 = 总资产 - 负债举例:张三便利店,净资产:120万市值:1..._净资产收益率和股息率

墨器杯垫 文创商品设计特优_杯垫文创设计说明-程序员宅基地

文章浏览阅读737次。教育部昨举行「102年国立馆所文创商品设计比赛」颁奖典礼,台北科技大学创新设计研究所硕士生谢镇宇,为TW艺术教育馆设计「墨器」杯垫,取「默契」谐音,用5片压克力板,展现水墨画层层渲染效果,增加立体视觉感受,并在杯架后方加入LED光源,获评审肯定夺特优奖和奖金10万元。台南应用科技大学商品设计系学生高郁翔,为国立自然科学博物馆设计「恐龙化石钉书机」,他认为小朋友把钉书机钉下去的那一刻,会觉得像暴龙準_杯垫文创设计说明

C#中关于XML与对象,集合的相互转换-程序员宅基地

文章浏览阅读404次。XML与对象,集合的相互转化  今天小伙伴在群里问了一下关于XML与对象之间的相互转换,作为菜鸟的我正好趁着闲着的时间学习了一波,直接上代码了,有疑问或者有错误的地方还请大家指正,谢谢。。。。 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System...._c# xml转集合

笔记:图以及cpp基础-程序员宅基地

文章浏览阅读1.8k次。如int fun(int i,char a)和void fun(char a,int i)就可以构成函数重载,根据函数名修饰的原理我们可以得到_funic和 _funci两个经过修饰之后得到的函数名,在进行修饰后的函数名显然是不同的。定义:同一个作用域内,相同函数名,参数不同(类型不同,个数不同)可以构成函数重载(和返回值无关)分析其二:顶点i的度即为第i行和i列的“1”的个数,如果是无向图就只要考虑每一行“1”的个数。图的邻接矩阵为一个二维数组,设为A.arcs【i】【j】(理解为两个顶点之间的关系)_cpp