李宏毅深度强化学习导论——基本概念

引言

这是李宏毅老师深度强化学习视频的学习笔记,主要介绍强化学习的基本概念,从直观的角度去教大家如何理解强化学习的知识而不是理论的角度,所以包含的数学公式不多。

什么是强化学习

在这里插入图片描述
我们知道监督学习需要人类给机器一个标签,让机器根据输入去预测这个标签,比如上图中识别是否为猫的例子。虽然监督学习很好用,但是还有很多问题通过监督学习来解决会很复杂。

比如让机器下围棋,甚至当给机器一个输入(现在棋盘的信息)时可能我们人类也不知道最佳的输出(落子位置)是什么,此时就可以考虑使用强化学习(Reinforcement Learning,RL)。虽然我们不知道正确的答案是什么,但机器可以通过与环境互动知道结果的好坏,比如最终导致赢棋了(好)或者棋子被围了(坏),机器可以学出一个模型去学习最终赢棋的走法。

强化学习和机器学习一样,也是想要寻找一个函数。

在这里插入图片描述
在强化学习中,有一个智能体(Agent,也就是这里的Actor),然后智能体会和环境(Environment)进行互动,环境会给智能体一个观测(Observation,函数的输入)。智能体可以根据这个观测产生一个动作(Action,函数的输出),这个动作反过来也会影响环境,然后环境会给出新的观测,同时也会给出一个奖励(Reward),告诉智能体所采取动作的好坏。智能体看到新的观测后,会继续采取一个新的动作,如此循环往复。

这里的智能体就是我们要找的函数,这个函数的目标是找到一个策略(Policy)去最大化从环境中获取的奖励总和。

这里以让机器(智能体)玩太空侵略者游戏为例,下面是一个游戏屏幕:在这里插入图片描述机器可以采取的动作有三个:左移、右移和开火。游戏的目标是通过控制角色(上图最下面绿色部分,一艘飞船)开火杀掉画面中的这些外星人,在绿色飞船前面还有三个防护罩,但是它也可以被自己打掉。

在平面的最上面的数字代表是分数,它是杀死外星人后(环境给)的奖励。
游戏的终止条件为所有的外星人被杀掉或你的飞船被击毁,外星人也会发射子弹,被击中就GG。

这只是一个游戏,没有外星人受到伤害。

在这里插入图片描述
如果要让机器来玩这个游戏,那么通常情况下机器和人类看到的画面是一样的,即它的输入是游戏的一帧画面,环境是游戏的主机,输出是事先定义好可以采取的动作(或者说行为)。
当机器此时选择向右这个动作之后,它会得到奖励值为0,因为我们定义只有击毙外星人才会获得奖励(游戏中也会获得分数)。是的,获取奖励的条件以及多少(正负)是由人类定义的。

在这里插入图片描述
当采取一个动作之后游戏的画面也会发生改变,代表我们有了新的观测。此时智能体可以采取新的动作,假设智能体采取的动作是开火,并且击杀了一个外星人,游戏中得到的分数是5分,这里假设我们也将奖励设为5分。

这样我们在玩游戏的过程中会不断的得到奖励(可能为正、可能为零、还可能为负),只要游戏没有终止。强化学习的目标就是想要找到一个能获取到最大奖励总和的智能体。

在这里插入图片描述
同理,回到我们开始下围棋的例子,通过强化学习训练机器人下围棋就和刚才玩游戏的例子很相似。只不过问题的复杂度不一样。

以AlphaGo和李世石下围棋为例,智能体就是AlphaGo,环境是人类对手李世石,智能体的输入是当前的棋盘信息,输出(动作)是下一步落子的位置,然后环境会产生新的观测,智能体又可以输出一个新的动作。
大多数情况下动作所得的奖励都是0,只有当围棋比赛结束时根据输赢来得到+1或-1的奖励。

在这里插入图片描述

强化学习和机器学习一样,也只需要三个步骤。

Step 1 定义函数

在这里插入图片描述
这个函数就是智能体(Actor),它可以通过(策略)网络来拟合,就是一个神经网络。它的输入是游戏的画面,可以用CNN来对画面进行编码。它的输出是可能的动作和对应的(神经网络给的)分数,在上图的例子中输出共有3个,其中left的分数(概率)最大。实际上就是一个分类问题!

