【强化学习1.0】导论 & 多臂赌博机问题(multi-armed bandit)

2023-05-16

首发于知乎:【强化学习1.0】导论 & 多臂赌博机问题(multi-armed bandit)

欢迎关注

导论:何为强化学习?

强化学习(Reinforcement Learning,下面简称RL)研究的是在交互中学习的方式。通俗来说,就是“做什么能让我们最终的收益最大化”。最常举例的一个场景就是游戏,比如下棋。对于每一步都没有标准答案可供学习,但是最终的收益是固定的,比如胜一场1分、平0分、负一场-1分。因此,一个训练有素的智能体(agent)应该能够总结经验,从而在每一步骤都向着最终取胜而行动。这就是强化学习的基本目标。

强化学习和我们所了解的有监督(Supervised)和无监督(Unsupervised)学习方法都不同。有监督的方法有标准答案(标注),而强化学习则没有一个确切的标注,只能通过环境的反馈和不断的试错来学习。

比如说,对于一个object detection来说,每个object class都有很多已经被框好的图像,因此经过训练后,model就可以识别出这个class。但是对于RL来说,我们无法对每个情境下给出一个最优的和代表性的动作予以学习。比如说,仍以下棋为例,我们并不会告诉agent在某个棋局情况下,某一步是最好的。虽然没有这种标注,但是有最终的收益(胜负)可以供agent进行总结和学习。

但是,又不能说RL是一种无监督学习,为什么?因为所谓的无监督学习,实际上是找到数据的某种隐含结构。比如,k-means试图找到所有的数据中有哪几种具有特征相似性的类别(cluster)。而对于RL来说,我们的目的并非如此,RL的目的不是对数据进行分析,找出代表性的结构,而是找到一种方式,最大化某个收益。因此,RL是有监督和无监督之外的一种新型的领域。

强化学习的重要特点有两个:1. 与不确定环境交互。2. 目标导向。这两点在RL中被作为一个整体进行考虑,即在于环境交互的过程中,达到最终的目标。

RL之所以被很多人看好,一个很直接的原因就是,这种方式像极了我们人类的智力发展以及日常做决策的过程。强化学习擅长处理的问题是各类“游戏”,其实,我们日常生活中遇到的很多问题都可以视为某种“游戏”。比如,股票投资,在何时买入、何时抛出、买入多少?这个任务可以看做是一种游戏,即我们需要对当前股票情况做判断,给出行动(action),然后环境变化,重新进行决策,再继续行动……最终衡量我们游戏的成功或者失败的,就是最终的盈亏。如果大赚一笔,自然需要总结经验,如果被割了韭菜,则需要总结教训。推而广之,生活中的各类事情,莫不如此,因此强化学习自然具有很广泛的应用价值。

强化学习的要素有:

  1. 策略(Policy)

  2. 收益信号(Reward Signal)

  3. 价值函数(Value Function)

  4. 模型(Model) (这个可以没有)

下面对上面这几个依次解释。

首先,所谓策略policy,指的是在某个场景下,agent要采取什么样的对策或行为。所以,policy决定了智能体的实际的动作,因此是RL的核心。策略比较优秀的agent能够获得更好的结果,而策略不够好的,则最终结果也不好。

policy类似于心理学中的“刺激-反应”的规则,因此,它本质上是从环境这个变量到动作这个变量的一个映射。即 s → a,s是state,即当前状态,a是action,即采取的行动。

还是拿一个真正的智能体举例。如果我们的agent是一只兔子,环境变量如果是 {有萝卜} ,那么兔子的行为就是 {停下来吃},而如果环境变量变成了 {有猎枪},那么兔子的行为相应的应该为 {逃跑}。这是一个最简单的映射,即一个lookup table就可以表示。基于这样的策略,兔子可以获得最终的比较好的收益,就是活命和成长。反之,如果策略不对,当遇到萝卜逃跑,遇到猎枪停下来,那么就会得到不好的收益,即被打死或者被饿死。因此,policy是一个agent的核心,决定了agent的性能。

