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

news2024/9/23 13:18:52

引言

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

什么是强化学习

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

比如让机器下围棋,甚至当给机器一个输入(现在棋盘的信息)时可能我们人类也不知道最佳的输出(落子位置)是什么,此时就可以考虑使用强化学习(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

那么此时有两个问题:

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

(且听下文分解)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络原理】详解HTTPS协议加密过程

文章目录 🌴HTTPS协议是什么?🎄运营商劫持事件🌲HTTPS的工作过程🌸对称加密🌸非对称加密🌸引入证书🌸完整流程 🌳HTTPS加密总结⭕总结 🌴HTTPS协议是什么&…

每日一题 --- 27. 移除元素 - 力扣 [Go]

移除元素 题目: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不…

C++进阶02 多态性

听课笔记简单整理,供小伙伴们参考~🥝🥝 第1版:听课的记录代码~🧩🧩 编辑:梅头脑🌸 审核:文心一言 目录 🐳课程来源 🐳前言 🐋运…

1.3 Python是什么

Python是什么,Python简介 Python 是荷兰人 Guido van Rossum (吉多范罗苏姆,中国程序员称其为“龟叔”)在 1990 年初开发的一种解释型编程语言。 图1:Python 的标志(Logo) Python 的诞生是极具…

CSS问题精粹1

1.关于消除<li>列表前的符号 我相信很多人在初学CSS时会遇到该问题&#xff0c;无论是创作导航&#xff0c;还是列表&#xff0c;前面都会有个黑点点或其它符号。 解决该问题其实很简单 采用list-style-type:none或list-style:none直接解决 如果你想更换前面的黑点点&a…

计算机网络2 TCP/IP协议

目录 1 前言2 传输层2.1 端口号2.2 UDP2.3 TCP 3 网络层3.1 IP 4 数据链路层4.1 以太网4.2 ARP 5 DNS6 NAT 1 前言 2 传输层 2.1 端口号 端口号又分为&#xff1a; 知名端口&#xff1a;知名程序在启动之后占用的端口号&#xff0c;0-1023。 HTTP, FTP, SSH等这些广为使用的…

LeetCode 21 / 100

目录 矩阵矩阵置零螺旋矩阵旋转图像搜索二维矩阵 II LeetCode 73. 矩阵置零 LeetCode 54. 螺旋矩阵 LeetCode 48. 旋转图像 LeetCode 240. 搜索二维矩阵 II 矩阵 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为…

Git的 .gitignore文件及标签使用

Git的 .gitignore文件及标签使用 什么是.gitignoregit check-ignore -v 文件名 查看.gitignore里面什么内容忽略了该文件 git add -f [filename] 强制添加把指定文件排除在 .gitignore 规则外的写法给命令配置别名标签创建标签git tag [name] 创建标签git tag 列出所有标签git …

ES高可用

分布式搜索引擎ES 分布式搜索引擎ES1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.3.RestAPI实现聚合 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.实现酒店搜索框自动补全 3.数据同步思路分析 4.集群4.1 ES集群相关概念4.2.集群脑裂问题4.3.集群分布式存储4.4.…

【文末附gpt升级4.0方案】英特尔AI PC的局限性是什么

为什么要推出英特尔AI PC&#xff1f; 英特尔AI PC的推出无疑为AIGC&#xff08;生成式人工智能&#xff09;的未来发展开启了一扇新的大门。这种新型的计算机平台&#xff0c;通过集成先进的硬件技术和优化的软件算法&#xff0c;为AIGC提供了更为强大和高效的支持&#xff0…

掌握增长转化漏斗策略的秘诀:打造高效营销之道

在不断发展的销售和营销领域&#xff0c;传统战略通常遵循一条可预测的路径&#xff0c;引导潜在客户通过漏斗&#xff0c;最终实现销售。然而&#xff0c;一种有趣的方法颠覆了这一传统模式&#xff1a;增长漏斗策略。这种创新方法重新规划了客户旅程&#xff0c;强调了培养现…

矩形总面积(第十四届蓝桥杯JavaB组省赛真题)

测试用例范围比较大&#xff0c;所以全部用long类型&#xff0c;如果用int类型只能通过60%&#xff0c;建议在内存和运行时间允许的情况下&#xff0c;比赛题都用long。 重点在于计算相交的面积&#xff0c;这里找的两个相交点是左上角&#xff08;m1,n1&#xff09;和右下角&a…

二叉搜索树(二叉排序树)(含力扣相关题及题解)

文章目录 二叉搜索树&#xff08;二叉排序树&#xff09;1、二叉搜索树概念2、二叉搜索树的操作2.1、二叉搜索树的查找2.2、二叉搜索树的插入2.2、二叉树的删除 3、二叉搜索树的实现&#xff08;含递归版本&#xff09;4、二叉搜索树的应用4.1、K模型4.2、KV模型 5、二叉搜索树…

5.MySQL创建表单和用户

1.数据库的创建 2.创建表单 3.创建用户 创建好用户之后&#xff0c;让用户只能访问一个表的权限 再创建一个数据库&#xff0c;用户名是刚刚创建的用户&#xff0c;密码是自己设置的密码&#xff0c;这样就缩小了权限。

2024.3.21

qt实现登录界面 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);//设置纯净窗口this->setWindowFlag(Qt::FramelessWindowHint);/…

电影aac是什么意思?如何播放、转换、编辑aac?

"电影AAC"这个术语可能是指电影中的音频编码格式。AAC&#xff08;Advanced Audio Coding&#xff09;是一种常见的音频编码格式&#xff0c;通常用于压缩音频文件&#xff0c;以在保持高质量的同时减小文件大小。在电影中&#xff0c;AAC格式的音频通常用于提供高质…

深入解析Mybatis-Plus框架:简化Java持久层开发(十二)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节介绍如何通过Mybatis-Plus进行实现批量新增。 &#x1f4d6; 正文 1 为何要批量插入&#xff1f; 前面章节已经介绍&#xff0c;Mapper接口只有一个…

那些场景需要额外注意线程安全问题

主要学习那些场景需要额外注意线程安全问题&#xff0c;在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候&#xff0c;典型的场景有访问共享对象的属性&#xff0c;访问static静态变量&#xff0c;访问共享的缓存&#xff0c;等等。因为…

React 系列 之 React Hooks(一) JSX本质、理解Hooks

借鉴自极客时间《React Hooks 核心原理与实战》 JSX语法的本质 可以认为JSX是一种语法糖&#xff0c;允许将html和js代码进行结合。 JSX文件会通过babel编译成js文件 下面有一段JSX代码&#xff0c;实现了一个Counter组件 import React from "react";export defau…

【机器学习】深入解析线性回归模型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…