具体的网络架构可以自己定义,如果输入是一帧图像的话,那么可能需要用到CNN,甚至还可以不止考虑当前的画面,而是从开始到目前位置所有的画面,那么可以结合RNN或用Transformer来做。

具体采取哪个动作可以将网络输出的分数转换为概率分布(如上图),然后根据这个分布去采样动作。那为什么不直接选择分数最高的动作呢?实际上是为了引入随机性,有时随机性是非常重要的。比如剪刀石头布的游戏,如果你每次选择的动作都是固定的,很容易被对手针对。

有了函数后下一步是定义损失。

Step 定义损失

在这里插入图片描述
我们先来重新看一下机器和环境互动的过程:

  1. 有一个初始游戏画面(观测 s 1 s_1 s1),作为智能体的输入,智能体输出了一个动作向右( a 1 a_1 a1)。
  2. 得到奖励( r 1 = 0 r_1=0 r1=0)并看到了新的游戏画面( s 2 s_2 s2),智能体采取新的动作开火( a 2 a_2 a2),假设恰好击杀了一个外星人。
  3. 得到奖励( r 2 = 5 r_2=5 r2=5)并看到新的游戏画面( s 3 s_3 s3)…
  4. 上面三个过程会反复下去,直到游戏结束。
  5. 可能是飞船被摧毁或者是击毙最后一个外星人。

在这里插入图片描述
从游戏开始到结束的过程称为一个episode(回合/轮/场);整场游戏得到的奖励总和称为回报(return)
R = ∑ t = 1 T r t R = \sum_{t=1}^T r_t R=t=1Trt

注意回报和奖励的区别,智能体采取一个动作后立即得到的是奖励,整场游戏所有的奖励加起来就是回报。

我们的训练目标就是最大化这个回报。

可以把负的回报看成是RL的损失。

优化

在这里插入图片描述
我们从另一个角度来理解以下这个过程。
开始时,智能体(上图蓝色方块)看到环境Env(黄色方块)产生的第一个状态 s 1 s_1 s1,然后它输出动作 a 1 a_1 a1。动作 a 1 a_1 a1变成了环境的输入,环境产生状态 s 2 s_2 s2。以此类推,整个过程会一直进行下去直到满足游戏终止的条件。
所产生的这些状态和动作的序列 τ = { s 1 , a 1 , s 2 , a 2 , ⋯   } \tau = \{s_1,a_1,s_2,a_2,\cdots\} τ={s1,a1,s2,a2,}称为轨迹(Trajectory)

在智能体和环境互动的过程中,它会得到奖励(绿色方块),它也是一个函数,比如输入 s 1 , a 1 s_1,a_1 s1,a1会输出奖励 r 1 r_1 r1;输入 s 2 , a 2 s_2,a_2 s2,a2会输出奖励 r 2 r_2 r2

对所有的这些奖励求和就得到了上面介绍的回报。

那么可以这么思考这个优化问题,我们需要找到一组网络(代表智能体)的参数,它能最大化这个回报。

强化学习是很难训练的,在于:

  1. 智能体网络的输出(动作)带有随机性(一般是通过采样产生动作);
  2. 环境一般是黑盒子,我们无法知道环境改变状态的原理;
    • 如果环境是确定的、已知的,那么就不需要强化学习来解决它了。
  3. 奖励机制其实就是一套规则,也不是网络;
  4. 环境和奖励也具有随机性;

因此常规的机器学习算法(梯度下降)是很难求解RL问题的。
下面我们来看如何求解RL问题的算法,即策略梯度。

策略梯度(Policy Gradient)

在这里插入图片描述
首先我们来思考一个问题,当智能体(也就是这里的Actor,我们用网络来拟合)看到某个状态 S S S,我们如何控制它采取什么样的动作呢?

在这里插入图片描述
假设此时状态 S S S对应的正确动作为Left,那么借鉴监督学习的思想,我们把动作转换为one-hot向量,然后通过交叉熵来优化这个网络的参数 θ \theta θ

如果我们想要智能体不要采取某个动作,那么可以在交叉熵前面加个负号(定义为损失),即交叉熵越小反而损失越大,来阻止智能体采取某个动作。

在这里插入图片描述