接下来是收益信号 reward。收益信号指的是,在状态s下,采取了某个action后,agent获得的一个激励信号。收益信号表示的是在短时间内什么是更好的,什么是不好的。注意,这里说的是短时间内。虽然短时间的收益可以辅助我们判断action好不好,但是,我们最终的目的不是当前的收益最好,而是长远来看的总收益最高。

继续举例:我们都听说过一个实验,即延迟满足实验。对于一个小孩,发给他一颗糖,如果他吃掉,就只有这一颗,而如果等15分钟再吃,就可以再得到一颗。这里,当得到一颗糖后就吃掉,当前的收益(即快乐的感觉)增加了,但是这样也就使得最终总体的收益变少(只有+1),而如果action为不吃,那么最终的收益就是+2。通过这个例子,我们可以看出短期收益和长期收益的区别。因此,我们不能只看reward,而是还要有一种方法来评估最终的长远收益。这个评估指标就是 价值函数 value function。

价值函数 value function 在强化学习中只一个重要的概念。它表示的是对某个状态s的长远收益的评估。比如前面的例子。对于 {吃糖果} 这个action后的状态 {不再有新糖果},其value就是 0,而对于{不吃糖果} 后转移到的状态 {20min后还有糖果},其value就是+2(不考虑时间折扣的话)。价值函数是状态的函数,记做 V(s) 。它是从当前状态开始,往后继续进行下去,将来积累的所有reward的一个期望。因此,value function和reward是有联系的。所谓长远收益,其实也就是对在该状态所有可能的未来(采取不同action,转移到不同state)的reward的总和的期望。

 

多臂赌博机问题(multi-armed bandit)

多臂赌博机是一个经典的问题。通常用来作为RL的入门级demo。所谓的k-armed bandit指的是这样一个任务:在你面前有一个类似老虎机的k个手柄的游戏机,每次选择并拉一个手柄,就会得到一个数值(可能是奖金金额),这个金额是一个随机数,它的分布对于每个手柄都是不同的,而你的任务就是在某段时间内获得尽可能多的奖金。

一开始,我们对这个机器那个arm上的钱更多是没有任何了解的。但是,我们仍然有办法处理这个问题。那就是有策略的去试探,收集一些实验结果,并用已经有的结果推测哪个更好,然后继续实验。这个很容易理解,通过一定次数的实验,我们可以获得一定的样本,从而对每个arm的分值分布有一个推测,然后,利用这些已知的经验,去改变我们的选择arm的策略,以求最终达到最优。

下面我们用数学的方法来说明这个问题。

首先,我们要明确这个任务的目标是神马。先看下面这个公式:

这里,a代表action,即选择一个bandit,q star (a) 这个函数,一看带了star,就知道这是一个optimal最优值。那么这个最优值是怎么定义的呢?这个值表示在给定了t step时的动作a时,Rt,即t时刻的reward的数学期望。虽然里面有数学期望E,有At有Rt这些乱七八糟的符号,但其实本质上,这个公式告诉我们,我们要找到action,就是能在t时刻给我们带来最多的奖金的那个bandit。

如果每个动作的value我们都知道,那么自然可以直接选择value最高的。但是我们前面说了,首先,value是不知道的,其次,value不是一个固定的数值,而是一个分布(假如是固定数值,那我们将k个bandit都试一遍,然后一直拉那个奖金最多的杆子就行了,也没有这么复杂的问题)。这时候要怎么办呢?

这种情况就要求我们通过一定的trial来得到一组数据,以此作为经验,来估计每个动作的价值。一种最简单的方法就是,在t step之前,我们统计执行某个动作a的次数,以及执行动作a所获得的reward R 的总和,然后一平均,就知道每个动作的收益的均值了。这个也很朴素和直观,写成公式的形式,就是这样的:

根据统计学的原理,只要次数多,这么做肯定就能收敛到上面的最优的q star。这个方法被称为 采样平均方法(sample-average)。这是一种动作-价值估计方法,action-value。因为这个问题还不涉及state,即当前状态的影响。每个步骤都是独立的,这一次拉第i个bandit得到的奖励不会因为之前的动作有所变化,仍然是从第i个分布里随机取值。