如果想要智能体在看到 s s s的时候采取 a ^ \hat a a^,看到 s ′ s^\prime s时不需要采取 a ^ ′ \hat a^\prime a^

即前者的交叉熵为 e 1 e_1 e1,后者的交叉熵为 e 2 e_2 e2,那么我们改变后者的符号后把它们加起来得到两件事一起的损失: L = e 1 − e 2 L=e_1 - e_2 L=e1e2

然后找到一组参数来最小化这个损失 L L L即可。

在这里插入图片描述
所以要训练一个智能体,我们需要收集一些训练数据,如果希望在某个状态下采取某个动作则给它一个正的符号 + 1 +1 +1;如果不希望采取某个动作则给个负符号 − 1 -1 1

分别计算这些样本对应的交叉熵,并乘上对应的符号,最后全部加起来就是我们的损失 L L L,训练的目标是最下化这个损失 L L L

我们还可以更进一步,每个动作不止是好或不好(想要执行/不想执行),改成每个状态和动作对有一个对应的分数,这个分数代表我们多希望智能体在看到这个状态的时候执行对应的动作。
比如 { s 1 , a ^ 1 } \{s_1,\hat a_1\} {s1,a^1}对应的分数为 1.5 1.5 1.5,我们就比较希望智能体在看到 s 1 s_1 s1的时候执行动作 a ^ 1 \hat a_1 a^1
对于这 N N N个样本,我们分别用 A 1 , ⋯   , A N A_1,\cdots,A_N A1,,AN来表示它们对应的分数,那么损失可以定义为:
L = ∑ A n e n L = \sum A_n e_n L=Anen

这里的 e e e表示交叉熵,我们的目标是找到 θ ∗ = arg ⁡ min ⁡ θ L \theta^* = \arg \min_\theta L θ=argminθL

那么此时有两个问题:

  • 如何定义这些分数
  • 如何采样这些状态和动作对

(且听下文分解)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/476837.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker专题-04 Nginx部署

Docker专题-04 Nginx部署 注: 本教程由羞涩梦整理同步发布,本人技术分享站点:blog.hukanfa.com 转发本文请备注原文链接,本文内容整理日期:2024-03-21 csdn 博客名称:五维空间-影子,欢迎关注…

3.windows下Ubuntu,sratoolkit软件,从ncbi的sra数据库下载数据。

NCBI的SRA(Sequence Read Archive)数据库是一个公共数据库,用于存储高通量测序数据,包括基因组、转录组和表观基因组等数据。研究人员可以在SRA数据库中找到各种生物样本的测序数据,并进行检索、下载和分析。 在NCBI的…

启扬RK3568核心板,助力外科手术机器人迈向智能诊疗之路

外科手术机器人是将机器人技术与外科手术相结合的高端医疗装备,可以帮助医生制定手术计划,提高手术过程中的准确度,并将传统技术转化为数字程序。通过利用机械控制、视觉成像、光电技术、人工智能等技术,外科手术机器人在医疗领域…

全国产飞腾+FPGA架构,支持B码+12网口+多串电力通讯管理机解决方案

行业痛点: 中国的电力网络已经成为当今世界覆盖范围最广、结构最为复杂的人造科技系统。随着国家和各部委颁布了一系列法律法规,如国家颁布的《中华人民共和国网络安全法》、工信部颁布的《工业控制系统信息安全防护指南》、发改委颁布的14号令《电力监控系统安全防…

动态规划课堂7-----两个数组的dp问题(等价代换)

目录 引言: 例题1:最长公共子序列 例题2:不同的子序列 例题3:通配符匹配 例题4:正则表达式 结语: 引言: 本节我们就要进入两个数组的dp问题的学习,通过前面几个章节的学习&…

深入剖析JavaScript引擎的工作原理

文章目录 导文什么是JavaScript引擎的工作原理?1. 解析阶段解析器(Parser) 2. 编译阶段3. 执行阶段解释器(Interpreter)优化器(Optimizer) 4. 垃圾回收阶段垃圾回收器 其他 导文 JavaScript引擎…

如何用SCSS制作小铃铛振动/震动/摇晃/晃动的特效/效果?

放大了看效果 ​​​​​​​​​​​​​​ // 摇晃小铃铛振动/震动/摇晃/晃动的特效/效果---------------------------------------- [sg-shaking] {display: inline-block;transform-origin: center top;animation: sg-shaking 1s alternate forwards; }keyframes sg-shaki…

【Apache ShenYu源码】如何实现负载均衡模块设计

ShenYu是一个异步的,高性能的,跨语言的,响应式的 API 网关。有关ShenYu的介绍可以戳这。 一、前瞻 今天我们尝试不同的代码阅读方式,按模块来去阅读源码,看看效果如何。 本次阅读锁定在shenyu-loadbalancer&#xf…

Java安全 反序列化(3) CC1链-TransformedMap版

Java安全 反序列化(3) CC1链-TransformedMap版 本文尝试从CC1的挖掘思路出发,理解CC1的实现原理 文章目录 Java安全 反序列化(3) CC1链-TransformedMap版配置jdk版本和源代码配置前记 为什么可以利用一.CC链中的命令执行我们可以尝试一下通过InvokerTransformer.tr…

Windows环境下编译ffmpeg 6.1源码--Virtual Studio + Msys2方式

环境准备 约定:源码全部放到sources下,目录结构说明 /d/java/ffmpeg #工程工目录 ├── build #存放编译文件的目录,子目录为具体模块的构建目录 │ ├── fdk-aac │ ├── ffmpeg │ └── x264 ├── instal…

O2OA(翱途)开发平台前端安全配置建议(一)

O2OA开发平台是一个集成了多种功能的开发环境,前端安全在其中显得尤为重要。前端是用户与平台交互的直接界面,任何安全漏洞都可能被恶意用户利用,导致用户数据泄露、非法操作或系统被攻击。因此,前端安全是确保整个系统安全的第一…

B011-springcloud alibaba rpc通信 Dubbo

目录 介绍实现提供统一业务api服务提供者1.导入依赖2添加dubbo配置3编写并暴露服务 服务消费者1.导入依赖2添加dubbo配置3引用服务 测试 介绍 Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC分布式服务框架,致力于提供高性能和透明化的 RPC远程服务调用方案&#xf…

数学建模(Topsis python代码 案例)

目录 介绍: 模板: 案例: 极小型指标转化为极大型(正向化): 中间型指标转为极大型(正向化): 区间型指标转为极大型(正向化): 标…

【图像分类】基于深度学习的人脸表情识别(8种表情,ResNet网络)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…

“洞见·智领未来——2024行业开局暨成渝(内江)服务外包产业发展大会”共商服务外包新未来新业态

3月19日-20日,由中国信息协会、中共内江市委、内江市人民政府指导,中国信息协会数字经济专委会、中共内江市东兴区委、内江市东兴区人民政府共同主办,鸿联九五集团、首席客户官百人会(CCO100)承办的“洞见 智领未来—…

【Git】第一课:Git的介绍

简介 什么是Git? Git是一个开源的分布式版本控制系统,用于跟踪代码的改变和协同开发。它最初由Linus Torvalds为了管理Linux内核开发而创建,现已成为开源软件开发中最流行的版本控制系统,没有之一。Git允许多人同时在不同的分支上工作&…

opencv各个模块介绍(1)

Core 模块:核心模块,提供了基本的数据结构和功能。 常用的核心函数: cv::Mat:表示多维数组的数据结构,是OpenCV中最常用的类之一,用于存储图像数据和进行矩阵运算。 cv::Scalar:用于表示多通道…

mac下Appuim环境安装-持续更新中

参考资料 Mac安装Appium_mac电脑安装appium-CSDN博客 安卓测试工具:Appium 环境安装(mac版本)_安卓自动化测试mac环境搭建-CSDN博客 1. 基本环境依赖 1 node.js 2 JDK(Java JDK) 3 Android SDK 4 Appium&#x…

51单片机学习9 串口通讯

51单片机学习9 串口通讯 一、串口通讯简介UARTSTC89C51RC/RD的串口资源 二、51单片机串口介绍1. 内部结构2. 寄存器(1)串口控制寄存器SCON(2)电源控制寄存器PCON 3. 计算波特率4. 串口配置步骤 三、 开发示例1. 硬件电路2. 代码实…

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar:搜索 YOLO小目标医学方面最新论文Scraper:爬虫自动化数据清洗数据分析 点击 Explore GPTs: Scholar:搜索 YOLO小目标医学方面最新论文 搜索 Scho…