现在我们有了value的估值,下一步就是利用每个bandit的value来选择如何操作。

最简单的就是所谓的贪心法(greedy),即我们每次都选那个价值最高的。也就是:

但是这种情况有个问题,因为我们说了,a只是在当前统计意义上,或者说在期望层面上是回报最大的,但是有没有可能在某个情况下,其他的action会有更好的效果呢?这个是有可能的。因此,我们采用一种叫做 epsilon-greedy的方法,来进行动作选择。

在epsilon-greedy中,我们在每个action的时候,都以epsilon(epsilon<1)的概率随机选择一个action,而1-epsilon的概率仍然是用greedy的方法,选择最高value的那个action。我们看下面这个情况,就能明白了。

这里是一个10-armed bandit,可以看出每个bandit上的取值都是一个标准正态分布。由于我们对于期望的计算是通过已经发生的action-value数据来计算的,因此在刚开始的时候,由于样本量少,肯定有不准确的情况,也就是说,当前的value最大的,不一定就是真正value最大的那个,有可能是个次优的。而通过epsilon的概率去随机选择, 可以缓和这一情况。这里,我们将利用最优解的greedy的做法叫做exploitation,而随机选择的方法叫做exploitation。

这里就有一个问题了,那么什么情况下我们需要更多的exploitation,而什么情况下需要更多exploitation?我们设想,如果reward的方差比较大,或者有噪声、非平稳等等情况下,由于要找到最优解更加困难,所以需要多次exploration,即探索。反之,如果reward分布比较稳定,且方差较小,就更应该偏重exploitation。举个极端的例子,如果方差为0,那么一次遍历就搞定了,然后不停取最大的reward即可。这是上面说到过的。

还有一个重要的点,叫做增量式实现。如下:

这里,R代表每次的reward,由于Q就是一个均值,所以,n+1时刻的Qn+1,可以用Qn和新进来的Rn进行计算。这个推导其实很简单。为啥要这样做呢?因为,我们需要一个可以时序第更新的方法,新来一次reward,就能将Q更新一次,而且不用把之前所有的都进行保存,只保存上一个时刻的平均值即可。这个小trick在很多地方是挺常用的,比如图像均值滤波中的一种优化算法就是这样的,可以减少运算量。

这个增量式方法还可以写成一个更通用的形式:

 

reference:

  1. Reinforcement Learning: An Introduction, by Sutton, R.S. and Barto

  2. https://github.com/zhoubolei/introRL

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【强化学习1.0】导论 & 多臂赌博机问题(multi-armed bandit) 的相关文章

  • robot_pose_ekf 使用说明

    协方差参数的设置 主要确定mpu6050和odom编码器协方差参数的设置 参考 xff1a turtlebot node协方差的设置 mpu605参数的设置 参考 xff1a https github com Arkapravo turtl
  • 互斥锁、读写锁 、 自旋锁和RCU锁

    基础知识思考整理 http blog csdn net aganlengzi article details 50996227 互斥锁 mutex xff1a 在访问共享资源之前对进行加锁操作 xff0c 在访问完成之后进行解锁操作 加锁后
  • Dashgo D1概述

    概述 Dashgo D1是深圳EAI科技专门针对ROS开发的移动平台 xff0c 自主研发的核心结构保证了载重大 动力足 续航长和扩展性强的性能 xff0c 深受创客 科研 企业的欢迎 主要特性 xff1a 易于使用 由整机及其附件组成 x
  • 搭建Dashgo运行环境

    安装 设置用户的串口读取权限 span class hljs built in sudo span usermod span class hljs operator a span G dialout your user name your
  • 超声波避障

    运行如下脚本 roslaunch dashgo bringup bringup smoother ob span class hljs preprocessor launch span 在另一个终端运行 rostopic span clas
  • 虚拟机VirtualBox安装Ubuntu14.04

    本教程的运行环境 xff1a Windows 7 虚拟机 VirtualBox xff0c Ubuntu 14 04 1 准备 下载 VirtualBox5 0版可以使用后面提供的OVA镜像直接导入 xff0c 镜像是ROS的集合环境 xf
  • 树莓派实现自主导航

    使用 Flash Lidar F4 激光雷达进行自主导航 树莓派的IP假设为192 168 11 100 该教程基于地图已经建好并保存的情况下 teb amcl demo launch 的 args 参数要与前面 gmapping demo
  • 键盘控制移动

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为eaibot 默认密码为 eaibot 1 不带陀螺仪的底盘驱动 打开一个终端 xff0c 运行以下命令 xff0c 启动底盘驱动 带平滑加减
  • Dashgo-D1 不带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导
  • Dashgo-D1 带陀螺仪的建图导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot 默认密码为 eaibot D1与F4的坐标系已经校准正确的情况下 扫描建图 打开一个终端 xff0c ssh登录导航模块并启动
  • Dashgo-D1 多点连续导航

    PathGo 导航模块的默认固定 IP 是 192 168 31 200 xff0c 默认用户名为 eaibot xff0c 默认密码为 eaibot 地图已经建好并引用的情况下 第一种方式 打开一个终端 xff0c ssh登录导航模块 x
  • private static final long serialVersionUID = 1L

    很显然这行代码的意思是将SerialVersionUID的值定义为一个常量 xff0c 那这是干什么的呢 xff1f 解决这个问题 xff0c 首先要了解包含SerialVersionUID的Serializable接口是什么 xff1f
  • 【善用工具】程序性能分析Gperftools初探(libwind+pprof+Kcachegrind)

    善用工具 http blog csdn net aganlengzi article details 62893533 本文主要试用的gperftool相关介绍可见 https github com gperftools gperftool
  • PowerShell文本文件、Json文件资源的读取,修改

    PowerShell文件资源的读写 文本类文件的读取 xff1a Path 61 需要读取的文件路径 不加 Raw为逐行读取 xff0c 添加则为整个文件资源的读取 data 61 Get Content Path Path data 61
  • 串口参数详解:波特率,数据位,停止位,奇偶校验位

    串口通讯 9600波特率 数据格式是8 N 1 请问一秒可以传输多少个字节的数据 xff1f 9600 xff0c n 8 1 实际上 xff0c 在发送一个字节的时候 xff0c 除了需要发送8BIT数据外 xff0c 还需要发送1bit
  • 让我们了解OSD视频叠加相关信息

    什么是视频叠加 xff1f 视频叠加就是将图片和文字信息叠加到视频信号中 xff0c 如电视台的LOGO xff0c 电影的字幕 xff0c 电视机的菜单 xff0c 都是通过视频叠加的形式显示在视频图像中的 区别于用于专业影视编辑行业的字
  • RTSP/Onvif安防视频EasyNVR内核启动正常,但视频无法播放是什么原因?

    EasyNVR是基于RTSP Onvif协议的安防视频云服务平台 xff0c 可实现设备接入 实时直播 录像 检索与回放 云存储 视频分发 级联等视频能力服务 xff0c 可覆盖全终端平台 xff08 电脑 手机 平板等终端 xff09 x
  • 海康硬盘录像机接入RTSP/onvif协议安防视频平台EasyNVR的注意事项

    EasyNVR安防视频云服务平台可支持设备通过RTSP Onvif协议接入平台 xff0c 能提供视频监控直播 录像 云存储 检索与回看 国标级联等视频能力 xff0c 可支持分发RTSP RTMP HTTP FLV WS FLV HLS
  • 安卓存储之AndroidStudio自带的sqlite配置

    当我们使用sqlite数据库时 xff0c 创建好数据库 xff0c 能在File Explorer里看到databases目录下多了一个 db文件 xff0c 但是这个表是无法查看数据库表里的内容的 所以我们准备换一种查看方式 xff0c
  • 记录《时间进度》(人生进度条)(包含自定义进度、小插件)的开发

    前言 开发的本意是想看到可视化的时间 xff0c 让我们心存敬畏 xff0c 珍惜时间 xff0c 毕竟时间一去不复返 xff01 最近灵感突突然袭来 xff0c 想着做一个时间精度条 xff1a 今天度过了多少 xff0c 这周度过了多少

随机推荐